Skip to content

Commit

Permalink
Enable multiple requests and responses per transition
Browse files Browse the repository at this point in the history
  • Loading branch information
Sean Molenaar authored and Sean Molenaar committed Oct 28, 2016
1 parent ce65846 commit 6a14200
Show file tree
Hide file tree
Showing 7 changed files with 170 additions and 86 deletions.
12 changes: 7 additions & 5 deletions index.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,22 @@
define('VERSION', '0');
$values = UI::main($argv);

$apib = new ApibFileParser($values['file']);
$json = new Drafter($apib);
$html = new JsonToHTML($json->parseToJson());
$apib = new ApibFileParser($values['file']);
$json = new Drafter($apib);
$html = new JsonToHTML($json->parseToJson());
$html->sorting = $values['sorting'];
$html->get_html($values['template'], $values['image'], $values['css'], $values['js']);


function phpdraft_var_dump($var)
function phpdraft_var_dump(...$vars)
{
if (defined('__PHPDRAFT_PHAR__')) {
return;
}
echo '<pre>';
var_dump($var);
foreach ($vars as $var) {
var_dump($var);
}
echo '</pre>';
}

Expand Down
22 changes: 22 additions & 0 deletions src/PHPDraft/Model/Comparable.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<?php
/**
* Created by PhpStorm.
* User: smillernl
* Date: 28-10-16
* Time: 17:23
*/

namespace PHPDraft\Model;


interface Comparable
{
/**
* Check if item is the same as other item
*
* @param self $b Object to compare to
*
* @return bool
*/
public function is_equal_to($b);
}
13 changes: 12 additions & 1 deletion src/PHPDraft/Model/HTTPRequest.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

use PHPDraft\Model\Elements\RequestBodyElement;

class HTTPRequest
class HTTPRequest implements Comparable
{
/**
* HTTP Headers
Expand Down Expand Up @@ -146,4 +146,15 @@ public function get_curl_command($base_url, $additional = [])
}


/**
* Check if item is the same as other item
*
* @param self $b Object to compare to
*
* @return bool
*/
public function is_equal_to($b)
{
return (($this->method === $b->method) && ($this->body === $b->body) && ($this->headers === $b->headers));
}
}
14 changes: 13 additions & 1 deletion src/PHPDraft/Model/HTTPResponse.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

use PHPDraft\Model\Elements\DataStructureElement;

class HTTPResponse
class HTTPResponse implements Comparable
{
/**
* HTTP Status code
Expand Down Expand Up @@ -127,4 +127,16 @@ protected function parse_structure($objects)
$this->structure[] = $struct;
}
}

/**
* Check if item is the same as other item
*
* @param self $b Object to compare to
*
* @return bool
*/
public function is_equal_to($b)
{
return (($this->statuscode === $b->statuscode) && ($this->headers === $b->headers) && ($this->content === $b->content));
}
}
62 changes: 47 additions & 15 deletions src/PHPDraft/Model/Transition.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,16 +43,16 @@ class Transition extends HierarchyElement
/**
* The request
*
* @var HTTPRequest
* @var HTTPRequest[]
*/
public $request;
public $requests = [];

/**
* The responses
*
* @var HTTPResponse[]
*/
public $responses;
public $responses = [];

/**
* Structures used (if any)
Expand Down Expand Up @@ -97,14 +97,38 @@ function parse($object)
$this->data_variables = $struct->parse($object->attributes->data, $deps);
}

if (isset($object->content[0]->content)) {
foreach ($object->content[0]->content as $item) {
if ($item->element === 'httpRequest') {
$this->request = new HTTPRequest($this);
$this->request->parse($item);
} elseif ($item->element === 'httpResponse') {
$response = new HTTPResponse($this);
$this->responses[] = $response->parse($item);
if (!is_array($object->content)) {
return $this;
}
foreach ($object->content as $transition_item) {
if (!isset($transition_item->content)) {
continue;
}
foreach ($transition_item->content as $item) {
$value = null;
switch ($item->element) {
case 'httpRequest':
$value = new HTTPRequest($this);
$list = &$this->requests;
break;
case 'httpResponse':
$value = new HTTPResponse($this);
$list = &$this->responses;
break;
default:
continue;
}
$value->parse($item);

if (empty($list)) {
$list[] = $value;
continue;
}
foreach ($list as $existing_value) {
phpdraft_var_dump($value->is_equal_to($existing_value));
if (!$value->is_equal_to($existing_value)) {
$list[] = $value;
}
}
}
}
Expand Down Expand Up @@ -203,11 +227,13 @@ private function find_overlap($str1, $str2)
/**
* Get the HTTP method of the child request
*
* @param int $request Request to get the method for
*
* @return string HTTP Method
*/
public function get_method()
public function get_method($request = 0)
{
return (isset($this->request->method)) ? $this->request->method : 'NONE';
return (isset($this->requests[$request]->method)) ? $this->requests[$request]->method : 'NONE';
}

