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)));
-}