1. Intro
    1. Rules D7
    2. Success story
    3. History
    4. Use cases
  2. d8rules initiative
    1. goals
    2. funding
    3. sprints
    4. status
  3. Rules D8
    1. * Applying new architectural patterns in Drupal 8
    2. * Understanding the Core Plug-in & Context systems
    3. * CMI: Configuration entities and YAML files
    4. * Rules API Changes
    5. * Typed data & Entity API changes
    6. * Using Rules Action, Condition & Event APIs
    7. * Embedding reusable components: Use rules conditions in the Blocks UI
    8. * Contributing to Rules in Drupal 8
  4. Architecture
    1. https://www.drupal.org/node/1211396#comment-8636745
    2. https://www.drupal.org/node/2245611
  5. From 7 to 8
    1. https://docs.google.com/document/d/1gTDGja1KU68QT2m_aB0c8G2nlNEAyWeJqG1a0nBJHwA/edit
  6. Practice
    1. Setting up the environment
      1. http://thefubhy.gitbooks.io/rules/content/contributing/environment.html
      2. LAMP, Drupal 8
      3. Drush
        1. Mamp + drush
          1. https://www.drupal.org/node/1651282
      4. GitHub, fork, pull requests
      5. Enable Rules
    2. Code
      1. Plugin
        1. pieces of functionality that are swappable
        2. Plugins that perform similar functionality are of the same plugin type
        3. d7: ctools plug-ins, rules plug-ins, ...
        4. d8: all fancy
        5. http://www.palantir.net/presentations/dcamsterdam2014-d8-crash-course/#/11/2
      2. Annotation
        1. res
          1. http://www.slideshare.net/rdohms/annotations-in-php-they-exist
        2. Add metadata to classes, methods, properties
        3. Examples
          1. Marking classes/methods as accessible via webservice
          2. Marking methods as unit test methods
          3. Automate dependency injection
        4. no php support
          1. docblocks != comments
        5. why
          1. Annotations allow for complex structured data
          2. you can indicate that certain strings are to be translated
          3. performance bonus
          4. files don't have to be php-included / classes don't have to be loaded
        6. syntax taken from doctrine
      3. Auto-loading
        1. PSR-4
          1. https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-4-autoloader.md
        2. \<NamespaceName>(\<SubNamespaceNames>)*\<ClassName>
        3. To register your plugin, put a file in a folder relative to your Drupal module root: src/Plugin/$plugin_type/Example.php
        4. Drupaldocs Annotations-based plugins
          1. https://www.drupal.org/node/1882526
      4. Context
        1. Use Context system for actions (core -> d8rules)
          1. https://www.drupal.org/node/2011038
      5. Engine
      6. Entity
      7. Tests
    3. More
      1. Plug-ins
        1. derivative
          1. Create or delete any URL alias
          2. Create or delete a content's URL alias (node_path_alias) -> derivative
        2. discovery
          1. StaticDiscovery
          2. StaticDiscovery allows for direct registration of plugins within the discovery class itself. A protected variable ($definitions) in the class holds all plugin definitions that are registered with it through the public method setDefinition(). Any plugin defined through this method can then be invoked as outlined in the plugin manager documentation.
          3. HookDiscovery
          4. The HookDiscovery class allows Drupal's hook_component_info()/hook_component_info_alter() pattern to be used for plugin discovery. With this discovery, the plugin manager will invoke info hooks to retrieve a list of available plugins.
          5. AnnotatedClassDiscovery
          6. The AnnotatedClassDiscovery class uses name of the annotations that contains the plugin definition, e.g., @Plugin, @EntityType, in plugin docblocks to discover plugins, minimizing memory usage during the discovery phase. The AnnotatedClassDiscovery class takes an argument in its constructor, $subdir, which specifies the sub-directory/sub-namespace for this plugin type. The AnnotatedClassDiscovery class scans PSR-0 classes inside those sub-directories of Plugin folders to find plugins.
          7. YamlDiscovery
          8. YamlDiscovery allows plugins to de be defined in yaml files. Drupal core uses this for local tasks and local actions.
          9. https://www.drupal.org/node/1638040
      2. Traits
        1. example
          1. https://www.drupal.org/node/2079611
        2. "Traits are simply compiler-assistet copy/paste (Rasmus Lerdorf)
      3. Controllers
      4. routing
      5. CMI, schema
      6. services, services.yml
        1. manager
      7. Guidelines
        1. http://www.palantir.net/presentations/dcamsterdam2014-d8-crash-course/#/14/1
      8. Interfaces
        1. TypeHinting
      9. Exceptions
      10. Namespaces
      11. OOP
        1. https://amsterdam2014.drupal.org/session/oop-drupal-developers