Skip to content

Instantly share code, notes, and snippets.

@nucleartux
Created August 13, 2013 07:55
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nucleartux/6218835 to your computer and use it in GitHub Desktop.
Save nucleartux/6218835 to your computer and use it in GitHub Desktop.
<?php
foreach (glob('choicer-api/features/*.feature') as $featurePath) {
preg_match('#^choicer-api/features/(\w+).feature$#', $featurePath, $matches);
$name = $matches[1];
$contents = parseFeature($featurePath);
file_put_contents("oumobile-choicer-backend.wiki/$name.md", $contents);
}
function parseFeature($path) {
$lines = file($path, FILE_SKIP_EMPTY_LINES);
$realResponse = '';
$inScenario = 0;
$inRequest = 0;
$inResponse = 0;
$comment = '';
$request = '';
$response = '';
foreach($lines as $line)
{
if($line[0] == '#') {
$comment = trim(substr($line, 1));
continue;
}
if(strpos($line, 'Scenario:') === 0) {
$inScenario = 1;
continue;
}
if($inScenario && strpos($line, 'When I send') !== false) {
$inRequest = 1;
continue;
}
if($inRequest == 1) {
$inRequest++;
continue;
}
if($inRequest == 2 && strpos($line, '"""') !== false) {
$inRequest = 0;
continue;
}
if($inScenario && strpos($line, 'Then response should contain json') !== false) {
$inResponse = 1;
continue;
}
if($inScenario && strpos($line, 'Then response should contain dynamic json') !== false) {
$inResponse = 1;
continue;
}
if($inResponse == 1) {
$inResponse++;
continue;
}
if($inResponse == 2 && strpos($line, '"""') !== false) {
if($comment && $request && $response) {
$realResponse .= '## '.$comment.PHP_EOL.PHP_EOL;
$realResponse .= '### Запрос:'.PHP_EOL;
$realResponse .= '```'.PHP_EOL;
$realResponse .= $request.PHP_EOL;
$realResponse .= '```'.PHP_EOL.PHP_EOL;
$realResponse .= '### Ответ:'.PHP_EOL;
$realResponse .= '```'.PHP_EOL;
$realResponse .= $response.PHP_EOL;
$realResponse .= '```'.PHP_EOL.PHP_EOL;
}
$inScenario = 0;
$inRequest = 0;
$inResponse = 0;
$request = '';
$response = '';
$comment = '';
continue;
}
if($inRequest == 2) {
$request .= $line;
}
if($inResponse == 2) {
$response .= $line;
}
}
return $realResponse;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment