Skip to content

Commit 6a14200

Browse files
Sean MolenaarSean Molenaar
Sean Molenaar
authored and
Sean Molenaar
committed
Enable multiple requests and responses per transition
1 parent ce65846 commit 6a14200

File tree

7 files changed

+170
-86
lines changed

7 files changed

+170
-86
lines changed

index.php

+7-5
Original file line numberDiff line numberDiff line change
@@ -16,20 +16,22 @@
1616
define('VERSION', '0');
1717
$values = UI::main($argv);
1818

19-
$apib = new ApibFileParser($values['file']);
20-
$json = new Drafter($apib);
21-
$html = new JsonToHTML($json->parseToJson());
19+
$apib = new ApibFileParser($values['file']);
20+
$json = new Drafter($apib);
21+
$html = new JsonToHTML($json->parseToJson());
2222
$html->sorting = $values['sorting'];
2323
$html->get_html($values['template'], $values['image'], $values['css'], $values['js']);
2424

2525

26-
function phpdraft_var_dump($var)
26+
function phpdraft_var_dump(...$vars)
2727
{
2828
if (defined('__PHPDRAFT_PHAR__')) {
2929
return;
3030
}
3131
echo '<pre>';
32-
var_dump($var);
32+
foreach ($vars as $var) {
33+
var_dump($var);
34+
}
3335
echo '</pre>';
3436
}
3537

src/PHPDraft/Model/Comparable.php

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: smillernl
5+
* Date: 28-10-16
6+
* Time: 17:23
7+
*/
8+
9+
namespace PHPDraft\Model;
10+
11+
12+
interface Comparable
13+
{
14+
/**
15+
* Check if item is the same as other item
16+
*
17+
* @param self $b Object to compare to
18+
*
19+
* @return bool
20+
*/
21+
public function is_equal_to($b);
22+
}

src/PHPDraft/Model/HTTPRequest.php

+12-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
use PHPDraft\Model\Elements\RequestBodyElement;
1212

13-
class HTTPRequest
13+
class HTTPRequest implements Comparable
1414
{
1515
/**
1616
* HTTP Headers
@@ -146,4 +146,15 @@ public function get_curl_command($base_url, $additional = [])
146146
}
147147

148148

149+
/**
150+
* Check if item is the same as other item
151+
*
152+
* @param self $b Object to compare to
153+
*
154+
* @return bool
155+
*/
156+
public function is_equal_to($b)
157+
{
158+
return (($this->method === $b->method) && ($this->body === $b->body) && ($this->headers === $b->headers));
159+
}
149160
}

src/PHPDraft/Model/HTTPResponse.php

+13-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010

1111
use PHPDraft\Model\Elements\DataStructureElement;
1212

13-
class HTTPResponse
13+
class HTTPResponse implements Comparable
1414
{
1515
/**
1616
* HTTP Status code
@@ -127,4 +127,16 @@ protected function parse_structure($objects)
127127
$this->structure[] = $struct;
128128
}
129129
}
130+
131+
/**
132+
* Check if item is the same as other item
133+
*
134+
* @param self $b Object to compare to
135+
*
136+
* @return bool
137+
*/
138+
public function is_equal_to($b)
139+
{
140+
return (($this->statuscode === $b->statuscode) && ($this->headers === $b->headers) && ($this->content === $b->content));
141+
}
130142
}

src/PHPDraft/Model/Transition.php

+47-15
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ class Transition extends HierarchyElement
4343
/**
4444
* The request
4545
*
46-
* @var HTTPRequest
46+
* @var HTTPRequest[]
4747
*/
48-
public $request;
48+
public $requests = [];
4949

5050
/**
5151
* The responses
5252
*
5353
* @var HTTPResponse[]
5454
*/
55-
public $responses;
55+
public $responses = [];
5656

