diff --git a/phpdraft b/phpdraft index 658e869f..16be3800 100755 --- a/phpdraft +++ b/phpdraft @@ -19,6 +19,7 @@ use PHPDraft\Parse\ParserFactory; use PHPDraft\Parse\ResourceException; define('VERSION', '0'); +#define('ID_STATIC', 'SOME_ID'); try { // Define the cli options. diff --git a/src/PHPDraft/Model/Category.php b/src/PHPDraft/Model/Category.php index 65d221fa..7ac6155e 100644 --- a/src/PHPDraft/Model/Category.php +++ b/src/PHPDraft/Model/Category.php @@ -11,6 +11,7 @@ namespace PHPDraft\Model; +use PHPDraft\Model\Elements\BasicStructureElement; use PHPDraft\Model\Elements\ObjectStructureElement; use stdClass; @@ -54,7 +55,7 @@ public function parse(stdClass $object) break; case 'dataStructure': $deps = []; - $struct = new ObjectStructureElement(); + $struct = BasicStructureElement::get_class($item->content); $struct->deps = $deps; $struct->parse($item->content, $deps); diff --git a/src/PHPDraft/Model/Elements/ArrayStructureElement.php b/src/PHPDraft/Model/Elements/ArrayStructureElement.php index 7863456c..f2746c36 100644 --- a/src/PHPDraft/Model/Elements/ArrayStructureElement.php +++ b/src/PHPDraft/Model/Elements/ArrayStructureElement.php @@ -30,13 +30,13 @@ public function parse(?object $object, array &$dependencies): StructureElement $this->parse_common($object, $dependencies); - if (!isset($object->content->value->content)) { + if (!isset($object->content)) { $this->value = []; return $this; } - foreach ($object->content->value->content as $sub_item) { + foreach ($object->content as $sub_item) { if (!in_array($sub_item->element, self::DEFAULTS)) { $dependencies[] = $sub_item->element; } @@ -58,28 +58,22 @@ public function parse(?object $object, array &$dependencies): StructureElement */ public function __toString(): string { - $return = '
$key
" : '' . $key . '';
+ $type = $this->get_element_as_html($item[$value]);
$value = empty($value) ? '' : " - $value";
$return .= '' . $element . '
';
+ }
+
+ $link_name = str_replace(' ', '-', strtolower($element));
+ return '' . $element . '';
+ }
+
/**
* Get a string representation of the value.
*
@@ -155,12 +172,12 @@ public function description_as_html(): void
public function string_value($flat = FALSE)
{
if (is_array($this->value)) {
- $key = rand(0, count($this->value));
- if (is_subclass_of($this->value[$key], StructureElement::class) && $flat === FALSE) {
- return $this->value[$key]->string_value($flat);
+ $value_key = rand(0, count($this->value));
+ if (is_subclass_of($this->value[$value_key], StructureElement::class) && $flat === FALSE) {
+ return $this->value[$value_key]->string_value($flat);
}
- return $this->value[$key];
+ return $this->value[$value_key];
}
if (is_subclass_of($this->value, BasicStructureElement::class) && $flat === TRUE) {
@@ -168,4 +185,29 @@ public function string_value($flat = FALSE)
}
return $this->value;
}
+
+ /**
+ * Get what element to parse with.
+ *
+ * @param object $object The object to parse.
+ *
+ * @return BasicStructureElement The element to parse to
+ */
+ public static function get_class(object $object): BasicStructureElement
+ {
+ switch ($object->element) {
+ default:
+ case 'object':
+ $struct = new ObjectStructureElement();
+ break;
+ case 'array':
+ $struct = new ArrayStructureElement();
+ break;
+ case 'enum':
+ $struct = new EnumStructureElement();
+ break;
+ }
+
+ return $struct;
+ }
}
diff --git a/src/PHPDraft/Model/Elements/EnumStructureElement.php b/src/PHPDraft/Model/Elements/EnumStructureElement.php
index 18417dd1..8625af1a 100644
--- a/src/PHPDraft/Model/Elements/EnumStructureElement.php
+++ b/src/PHPDraft/Model/Elements/EnumStructureElement.php
@@ -23,21 +23,40 @@ class EnumStructureElement extends BasicStructureElement
*/
public function parse(?object $object, array &$dependencies): StructureElement
{
- $this->element = (isset($object->element)) ? $object->element : 'enum';
+ $this->element = $object->element;
$this->parse_common($object, $dependencies);
- $this->key = $this->key ?? $object->content ?? 'UNKNOWN';
- $this->type = $this->type ?? $object->element;
+ $this->key = $this->key ?? $object->content->content ?? NULL;
+ $this->type = $this->type ?? $object->content->element ?? NULL;
- if (!isset($object->content->value->content)) {
+ if (!isset($object->content) && !isset($object->attributes)) {
$this->value = $this->key;
return $this;
}
- $enumerations = $object->content->value->attributes->enumerations->content ?? $object->content->value->content;
- foreach ($enumerations as $sub_item) {
+ if (isset($object->attributes->default)) {
+ if (!in_array($object->attributes->default->content->element ?? '', self::DEFAULTS)) {
+ $dependencies[] = $object->attributes->default->content->element;
+ }
+ $this->value = $object->attributes->default->content->content;
+ $this->deps = $dependencies;
+
+ return $this;
+ }
+
+ if (isset($object->content)) {
+ if (!in_array($object->content->element, self::DEFAULTS)) {
+ $dependencies[] = $object->content->element;
+ }
+ $this->value = $object->content->content;
+ $this->deps = $dependencies;
+
+ return $this;
+ }
+
+ foreach ($object->attributes->enumerations->content as $sub_item) {
if (!in_array($sub_item->element, self::DEFAULTS)) {
$dependencies[] = $sub_item->element;
}
@@ -57,36 +76,21 @@ public function parse(?object $object, array &$dependencies): StructureElement
*/
public function __toString(): string
{
- $return = '' . $type . '
$key
" : '' . $key . '';
+ $type = $type = $this->get_element_as_html($key);
$item = empty($value) ? '' : " - $value";
$return .= 'Inherits from ' . $this->ref . '
' . $this->description; + return 'Inherits from ' . $this->ref . '
'; } if ($this->value === null && $this->key === null && $this->description !== null) { - return "' . $this->type . '
';
- }
+
+ $type = $this->get_element_as_html($this->type);
$variable = '';
if ($this->is_variable) {
$variable = '';
diff --git a/src/PHPDraft/Model/Elements/Tests/ArrayStructureElementTest.php b/src/PHPDraft/Model/Elements/Tests/ArrayStructureElementTest.php
index 8eb668e8..f0fc8447 100644
--- a/src/PHPDraft/Model/Elements/Tests/ArrayStructureElementTest.php
+++ b/src/PHPDraft/Model/Elements/Tests/ArrayStructureElementTest.php
@@ -57,90 +57,74 @@ public function parseObjectProvider(): array
{
$return = [];
$base1 = new ArrayStructureElement();
- $base1->key = 'greet_list';
- $base1->value = [['' => 'string']];
- $base1->status = 'required';
- $base1->element = 'member';
- $base1->type = 'array';
+ $base1->key = NULL;
+ $base1->value = [['Swift' => 'string'], ['Objective-C' => 'string']];
+ $base1->status = NULL;
+ $base1->element = 'array';
+ $base1->type = NULL;
$base1->is_variable = false;
$base1->description = "\n";
$base1->deps = [];
$base2 = new ArrayStructureElement();
- $base2->key = 'car_id_list';
- $base2->value = [['Truck' => 'Car identifier']];
- $base2->status = 'optional';
- $base2->element = 'member';
- $base2->type = 'array';
+ $base2->key = NULL;
+ $base2->value = [['item' => 'string'], ['another item' => 'string']];
+ $base2->status = NULL;
+ $base2->element = 'array';
+ $base2->type = 'Some simple array';
$base2->is_variable = false;
- $base2->description = "List of car identifiers to retrieve
\n"; - $base2->deps = ['Car identifier']; + $base2->description = "\n"; + $base2->deps = ['Some simple array']; $base3 = new ArrayStructureElement(); $base3->key = 'car_id_list'; - $base3->value = []; + $base3->value = [['car_id_list' => 'string'], ['' => 'array']]; $base3->status = 'optional'; $base3->element = 'member'; $base3->type = 'array'; $base3->is_variable = false; $base3->description = "List of car identifiers to retrieve
\n"; - $base3->deps = null; + $base3->deps = []; $return['generic value type'] = [ '{ - "element": "member", - "attributes": { - "typeAttributes": [ - "required" - ] + "element": "array", + "content": [ + { + "element": "string", + "content": "Swift" }, - "content": { - "key": { - "element": "string", - "content": "greet_list" - }, - "value": { - "element": "array", - "content": [ - { - "element": "string" - } - ] - } + { + "element": "string", + "content": "Objective-C" } + ] }', $base1, ]; $return['custom value type'] = [ '{ - "element": "member", - "meta": { - "description": "List of car identifiers to retrieve" - }, - "attributes": { - "typeAttributes": [ - "optional" - ] + "element": "array", + "meta": { + "id": { + "element": "string", + "content": "Some simple array" + } + }, + "content": [ + { + "element": "string", + "content": "item" }, - "content": { - "key": { - "element": "string", - "content": "car_id_list" - }, - "value": { - "element": "array", - "content": [ - { - "element": "Car identifier", - "content": "Truck" - } - ] - } + { + "element": "string", + "content": "another item" } + ] }', $base2, ]; - $return[] = [ + $return['other'] = [ '{ "element": "member", "meta": { @@ -178,15 +162,6 @@ public function testNewInstance(): void $this->assertInstanceOf(ArrayStructureElement::class, $return); } - /** - * Test setup of new instances - */ - public function testToString(): void - { - $return = $this->class->__toString(); - $this->assertSame('[ ]', $return); - } - /** * Test setup of new instances */ @@ -194,17 +169,7 @@ public function testToStringWithArray(): void { $this->class->value = [['string' => 'stuff'], ['int' => 'class']]; $return = $this->class->__toString(); - $this->assertSame('', $return); - } - - /** - * Test setup of new instances - */ - public function testToStringWithString(): void - { - $this->class->value = 'hello'; - $return = $this->class->__toString(); - $this->assertSame('[ ]', $return); + $this->assertSame('', $return); } /** @@ -214,6 +179,6 @@ public function testToStringWithComplexArray(): void { $this->class->value = [['type'=>'Bike'], ['stuff'=>'car']]; $return = $this->class->__toString(); - $this->assertSame('', $return); + $this->assertSame('', $return); } } diff --git a/src/PHPDraft/Model/Elements/Tests/EnumStructureElementTest.php b/src/PHPDraft/Model/Elements/Tests/EnumStructureElementTest.php index 8defa0bd..385420f9 100644 --- a/src/PHPDraft/Model/Elements/Tests/EnumStructureElementTest.php +++ b/src/PHPDraft/Model/Elements/Tests/EnumStructureElementTest.php @@ -49,15 +49,6 @@ public function testNewInstance(): void $this->assertInstanceOf(EnumStructureElement::class, $return); } - /** - * Test setup of new instances - */ - public function testToString(): void - { - $return = $this->class->__toString(); - $this->assertSame('//list of options', $return); - } - /** * Test setup of new instances */ @@ -65,7 +56,7 @@ public function testToStringWithArray(): void { $this->class->value = ['hello' => 'string', 'test' => 'int']; $return = $this->class->__toString(); - $this->assertSame('string
- hellostring
- helloCar
List of car identifiers to retrieve
\n"; - $base2->deps = ['Car identifier']; + $base2->value = 'world'; + $base2->status = NULL; + $base2->element = 'enum'; + $base2->type = 'string'; + $base2->description = "\n"; + $base2->is_variable = false; + $base2->deps = []; $base3 = new EnumStructureElement(); - $base3->key = 'car_id_list'; - $base3->value = 'car_id_list'; + $base3->key = '5'; + $base3->value = '5'; $base3->status = 'optional'; $base3->element = 'member'; - $base3->type = 'array'; + $base3->type = 'number'; $base3->description = "List of car identifiers to retrieve
\n"; - $base3->deps = null; + $base3->is_variable = false; + $base3->deps = []; - $return[] = [ + $return['base enum'] = [ '{ - "element": "member", - "attributes": { - "typeAttributes": [ - "required" - ] + "element":"enum", + "meta":{ + "id":{ + "element":"string", + "content":"Some simple enum" + } }, - "content": { - "key": { - "element": "string", - "content": "greet_list" - }, - "value": { - "element": "array", - "content": [ + "attributes":{ + "enumerations":{ + "element":"array", + "content":[ + { + "element":"string", + "attributes":{ + "typeAttributes":{ + "element":"array", + "content":[ + { + "element":"string", + "content":"fixed" + } + ] + } + }, + "content":"item" + }, { - "element": "hello", - "content": "world" + "element":"string", + "attributes":{ + "typeAttributes":{ + "element":"array","content":[ + { + "element":"string", + "content":"fixed" + } + ] + } + }, + "content":"another item" } ] } @@ -180,36 +196,43 @@ public function parseObjectProvider(): array }', $base1, ]; - $return[] = [ + $return['enum with default'] = [ '{ - "element": "member", - "meta": { - "description": "List of car identifiers to retrieve" - }, - "attributes": { - "typeAttributes": [ - "optional" - ] + "element": "enum", + "attributes": { + "default": { + "element": "enum", + "content": { + "element": "string", + "content": "world" + } }, - "content": { - "key": { - "element": "string", - "content": "car_id_list" + "enumerations": { + "element": "array", + "content": [ + { + "element": "string", + "content": "hello" }, - "value": { - "element": "array", - "content": [ - { - "element": "Car identifier", - "content": "world" - } - ] + { + "element": "string", + "content": "world" + }, + { + "element": "string", + "content": "tests" } + ] } + }, + "content": { + "element": "string", + "content": "car_id_list" + } }', $base2, ]; - $return[] = [ + $return['basic enum'] = [ '{ "element": "member", "meta": { @@ -221,13 +244,8 @@ public function parseObjectProvider(): array ] }, "content": { - "key": { - "element": "string", - "content": "car_id_list" - }, - "value": { - "element": "array" - } + "element": "number", + "content": "5" } }', $base3, diff --git a/src/PHPDraft/Model/Elements/Tests/ObjectStructureElementTest.php b/src/PHPDraft/Model/Elements/Tests/ObjectStructureElementTest.php index bad06c5d..19e9487f 100644 --- a/src/PHPDraft/Model/Elements/Tests/ObjectStructureElementTest.php +++ b/src/PHPDraft/Model/Elements/Tests/ObjectStructureElementTest.php @@ -210,7 +210,7 @@ public function testEmptyParse(): void public function testArrayContentEnumContentParse(): void { $deps = []; - $object = '{"element":"enum","content": [{"content":{"key":{"content":"key"},"value":{"element":"value"}}}]}'; + $object = '{"element":"hrefVariables","content":[{"element":"member","meta":{"description":{"element":"string","content":"Info on things"},"title":{"element":"string","content":"string"}},"attributes":{"typeAttributes":{"element":"array","content":[{"element":"string","content":"required"}]}},"content":{"key":{"element":"string","content":"things"},"value":{"element":"string","content":"1"}}},{"element":"member","meta":{"description":{"element":"string","content":"The id of the Post.\nSome additional info\n"},"title":{"element":"string","content":"string"}},"attributes":{"typeAttributes":{"element":"array","content":[{"element":"string","content":"optional"}]}},"content":{"key":{"element":"string","content":"post_id"},"value":{"element":"string","attributes":{"default":{"element":"string","content":"0"}},"content":"1"}}},{"element":"member","meta":{"description":{"element":"string","content":"Some stuff info\nSome additional info\n"},"title":{"element":"string","content":"string"}},"attributes":{"typeAttributes":{"element":"array","content":[{"element":"string","content":"optional"}]}},"content":{"key":{"element":"string","content":"stuff"},"value":{"element":"enum","attributes":{"default":{"element":"enum","content":{"element":"string","content":"world"}},"enumerations":{"element":"array","content":[{"element":"string","content":"hello"},{"element":"string","content":"world"},{"element":"string","content":"tests"}]}},"content":{"element":"string","content":"hello"}}}}]}'; $return = $this->class->parse(json_decode($object), $deps); $this->assertInstanceOf(ObjectStructureElement::class, $return); @@ -253,7 +253,7 @@ public function testValueStructureEnumContentParse(): void public function testValueStructureArrayContentParse(): void { $deps = []; - $object = '{"element":"enum","content": {"key":{"content":"key"},"value":{"element":"array"}}}'; + $object = '{"element":"array","content": {"element":"array","value": {"element": "array"}}}'; $return = $this->class->parse(json_decode($object), $deps); $this->assertInstanceOf(ObjectStructureElement::class, $return); @@ -266,7 +266,7 @@ public function testValueStructureArrayContentParse(): void public function testValueStructureObjectContentParse(): void { $deps = []; - $object = '{"element":"enum","content": {"key":{"content":"key"},"value":{"element":"object"}}}'; + $object = '{"element":"object","content": {"key":{"content":"key"},"value":{"element":"object"}}}'; $return = $this->class->parse(json_decode($object), $deps); $this->assertInstanceOf(ObjectStructureElement::class, $return); @@ -279,7 +279,7 @@ public function testValueStructureObjectContentParse(): void public function testValueStructureObjectContentParseContent(): void { $deps = []; - $object = '{"element":"enum","content": {"key":{"content":"key"},"value":{"element":"object", "content":{}}}}'; + $object = '{"element":"object","content": {"value":{"element":"object", "content":{}}}}'; $return = $this->class->parse(json_decode($object), $deps); $this->assertInstanceOf(ObjectStructureElement::class, $return); @@ -304,9 +304,12 @@ public function testToStringArray(): void $return = $this->class->__toString(); $this->assertSame('things |
array
array
enum
enum
= $key; ?>: = $value; ?>
"> - + js as $js): ?> diff --git a/src/PHPDraft/Out/HTML/material.phtml b/src/PHPDraft/Out/HTML/material.phtml index ce06b329..664f53ad 100644 --- a/src/PHPDraft/Out/HTML/material.phtml +++ b/src/PHPDraft/Out/HTML/material.phtml @@ -35,7 +35,7 @@ use Enjoy\HttpStatusCode\Statuscodes;grant_type | string | The type of oAuth grant. Always "password" +
|