diff --git a/.gitignore b/.gitignore index fd78dd9..bd1ceba 100755 --- a/.gitignore +++ b/.gitignore @@ -8,4 +8,5 @@ phperrors.log phpunit.xml Tests/autoload.php - +vendor +composer.lock \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 3664601..8684de5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,9 +3,18 @@ language: php php: - 5.3 - 5.4 + - 5.5 + - 5.6 + - hhvm env: - - SYMFONY_VERSION=v2.0.5 + - SYMFONY_VERSION=2.0.* + - SYMFONY_VERSION=2.1.* + - SYMFONY_VERSION=2.2.* + - SYMFONY_VERSION=2.3.* + - SYMFONY_VERSION=2.4.* - SYMFONY_VERSION=origin/master -before_script: php vendor/vendors.php +before_script: + - wget http://getcomposer.org/composer.phar + - php composer.phar --prefer-source --dev install diff --git a/Tests/Templating/Helper/FeatureToggleHelperTest.php b/Tests/Templating/Helper/FeatureToggleHelperTest.php index 8c2d96d..5e118d4 100644 --- a/Tests/Templating/Helper/FeatureToggleHelperTest.php +++ b/Tests/Templating/Helper/FeatureToggleHelperTest.php @@ -5,21 +5,22 @@ class FeatureToggleHelperTest extends \PHPUnit_Framework_TestCase { - public function testDisabledFeature() { - $helper = new FeatureToggleHelper(array( - array( - 'name' => 'test', - 'enabled' => false, - ))); - - $this->assertEquals( - '
', - $helper->startToggle('test') - ); - - $this->assertEquals( - '
', - $helper->endToggle('test') - ); - } + public function testDisabledFeature() + { + $helper = new FeatureToggleHelper(array( + array( + 'name' => 'test', + 'enabled' => false, + ))); + + $this->assertEquals( + '
', + $helper->startToggle('test') + ); + + $this->assertEquals( + '
', + $helper->endToggle('test') + ); + } } \ No newline at end of file diff --git a/Tests/Twig/FeatureToggleExtensionTest.php b/Tests/Twig/FeatureToggleExtensionTest.php new file mode 100644 index 0000000..4b0c57f --- /dev/null +++ b/Tests/Twig/FeatureToggleExtensionTest.php @@ -0,0 +1,33 @@ + $feature)); + + $extension = new FeatureToggleExtension($manager); + + $this->assertFalse($extension->isEnabled('test')); + } + + /** + * @expectedException \Emka\FeatureToggleBundle\Exception\FeatureToggleNotFoundException + */ + public function testException() + { + $feature = new Feature('test', false); + $manager = new FeatureManager(array('test' => $feature)); + + $extension = new FeatureToggleExtension($manager); + + $this->assertFalse($extension->isEnabled('nono')); + } +} \ No newline at end of file diff --git a/Tests/autoload.php.dist b/Tests/autoload.php.dist index b0889fd..ab4ad10 100644 --- a/Tests/autoload.php.dist +++ b/Tests/autoload.php.dist @@ -1,34 +1,4 @@ registerNamespaces(array( - 'Symfony' => array($vendorDir.'/symfony/src', $vendorDir.'/bundles'), -)); -$loader->registerPrefixes(array( - 'Twig_Extensions_' => __DIR__.'/../vendor/twig-extensions/lib', - 'Twig_' => __DIR__.'/../vendor/twig/lib', -)); - -$loader->register(); - -spl_autoload_register(function($class) { - if (0 === strpos($class, 'Emka\\FeatureToggleBundle\\')) { - $path = __DIR__.'/../'.implode('/', array_slice(explode('\\', $class), 2)).'.php'; - if (!stream_resolve_include_path($path)) { - return false; - } - require_once $path; - return true; - } -}); +// custom bootstrap stuff goes here ... if needed \ No newline at end of file diff --git a/Twig/FeatureToggleExtension.php b/Twig/FeatureToggleExtension.php index f9dc449..724956d 100644 --- a/Twig/FeatureToggleExtension.php +++ b/Twig/FeatureToggleExtension.php @@ -9,13 +9,23 @@ * @since 2011-09-17 */ -use Emka\FeatureToggleBundle\Twig\FeatureToggleTokenParser; +use Emka\FeatureToggleBundle\Exception\FeatureToggleNotFoundException; use Emka\FeatureToggleBundle\Feature\FeatureManager; +/** + * Class FeatureToggleExtension + * @package Emka\FeatureToggleBundle\Twig + */ class FeatureToggleExtension extends \Twig_Extension { + /** + * @var FeatureManager + */ protected $manager; + /** + * @param FeatureManager $manager + */ public function __construct(FeatureManager $manager) { $this->manager = $manager; @@ -29,16 +39,52 @@ public function getManager() return $this->manager; } + /** + * @return array + */ public function getTokenParsers() { return array(new FeatureToggleTokenParser($this->getManager())); } + /** + * @return array + */ + public function getFunctions() + { + return array( + new \Twig_SimpleFunction('feature_enabled', [$this, 'isEnabled']), + ); + } + + /** + * @return array + */ public function getFilters() { return array(); } + /** + * @param $name + * @return bool + * @throws FeatureToggleNotFoundException + */ + public function isEnabled($name) + { + if (!$this->manager->has($name)) { + throw new FeatureToggleNotFoundException(sprintf('The feature "%s" does not exist.', $name)); + } else { + $feature = $this->manager->get($name); + } + + return $feature->isEnabled(); + } + + + /** + * @return string + */ public function getName() { return 'featuretoggle'; diff --git a/Twig/FeatureToggleTokenParser.php b/Twig/FeatureToggleTokenParser.php index c755560..8389777 100644 --- a/Twig/FeatureToggleTokenParser.php +++ b/Twig/FeatureToggleTokenParser.php @@ -41,7 +41,7 @@ public function parse(\Twig_Token $token) $name = $stream->next()->getValue(); if (!$this->manager->has($name)) { - throw new FeatureToggleNotFoundException('The feature "%s" does not exist.', $name); + throw new FeatureToggleNotFoundException(sprintf('The feature "%s" does not exist.', $name)); } else { $feature = $this->manager->get($name); } diff --git a/composer.json b/composer.json index ad27e36..ac2cb01 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,8 @@ } ], "require": { - "twig/extensions": "dev-master" + "symfony/framework-bundle": "~2.0", + "twig/extensions": "~1.0" }, "autoload": { "psr-0": { "Emka\\FeatureToggleBundle": "" } diff --git a/vendor/vendors.php b/vendor/vendors.php deleted file mode 100644 index d0af45b..0000000 --- a/vendor/vendors.php +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env php - - * - * For the full copyright and license information, please view the LICENSE - * file that was distributed with this source code. - */ - -set_time_limit(0); - -$vendorDir = __DIR__; -$deps = array( - array('symfony', 'http://github.com/symfony/symfony', isset($_SERVER['SYMFONY_VERSION']) ? $_SERVER['SYMFONY_VERSION'] : 'origin/master'), - array('twig', 'https://github.com/fabpot/Twig', 'origin/master'), -); - -foreach ($deps as $dep) { - list($name, $url, $rev) = $dep; - - echo "> Installing/Updating $name\n"; - - $installDir = $vendorDir.'/'.$name; - if (!is_dir($installDir)) { - system(sprintf('git clone -q %s %s', escapeshellarg($url), escapeshellarg($installDir))); - } - - system(sprintf('cd %s && git fetch -q origin && git reset --hard %s', escapeshellarg($installDir), escapeshellarg($rev))); -}