Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
added a very rough web interface and pagoda deployment process
  • Loading branch information
Jason Fox committed Feb 28, 2013
1 parent b241ba5 commit 273c996
Show file tree
Hide file tree
Showing 11 changed files with 199 additions and 3 deletions.
18 changes: 18 additions & 0 deletions Boxfile
@@ -0,0 +1,18 @@
web1:
document_root: web
default_gateway: app.php
index_list: [app.php]
php_version: 5.3.8
php_extensions:
- apc
- intl
- mbstring
- xsl
- zip
php_short_open_tag: "0"
php_magic_quotes_gpc: "0"
php_register_globals: "0"
php_session_autostart: "0"

after_build:
- "bash after_build.sh"
17 changes: 17 additions & 0 deletions after_build.sh
@@ -0,0 +1,17 @@
#!/bin/bash
PHP=php

echo 'Download the composer.phar file, so the vendors can be installed from the distributed composer.json.'
if [ ! -f composer.phar ]
then
curl -s -O http://getcomposer.org/composer.phar
fi

echo 'Update composer.phar.'
$PHP composer.phar self-update --quiet

echo 'Install the needed vendors for this application.'
$PHP composer.phar install --quiet

echo 'Dump the optimized autoloader classmap for performance reasons.'
$PHP composer.phar dump-autoload --optimize
10 changes: 10 additions & 0 deletions tests/system/features/generator-form.feature
@@ -0,0 +1,10 @@
#generator-form.feature
Feature: There is a form that I can enter details about the feature
In order to enter dto parameters
As a user
I want to enter the details in a form

Scenario: I can see the form on the home page
Given I am on homepage
Then I should see "Build me a DTO named"
And I should see "in the Namespace"
43 changes: 41 additions & 2 deletions views/home.html.twig
@@ -1,11 +1,50 @@
{% extends 'default.html.twig' %}
{% block content %}
<header>
<div class="row">
<div class="span6">
<h1>DTOx</h1>
<p class="lead">DTOx is a program that lets you create DTOs.</p>
</div>
</div>
</header>

<div ng-controller="DTOCtrl">
<div class="row" >
<div class="span12">
<form class="form-inline">
Build me a DTO named:
<input type="text" name="dto-name-field" placeholder="MyDTO" ng-model="dto.name" ng-change="change()">
in the Namespace:
<input type="text" name="namespace-field" placeholder="My\App\Namespace" ng-model="dto.namespace" ng-change="change()">
</form>
</div>
</div>
<form class="vars form-inline">
<div ng-repeat="var in dto.vars">
{% verbatim %}
<input type="text" ng-change="change()" ng-pattern="/^[a-z][a-zA-Z0-9]*$/" ng-model="var.name" value="{{var.name}}"/>
<input type="text" class="input" ng-change="change()" ng-model="var.type" value="{{var.type}}"/>
=
<input type="text" class="input" ng-change="change()" ng-model="var.testData" value="{{var.testData}}"/>
{% endverbatim %}
</div>
</form>
<form class="vars form-inline" ng-submit="addVar()">
<input type="text" ng-pattern="/^[a-z][a-zA-Z0-9]*$/" ng-model="varName" placeholder="myVarName"/>
<input type="text" class="input" ng-model="varType" placeholder="type"/>
<input type="text" class="input" ng-model="varTestData" placeholder="test Value"/>
<input class="btn btn-primary" type="submit" value="add"/>
</form>
<div class="row">
<div class="span12">
<h2>{% verbatim %}{{dto.namespace}}\{{dto.name}}{% endverbatim %}</h2>
<textarea ui-codemirror ng-model="code.dto"></textarea>
</div>
</div>
<div class="row">
<div class="span12">
<h2>{% verbatim %}{{dto.namespace}}\{{dto.name}}Test{% endverbatim %}</h2>
<textarea ui-codemirror ng-model="code.test"></textarea>
</div>
</div>
</div>
{% endblock %}
34 changes: 33 additions & 1 deletion views/layouts/default.html.twig
@@ -1,7 +1,39 @@
<!doctype html>
<html ng-app="DTOx">
<head>
<title>DTOx</title>

