Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / vendor / consolidation / robo / src / Contract / InflectionInterface.php
diff --git a/vendor/consolidation/robo/src/Contract/InflectionInterface.php b/vendor/consolidation/robo/src/Contract/InflectionInterface.php
new file mode 100644 (file)
index 0000000..449cecf
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+namespace Robo\Contract;
+
+interface InflectionInterface
+{
+    /**
+     * Based on league/container inflection: http://container.thephpleague.com/inflectors/
+     *
+     * This allows us to run:
+     *
+     *  (new SomeTask($args))
+     *    ->inflect($this)
+     *    ->initializer()
+     *    ->...
+     *
+     * Instead of:
+     *
+     *  (new SomeTask($args))
+     *    ->setLogger($this->logger)
+     *    ->initializer()
+     *    ->...
+     *
+     * The reason `inflect` is better than the more explicit alternative is
+     * that subclasses of BaseTask that implement a new FooAwareInterface
+     * can override injectDependencies() as explained below, and add more
+     * dependencies that can be injected as needed.
+     *
+     * @param \Robo\Contract\InflectionInterface $parent
+     */
+    public function inflect(InflectionInterface $parent);
+
+    /**
+     * Take all dependencies availble to this task and inject any that are
+     * needed into the provided task.  The general pattern is that, for every
+     * FooAwareInterface that this class implements, it should test to see
+     * if the child also implements the same interface, and if so, should call
+     * $child->setFoo($this->foo).
+     *
+     * The benefits of this are pretty large. Any time an object that implements
+     * InflectionInterface is created, just call `$child->inflect($this)`, and
+     * any available optional dependencies will be hooked up via setter injection.
+     *
+     * The required dependencies of an object should be provided via constructor
+     * injection, not inflection.
+     *
+     * @param InflectionInterface $child An object created by this class that
+     *   should have its dependencies injected.
+     *
+     * @see https://mwop.net/blog/2016-04-26-on-locators.html
+     */
+    public function injectDependencies(InflectionInterface $child);
+}