Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow to merge models #6

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
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