<link rel="stylesheet" href="//codemirror.net/lib/codemirror.css">
<link rel="stylesheet" type="text/css" href="//angular-ui.github.com/angular-ui/build/angular-ui.css">
<link rel="stylesheet" type="text/css" href="/css/bootstrap.min.css">
<link rel="stylesheet" type="text/css" href="/css/app.css">








<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.min.js"></script>

<script src="//codemirror.net/lib/codemirror.js"></script>





<script src="//codemirror.net/addon/edit/matchbrackets.js"></script>
<script src="//codemirror.net/mode/htmlmixed/htmlmixed.js"></script>
<script src="//codemirror.net/mode/xml/xml.js"></script>
<script src="//codemirror.net/mode/javascript/javascript.js"></script>
<script src="//codemirror.net/mode/css/css.js"></script>
<script src="//codemirror.net/mode/clike/clike.js"></script>
<script src="//codemirror.net/mode/php/php.js"></script>
<script src="//angular-ui.github.com/angular-ui/build/angular-ui.js"></script>



<script src="/js/app.js"></script>
</head>
<body>
<div class="container">
Expand Down
6 changes: 6 additions & 0 deletions web/.htaccess
@@ -0,0 +1,6 @@
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} -s [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^.*$ - [NC,L]
RewriteRule ^.*$ app.php [NC,L]
22 changes: 22 additions & 0 deletions web/app.php
Expand Up @@ -7,6 +7,8 @@
* @author Jason Fox <jasonrobertfox@gmail.com>
*/

use Symfony\Component\HttpFoundation\Request;

require_once __DIR__.'/../vendor/autoload.php';

$app = new Silex\Application();
Expand All @@ -24,6 +26,26 @@ function () use ($app) {
return $app['twig']->render('home.html.twig');
}
);

$app->post(
'/dto/',
function (Request $request) use ($app) {
$dtoInfo = json_decode($request->getContent());

$variablesArray = array();
$testDataArray = array();
foreach ($dtoInfo->vars as $var) {
$variablesArray[$var->name] = $var->type;
$testDataArray[$var->name] = $var->testData;
}
$returnData = new \StdClass();
$generator = new DTOx\Generator\DTO($dtoInfo->name, $dtoInfo->namespace, $variablesArray);
$returnData->dto = $generator->generate();
$generator = new DTOx\TestGenerator\DTOUnit($dtoInfo->name, $dtoInfo->namespace, $testDataArray);
$returnData->test = $generator->generate();
return $app->json($returnData);
}
);
$app['debug'] = true;
$app['exception_handler']->disable();
$app->run();
1 change: 1 addition & 0 deletions web/css/angular-ui.min.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

12 changes: 12 additions & 0 deletions web/css/app.css
@@ -0,0 +1,12 @@
.CodeMirror {
border: 1px solid #eee;
height: auto;
}
.CodeMirror-scroll {
overflow-y: hidden;
overflow-x: auto;
}

.vars input[type=text] {
height: 28px;
}
7 changes: 7 additions & 0 deletions web/js/angular-ui.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 32 additions & 0 deletions web/js/app.js
@@ -0,0 +1,32 @@
var DTOx = angular.module('DTOx',['ui']);

DTOx.value('ui.config', {
codemirror: {
mode: 'text/x-php',
lineNumbers: true,
matchBrackets: true
}
});

function DTOCtrl($scope, $timeout, $http){
$scope.dto = {vars: []};

$scope.change = function() {
var prom = 0;
$timeout.cancel(prom);
prom = $timeout(function(){
$http.post('/dto/', angular.toJson($scope.dto)).success(function(data){
var returnData = angular.fromJson(data);
$scope.code = {dto: returnData.dto, test: returnData.test};
});
}, 1000);
};

$scope.addVar = function() {
$scope.dto.vars.push({name: $scope.varName, type: $scope.varType, testData: $scope.varTestData});
$scope.varName = '';
$scope.varType = '';
$scope.vatTestData = '';
$scope.change();
};
}

0 comments on commit 273c996

Please sign in to comment.