Security update for permissions_by_term
[yaffs-website] / vendor / behat / behat / src / Behat / Behat / Snippet / AggregateSnippet.php
diff --git a/vendor/behat/behat/src/Behat/Behat/Snippet/AggregateSnippet.php b/vendor/behat/behat/src/Behat/Behat/Snippet/AggregateSnippet.php
new file mode 100644 (file)
index 0000000..cbadc05
--- /dev/null
@@ -0,0 +1,130 @@
+<?php
+
+/*
+ * This file is part of the Behat.
+ * (c) Konstantin Kudryashov <ever.zet@gmail.com>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Behat\Behat\Snippet;
+
+use Behat\Behat\Context\Snippet\ContextSnippet;
+use Behat\Gherkin\Node\StepNode;
+
+/**
+ * Aggregates multiple similar snippets with different targets and steps.
+ *
+ * @author Konstantin Kudryashov <ever.zet@gmail.com>
+ */
+final class AggregateSnippet
+{
+    /**
+     * @var Snippet[]
+     */
+    private $snippets;
+
+    /**
+     * Initializes snippet.
+     *
+     * @param Snippet[] $snippets
+     */
+    public function __construct(array $snippets)
+    {
+        $this->snippets = $snippets;
+    }
+
+    /**
+     * Returns snippet type.
+     *
+     * @return string
+     */
+    public function getType()
+    {
+        return current($this->snippets)->getType();
+    }
+
+    /**
+     * Returns snippet unique ID (step type independent).
+     *
+     * @return string
+     */
+    public function getHash()
+    {
+        return current($this->snippets)->getHash();
+    }
+
+    /**
+     * Returns definition snippet text.
+     *
+     * @return string
+     */
+    public function getSnippet()
+    {
+        return current($this->snippets)->getSnippet();
+    }
+
+    /**
+     * Returns all steps interested in this snippet.
+     *
+     * @return StepNode[]
+     */
+    public function getSteps()
+    {
+        return array_unique(
+            array_map(
+                function (Snippet $snippet) {
+                    return $snippet->getStep();
+                },
+                $this->snippets
+            ),
+            SORT_REGULAR
+        );
+    }
+
+    /**
+     * Returns all snippet targets.
+     *
+     * @return string[]
+     */
+    public function getTargets()
+    {
+        return array_unique(
+            array_map(
+                function (Snippet $snippet) {
+                    return $snippet->getTarget();
+                },
+                $this->snippets
+            )
+        );
+    }
+
+    /**
+     * Returns the classes used in the snippet which should be imported.
+     *
+     * @return string[]
+     */
+    public function getUsedClasses()
+    {
+        if (empty($this->snippets)) {
+            return array();
+        }
+
+        return array_unique(
+            call_user_func_array(
+                'array_merge',
+                array_map(
+                    function (Snippet $snippet) {
+                        if (!$snippet instanceof ContextSnippet) {
+                            return array();
+                        }
+
+                        return $snippet->getUsedClasses();
+                    },
+                    $this->snippets
+                )
+            )
+        );
+    }
+}