summaryrefslogtreecommitdiffstats
path: root/admin/survey/minify/vendor/mrclay/props-dic
diff options
context:
space:
mode:
Diffstat (limited to 'admin/survey/minify/vendor/mrclay/props-dic')
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/.gitignore21
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/.travis.yml30
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/LICENSE19
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/README.md165
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/composer.json27
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/phpunit.xml27
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/scripts/example-pimple.php75
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/scripts/example.php71
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/scripts/pizza.php55
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/src/Props/BadMethodCallException.php9
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/src/Props/Container.php249
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/src/Props/FactoryUncallableException.php9
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/src/Props/NotFoundException.php9
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/src/Props/Pimple.php56
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/src/Props/ValueUnresolvableException.php9
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/test/Props/ContainerTest.php324
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/Invokable.php38
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/NonInvokable.php34
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/PimpleTest.php452
-rw-r--r--admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/Service.php38
20 files changed, 1717 insertions, 0 deletions
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/.gitignore b/admin/survey/minify/vendor/mrclay/props-dic/.gitignore
new file mode 100644
index 0000000..160ebc0
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/.gitignore
@@ -0,0 +1,21 @@
+# ignore IDE/hidden/OS cache files
+.*
+*~
+nbproject
+nb-configuration.xml
+Session.vim
+*.tmproj
+*.tmproject
+tmtags
+Thumbs.db
+Desktop.ini
+
+# ignore Composer downloads
+/vendor/*
+
+# keep some hiddens
+!.htaccess
+!/.gitignore
+!/.travis.yml
+
+/composer.lock
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/.travis.yml b/admin/survey/minify/vendor/mrclay/props-dic/.travis.yml
new file mode 100644
index 0000000..79f80a3
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/.travis.yml
@@ -0,0 +1,30 @@
+language: php
+
+sudo: false
+
+php:
+ - 5.3
+ - 5.4
+ - 5.5
+ - 5.6
+ - 7.0
+ - hhvm
+
+matrix:
+ allow_failures:
+ - php: hhvm
+ fast_finish: true
+
+branches:
+ only:
+ - master
+ - 2.x
+
+before_install:
+ - composer self-update
+
+install:
+ - composer install
+
+script:
+ - phpunit
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/LICENSE b/admin/survey/minify/vendor/mrclay/props-dic/LICENSE
new file mode 100644
index 0000000..adf65b7
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2013 The Authors
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/README.md b/admin/survey/minify/vendor/mrclay/props-dic/README.md
new file mode 100644
index 0000000..a01f55b
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/README.md
@@ -0,0 +1,165 @@
+# Props [![Build Status](https://travis-ci.org/mrclay/Props.png)](https://travis-ci.org/mrclay/Props)
+
+Most [Dependency Injection](http://www.mrclay.org/2014/04/06/dependency-injection-ask-for-what-you-need/) containers have fetch operations, like `$di->get('foo')` or `$di['foo']`, which don't allow your IDE to know the type of value received, nor offer you any help remembering/typing key names.
+
+With **Props**, you access values via custom property reads `$di->foo` or method calls `$di->new_foo()`. This allows you to subclass the container and provide `@property` and/or `@method` PHPDoc declarations, giving your IDE and static analysis tools valuable runtime type information.
+
+An example will help:
+
+```php
+/**
+ * @property-read Foo $foo
+ * @method Foo new_foo()
+ */
+class MyContainer extends \Props\Container {
+ public function __construct() {
+ $this->foo = function (MyContainer $c) {
+ return new Foo();
+ };
+ }
+}
+
+$c = new MyContainer();
+
+$foo1 = $c->foo; // your IDE knows this is a Foo instance
+
+$foo2 = $c->new_foo(); // A fresh Foo instance
+
+$foo3 = $c->foo; // same as $foo1
+```
+
+Here's a more complex example:
+
+```php
+/**
+ * @property-read string $style
+ * @property-read Dough $dough
+ * @property-read Cheese $cheese
+ * @property-read Pizza $pizza
+ * @method Slice new_slice()
+ */
+class PizzaServices extends \Props\Container {
+ public function __construct() {
+ $this->style = 'deluxe';
+
+ $this->dough = function (PizzaServices $c) {
+ return new Dough();
+ };
+
+ $this->setFactory('cheese', 'CheeseFactory::getCheese');
+
+ $this->pizza = function (PizzaServices $c) {
+ $pizza = new Pizza($c->style, $c->cheese);
+ $pizza->setDough($c->dough);
+ return $pizza;
+ };
+
+ $this->slice = function (PizzaServices $c) {
+ return $c->pizza->getSlice();
+ };
+ }
+}
+
+$c = new PizzaServices;
+
+$c->pizza; // This first resolves and caches the cheese and dough.
+
+$c->pizza; // The same pizza instance as above (no factories called).
+```
+
+Since "slice" has a factory function set, we can call `new_slice()` to get fresh instances from it:
+
+```php
+$c->new_slice(); // a new Slice instance
+$c->new_slice(); // a new Slice instance
+```
+
+Your IDE sees the container as a plain old class of typed properties, allowing it to offer suggestions of available properties, autocomplete their names, and autocomplete the objects returned. It gives you much more power when providing static analysis and automated refactoring.
+
+## Compatibility
+
+`Props\Container` implements [`ContainerInterface`](https://github.com/container-interop/container-interop).
+
+## Overview
+
+You can specify dependencies via direct setting:
+
+```php
+$c->aaa = new AAA();
+```
+
+You can specify factories by setting a `Closure`, or by using the `setFactory()` method. These are functionally equivalent:
+
+```php
+$c->bbb = function ($c) {
+ return BBB::factory($c);
+};
+
+$c->setFactory('bbb', 'BBB::factory');
+```
+
+Resolved dependencies are cached, returning the same instance:
+
+```php
+$c->bbb === $c->bbb; // true
+```
+
+### Using factories
+
+If you don't want a cached value, use `new_PROPERTYNAME()` to always fetch a fresh instance:
+
+```php
+$c->new_bbb() === $c->new_bbb(); // false
+```
+
+Regular value sets do not store a factory, so you may want to check `hasFactory()` before you use `new_PROPERTYNAME()`:
+
+```php
+// store a value
+$c->ccc = new CCC();
+$c->hasFactory('ccc'); // false
+
+// store a factory
+$c->ccc = function () {
+ return new CCC();
+};
+$c->hasFactory('ccc'); // true
+```
+
+You can also get access to a set factory:
+
+```php
+$callable = $c->getFactory('ccc');
+```
+
+### Extending a factory
+
+Use `extend` to have the return value of a factory filtered before it's returned:
+
+```php
+$c->foo = function ($c) {
+ return new Foo($c->bar);
+};
+
+$c->extend('foo', function ($value, Container $c) {
+ return array($value, $c->bing);
+});
+
+$c->foo; // [Foo, "bing"]
+
+$c->new_foo(); // re-call original foo factory and re-extend output (`bar` and `bing` will be re-read)
+```
+
+## Pimple with property access
+
+If you're used to the [Pimple](http://pimple.sensiolabs.org/) API, try `Props\Pimple`, which just adds property access. With that you can add `@property` declarations and get the same typing benefits.
+
+You can see an [example](https://github.com/mrclay/Props/blob/master/scripts/example-pimple.php) that's similar to the Pimple docs.
+
+## Requirements
+
+ * PHP 5.3
+
+### License (MIT)
+
+See [LICENSE](https://github.com/mrclay/Props/blob/master/src/LICENSE).
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/composer.json b/admin/survey/minify/vendor/mrclay/props-dic/composer.json
new file mode 100644
index 0000000..78f64dd
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/composer.json
@@ -0,0 +1,27 @@
+{
+ "name": "mrclay/props-dic",
+ "type": "library",
+ "description": "Props is a simple DI container that allows retrieving values via custom property and method names",
+ "keywords": ["container", "dependency injection", "di", "di container", "dependency injection container"],
+ "license": "MIT",
+ "authors": [
+ {
+ "name": "Steve Clay",
+ "email": "steve@mrclay.org",
+ "homepage": "http://www.mrclay.org/"
+ }
+ ],
+ "require": {
+ "php": ">=5.3.3",
+ "container-interop/container-interop": "^1.1",
+ "pimple/pimple": "~3.0"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "~4.8"
+ },
+ "autoload": {
+ "psr-0": {
+ "Props\\": ["src/", "test/"]
+ }
+ }
+} \ No newline at end of file
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/phpunit.xml b/admin/survey/minify/vendor/mrclay/props-dic/phpunit.xml
new file mode 100644
index 0000000..4fc4d1b
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/phpunit.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<phpunit backupGlobals="false"
+ backupStaticAttributes="false"
+ colors="true"
+ convertErrorsToExceptions="true"
+ convertNoticesToExceptions="true"
+ convertWarningsToExceptions="true"
+ processIsolation="false"
+ bootstrap="vendor/autoload.php"
+ >
+ <testsuites>
+ <testsuite name="Props Test Suite">
+ <directory>./test/</directory>
+ </testsuite>
+ </testsuites>
+
+ <filter>
+ <whitelist>
+ <directory>./</directory>
+ <exclude>
+ <directory>./test</directory>
+ <directory>./vendor</directory>
+ </exclude>
+ </whitelist>
+ </filter>
+</phpunit>
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/scripts/example-pimple.php b/admin/survey/minify/vendor/mrclay/props-dic/scripts/example-pimple.php
new file mode 100644
index 0000000..23bfee5
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/scripts/example-pimple.php
@@ -0,0 +1,75 @@
+<?php
+/**
+ * Example of Props\Pimple based on official Pimple docs
+ */
+
+namespace {
+ require __DIR__ . '/../vendor/autoload.php';
+}
+
+namespace PropsExample {
+
+ class SessionStorage {
+ public function __construct($cookieName) { $this->cookieName = $cookieName; }
+ }
+ class Session {
+ public function __construct($storage) { $this->storage = $storage; }
+ }
+ class Zend_Mail {
+ public function setFrom($from) { $this->from = $from; }
+ }
+
+ /**
+ * @property-read string $cookie_name
+ * @property-read string $session_storage_class
+ * @property-read Session $session
+ * @property-read \Closure $random
+ * @property-read Zend_Mail $mail
+ */
+ class MyContainer2 extends \Props\Pimple {
+ public function __construct() {
+ parent::__construct();
+
+ $this->cookie_name = 'SESSION_ID';
+
+ $this->session_storage_class = 'PropsExample\\SessionStorage';
+
+ $this->session_storage = function (MyContainer2 $c) {
+ $class = $c->session_storage_class;
+ return new $class($c->cookie_name);
+ };
+
+ $this->session = $this->factory(function (MyContainer2 $c) {
+ return new Session($c->session_storage);
+ });
+
+ $this->random = $this->protect(function () { return rand(); });
+
+ $this->mail = function (MyContainer2 $c) {
+ return new Zend_Mail();
+ };
+
+ $this->{'mail.default_from'} = 'foo@example.com';
+
+ $this->extend('mail', function($mail, MyContainer2 $c) {
+ $mail->setFrom($c->{'mail.default_from'});
+ return $mail;
+ });
+ }
+ }
+
+ $c = new MyContainer2;
+
+ $r1 = $c->random;
+ $r2 = $c->random;
+
+ echo (int)($r1 === $r2) . "<br>";
+
+ echo $r1() . "<br>";
+
+ echo get_class($c->raw('session')) . '<br>';
+
+ echo var_export($c->session, true) . '<br>';
+
+ echo var_export($c->mail, true) . '<br>';
+}
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/scripts/example.php b/admin/survey/minify/vendor/mrclay/props-dic/scripts/example.php
new file mode 100644
index 0000000..7778860
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/scripts/example.php
@@ -0,0 +1,71 @@
+<?php
+
+require __DIR__ . '/../vendor/autoload.php';
+
+class AAA {}
+class BBB {}
+class CCC {
+ public function __construct(BBB $bbb) {}
+ public function setBbb(BBB $bbb) {}
+ public $aaa;
+}
+class DDD {}
+function get_a_bbb() { return new BBB; }
+
+/**
+ * @property-read AAA $aaa
+ * @property-read BBB $bbb1
+ * @property-read BBB $bbb2
+ * @property-read BBB $bbb3
+ * @property-read CCC $ccc
+ * @property-read DDD $ddd
+ *
+ * @method AAA new_aaa()
+ */
+class MyContainer extends \Props\Container {
+ public function __construct() {
+ // store plain old values
+ $this->ddd = new DDD;
+ $this->{'bbb.class'} = 'BBB';
+
+ // set a factory, which will construct an object on demand
+ $this->aaa = function () {
+ return new AAA();
+ };
+
+ // alternative factory syntax, and using a reference to specify the class name
+ $this->setFactory('bbb1', function (MyContainer $c) {
+ return new $c->{'bbb.class'};
+ });
+
+ // fetch with a callback
+ $this->setFactory('bbb2', 'get_a_bbb');
+
+ // Closures automatically used as factories
+ $this->bbb3 = function (MyContainer $c) {
+ return $c->bbb2;
+ };
+
+ // more advanced factory
+ $this->ccc = function (MyContainer $c) {
+ $val = new CCC($c->bbb1);
+ $val->setBbb($c->bbb2);
+ $val->aaa = $c->aaa;
+ return $val;
+ };
+ }
+}
+
+$c = new MyContainer;
+
+$c->aaa; // factory builds a AAA
+$c->aaa; // the same AAA
+$c->new_aaa(); // always a freshly-built AAA
+
+$c->bbb1; // factory resolves bar.class, builds a BBB
+$c->bbb2; // invoker calls get_a_bbb()
+$c->bbb3; // invoker executes anon func, returning the already-cached $c->bbb2 instance
+
+$c->ccc; // factory creates CCC, passing a new BBB object,
+ // calls setBbb(), passing in $c->bbb2,
+ // and sets the aaa property to $c->aaa
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/scripts/pizza.php b/admin/survey/minify/vendor/mrclay/props-dic/scripts/pizza.php
new file mode 100644
index 0000000..fcb30b0
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/scripts/pizza.php
@@ -0,0 +1,55 @@
+<?php
+
+require __DIR__ . '/../vendor/autoload.php';
+
+class Dough {}
+class Cheese {}
+class Slice {}
+class Pizza {
+ function __construct($style, Cheese $cheese) {}
+ function setDough(Dough $dough) {}
+ function getSlice() { return new Slice(); }
+}
+class CheeseFactory {
+ static function getCheese() { return new Cheese(); }
+}
+
+/**
+ * @property-read string $style
+ * @property-read Dough $dough
+ * @property-read Cheese $cheese
+ * @property-read Pizza $pizza
+ * @method Slice new_slice()
+ */
+class MyDI extends \Props\Container {
+ public function __construct() {
+ $this->style = 'deluxe';
+
+ $this->dough = function (MyContainer $c) {
+ return new Dough();
+ };
+
+ $this->setFactory('cheese', 'CheeseFactory::getCheese');
+
+ $this->pizza = function (MyContainer $c) {
+ $pizza = new Pizza($c->style, $c->cheese);
+ $pizza->setDough($c->dough);
+ return $pizza;
+ };
+
+ // note 3rd argument $shared is false
+ $this->slice = function (MyContainer $c) {
+ return $c->pizza->getSlice();
+ };
+ }
+}
+
+$c = new MyContainer;
+
+// You can request dependencies in any order. They're resolved as needed.
+
+$slice1 = $c->new_slice(); // This first resolves and caches the cheese, dough, and pizza.
+$slice2 = $c->new_slice(); // This just gets a new slice from the existing pizza.
+
+assert($slice1 !== $slice2);
+assert($c->pizza === $c->pizza);
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/src/Props/BadMethodCallException.php b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/BadMethodCallException.php
new file mode 100644
index 0000000..d91f5f0
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/BadMethodCallException.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace Props;
+
+use Interop\Container\Exception\ContainerException;
+
+class BadMethodCallException extends \Exception implements ContainerException
+{
+}
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/src/Props/Container.php b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/Container.php
new file mode 100644
index 0000000..e1c5789
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/Container.php
@@ -0,0 +1,249 @@
+<?php
+
+namespace Props;
+
+use Interop\Container\ContainerInterface;
+
+/**
+ * Container holding values which can be resolved upon reading and optionally stored and shared
+ * across reads.
+ *
+ * Values are read/set as properties.
+ *
+ * @note see scripts/example.php
+ */
+class Container implements ContainerInterface
+{
+ /**
+ * @var callable[]
+ */
+ private $factories = array();
+
+ /**
+ * @var array
+ */
+ private $cache = array();
+
+ /**
+ * Fetch a value.
+ *
+ * @param string $name
+ * @return mixed
+ * @throws FactoryUncallableException|ValueUnresolvableException|NotFoundException
+ */
+ public function __get($name)
+ {
+ if (array_key_exists($name, $this->cache)) {
+ return $this->cache[$name];
+ }
+ $value = $this->build($name);
+ $this->cache[$name] = $value;
+ return $value;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function get($name)
+ {
+ return $this->__get($name);
+ }
+
+ /**
+ * Set a value.
+ *
+ * @param string $name
+ * @param mixed $value
+ * @throws \InvalidArgumentException
+ */
+ public function __set($name, $value)
+ {
+ if ($value instanceof \Closure) {
+ $this->setFactory($name, $value);
+ return;
+ }
+
+ $this->cache[$name] = $value;
+ unset($this->factories[$name]);
+ }
+
+ /**
+ * Set a value to be later returned as is. You only need to use this if you wish to store
+ * a Closure.
+ *
+ * @param string $name
+ * @param mixed $value
+ * @throws \InvalidArgumentException
+ */
+ public function setValue($name, $value)
+ {
+ unset($this->factories[$name]);
+ $this->cache[$name] = $value;
+ }
+
+ /**
+ * @param string $name
+ */
+ public function __unset($name)
+ {
+ unset($this->cache[$name]);
+ unset($this->factories[$name]);
+ }
+
+ /**
+ * @param string $name
+ * @return bool
+ */
+ public function __isset($name)
+ {
+ return array_key_exists($name, $this->factories) || array_key_exists($name, $this->cache);
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function has($name)
+ {
+ return $this->__isset($name);
+ }
+
+ /**
+ * Fetch a freshly-resolved value.
+ *
+ * @param string $method method name must start with "new_"
+ * @param array $args
+ * @return mixed
+ * @throws BadMethodCallException
+ */
+ public function __call($method, $args)
+ {
+ if (0 !== strpos($method, 'new_')) {
+ throw new BadMethodCallException("Method name must begin with 'new_'");
+ }
+
+ return $this->build(substr($method, 4));
+ }
+
+ /**
+ * Can we fetch a new value via new_$name()?
+ *
+ * @param string $name
+ * @return bool
+ */
+ public function hasFactory($name)
+ {
+ return array_key_exists($name, $this->factories);
+ }
+
+ /**
+ * Set a factory to generate a value when the container is read.
+ *
+ * @param string $name The name of the value
+ * @param callable $factory Factory for the value
+ * @throws FactoryUncallableException
+ */
+ public function setFactory($name, $factory)
+ {
+ if (!is_callable($factory, true)) {
+ throw new FactoryUncallableException('$factory must appear callable');
+ }
+
+ unset($this->cache[$name]);
+ $this->factories[$name] = $factory;
+ }
+
+ /**
+ * Get an already-set factory callable (Closure, invokable, or callback)
+ *
+ * @param string $name The name of the value
+ * @return callable
+ * @throws NotFoundException
+ */
+ public function getFactory($name)
+ {
+ if (!array_key_exists($name, $this->factories)) {
+ throw new NotFoundException("No factory available for: $name");
+ }
+
+ return $this->factories[$name];
+ }
+
+ /**
+ * Add a function that gets applied to the return value of an existing factory
+ *
+ * @note A cached value (from a previous property read) will thrown away. The next property read
+ * (and all new_NAME() calls) will call the original factory.
+ *
+ * @param string $name The name of the value
+ * @param callable $extender Function that is applied to extend the returned value
+ * @return \Closure
+ * @throws FactoryUncallableException|NotFoundException
+ */
+ public function extend($name, $extender)
+ {
+ if (!is_callable($extender, true)) {
+ throw new FactoryUncallableException('$extender must appear callable');
+ }
+
+ if (!array_key_exists($name, $this->factories)) {
+ throw new NotFoundException("No factory available for: $name");
+ }
+
+ $factory = $this->factories[$name];
+
+ $newFactory = function (Container $c) use ($extender, $factory) {
+ return call_user_func($extender, call_user_func($factory, $c), $c);
+ };
+
+ $this->setFactory($name, $newFactory);
+
+ return $newFactory;
+ }
+
+ /**
+ * Get all keys available
+ *
+ * @return string[]
+ */
+ public function getKeys()
+ {
+ $keys = array_keys($this->cache) + array_keys($this->factories);
+ return array_unique($keys);
+ }
+
+ /**
+ * Build a value
+ *
+ * @param string $name
+ * @return mixed
+ * @throws FactoryUncallableException|ValueUnresolvableException|NotFoundException
+ */
+ private function build($name)
+ {
+ if (!array_key_exists($name, $this->factories)) {
+ throw new NotFoundException("Missing value: $name");
+ }
+
+ $factory = $this->factories[$name];
+
+ if (is_callable($factory)) {
+ try {
+ return call_user_func($factory, $this);
+ } catch (\Exception $e) {
+ throw new ValueUnresolvableException("Factory for '$name' threw an exception.", 0, $e);
+ }
+ }
+
+ $msg = "Factory for '$name' was uncallable";
+ if (is_string($factory)) {
+ $msg .= ": '$factory'";
+ } elseif (is_array($factory)) {
+ if (is_string($factory[0])) {
+ $msg .= ": '{$factory[0]}::{$factory[1]}'";
+ } else {
+ $msg .= ": " . get_class($factory[0]) . "->{$factory[1]}";
+ }
+ }
+ throw new FactoryUncallableException($msg);
+ }
+}
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/src/Props/FactoryUncallableException.php b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/FactoryUncallableException.php
new file mode 100644
index 0000000..58c813e
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/FactoryUncallableException.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace Props;
+
+use Interop\Container\Exception\ContainerException;
+
+class FactoryUncallableException extends \Exception implements ContainerException
+{
+}
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/src/Props/NotFoundException.php b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/NotFoundException.php
new file mode 100644
index 0000000..570cb68
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/NotFoundException.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace Props;
+
+use Interop\Container\Exception\NotFoundException as NotFound;
+
+class NotFoundException extends \Exception implements NotFound
+{
+}
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/src/Props/Pimple.php b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/Pimple.php
new file mode 100644
index 0000000..a3b1abf
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/Pimple.php
@@ -0,0 +1,56 @@
+<?php
+
+namespace Props;
+
+/**
+ * A version of Pimple that uses property access instead of array access
+ *
+ * @author Steve Clay <steve@mrclay.org>
+ */
+class Pimple extends \Pimple\Container
+{
+ /**
+ * Sets a parameter or an object.
+ *
+ * @param string $id The unique identifier for the parameter or object
+ * @param mixed $value The value of the parameter or a closure to define an object
+ * @throws \RuntimeException Prevent override of a frozen service
+ */
+ public function __set($id, $value)
+ {
+ $this->offsetSet($id, $value);
+ }
+
+ /**
+ * Gets a parameter or an object.
+ *
+ * @param string $id The unique identifier for the parameter or object
+ * @return mixed The value of the parameter or an object
+ * @throws \InvalidArgumentException if the identifier is not defined
+ */
+ public function __get($id)
+ {
+ return $this->offsetGet($id);
+ }
+
+ /**
+ * Checks if a parameter or an object is set.
+ *
+ * @param string $id The unique identifier for the parameter or object
+ * @return Boolean
+ */
+ public function __isset($id)
+ {
+ return $this->offsetExists($id);
+ }
+
+ /**
+ * Unsets a parameter or an object.
+ *
+ * @param string $id The unique identifier for the parameter or object
+ */
+ public function __unset($id)
+ {
+ $this->offsetUnset($id);
+ }
+}
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/src/Props/ValueUnresolvableException.php b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/ValueUnresolvableException.php
new file mode 100644
index 0000000..76bba96
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/src/Props/ValueUnresolvableException.php
@@ -0,0 +1,9 @@
+<?php
+
+namespace Props;
+
+use Interop\Container\Exception\ContainerException;
+
+class ValueUnresolvableException extends \Exception implements ContainerException
+{
+}
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/test/Props/ContainerTest.php b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/ContainerTest.php
new file mode 100644
index 0000000..d61a206
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/ContainerTest.php
@@ -0,0 +1,324 @@
+<?php
+
+namespace Props;
+
+class ContainerTest extends \PHPUnit_Framework_TestCase
+{
+ const TEST_CLASS = 'Props\ContainerTestObject';
+
+ public function testBasicInterop()
+ {
+ $di = new Container();
+ $this->assertInstanceOf('Interop\Container\ContainerInterface', $di);
+
+ $this->assertFalse($di->has('foo'));
+ $di->foo = 'bar';
+ $this->assertTrue($di->has('foo'));
+ }
+
+ /**
+ * @expectedException \Interop\Container\Exception\NotFoundException
+ */
+ public function testInteropNotFound()
+ {
+ $di = new Container();
+ $di->get('foo');
+ }
+
+ /**
+ * @expectedException \Interop\Container\Exception\ContainerException
+ */
+ public function testInteropException1()
+ {
+ $di = new Container();
+ $di->setFactory('foo', null);
+ }
+
+ /**
+ * @expectedException \Interop\Container\Exception\ContainerException
+ */
+ public function testInteropException2()
+ {
+ $di = new Container();
+ $di->setFactory('foo', function () {
+ throw new \Exception();
+ });
+ $di->foo;
+ }
+
+ public function testEmpty()
+ {
+ $di = new Container();
+ $this->assertFalse(isset($di->foo));
+ $this->assertFalse($di->has('foo'));
+ }
+
+ public function testValueSetRemovesFactory()
+ {
+ $di = new Container();
+ $di->foo = function () {
+ return 'Bar';
+ };
+ $di->foo = 'Foo';
+ $this->assertTrue(isset($di->foo));
+ $this->assertFalse($di->hasFactory('foo'));
+ }
+
+ public function testSetResolvable()
+ {
+ $di = new Container();
+ $di->foo = function () {
+ return new ContainerTestObject();
+ };
+
+ $this->assertTrue(isset($di->foo));
+ $this->assertTrue($di->has('foo'));
+ $this->assertTrue($di->hasFactory('foo'));
+ }
+
+ /**
+ * @expectedException \Props\NotFoundException
+ */
+ public function testReadMissingValue()
+ {
+ $di = new Container();
+ $di->foo;
+ }
+
+ /**
+ * @expectedException \Props\NotFoundException
+ */
+ public function testGetMissingValue()
+ {
+ $di = new Container();
+ $di->get('foo');
+ }
+
+ public function testGetNewUnresolvableValue()
+ {
+ $di = new Container();
+ $di->foo = 'Foo';
+
+ $this->setExpectedException('Props\NotFoundException');
+ $di->new_foo();
+ }
+
+ public function testSetAfterRead()
+ {
+ $di = new Container();
+
+ $di->foo = 'Foo';
+ $di->foo = 'Foo2';
+ $this->assertEquals('Foo2', $di->foo);
+ }
+
+ public function testHandlesNullValue()
+ {
+ $di = new Container();
+ $di->null = null;
+ $this->assertTrue(isset($di->null));
+ $this->assertTrue($di->has('null'));
+ $this->assertNull($di->null);
+ $this->assertNull($di->get('null'));
+ }
+
+ public function testFactoryReceivesContainer()
+ {
+ $di = new Container();
+ $di->foo = function () {
+ return func_get_args();
+ };
+ $foo = $di->foo;
+ $this->assertSame($foo[0], $di);
+ $this->assertEquals(count($foo), 1);
+ }
+
+ public function testGetResolvables()
+ {
+ $di = new Container();
+
+ $di->foo = function () {
+ return new ContainerTestObject();
+ };
+ $foo1 = $di->foo;
+ $foo2 = $di->foo;
+ $this->assertInstanceOf(self::TEST_CLASS, $foo1);
+ $this->assertSame($foo1, $foo2);
+
+ $foo3 = $di->new_foo();
+ $foo4 = $di->new_foo();
+ $this->assertInstanceOf(self::TEST_CLASS, $foo3);
+ $this->assertInstanceOf(self::TEST_CLASS, $foo4);
+ $this->assertNotSame($foo3, $foo4);
+ $this->assertNotSame($foo1, $foo3);
+ }
+
+ public function testKeyNamespace()
+ {
+ $di = new Container();
+ $di->foo = function () {
+ return new ContainerTestObject();
+ };
+ $di->new_foo = 'Foo';
+
+ $this->assertInstanceOf(self::TEST_CLASS, $di->new_foo());
+ $this->assertEquals('Foo', $di->new_foo);
+ }
+
+ public function testUnset()
+ {
+ $di = new Container();
+ $di->foo = 'Foo';
+
+ unset($di->foo);
+ $this->assertFalse(isset($di->foo));
+ }
+
+ public function testAccessUnsetValue()
+ {
+ $di = new Container();
+ $di->foo = 'Foo';
+ unset($di->foo);
+
+ $this->setExpectedException('Props\NotFoundException');
+ $di->foo;
+ }
+
+ public function testSetFactory()
+ {
+ $di = new Container();
+ $di->setFactory('foo', function () {
+ $obj = new ContainerTestObject();
+ $obj->bar = 'bar';
+ return $obj;
+ });
+
+ $foo = $di->foo;
+
+ $this->assertInstanceOf(self::TEST_CLASS, $foo);
+ $this->assertEquals('bar', $foo->bar);
+ }
+
+ public function testSetValue()
+ {
+ $di = new Container();
+ $di->setValue('foo', function () {});
+
+ $this->assertInstanceOf('Closure', $di->foo);
+ }
+
+ /**
+ * @expectedException \Props\NotFoundException
+ */
+ public function testCannotExtendValue()
+ {
+ $di = new Container();
+ $di->foo = 1;
+ $di->extend('foo', function ($value, Container $c) {
+ return $value + 1;
+ });
+ }
+
+ public function testExtend()
+ {
+ $di = new Container();
+ $di->key = 'count';
+
+ $di->counter = function (Container $c) {
+ static $i = 0;
+ $i++;
+ return (object)array(
+ $c->key => $i,
+ );
+ };
+
+ $c1 = $di->counter; // cached with $i = 1
+
+ $di->extend('counter', function ($value, Container $c) {
+ static $i = 0;
+ $i++;
+ $value->one = $i;
+ return $value;
+ });
+
+ $c2 = $di->counter; // because of extension, doesn't use original cached value
+ $this->assertEquals((object)array('count' => 2, 'one' => 1), $c2);
+ $this->assertNotSame($c1, $c2);
+
+ $di->key = 'total';
+
+ $c3 = $di->counter; // but caches repeat reads
+ $this->assertEquals((object)array('count' => 2, 'one' => 1), $c3);
+ $this->assertSame($c2, $c3);
+
+ $c4 = $di->new_counter();
+ $this->assertEquals((object)array('total' => 3, 'one' => 2), $c4);
+ $this->assertNotSame($c3, $c4);
+
+ $di->extend('counter', function ($value, Container $c) {
+ static $i = 0;
+ $i++;
+ $value->two = $i;
+ return $value;
+ });
+
+ $c5 = $di->counter; // going deep!
+ $this->assertEquals((object)array('total' => 4, 'one' => 3, 'two' => 1), $c5);
+
+ $c6 = $di->new_counter();
+ $this->assertEquals((object)array('total' => 5, 'one' => 4, 'two' => 2), $c6);
+ }
+
+ /**
+ * @expectedException \Props\NotFoundException
+ */
+ public function testGetFactoryForValue()
+ {
+ $di = new Container();
+ $di->key = 'count';
+ $di->getFactory('key');
+ }
+
+ /**
+ * @expectedException \Props\NotFoundException
+ */
+ public function testGetMissingFactory()
+ {
+ $di = new Container();
+ $di->getFactory('key');
+ }
+
+ public function testGetFactory()
+ {
+ $di = new Container();
+ $factory = function () {};
+ $di->foo = $factory;
+ $factory2 = $di->getFactory('foo');
+ $this->assertSame($factory, $factory2);
+ }
+
+ public function testGetKeys()
+ {
+ $di = new Container();
+ $di->foo = 'foo';
+ $di->bar = function () {};
+ $di->bar;
+ $this->assertEquals(array('foo', 'bar'), $di->getKeys());
+ }
+}
+
+class ContainerTestObject
+{
+ public $calls;
+ public $args;
+
+ public function __construct()
+ {
+ $this->args = func_get_args();
+ }
+
+ public function __call($name, $args)
+ {
+ $this->calls[$name] = $args[0];
+ }
+}
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/Invokable.php b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/Invokable.php
new file mode 100644
index 0000000..0b87de9
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/Invokable.php
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of Pimple.
+ *
+ * Copyright (c) 2009 Fabien Potencier
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+namespace Props\Pimple\Tests;
+
+class Invokable
+{
+ public function __invoke($value = null)
+ {
+ $service = new Service();
+ $service->value = $value;
+
+ return $service;
+ }
+} \ No newline at end of file
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/NonInvokable.php b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/NonInvokable.php
new file mode 100644
index 0000000..5d0b7c1
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/NonInvokable.php
@@ -0,0 +1,34 @@
+<?php
+
+/*
+ * This file is part of Pimple.
+ *
+ * Copyright (c) 2009 Fabien Potencier
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+namespace Props\Pimple\Tests;
+
+class NonInvokable
+{
+ public function __call($a, $b)
+ {
+ }
+} \ No newline at end of file
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/PimpleTest.php b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/PimpleTest.php
new file mode 100644
index 0000000..2a29660
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/PimpleTest.php
@@ -0,0 +1,452 @@
+<?php
+
+/*
+ * This file is part of Pimple.
+ *
+ * Copyright (c) 2009 Fabien Potencier
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+namespace Props\Pimple\Tests;
+
+use Props\Pimple;
+
+/**
+ * Pimple Test
+ *
+ * @package pimple
+ * @author Igor Wiedler <igor@wiedler.ch>
+ */
+class PimpleTest extends \PHPUnit_Framework_TestCase
+{
+ public function testWithString()
+ {
+ $pimple = new Pimple();
+ $pimple->param = 'value';
+
+ $this->assertEquals('value', $pimple->param);
+ }
+
+ public function testWithClosure()
+ {
+ $pimple = new Pimple();
+ $pimple->service = function () {
+ return new Service();
+ };
+
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $pimple->service);
+ }
+
+ public function testServicesShouldBeDifferent()
+ {
+ $pimple = new Pimple();
+ $pimple->service = $pimple->factory(function () {
+ return new Service();
+ });
+
+ $serviceOne = $pimple->service;
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $serviceOne);
+
+ $serviceTwo = $pimple->service;
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $serviceTwo);
+
+ $this->assertNotSame($serviceOne, $serviceTwo);
+ }
+
+ public function testShouldPassContainerAsParameter()
+ {
+ $pimple = new Pimple();
+ $pimple->service = function () {
+ return new Service();
+ };
+ $pimple->container = function ($container) {
+ return $container;
+ };
+
+ $this->assertNotSame($pimple, $pimple->service);
+ $this->assertSame($pimple, $pimple->container);
+ }
+
+ public function testIsset()
+ {
+ $pimple = new Pimple();
+ $pimple->param = 'value';
+ $pimple->service = function () {
+ return new Service();
+ };
+
+ $pimple->null = null;
+
+ $this->assertTrue(isset($pimple->param));
+ $this->assertTrue(isset($pimple->service));
+ $this->assertTrue(isset($pimple->null));
+ $this->assertFalse(isset($pimple->non_existent));
+ }
+
+ public function testConstructorInjection()
+ {
+ $params = array("param" => "value");
+ $pimple = new Pimple($params);
+
+ $this->assertSame($pimple->param, $pimple->param);
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Identifier "foo" is not defined.
+ */
+ public function testOffsetGetValidatesKeyIsPresent()
+ {
+ $pimple = new Pimple();
+ echo $pimple->foo;
+ }
+
+ public function testOffsetGetHonorsNullValues()
+ {
+ $pimple = new Pimple();
+ $pimple->foo = null;
+ $this->assertNull($pimple->foo);
+ }
+
+ public function testUnset()
+ {
+ $pimple = new Pimple();
+ $pimple->param = 'value';
+ $pimple->service = function () {
+ return new Service();
+ };
+
+ unset($pimple->param, $pimple->service);
+ $this->assertFalse(isset($pimple->param));
+ $this->assertFalse(isset($pimple->service));
+ }
+
+ /**
+ * @dataProvider serviceDefinitionProvider
+ */
+ public function testShare($service)
+ {
+ $pimple = new Pimple();
+ $pimple->shared_service = $service;
+
+ $serviceOne = $pimple->shared_service;
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $serviceOne);
+
+ $serviceTwo = $pimple->shared_service;
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $serviceTwo);
+
+ $this->assertSame($serviceOne, $serviceTwo);
+ }
+
+ /**
+ * @dataProvider serviceDefinitionProvider
+ */
+ public function testProtect($service)
+ {
+ $pimple = new Pimple();
+ $pimple->protected = $pimple->protect($service);
+
+ $this->assertSame($service, $pimple->protected);
+ }
+
+ public function testGlobalFunctionNameAsParameterValue()
+ {
+ $pimple = new Pimple();
+ $pimple->global_function = 'strlen';
+ $this->assertSame('strlen', $pimple->global_function);
+ }
+
+ public function testRaw()
+ {
+ $pimple = new Pimple();
+ $pimple->service = $definition = $pimple->factory(function () { return 'foo'; });
+ $this->assertSame($definition, $pimple->raw('service'));
+ }
+
+ public function testRawHonorsNullValues()
+ {
+ $pimple = new Pimple();
+ $pimple->foo = null;
+ $this->assertNull($pimple->raw('foo'));
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Identifier "foo" is not defined.
+ */
+ public function testRawValidatesKeyIsPresent()
+ {
+ $pimple = new Pimple();
+ $pimple->raw('foo');
+ }
+
+ /**
+ * @dataProvider serviceDefinitionProvider
+ */
+ public function testExtend($service)
+ {
+ $pimple = new Pimple();
+ $pimple->shared_service = function () {
+ return new Service();
+ };
+ $pimple->factory_service = $pimple->factory(function () {
+ return new Service();
+ });
+
+ $pimple->extend('shared_service', $service);
+ $serviceOne = $pimple->shared_service;
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $serviceOne);
+ $serviceTwo = $pimple->shared_service;
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $serviceTwo);
+ $this->assertSame($serviceOne, $serviceTwo);
+ $this->assertSame($serviceOne->value, $serviceTwo->value);
+
+ $pimple->extend('factory_service', $service);
+ $serviceOne = $pimple->factory_service;
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $serviceOne);
+ $serviceTwo = $pimple->factory_service;
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $serviceTwo);
+ $this->assertNotSame($serviceOne, $serviceTwo);
+ $this->assertNotSame($serviceOne->value, $serviceTwo->value);
+ }
+
+ public function testExtendDoesNotLeakWithFactories()
+ {
+ $pimple = new Pimple();
+
+ $pimple->foo = $pimple->factory(function () { return; });
+ $pimple->foo = $pimple->extend('foo', function ($foo, $pimple) { return; });
+ unset($pimple->foo);
+
+ $class = new \ReflectionClass($pimple);
+ $class = $class->getParentClass();
+ $p = $class->getProperty('values');
+ $p->setAccessible(true);
+ $this->assertEmpty($p->getValue($pimple));
+
+ $p = $class->getProperty('factories');
+ $p->setAccessible(true);
+ $this->assertCount(0, $p->getValue($pimple));
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Identifier "foo" is not defined.
+ */
+ public function testExtendValidatesKeyIsPresent()
+ {
+ $pimple = new Pimple();
+ $pimple->extend('foo', function () {});
+ }
+
+ public function testKeys()
+ {
+ $pimple = new Pimple();
+ $pimple->foo = 123;
+ $pimple->bar = 123;
+
+ $this->assertEquals(array('foo', 'bar'), $pimple->keys());
+ }
+
+ /** @test */
+ public function settingAnInvokableObjectShouldTreatItAsFactory()
+ {
+ $pimple = new Pimple();
+ $pimple->invokable = new Invokable();
+
+ $this->assertInstanceOf('Props\Pimple\Tests\Service', $pimple->invokable);
+ }
+
+ /** @test */
+ public function settingNonInvokableObjectShouldTreatItAsParameter()
+ {
+ $pimple = new Pimple();
+ $pimple->non_invokable = new NonInvokable();
+
+ $this->assertInstanceOf('Props\Pimple\Tests\NonInvokable', $pimple->non_invokable);
+ }
+
+ /**
+ * @dataProvider badServiceDefinitionProvider
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Service definition is not a Closure or invokable object.
+ */
+ public function testFactoryFailsForInvalidServiceDefinitions($service)
+ {
+ $pimple = new Pimple();
+ $pimple->factory($service);
+ }
+
+ /**
+ * @dataProvider badServiceDefinitionProvider
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Callable is not a Closure or invokable object.
+ */
+ public function testProtectFailsForInvalidServiceDefinitions($service)
+ {
+ $pimple = new Pimple();
+ $pimple->protect($service);
+ }
+
+ /**
+ * @dataProvider badServiceDefinitionProvider
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Identifier "foo" does not contain an object definition.
+ */
+ public function testExtendFailsForKeysNotContainingServiceDefinitions($service)
+ {
+ $pimple = new Pimple();
+ $pimple->foo = $service;
+ $pimple->extend('foo', function () {});
+ }
+
+ /**
+ * @dataProvider badServiceDefinitionProvider
+ * @expectedException \InvalidArgumentException
+ * @expectedExceptionMessage Extension service definition is not a Closure or invokable object.
+ */
+ public function testExtendFailsForInvalidServiceDefinitions($service)
+ {
+ $pimple = new Pimple();
+ $pimple->foo = function () {};
+ $pimple->extend('foo', $service);
+ }
+
+ /**
+ * Provider for invalid service definitions
+ */
+ public function badServiceDefinitionProvider()
+ {
+ return array(
+ array(123),
+ array(new NonInvokable())
+ );
+ }
+
+ /**
+ * Provider for service definitions
+ */
+ public function serviceDefinitionProvider()
+ {
+ return array(
+ array(function ($value) {
+ $service = new Service();
+ $service->value = $value;
+
+ return $service;
+ }),
+ array(new Invokable())
+ );
+ }
+
+ public function testDefiningNewServiceAfterFreeze()
+ {
+ $pimple = new Pimple();
+ $pimple->foo = function () {
+ return 'foo';
+ };
+ $foo = $pimple->foo;
+
+ $pimple->bar = function () {
+ return 'bar';
+ };
+ $this->assertSame('bar', $pimple->bar);
+ }
+
+ /**
+ * @expectedException \RuntimeException
+ * @expectedExceptionMessage Cannot override frozen service "foo".
+ */
+ public function testOverridingServiceAfterFreeze()
+ {
+ $pimple = new Pimple();
+ $pimple->foo = function () {
+ return 'foo';
+ };
+ $foo = $pimple->foo;
+
+ $pimple->foo = function () {
+ return 'bar';
+ };
+ }
+
+ public function testRemovingServiceAfterFreeze()
+ {
+ $pimple = new Pimple();
+ $pimple->foo = function () {
+ return 'foo';
+ };
+ $foo = $pimple->foo;
+
+ unset($pimple->foo);
+ $pimple->foo = function () {
+ return 'bar';
+ };
+ $this->assertSame('bar', $pimple->foo);
+ }
+
+ public function testExtendingService()
+ {
+ $pimple = new Pimple();
+ $pimple->foo = function () {
+ return 'foo';
+ };
+ $pimple->foo = $pimple->extend('foo', function ($foo, $app) {
+ return "$foo.bar";
+ });
+ $pimple->foo = $pimple->extend('foo', function ($foo, $app) {
+ return "$foo.baz";
+ });
+ $this->assertSame('foo.bar.baz', $pimple->foo);
+ }
+
+ public function testExtendingServiceAfterOtherServiceFreeze()
+ {
+ $pimple = new Pimple();
+ $pimple->foo = function () {
+ return 'foo';
+ };
+ $pimple->bar = function () {
+ return 'bar';
+ };
+ $foo = $pimple->foo;
+
+ $pimple->bar = $pimple->extend('bar', function ($bar, $app) {
+ return "$bar.baz";
+ });
+ $this->assertSame('bar.baz', $pimple->bar);
+ }
+
+ public function testNoPrivateAccess()
+ {
+ $check = new AccessCheck();
+ $this->assertTrue(isset($check['values']));
+ $this->assertEquals('values', $check['values']);
+ }
+}
+
+class AccessCheck extends Pimple {
+ function __construct()
+ {
+ $this->values = 'values';
+
+ parent::__construct();
+ }
+} \ No newline at end of file
diff --git a/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/Service.php b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/Service.php
new file mode 100644
index 0000000..9784ed3
--- /dev/null
+++ b/admin/survey/minify/vendor/mrclay/props-dic/test/Props/Pimple/Tests/Service.php
@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of Pimple.
+ *
+ * Copyright (c) 2009 Fabien Potencier
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is furnished
+ * to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+namespace Props\Pimple\Tests;
+
+/**
+ * Pimple Test Service
+ *
+ * @package pimple
+ * @author Igor Wiedler <igor@wiedler.ch>
+ */
+class Service
+{
+ public $value;
+} \ No newline at end of file