Skip to content

Commit

Permalink
Allow to merge models
Browse files Browse the repository at this point in the history
  • Loading branch information
GuilhemN committed Jul 20, 2016
1 parent 7f90803 commit b633a2a
Show file tree
Hide file tree
Showing 19 changed files with 205 additions and 34 deletions.
12 changes: 12 additions & 0 deletions src/Contact.php
Expand Up @@ -2,6 +2,7 @@
namespace gossi\swagger;

use gossi\swagger\parts\ExtensionPart;
use gossi\swagger\util\MergeHelper;
use phootwork\collection\CollectionUtils;
use phootwork\lang\Arrayable;

Expand Down Expand Up @@ -33,6 +34,17 @@ private function parse($contents = []) {
$this->parseExtensions($data);
}

/**
* {@inheritdoc}
*/
public function merge(static $model, $overwrite = false) {
MergeHelper::mergeFields($this->name, $model->name, $overwrite);
MergeHelper::mergeFields($this->url, $model->url, $overwrite);
MergeHelper::mergeFields($this->email, $model->email, $overwrite);

$this->mergeExtensions($model, $overwrite);
}

public function toArray() {
return $this->export('name', 'url', 'email');
}
Expand Down
9 changes: 9 additions & 0 deletions src/ExternalDocs.php
Expand Up @@ -26,6 +26,15 @@ private function parse($contents = []) {
$this->parseExtensions($data);
}

/**
* {@inheritdoc}
*/
public function merge(static $model, $overwrite = false) {
$this->mergeDescription($model, $overwrite);
$this->mergeUrl($model, $overwrite);
$this->mergeExtensions($model, $overwrite);
}