5757
/**
5858
* Structures used (if any)
@@ -97,14 +97,38 @@ function parse($object)
9797
$this->data_variables = $struct->parse($object->attributes->data, $deps);
9898
}
9999

100-
if (isset($object->content[0]->content)) {
101-
foreach ($object->content[0]->content as $item) {
102-
if ($item->element === 'httpRequest') {
103-
$this->request = new HTTPRequest($this);
104-
$this->request->parse($item);
105-
} elseif ($item->element === 'httpResponse') {
106-
$response = new HTTPResponse($this);
107-
$this->responses[] = $response->parse($item);
100+
if (!is_array($object->content)) {
101+
return $this;
102+
}
103+
foreach ($object->content as $transition_item) {
104+
if (!isset($transition_item->content)) {
105+
continue;
106+
}
107+
foreach ($transition_item->content as $item) {
108+
$value = null;
109+
switch ($item->element) {
110+
case 'httpRequest':
111+
$value = new HTTPRequest($this);
112+
$list = &$this->requests;
113+
break;
114+
case 'httpResponse':
115+
$value = new HTTPResponse($this);
116+
$list = &$this->responses;
117+
break;
118+
default:
119+
continue;
120+
}
121+
$value->parse($item);
122+
123+
if (empty($list)) {
124+
$list[] = $value;
125+
continue;
126+
}
127+
foreach ($list as $existing_value) {
128+
phpdraft_var_dump($value->is_equal_to($existing_value));
129+
if (!$value->is_equal_to($existing_value)) {
130+
$list[] = $value;
131+
}
108132
}
109133
}
110134
}
@@ -203,11 +227,13 @@ private function find_overlap($str1, $str2)
203227
/**
204228
* Get the HTTP method of the child request
205229
*
230+
* @param int $request Request to get the method for
231+
*
206232
* @return string HTTP Method
207233
*/
208-
public function get_method()
234+
public function get_method($request = 0)
209235
{
210-
return (isset($this->request->method)) ? $this->request->method : 'NONE';
236+
return (isset($this->requests[$request]->method)) ? $this->requests[$request]->method : 'NONE';
211237
}
212238

213239
/**
@@ -217,11 +243,17 @@ public function get_method()
217243
*
218244
* @param array $additional additional arguments to pass
219245
*
246+
* @param int $key number of the request to generate for
247+
*
220248
* @return string A cURL CLI command
221249
*/
222-
public function get_curl_command($base_url, $additional = [])
250+
public function get_curl_command($base_url, $additional = [], $key = 0)
223251
{
224-
return $this->request->get_curl_command($base_url, $additional);
252+
if (!isset($this->requests[$key])) {
253+
return '';
254+
}
255+
256+
return $this->requests[$key]->get_curl_command($base_url, $additional);
225257
}
226258

227259
}

src/PHPDraft/Out/HTML/default.php src/PHPDraft/Out/HTML/default.phtml

+64-59
Original file line numberDiff line numberDiff line change
@@ -151,68 +151,73 @@ class="btn btn-default curl"
151151
<span class="glyphicon glyphicon-copy"></span>
152152
</a>
153153
<p class="lead"><?= $transition->description; ?></p>
154-
<div class="panel panel-default">
155-
<div class="panel-heading">
156-
<h4 class="request panel-title"
157-
data-toggle="collapse"
158-
data-target="#request-coll-<?= $transition->get_href(); ?>">Request
159-
<span class="glyphicon indicator glyphicon-menu-down pull-right"></span>
160-
</h4>
161-
</div>
162-
<?php if (isset($transition->request)): ?>
163-
<div class="collapse in request-panel panel-body"
164-
id="request-coll-<?= $transition->get_href(); ?>">
165-
<?php if ($transition->url_variables !== []): ?>
166-
<h5>Example URI</h5>
167-
<span class="base-url"><?= $this->base_data['HOST']; ?></span>
168-
<em><?= $transition->build_url(); ?></em>
169-
<?php endif; ?>
170-
<?php if ($transition->request->headers !== []): ?>
171-
<h5>Headers</h5>
172-
<ul class="headers list-unstyled">
173-
<?php foreach ($transition->request->headers as $name => $value): ?>
174-
<li>
175-
<code><span class="attr"><?= $name; ?></span>: <span
176-
class="value"><?= $value; ?></span>
177-
</code>
178-
</li>
179-
<?php endforeach; ?>
180-
</ul>
181-
<?php endif; ?>
182-
<?php if (!empty($transition->request->body)): ?>
183-
<h5>Body</h5>
184-
<?php foreach ($transition->request->body as $value): ?>
185-
<?php if (is_string($value)): ?>
186-
<code class="request-body"><?= $value; ?></code>
187-
<?php else: ?>
188-
<?php $type =
189-
(isset($transition->request->headers['Content-Type'])) ? $transition->request->headers['Content-Type'] : null; ?>
190-
<?= $value->print_request($type); ?>
191-
<?= $value ?>
192-
<?php endif; ?>
193-
<?php endforeach; ?>
194-
<?php endif; ?>
195-
<?php if (!empty($transition->request->struct)): ?>
196-
<h5>Structure</h5>
197-
<div class="row">
198-
<?= $transition->request->struct ?>
154+
<?php if (!empty($transition->requests)): ?>
155+
<?php foreach ($transition->requests as $request): ?>
156+
<div class="panel panel-default">
157+
<div class="panel-heading">
158+
<h4 class="request panel-title"
159+
data-toggle="collapse"
160+
data-target="#request-coll-<?= $transition->get_href(); ?>">Request
161+
<span
162+
class="glyphicon indicator glyphicon-menu-down pull-right"></span>
163+
</h4>
199164
</div>
200-
<?php endif; ?>
201-
<?php endif; ?>
202165

