Example #1
0
 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})];
     }, []);
 }
Example #2
0
 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)];
     }, []);
 }
Example #3
0
 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;
 }
Example #4
0
 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;
         }
     }, []);
 }
Example #5
0
 /**
  * @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'));
 }
Example #6
0
 /**
  * @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());
 }
Example #7
0
 /**
  * @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()));
 }
Example #8
0
 protected function expandValuesInternal(array $availableParams, $name, $val, CaseSensor $sensor)
 {
     return [$sensor->convert($name) => $val];
 }
Example #9
0
 private function convertNames(array $fields, CaseSensor $sensor)
 {
     return array_map(function ($f) use($sensor) {
         return $sensor->convert($f);
     }, $fields);
 }