public function toArray() {
return $this->export('description', 'url');
}
Expand Down
20 changes: 17 additions & 3 deletions src/Header.php
Expand Up @@ -19,9 +19,9 @@ class Header extends AbstractModel implements Arrayable {
/** @var string */
private $header;

public function __construct($header, $contents = null) {
public function __construct($header, $contents = []) {
$this->header = $header;
$this->parse($contents === null ? new Map() : $contents);
$this->parse($contents);
}

private function parse($contents = []) {
Expand All @@ -34,13 +34,27 @@ private function parse($contents = []) {
$this->parseExtensions($data);
}

/**
* {@inheritdoc}
*/
public function merge(static $model, $overwrite = false) {
if ($this->header !== $model->header) {
throw new \InvalidArgumentException(sprintf('You can\'t merge two different headers (provided "%s" and "%s").', $this->header, $model->header));
}

$this->mergeDescription($model, $overwrite);
$this->mergeType($model, $overwrite);
$this->mergeItems($model, $overwrite);
$this->mergeExtensions($model, $overwrite);
}

public function toArray() {
return $this->export('description', $this->getTypeExportFields(), 'items');
}

/**
* Returns the header
*
*
* @return string
*/
public function getHeader() {
Expand Down
5 changes: 5 additions & 0 deletions src/parts/ConsumesPart.php
@@ -1,6 +1,7 @@
<?php
namespace gossi\swagger\parts;

use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;
use phootwork\collection\Set;

Expand All @@ -12,6 +13,10 @@ private function parseConsumes(Map $data) {
$this->consumes = $data->get('consumes', new Set());
}

private function mergeConsumes(static $model, $overwrite = false) {
MergeHelper::mergeFields($this->consumes, $model->consumes, $overwrite);
}

/**
* Return consumes
*
Expand Down
13 changes: 9 additions & 4 deletions src/parts/DescriptionPart.php
@@ -1,28 +1,33 @@
<?php
namespace gossi\swagger\parts;

use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;

trait DescriptionPart {

/** @var string */
private $description = false;
/** @var string|null */
private $description;

private function parseDescription(Map $data) {
$this->description = $data->get('description');
}

private function mergeDescription(static $model, $overwrite = false) {
MergeHelper::mergeFields($this->description, $model->description, $overwrite);
}

/**
*
* @return string
* @return string|null
*/
public function getDescription() {
return $this->description;
}

/**
*
* @param string $description
* @param string|null $description
* @return $this
*/
public function setDescription($description) {
Expand Down
7 changes: 6 additions & 1 deletion src/parts/ExtensionPart.php
@@ -1,6 +1,7 @@
<?php
namespace gossi\swagger\parts;

use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;
use phootwork\lang\Text;

Expand All @@ -19,9 +20,13 @@ private function parseExtensions(Map $data) {
}
}

private function mergeExtensions(static $model, $overwrite = false) {
MergeHelper::mergeFields($this->extensions, $model->description, $overwrite);
}

/**
* Returns extensions
*
*
* @return Map
*/
public function getExtensions() {
Expand Down
8 changes: 6 additions & 2 deletions src/parts/ExternalDocsPart.php
Expand Up @@ -12,6 +12,10 @@ private function parseExternalDocs(Map $data) {
$this->externalDocs = new ExternalDocs($data->get('externalDocs', new Map()));
}

private function mergeExternalDocs(static $model, $overwrite = false) {
$this->externalDocs->merge($model->externalDocs, $overwrite);
}

/**
*
* @return ExternalDocs
Expand All @@ -22,8 +26,8 @@ public function getExternalDocs() {

/**
*
* @param ExternalDocs $externalDocs
* @return $this
* @param ExternalDocs $externalDocs
* @return $this
*/
public function setExternalDocs(ExternalDocs $externalDocs) {
$this->externalDocs = $externalDocs;
Expand Down
11 changes: 10 additions & 1 deletion src/parts/ItemsPart.php
Expand Up @@ -3,6 +3,7 @@
namespace gossi\swagger\parts;

use gossi\swagger\Items;
use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;

trait ItemsPart {
Expand All @@ -16,9 +17,17 @@ private function parseItems(Map $data) {
}
}

private function mergeItems(static $model, $overwrite = false) {
if (null === $this->items) {
$this->items = clone $model->items;
} elseif (null !== $model->items) {
$this->items->merge($model->items, $overwrite);
}
}

/**
* Returns the items
*
*
* @return Items
*/
public function getItems() {
Expand Down
5 changes: 5 additions & 0 deletions src/parts/ParametersPart.php
Expand Up @@ -2,6 +2,7 @@
namespace gossi\swagger\parts;

use gossi\swagger\collections\Parameters;
use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;

trait ParametersPart {
Expand All @@ -13,6 +14,10 @@ private function parseParameters(Map $data) {
$this->parameters = new Parameters($data->get('parameters', new Map()));
}

private function mergeParameters(static $model, $overwrite = false) {
$this->parameters->merge($model, $overwrite);
}

/**
* Return parameters
*
Expand Down
5 changes: 5 additions & 0 deletions src/parts/ProducesPart.php
@@ -1,6 +1,7 @@
<?php
namespace gossi\swagger\parts;

use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;
use phootwork\collection\Set;

Expand All @@ -12,6 +13,10 @@ private function parseProduces(Map $data) {
$this->produces = $data->get('produces', new Set());
}

private function mergeProduces(static $model, $overwrite = false) {
MergeHelper::mergeFields($this->produces, $model->produces, $overwrite);
}

/**
* Return produces
*
Expand Down
12 changes: 6 additions & 6 deletions src/parts/RefPart.php
@@ -1,19 +1,20 @@
<?php
namespace gossi\swagger\parts;

use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;

trait RefPart {

/** @var string */
private $ref;

/** @var bool */
private $hasRef = false;

private function parseRef(Map $data) {
$this->ref = $data->get('$ref');
$this->hasRef = $data->has('$ref');
}

private function mergeRef(static $model, $overwrite = false) {
MergeHelper::mergeFields($this->ref, $model->ref, $overwrite);
}

/**
Expand All @@ -31,12 +32,11 @@ public function getRef() {
*/
public function setRef($ref) {
$this->ref = $ref;
$this->hasRef = $ref !== null;
return $this;
}

public function hasRef() {
return $this->hasRef;
return null !== $this->ref;
}

}
13 changes: 9 additions & 4 deletions src/parts/RequiredPart.php
@@ -1,28 +1,33 @@
<?php
namespace gossi\swagger\parts;

use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;

trait RequiredPart {

/** @var bool */
private $required = false;
private $required;

private function parseRequired(Map $data) {
$this->required = $data->has('required') && $data->get('required');
$this->required = $data->get('required');
}

private function mergeRequired(static $model, $overwrite = false) {
MergeHelper::mergeFields($this->required, $model->required, $overwrite);
}

/**
*
* @return bool
*/
public function getRequired() {
return $this->required;
return null !== $this->required ? $this->required : false;
}

/**
*
* @param bool $required
* @param bool|null $required
* @return $this
*/
public function setRequired($required) {
Expand Down
5 changes: 5 additions & 0 deletions src/parts/ResponsesPart.php
Expand Up @@ -2,6 +2,7 @@
namespace gossi\swagger\parts;

use gossi\swagger\collections\Responses;
use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;

trait ResponsesPart {
Expand All @@ -13,6 +14,10 @@ private function parseResponses(Map $data) {
$this->responses = new Responses($data->get('responses', new Map()));
}

private function mergeResponses(static $model, $overwrite = false) {
$this->responses->merge($model->responses, $overwrite);
}

/**
* Return responses
*
Expand Down
5 changes: 5 additions & 0 deletions src/parts/SchemaPart.php
Expand Up @@ -2,6 +2,7 @@
namespace gossi\swagger\parts;

use gossi\swagger\Schema;
use gossi\swagger\util\MergeHelper;
use phootwork\collection\Map;

trait SchemaPart {
Expand All @@ -13,6 +14,10 @@ private function parseSchema(Map $data) {
$this->schema = new Schema($data->get('schema'));
}

private function mergeSchema(static $model, $overwrite = false) {
$this->schema->merge($model->schema, $overwrite);
}

/**
*
* @return Schema
Expand Down
5 changes: 5 additions & 0 deletions src/parts/SchemesPart.php
@@ -1,6 +1,7 @@
<?php
namespace gossi\swagger\parts;

use gossi\swagger\util\MergeHelper;
use phootwork\collection\ArrayList;
use phootwork\collection\Map;

Expand All @@ -12,6 +13,10 @@ private function parseSchemes(Map $data) {
$this->schemes = $data->get('schemes', new ArrayList());
}

private function mergeSchemes(static $model, $overwrite = false) {
$this->schemes->addAll($model->schemes);
}

/**
* Return schemes
*
Expand Down

0 comments on commit b633a2a

Please sign in to comment.