作者:webmozar
项目:expressio
public function testDomainExpressions()
{
$c1 = new Customer();
$c1->setPremium(true);
$c2 = new Customer();
$c2->setBookings(array('booking1', 'booking2'));
$c3 = new Customer();
$c3->setPremium(true);
$c3->setBookings(array('booking1'));
$customers = array($c1, $c2, $c3);
$this->assertEquals(array($c1, 2 => $c3), Expr::filter($customers, new IsPremium()));
$this->assertEquals(array(1 => $c2, 2 => $c3), Expr::filter($customers, new HasPreviousBookings()));
$this->assertEquals(array(2 => $c3), Expr::filter($customers, Expr::andX(array(new HasPreviousBookings(), new IsPremium()))));
}
作者:webmozar
项目:discover
public function testRemoveBindingsWithTypeAndParameterWorksOnLoadedDiscovery()
{
$binding1 = new StringBinding('string1', Foo::clazz, array('param2' => 'bar'));
$binding2 = new StringBinding('string2', Foo::clazz);
$binding3 = new StringBinding('string3', Foo::clazz, array('param1' => 'bar'));
$discovery = $this->createDiscovery();
$discovery->addBindingType(new BindingType(Foo::clazz, self::STRING_BINDING, array(new BindingParameter('param1', BindingParameter::OPTIONAL, 'foo'), new BindingParameter('param2'))));
$discovery->addBinding($binding1);
$discovery->addBinding($binding2);
$discovery->addBinding($binding3);
$discovery = $this->loadDiscoveryFromStorage($discovery);
// Bindings need to be initialized for this to work
$discovery->removeBindings(Foo::clazz, Expr::method('getParameterValue', 'param1', Expr::same('foo')));
$this->assertEquals(array($binding3), $discovery->findBindings(Foo::clazz));
$this->assertEquals(array($binding3), $discovery->getBindings());
}
作者:SenseExceptio
项目:cl
/**
* Handles the "puli type --list" command.
*
* @param Args $args The console arguments.
* @param IO $io The I/O.
*
* @return int The status code.
*/
public function handleList(Args $args, IO $io)
{
$packageNames = ArgsUtil::getPackageNames($args, $this->packages);
$states = $this->getBindingTypeStates($args);
$printStates = count($states) > 1;
$printPackageName = count($packageNames) > 1;
$printHeaders = $printStates || $printPackageName;
$printTypeAdvice = true;
$printBindAdvice = false;
$indentation = $printStates && $printPackageName ? 8 : ($printStates || $printPackageName ? 4 : 0);
foreach ($states as $state) {
$statePrinted = !$printStates;
foreach ($packageNames as $packageName) {
$expr = Expr::method('getContainingPackage', Expr::method('getName', Expr::same($packageName)))->andMethod('getState', Expr::same($state));
$bindingTypes = $this->discoveryManager->findTypeDescriptors($expr);
if (!$bindingTypes) {
continue;
}
$printTypeAdvice = false;
if (!$statePrinted) {
$this->printBindingTypeState($io, $state);
$statePrinted = true;
// Only print the advice if at least one type was printed
$printBindAdvice = true;
}
if ($printPackageName) {
$prefix = $printStates ? ' ' : '';
$io->writeLine("{$prefix}Package: {$packageName}");
$io->writeLine('');
}
$styleTag = BindingTypeState::ENABLED === $state ? null : 'bad';
$this->printTypeTable($io, $bindingTypes, $styleTag, $indentation);
if ($printHeaders) {
$io->writeLine('');
}
}
}
if ($printTypeAdvice) {
$io->writeLine('No types defined. Use "puli type --define <name>" to define a type.');
}
if ($printBindAdvice) {
$io->writeLine('Use "puli bind <resource> <type>" to bind a resource to a type.');
}
return 0;
}
作者:kormi
项目:manage
/**
* {@inheritdoc}
*/
public function clearPluginClasses()
{
$this->removePluginClasses(Expr::true());
}
作者:niklongston
项目:manage
public function testAppendDefaultQuerySuffixForEndsWith()
{
$expr1 = Expr::endsWith('.css', AssetMapping::GLOB);
$expr2 = Expr::same(BindingState::ENABLED, BindingDescriptor::STATE)->andSame(DiscoveryUrlGenerator::BINDING_TYPE, BindingDescriptor::TYPE_NAME)->andEndsWith('{,/**/*}', BindingDescriptor::QUERY)->andEndsWith('.css{,/**/*}', BindingDescriptor::QUERY);
$this->assertEquals($expr2, $this->builder->buildExpression($expr1));
}
作者:niklongston
项目:manage
public function testHasBindings()
{
$this->initDefaultManager();
$this->rootPackageFile->addTypeDescriptor(new BindingTypeDescriptor('my/type1'));
$this->rootPackageFile->addBindingDescriptor($binding1 = new BindingDescriptor('/path1', 'my/type1'));
$this->packageFile1->addBindingDescriptor($binding2 = new BindingDescriptor('/path2', 'my/type2'));
$expr1 = Expr::same('vendor/package1', BindingDescriptor::CONTAINING_PACKAGE);
$expr2 = Expr::same(BindingState::ENABLED, BindingDescriptor::STATE);
$expr3 = $expr1->andX($expr2);
$this->assertTrue($this->manager->hasBindings());
$this->assertTrue($this->manager->hasBindings($expr1));
$this->assertTrue($this->manager->hasBindings($expr2));
$this->assertFalse($this->manager->hasBindings($expr3));
}
作者:holloway8
项目:cl
/**
* Finds the resources for a given binding type.
*
* @param string $typeName The type name.
*
* @return string[] An array of short resource class names indexed by
* the resource path.
*/
private function findByBindingType($typeName)
{
$matches = array();
$expr = Expr::isInstanceOf('Puli\\Discovery\\Binding\\ResourceBinding');
foreach ($this->discovery->findBindings($typeName, $expr) as $binding) {
/** @var ResourceBinding $binding */
foreach ($binding->getResources() as $resource) {
$matches[$resource->getPath()] = StringUtil::getShortClassName(get_class($resource));
}
}
ksort($matches);
return $matches;
}
作者:niklongston
项目:manage
/**
* {@inheritdoc}
*/
public function hasRootPathMappings(Expression $expr = null)
{
$expr2 = Expr::same($this->rootPackage->getName(), PathMapping::CONTAINING_PACKAGE);
if ($expr) {
$expr2 = $expr2->andX($expr);
}
return $this->hasPathMappings($expr2);
}
作者:niklongston
项目:manage
/**
* {@inheritdoc}
*/
public function clearServers()
{
$this->removeServers(Expr::true());
}
作者:xabbu
项目:manage
/**
* Returns the resource discovery manager.
*
* @return DiscoveryManager The discovery manager.
*/
public function getDiscoveryManager()
{
if (!$this->started) {
throw new LogicException('Puli was not started');
}
if (!$this->discoveryManager && $this->context instanceof ProjectContext) {
$this->discoveryManager = new DiscoveryManagerImpl($this->context, $this->getDiscovery(), $this->getPackageManager()->findPackages(Expr::method('isEnabled', Expr::same(true))), $this->getPackageFileStorage(), $this->logger);
}
return $this->discoveryManager;
}
作者:niklongston
项目:manage
public function testRemoveConfigKeysRevertsIfSavingNotPossible()
{
$this->configFile->getConfig()->set(Config::PULI_DIR, 'my-puli-dir');
$this->configFileStorage->expects($this->once())->method('saveConfigFile')->willThrowException(new TestException());
try {
$this->manager->removeConfigKeys(Expr::in(array(Config::PULI_DIR, Config::FACTORY_IN_FILE)));
$this->fail('Expected a TestException');
} catch (TestException $e) {
}
$this->assertTrue($this->configFile->getConfig()->contains(Config::PULI_DIR));
$this->assertFalse($this->configFile->getConfig()->contains(Config::FACTORY_IN_FILE));
$this->assertSame('my-puli-dir', $this->configFile->getConfig()->get(Config::PULI_DIR));
}
作者:sensorari
项目:manage
/**
* {@inheritdoc}
*/
public function clearModules()
{
$this->removeModules(Expr::true());
}
作者:rejink
项目:cl
/**
* @param string $uuidPrefix
*
* @return AssetMapping
*/
private function getMappingByUuidPrefix($uuidPrefix)
{
$expr = Expr::startsWith($uuidPrefix, AssetMapping::UUID);
$mappings = $this->assetManager->findAssetMappings($expr);
if (!$mappings) {
throw new RuntimeException(sprintf('The mapping with the UUID prefix "%s" does not exist.', $uuidPrefix));
}
if (count($mappings) > 1) {
throw new RuntimeException(sprintf('More than one mapping matches the UUID prefix "%s".', $uuidPrefix));
}
return reset($mappings);
}
作者:SenseExceptio
项目:manage
/**
* {@inheritdoc}
*/
public function hasAssetMapping(Uuid $uuid)
{
$expr = Expr::method('getUuid', Expr::method('toString', Expr::same($uuid->toString())))->andX($this->exprBuilder->buildExpression());
return $this->discoveryManager->hasBindingDescriptors($expr);
}
作者:rejink
项目:cl
/**
* Returns the packages that should be displayed for the given console
* arguments.
*
* @param Args $args The console arguments.
*
* @return PackageCollection The packages.
*/
private function getSelectedPackages(Args $args)
{
$states = $this->getSelectedStates($args);
$expr = Expr::true();
if ($states != PackageState::all()) {
$expr = $expr->andIn($states, Package::STATE);
}
if ($args->isOptionSet('installer')) {
$expr = $expr->andSame($args->getOption('installer'), Package::INSTALLER);
}
return $this->packageManager->findPackages($expr);
}
作者:rejink
项目:cl
private function packageAndState($packageName, $state)
{
return Expr::same($packageName, BindingTypeDescriptor::CONTAINING_PACKAGE)->andSame($state, BindingTypeDescriptor::STATE);
}
作者:webmozar
项目:cl
/**
* Returns the packages that should be displayed for the given console
* arguments.
*
* @param Args $args The console arguments.
*
* @return PackageCollection The packages.
*/
private function getSelectedPackages(Args $args)
{
$states = $this->getSelectedStates($args);
$expr = Expr::true();
$envs = array();
if ($states !== PackageState::all()) {
$expr = $expr->andMethod('getState', Expr::in($states));
}
if ($args->isOptionSet('installer')) {
$expr = $expr->andMethod('getInstallInfo', Expr::method('getInstallerName', Expr::same($args->getOption('installer'))));
}
if ($args->isOptionSet('prod')) {
$envs[] = Environment::PROD;
}
if ($args->isOptionSet('dev')) {
$envs[] = Environment::DEV;
}
if (count($envs) > 0) {
$expr = $expr->andMethod('getInstallInfo', Expr::method('getEnvironment', Expr::in($envs)));
}
return $this->packageManager->findPackages($expr);
}
作者:rejink
项目:cl
private function installerAndState($installer, $state)
{
return Expr::same($installer, Package::INSTALLER)->andSame($state, Package::STATE);
}
作者:niklongston
项目:manage
public function testRemoveServersRevertsIfSavingFails()
{
$this->packageFileManager->expects($this->any())->method('getExtraKey')->with(PackageFileServerManager::SERVERS_KEY)->willReturn((object) array('localhost' => (object) array('installer' => 'symlink', 'document-root' => 'web', 'url-format' => '/public/%s'), 'cdn' => (object) array('installer' => 'rsync', 'document-root' => 'ssh://my.cdn.com', 'parameters' => (object) array('param' => 'value'))));
$this->packageFileManager->expects($this->once())->method('setExtraKey')->willThrowException(new TestException());
try {
$this->serverManager->removeServers(Expr::startsWith('localhost', Server::NAME));
$this->fail('Expected a TestException');
} catch (TestException $e) {
}
$this->assertTrue($this->serverManager->hasServer('localhost'));
$this->assertTrue($this->serverManager->hasServer('cdn'));
}
作者:niklongston
项目:manage
public function testMatch()
{
$type = new BindingTypeDescriptor('vendor/type');
$type->load($this->package);
$this->assertFalse($type->match(Expr::same('foobar', BindingTypeDescriptor::NAME)));
$this->assertTrue($type->match(Expr::same('vendor/type', BindingTypeDescriptor::NAME)));
$this->assertFalse($type->match(Expr::same('foobar', BindingTypeDescriptor::CONTAINING_PACKAGE)));
$this->assertTrue($type->match(Expr::same($this->package->getName(), BindingTypeDescriptor::CONTAINING_PACKAGE)));
$this->assertFalse($type->match(Expr::same(BindingTypeState::DUPLICATE, BindingTypeDescriptor::STATE)));
$this->assertTrue($type->match(Expr::same(BindingTypeState::ENABLED, BindingTypeDescriptor::STATE)));
}