/**
Expand All @@ -217,11 +243,17 @@ public function get_method()
*
* @param array $additional additional arguments to pass
*
* @param int $key number of the request to generate for
*
* @return string A cURL CLI command
*/
public function get_curl_command($base_url, $additional = [])
public function get_curl_command($base_url, $additional = [], $key = 0)
{
return $this->request->get_curl_command($base_url, $additional);
if (!isset($this->requests[$key])) {
return '';
}

return $this->requests[$key]->get_curl_command($base_url, $additional);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -151,68 +151,73 @@ class="btn btn-default curl"
<span class="glyphicon glyphicon-copy"></span>
</a>
<p class="lead"><?= $transition->description; ?></p>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="request panel-title"
data-toggle="collapse"
data-target="#request-coll-<?= $transition->get_href(); ?>">Request
<span class="glyphicon indicator glyphicon-menu-down pull-right"></span>
</h4>
</div>
<?php if (isset($transition->request)): ?>
<div class="collapse in request-panel panel-body"
id="request-coll-<?= $transition->get_href(); ?>">
<?php if ($transition->url_variables !== []): ?>
<h5>Example URI</h5>
<span class="base-url"><?= $this->base_data['HOST']; ?></span>
<em><?= $transition->build_url(); ?></em>
<?php endif; ?>
<?php if ($transition->request->headers !== []): ?>
<h5>Headers</h5>
<ul class="headers list-unstyled">
<?php foreach ($transition->request->headers as $name => $value): ?>
<li>
<code><span class="attr"><?= $name; ?></span>: <span
class="value"><?= $value; ?></span>
</code>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<?php if (!empty($transition->request->body)): ?>
<h5>Body</h5>
<?php foreach ($transition->request->body as $value): ?>
<?php if (is_string($value)): ?>
<code class="request-body"><?= $value; ?></code>
<?php else: ?>
<?php $type =
(isset($transition->request->headers['Content-Type'])) ? $transition->request->headers['Content-Type'] : null; ?>
<?= $value->print_request($type); ?>
<?= $value ?>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php if (!empty($transition->request->struct)): ?>
<h5>Structure</h5>
<div class="row">
<?= $transition->request->struct ?>
<?php if (!empty($transition->requests)): ?>
<?php foreach ($transition->requests as $request): ?>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="request panel-title"
data-toggle="collapse"
data-target="#request-coll-<?= $transition->get_href(); ?>">Request
<span
class="glyphicon indicator glyphicon-menu-down pull-right"></span>
</h4>
</div>
<?php endif; ?>
<?php endif; ?>

<?php if ($transition->url_variables !== null): ?>
<h5>URI Parameters</h5>
<div class="row">
<?= $transition->url_variables; ?>
</div>
<?php endif; ?>
<div class="collapse in request-panel panel-body"
id="request-coll-<?= $transition->get_href(); ?>">
<?php if ($transition->url_variables !== []): ?>
<h5>Example URI</h5>
<span class="base-url"><?= $this->base_data['HOST']; ?></span>
<em><?= $transition->build_url(); ?></em>
<?php endif; ?>
<?php if ($request->headers !== []): ?>
<h5>Headers</h5>
<ul class="headers list-unstyled">
<?php foreach ($request->headers as $name => $value): ?>
<li>
<code><span class="attr"><?= $name; ?></span>: <span
class="value"><?= $value; ?></span>
</code>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
<?php if (!empty($request->body)): ?>
<h5>Body</h5>
<?php foreach ($request->body as $value): ?>
<?php if (is_string($value)): ?>
<code class="request-body"><?= $value; ?></code>
<?php else: ?>
<?php $type =
(isset($request->headers['Content-Type'])) ? $request->headers['Content-Type'] : null; ?>
<?= $value->print_request($type); ?>
<?= $value ?>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php if (!empty($request->struct)): ?>

<?php if ($transition->data_variables !== null): ?>
<h5>Data object</h5>
<?= $transition->data_variables ?>
<?php endif; ?>
</div>
</div>
<h5>Structure</h5>
<div class="row">
<?= $request->struct ?>
</div>
<?php endif; ?>

<?php if ($transition->url_variables !== null): ?>
<h5>URI Parameters</h5>
<div class="row">
<?= $transition->url_variables; ?>
</div>
<?php endif; ?>

<?php if ($transition->data_variables !== null): ?>
<h5>Data object</h5>
<?= $transition->data_variables ?>
<?php endif; ?>
</div>
</div>
<?php endforeach; ?>
<?php endif; ?>
<?php if (isset($transition->responses)): ?>
<?php foreach ($transition->responses as $response): ?>
<div class="panel panel-default">
Expand Down
10 changes: 5 additions & 5 deletions src/PHPDraft/Out/TemplateGenerator.php
Original file line number Diff line number Diff line change
Expand Up @@ -85,16 +85,16 @@ public function __construct($template, $image)
public function get($object)
{
$include = null;
if (stream_resolve_include_path($this->template . DIRECTORY_SEPARATOR . $this->template . '.php')) {
$include = $this->template . DIRECTORY_SEPARATOR . $this->template . '.php';
if (stream_resolve_include_path($this->template . DIRECTORY_SEPARATOR . $this->template . '.phtml')) {
$include = $this->template . DIRECTORY_SEPARATOR . $this->template . '.phtml';
}

if (stream_resolve_include_path($this->template . '.php')) {
if (stream_resolve_include_path($this->template . '.phtml')) {
$include = $this->template . '.php';
}

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

0 comments on commit 6a14200

Please sign in to comment.