/** * @param array $array * @param \Closure|string $callback * @return Source */ public static function build(array $array, $callback) : Source { $source = new Source(); $source->setParts($array); if (is_string($callback)) { $source->setDataProviderClassName($callback); } else { $source->setCallback($callback); } return $source; }
public static function matches(Source $source, array $request) { $definition = $source->getParts(); if (count($definition) != count($request)) { return false; } foreach ($definition as $key => $definitionOfPart) { $part = $request[$key]; if (!self::partMatches('' . $definitionOfPart, !is_array($part) ? [$part] : $part)) { return false; } } return true; }
public function testRegexNotValid() { /* Given */ $source = Source::build(['tracks', '/[0-9]+/'], function () { }); /* When */ $result = RouteMatcher::matches($source, ['tracks', 'length']); /* Then */ assertThat($result, is(false)); }
public function testClassInitializer() { /* Given */ $dug = new Dug(); $classInitializer = new ClassInitializerSpy(); $dug->setClassInitializer($classInitializer); $source = Source::build(['users', '/[0-9]+/'], UserProvider::class); $dug->register($source); /* When */ $dug->fetch(['users', 1]); /* Then */ assertThat($classInitializer->initializedClass, is(UserProvider::class)); }
public function testMultipleReferencesShouldCallOnce() { /* Given */ $dug = \Mockery::mock(Dug::class); $source = Source::build(['users', '/[0-9]+/'], function () { }); $dug->shouldReceive('sourceForPath')->once()->andReturn($source); $user1 = Data::build(['users', 1], ['id' => 1, 'name' => 'Joris']); $user2 = Data::build(['users', 2], ['id' => 2, 'name' => 'Jisca']); $dug->shouldReceive('data')->once()->andReturn([$user1, $user2]); $input = [Data::build(['foo', 1], ['user' => new Reference(['users', 1])]), Data::build(['foo', 2], ['user' => new Reference(['users', 2])])]; /* When */ $referenceResolver = new ReferenceResolver($dug); $result = $referenceResolver->process($input); /* Then */ assertThat(count($result), is(2)); assertThat($result[0]->getValue()['user'], is([$user1])); assertThat($result[1]->getValue()['user'], is([$user2])); }
public function testInjectCallbackClass() { /* Given */ $dug = new Dug(); $source = Source::build(['users', '/[0-9]+/'], UserProvider::class); $dug->register($source); /* When */ $result = $dug->fetch(['users', 1]); /* Then */ assertThat($result[0]['source'], 'UserProvider'); }