private function expand($name, $val, CaseSensor $sensor, callable $fn) { return array_reduce(array_keys($this->fields), function (array &$tmp, $k) use($name, $val, $sensor, $fn) { $n = $name !== '' ? $sensor->convert($name, $k) : $k; return $tmp + [$k => $fn($this->fields[$k], $name, $val->{$k})]; }, []); }
private function convertResultBuiltin($results, AbstractPlatform $platform, CaseSensor $sensor) { return array_reduce(array_keys($results), function (array &$tmp, $k) use($results, $platform, $sensor) { $n = $sensor->convert($k); return $tmp + [$n => $this->child->convertResults($results[$k], $platform, $sensor)]; }, []); }
private function resolveName(array $availables, $baseName, array $subNames, CaseSensor $sensor) { foreach ($subNames as $name) { $n = $sensor->convert($baseName, $name); if (isset($availables[$n])) { return $n; } } return false; }
private function parseReturning(AbstractCommandAnnotation $annotation = null) { if ($annotation === null || ($names = $annotation->returning) == null) { return []; } if (is_int(key($names))) { throw new \LogicException('Type name is not specified. (returning={<name>"="<type>", ...})'); } $types = ['int' => \PDO::PARAM_INT, 'string' => \PDO::PARAM_STR]; $defaultLen = ['int' => strlen((string) PHP_INT_MAX) + 1, 'string' => 1024]; $pattern = '/^(?<type>.+?)(\\((?<length>\\d+)\\))?$/'; return array_reduce(array_keys($names), function (array &$tmp, $name) use($names, $pattern, $types, $defaultLen) { $type = $names[$name]; if (preg_match_all($pattern, $type, $m) !== false) { return $tmp + [$this->paramCaseSensor->convert($name) => ['typeName' => $m['type'][0], 'type' => $types[$m['type'][0]], 'length' => $m['length'][0] !== '' ? (int) $m['length'][0] : $defaultLen[$m['type'][0]]]]; } else { return $tmp; } }, []); }
/** * @test */ public function test_convert_from_camel() { fromLowerCamel: $cs = CaseSensor::LowerSnake(); $this->assertEquals('foo_bar_baz', $cs->convert('fooBarBaz')); $cs = CaseSensor::UpperSnake(); $this->assertEquals('FOO_BAR_BAZ', $cs->convert('fooBarBaz')); $cs = CaseSensor::LowerCamel(); $this->assertEquals('fooBarBaz', $cs->convert('fooBarBaz')); $cs = CaseSensor::UpperCamel(); $this->assertEquals('FooBarBaz', $cs->convert('fooBarBaz')); fromUpperCamel: $cs = CaseSensor::LowerSnake(); $this->assertEquals('foo_bar_baz', $cs->convert('FooBarBaz')); $cs = CaseSensor::UpperSnake(); $this->assertEquals('FOO_BAR_BAZ', $cs->convert('FooBarBaz')); $cs = CaseSensor::LowerCamel(); $this->assertEquals('fooBarBaz', $cs->convert('FooBarBaz')); $cs = CaseSensor::UpperCamel(); $this->assertEquals('FooBarBaz', $cs->convert('FooBarBaz')); }
/** * @test */ public function test_build_prepare_with_returning_case_sensitive() { $context = new DaoBuilderContext(new Configuration(function ($conf) { $conf->connectionString = 'sqlite:///:memory:'; })); $builder = new DaoBuilder(new \ReflectionClass(TodoDao2::class), $context->getDaoClassName(TodoDao2::class)); $factory = new DomainFactory(); lowerSnake: $builder->prepare(); $methods = $builder->getMethods(); $info = $methods['findByIdReturningEditor']; $this->assertArrayHasKey('returnDomain', $info); $this->assertInstanceOf(Domain\ObjectDomain::class, $info['returnDomain']); $children = $info['returnDomain']->getChildren(); $this->assertArrayHasKey('id', $children); $this->assertInstanceOf(Domain\NamedAliasDomain::class, $children['id']); $this->assertEquals('id', $children['id']->getName()); $this->assertEquals(['todo_id'], $children['id']->getAlias()); $this->assertArrayHasKey('creator', $children); $this->assertInstanceOf(Domain\NamedAliasDomain::class, $children['creator']); $this->assertEquals('creator', $children['creator']->getName()); $this->assertEquals(['creator_id'], $children['creator']->getAlias()); $this->assertEquals(['creator_name'], $children['creator']->getOptFields()); upperSnake: $builder->setReturnCaseSensor(CaseSensor::UpperSnake()); $builder->prepare(); $methods = $builder->getMethods(); $info = $methods['findByIdReturningEditor']; $this->assertArrayHasKey('returnDomain', $info); $this->assertInstanceOf(Domain\ObjectDomain::class, $info['returnDomain']); $children = $info['returnDomain']->getChildren(); $this->assertArrayHasKey('id', $children); $this->assertInstanceOf(Domain\NamedAliasDomain::class, $children['id']); $this->assertEquals('ID', $children['id']->getName()); $this->assertEquals(['TODO_ID'], $children['id']->getAlias()); $this->assertArrayHasKey('creator', $children); $this->assertInstanceOf(Domain\NamedAliasDomain::class, $children['creator']); $this->assertEquals('CREATOR', $children['creator']->getName()); $this->assertEquals(['CREATOR_ID'], $children['creator']->getAlias()); $this->assertEquals(['CREATOR_NAME'], $children['creator']->getOptFields()); lowerCamel: $builder->setReturnCaseSensor(CaseSensor::LowerCamel()); $builder->prepare(); $methods = $builder->getMethods(); $info = $methods['findByIdReturningEditor']; $this->assertArrayHasKey('returnDomain', $info); $this->assertInstanceOf(Domain\ObjectDomain::class, $info['returnDomain']); $children = $info['returnDomain']->getChildren(); $this->assertArrayHasKey('id', $children); $this->assertInstanceOf(Domain\NamedAliasDomain::class, $children['id']); $this->assertEquals('id', $children['id']->getName()); $this->assertEquals(['todoId'], $children['id']->getAlias()); $this->assertArrayHasKey('creator', $children); $this->assertInstanceOf(Domain\NamedAliasDomain::class, $children['creator']); $this->assertEquals('creator', $children['creator']->getName()); $this->assertEquals(['creatorId'], $children['creator']->getAlias()); $this->assertEquals(['creatorName'], $children['creator']->getOptFields()); upperCamel: $builder->setReturnCaseSensor(CaseSensor::UpperCamel()); $builder->prepare(); $methods = $builder->getMethods(); $info = $methods['findByIdReturningEditor']; $this->assertArrayHasKey('returnDomain', $info); $this->assertInstanceOf(Domain\ObjectDomain::class, $info['returnDomain']); $children = $info['returnDomain']->getChildren(); $this->assertArrayHasKey('id', $children); $this->assertInstanceOf(Domain\NamedAliasDomain::class, $children['id']); $this->assertEquals('Id', $children['id']->getName()); $this->assertEquals(['TodoId'], $children['id']->getAlias()); $this->assertArrayHasKey('creator', $children); $this->assertInstanceOf(Domain\NamedAliasDomain::class, $children['creator']); $this->assertEquals('Creator', $children['creator']->getName()); $this->assertEquals(['CreatorId'], $children['creator']->getAlias()); $this->assertEquals(['CreatorName'], $children['creator']->getOptFields()); }
/** * @test */ public function test_built_complex_domain() { $factory = new DomainFactory(); $defs = new Domain\ComplexDomain(['obj' => $factory->parse('', '\\Omelet\\Tests\\Target\\Todo', CaseSensor::LowerSnake()), 'hoge' => $factory->parse('', 'int', CaseSensor::LowerSnake())]); $children = $defs->getChildren(); $this->assertCount(2, $children); $this->assertInstanceOf(Domain\ObjectDomain::class, $children['obj']); $this->assertInstanceOf(Domain\BuiltinDomain::class, $children['hoge']); $values = ['obj' => Todo::__set_state(['id' => 1024, 'todo' => 'test', 'created' => new \DateTime('2015/5/18 12:7:09'), 'hidden' => new Hidden(true)]), 'hoge' => 4096]; $this->assertEquals(['obj_id' => Type::getType(Type::INTEGER), 'obj_todo' => Type::getType(Type::STRING), 'obj_created' => Type::getType(Type::DATETIME), 'obj_hidden' => Type::getType(Type::BOOLEAN), 'obj_creator' => Type::getType(Type::STRING), 'hoge' => Type::getType(Type::INTEGER)], $defs->expandTypes(['obj_id', 'obj_todo', 'obj_created', 'obj_hidden', 'obj_creator', 'hoge'], '', $values, CaseSensor::LowerSnake())); $this->assertEquals(['obj_id' => 1024, 'obj_todo' => 'test', 'obj_created' => new \DateTime('2015/5/18 12:7:09'), 'obj_hidden' => true, 'obj_creator' => null, 'hoge' => 4096], $defs->expandValues(['obj_id', 'obj_todo', 'obj_created', 'obj_hidden', 'obj_creator', 'hoge'], '', $values, CaseSensor::LowerSnake())); }
protected function expandValuesInternal(array $availableParams, $name, $val, CaseSensor $sensor) { return [$sensor->convert($name) => $val]; }
private function convertNames(array $fields, CaseSensor $sensor) { return array_map(function ($f) use($sensor) { return $sensor->convert($f); }, $fields); }