203-
<?php if ($transition->url_variables !== null): ?>
204-
<h5>URI Parameters</h5>
205-
<div class="row">
206-
<?= $transition->url_variables; ?>
207-
</div>
208-
<?php endif; ?>
166+
<div class="collapse in request-panel panel-body"
167+
id="request-coll-<?= $transition->get_href(); ?>">
168+
<?php if ($transition->url_variables !== []): ?>
169+
<h5>Example URI</h5>
170+
<span class="base-url"><?= $this->base_data['HOST']; ?></span>
171+
<em><?= $transition->build_url(); ?></em>
172+
<?php endif; ?>
173+
<?php if ($request->headers !== []): ?>
174+
<h5>Headers</h5>
175+
<ul class="headers list-unstyled">
176+
<?php foreach ($request->headers as $name => $value): ?>
177+
<li>
178+
<code><span class="attr"><?= $name; ?></span>: <span
179+
class="value"><?= $value; ?></span>
180+
</code>
181+
</li>
182+
<?php endforeach; ?>
183+
</ul>
184+
<?php endif; ?>
185+
<?php if (!empty($request->body)): ?>
186+
<h5>Body</h5>
187+
<?php foreach ($request->body as $value): ?>
188+
<?php if (is_string($value)): ?>
189+
<code class="request-body"><?= $value; ?></code>
190+
<?php else: ?>
191+
<?php $type =
192+
(isset($request->headers['Content-Type'])) ? $request->headers['Content-Type'] : null; ?>
193+
<?= $value->print_request($type); ?>
194+
<?= $value ?>
195+
<?php endif; ?>
196+
<?php endforeach; ?>
197+
<?php endif; ?>
198+
<?php if (!empty($request->struct)): ?>
209199

210-
<?php if ($transition->data_variables !== null): ?>
211-
<h5>Data object</h5>
212-
<?= $transition->data_variables ?>
213-
<?php endif; ?>
214-
</div>
215-
</div>
200+
<h5>Structure</h5>
201+
<div class="row">
202+
<?= $request->struct ?>
203+
</div>
204+
<?php endif; ?>
205+
206+
<?php if ($transition->url_variables !== null): ?>
207+
<h5>URI Parameters</h5>
208+
<div class="row">
209+
<?= $transition->url_variables; ?>
210+
</div>
211+
<?php endif; ?>
212+
213+
<?php if ($transition->data_variables !== null): ?>
214+
<h5>Data object</h5>
215+
<?= $transition->data_variables ?>
216+
<?php endif; ?>
217+
</div>
218+
</div>
219+
<?php endforeach; ?>
220+
<?php endif; ?>
216221
<?php if (isset($transition->responses)): ?>
217222
<?php foreach ($transition->responses as $response): ?>
218223
<div class="panel panel-default">

src/PHPDraft/Out/TemplateGenerator.php

+5-5
Original file line numberDiff line numberDiff line change
@@ -85,16 +85,16 @@ public function __construct($template, $image)
8585
public function get($object)
8686
{
8787
$include = null;
88-
if (stream_resolve_include_path($this->template . DIRECTORY_SEPARATOR . $this->template . '.php')) {
89-
$include = $this->template . DIRECTORY_SEPARATOR . $this->template . '.php';
88+
if (stream_resolve_include_path($this->template . DIRECTORY_SEPARATOR . $this->template . '.phtml')) {
89+
$include = $this->template . DIRECTORY_SEPARATOR . $this->template . '.phtml';
9090
}
9191

92-
if (stream_resolve_include_path($this->template . '.php')) {
92+
if (stream_resolve_include_path($this->template . '.phtml')) {
9393
$include = $this->template . '.php';
9494
}
9595

96-
if (stream_resolve_include_path('PHPDraft/Out/HTML/' . $this->template . '.php')) {
97-
$include = 'PHPDraft/Out/HTML/' . $this->template . '.php';
96+
if (stream_resolve_include_path('PHPDraft/Out/HTML/' . $this->template . '.phtml')) {
97+
$include = 'PHPDraft/Out/HTML/' . $this->template . '.phtml';
9898
}
9999
if ($include === null) {
100100
file_put_contents('php://stderr', "Couldn't find template '$this->template'\n");

0 commit comments

Comments
 (0)