Skip to content

Commit

Permalink
Fix naming & using it in property generator
Browse files Browse the repository at this point in the history
  • Loading branch information
Korbeil committed Dec 7, 2019
1 parent ca8efe5 commit 3348cf5
Show file tree
Hide file tree
Showing 34 changed files with 526 additions and 550 deletions.
2 changes: 1 addition & 1 deletion src/JsonSchema/Generator/Model/PropertyGenerator.php
Expand Up @@ -27,7 +27,7 @@ abstract protected function getParser();

protected function createProperty(Property $property, $namespace, $default = null, bool $required = false): Stmt
{
$propertyName = $property->getPhpName();
$propertyName = $this->getNaming()->getPropertyName($property->getPhpName());
$propertyStmt = new Stmt\PropertyProperty($propertyName);

if (null === $default) {
Expand Down
66 changes: 21 additions & 45 deletions src/JsonSchema/Generator/Naming.php
Expand Up @@ -29,54 +29,23 @@ class Naming
)\b
/ix';

/**
* Get a property name.
*
* @param $name
*
* @return string
*/
public function getPropertyName($name)
public function getPropertyName(string $name): string
{
$name = $this->replaceDollar($name);
$name = $this->cleaning($name);

return Inflector::camelize($name);
return $name;
}

/**
* Get a method name given a prefix.
*
* @param $prefix
* @param $name
*
* @return string
*/
public function getPrefixedMethodName($prefix, $name)
public function getPrefixedMethodName(string $prefix, string $name): string
{
$name = $this->replaceDollar($name);
$name = $this->cleaning($name);

return sprintf('%s%s', $prefix, Inflector::classify($name));
}

/**
* Get a class name.
*
* @param $name
*
* @return string
*/
public function getClassName($name)
public function getClassName(string $name): string
{
$name = $this->replaceDollar($name);
$name = preg_replace_callback('#[/\{\}]+(\w)#', function ($matches) {
return ucfirst($matches[1]);
}, $name);

// Doctrine Inflector does not seem to handle some characters (like dots) well.
// So replace invalid char by an underscore to allow Doctrine to uppercase word correctly.
$name = trim(preg_replace('/[^a-z0-9 ]+/iu', '_', $name));

$name = Inflector::classify($name);
$name = $this->cleaning($name, true);

if (preg_match(self::BAD_CLASS_NAME_REGEX, $name)) {
$name = '_' . $name;
Expand All @@ -85,19 +54,26 @@ public function getClassName($name)
return $name;
}

/**
* @param $name
*
* @return mixed
*/
protected function replaceDollar($name)
protected function cleaning(string $name, bool $class = false): string
{
if (preg_match('/\$/', $name)) {
$name = preg_replace_callback('/\$([a-z])/', function ($matches) {
return 'dollar' . ucfirst($matches[1]);
}, $name);
}

return $name;
$name = preg_replace_callback('#[/\{\}]+(\w)#', function ($matches) {
return ucfirst($matches[1]);
}, $name);

// Doctrine Inflector does not seem to handle some characters (like dots, @, :) well.
// So replace invalid char by an underscore to allow Doctrine to uppercase word correctly.
$name = trim(preg_replace('/[^a-z0-9 ]+/iu', '_', $name));

if ($class) {
return Inflector::classify($name);
}

return Inflector::camelize($name);
}
}
Expand Up @@ -9,107 +9,107 @@ class BooksGetResponse200
*
* @var object[]
*/
protected $hydra:member;
protected $hydraMember;
/**
*
*
* @var int
*/
protected $hydra:totalItems;
protected $hydraTotalItems;
/**
*
*
* @var BooksGetResponse200HydraView
*/
protected $hydra:view;
protected $hydraView;
/**
*
*
* @var BooksGetResponse200HydraSearch
*/
protected $hydra:search;
protected $hydraSearch;
/**
*
*
* @return object[]
*/
public function getHydra:member() : array
public function getHydraMember() : array
{
return $this->hydra:member;
return $this->hydraMember;
}
/**
*
*
* @param object[] $hydra:member
* @param object[] $hydraMember
*
* @return self
*/
public function setHydra:member(array $hydra:member) : self
public function setHydraMember(array $hydraMember) : self
{
$this->hydra:member = $hydra:member;
$this->hydraMember = $hydraMember;
return $this;
}
/**
*
*
* @return int
*/
public function getHydra:totalItems() : int
public function getHydraTotalItems() : int
{
return $this->hydra:totalItems;
return $this->hydraTotalItems;
}
/**
*
*
* @param int $hydra:totalItems
* @param int $hydraTotalItems
*
* @return self
*/
public function setHydra:totalItems(int $hydra:totalItems) : self
public function setHydraTotalItems(int $hydraTotalItems) : self
{
$this->hydra:totalItems = $hydra:totalItems;
$this->hydraTotalItems = $hydraTotalItems;
return $this;
}
/**
*
*
* @return BooksGetResponse200HydraView
*/
public function getHydra:view() : BooksGetResponse200HydraView
public function getHydraView() : BooksGetResponse200HydraView
{
return $this->hydra:view;
return $this->hydraView;
}
/**
*
*
* @param BooksGetResponse200HydraView $hydra:view
* @param BooksGetResponse200HydraView $hydraView
*
* @return self
*/
public function setHydra:view(BooksGetResponse200HydraView $hydra:view) : self
public function setHydraView(BooksGetResponse200HydraView $hydraView) : self
{
$this->hydra:view = $hydra:view;
$this->hydraView = $hydraView;
return $this;
}
/**
*
*
* @return BooksGetResponse200HydraSearch
*/
public function getHydra:search() : BooksGetResponse200HydraSearch
public function getHydraSearch() : BooksGetResponse200HydraSearch
{
return $this->hydra:search;
return $this->hydraSearch;
}
/**
*
*
* @param BooksGetResponse200HydraSearch $hydra:search
* @param BooksGetResponse200HydraSearch $hydraSearch
*
* @return self
*/
public function setHydra:search(BooksGetResponse200HydraSearch $hydra:search) : self
public function setHydraSearch(BooksGetResponse200HydraSearch $hydraSearch) : self
{
$this->hydra:search = $hydra:search;
$this->hydraSearch = $hydraSearch;
return $this;
}
}
Expand Up @@ -9,107 +9,107 @@ class BooksGetResponse200HydraSearch
*
* @var string
*/
protected $@type;
protected $type;
/**
*
*
* @var string
*/
protected $hydra:template;
protected $hydraTemplate;
/**
*
*
* @var string
*/
protected $hydra:variableRepresentation;
protected $hydraVariableRepresentation;
/**
*
*
* @var BooksGetResponse200HydraSearchHydraMappingItem[]
*/
protected $hydra:mapping;
protected $hydraMapping;
/**
*
*
* @return string
*/
public function get@type() : string
public function getType() : string
{
return $this->@type;
return $this->type;
}
/**
*
*
* @param string $@type
* @param string $type
*
* @return self
*/
public function set@type(string $@type) : self
public function setType(string $type) : self
{
$this->@type = $@type;
$this->type = $type;
return $this;
}
/**
*
*
* @return string
*/
public function getHydra:template() : string
public function getHydraTemplate() : string
{
return $this->hydra:template;
return $this->hydraTemplate;
}
/**
*
*
* @param string $hydra:template
* @param string $hydraTemplate
*
* @return self
*/
public function setHydra:template(string $hydra:template) : self
public function setHydraTemplate(string $hydraTemplate) : self
{
$this->hydra:template = $hydra:template;
$this->hydraTemplate = $hydraTemplate;
return $this;
}
/**
*
*
* @return string
*/
public function getHydra:variableRepresentation() : string
public function getHydraVariableRepresentation() : string
{
return $this->hydra:variableRepresentation;
return $this->hydraVariableRepresentation;
}
/**
*
*
* @param string $hydra:variableRepresentation
* @param string $hydraVariableRepresentation
*
* @return self
*/
public function setHydra:variableRepresentation(string $hydra:variableRepresentation) : self
public function setHydraVariableRepresentation(string $hydraVariableRepresentation) : self
{
$this->hydra:variableRepresentation = $hydra:variableRepresentation;
$this->hydraVariableRepresentation = $hydraVariableRepresentation;
return $this;
}
/**
*
*
* @return BooksGetResponse200HydraSearchHydraMappingItem[]
*/
public function getHydra:mapping() : array
public function getHydraMapping() : array
{
return $this->hydra:mapping;
return $this->hydraMapping;
}
/**
*
*
* @param BooksGetResponse200HydraSearchHydraMappingItem[] $hydra:mapping
* @param BooksGetResponse200HydraSearchHydraMappingItem[] $hydraMapping
*
* @return self
*/
public function setHydra:mapping(array $hydra:mapping) : self
public function setHydraMapping(array $hydraMapping) : self
{
$this->hydra:mapping = $hydra:mapping;
$this->hydraMapping = $hydraMapping;
return $this;
}
}

0 comments on commit 3348cf5

Please sign in to comment.