ptero 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +350 -0
- data/Rakefile +10 -0
- data/bin/ptero +13 -0
- data/lib/ptero.rb +14 -0
- data/lib/ptero/application.rb +281 -0
- data/lib/ptero/cli.rb +35 -0
- data/lib/ptero/cli/root.rb +282 -0
- data/lib/ptero/composer_default.json +8 -0
- data/lib/ptero/exception.rb +26 -0
- data/lib/ptero/exceptions/applicationexception.rb +9 -0
- data/lib/ptero/exceptions/generatorexception.rb +9 -0
- data/lib/ptero/generator.rb +146 -0
- data/lib/ptero/generators/applicationjavascriptgenerator.rb +19 -0
- data/lib/ptero/generators/applicationstylesheetgenerator.rb +18 -0
- data/lib/ptero/generators/configgenerator.rb +34 -0
- data/lib/ptero/generators/controllergenerator.rb +23 -0
- data/lib/ptero/generators/htaccessgenerator.rb +27 -0
- data/lib/ptero/generators/javascriptgenerator.rb +34 -0
- data/lib/ptero/generators/landinggenerator.rb +23 -0
- data/lib/ptero/generators/layoutgenerator.rb +19 -0
- data/lib/ptero/generators/loadallgenerator.rb +26 -0
- data/lib/ptero/generators/modelgenerator.rb +22 -0
- data/lib/ptero/generators/pagegenerator.rb +56 -0
- data/lib/ptero/generators/pagenotfoundgenerator.rb +16 -0
- data/lib/ptero/generators/phpclassgenerator.rb +27 -0
- data/lib/ptero/generators/phpgenerator.rb +18 -0
- data/lib/ptero/generators/phpinfogenerator.rb +16 -0
- data/lib/ptero/generators/routesgenerator.rb +68 -0
- data/lib/ptero/generators/setupgenerator.rb +13 -0
- data/lib/ptero/generators/stylesheetgenerator.rb +33 -0
- data/lib/ptero/generators/twiggenerator.rb +24 -0
- data/lib/ptero/generators/viewgenerator.rb +24 -0
- data/lib/ptero/templates/applicationjavascriptgenerator.js.erb +11 -0
- data/lib/ptero/templates/applicationstylesheetgenerator.css.erb +40 -0
- data/lib/ptero/templates/configgenerator.php.erb +26 -0
- data/lib/ptero/templates/controllergenerator.php.erb +25 -0
- data/lib/ptero/templates/generator.txt.erb +1 -0
- data/lib/ptero/templates/htaccessgenerator.htaccess.erb +9 -0
- data/lib/ptero/templates/javascriptgenerator.js.erb +11 -0
- data/lib/ptero/templates/landinggenerator.php.erb +3 -0
- data/lib/ptero/templates/layoutgenerator.html.twig.erb +37 -0
- data/lib/ptero/templates/loadallgenerator.php.erb +12 -0
- data/lib/ptero/templates/modelgenerator.php.erb +21 -0
- data/lib/ptero/templates/pagegenerator.html.twig.erb +13 -0
- data/lib/ptero/templates/pagenotfoundgenerator.html.twig.erb +13 -0
- data/lib/ptero/templates/phpclassgenerator.php.erb +24 -0
- data/lib/ptero/templates/phpgenerator.php.erb +3 -0
- data/lib/ptero/templates/phpinfogenerator.php.erb +3 -0
- data/lib/ptero/templates/routesgenerator.php.erb +13 -0
- data/lib/ptero/templates/setupgenerator.php.erb +19 -0
- data/lib/ptero/templates/stylesheetgenerator.css.erb +8 -0
- data/lib/ptero/templates/twiggenerator.html.twig.erb +5 -0
- data/lib/ptero/templates/viewgenerator.html.twig.erb +13 -0
- data/lib/ptero/version.rb +4 -0
- data/ptero.gemspec +28 -0
- data/test/fixtures/test_generators_fixtures.yaml +74 -0
- data/test/test_application.rb +123 -0
- data/test/test_exceptions.rb +52 -0
- data/test/test_generators.rb +110 -0
- data/test/test_root.rb +212 -0
- metadata +212 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
#
|
2
|
+
#
|
3
|
+
# setupgenerator.rb
|
4
|
+
# =================
|
5
|
+
#
|
6
|
+
# Generator the "setup" files of an application that initialize the application and run the routing functions.
|
7
|
+
#
|
8
|
+
#
|
9
|
+
|
10
|
+
# A generator for "setup" files that load dependencies and initialize the application
|
11
|
+
class Ptero::Generator::SetupGenerator < Ptero::Generator::PHPGenerator
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
#
|
2
|
+
# stylesheetgenerator.rb
|
3
|
+
# ======================
|
4
|
+
# Generate CSS stylesheets
|
5
|
+
#
|
6
|
+
#
|
7
|
+
|
8
|
+
# Generator for stylesheets
|
9
|
+
class Ptero::Generator::StylesheetGenerator < Ptero::Generator
|
10
|
+
|
11
|
+
# Generate with name and optional description that will be generated in a comment
|
12
|
+
# (Defaults to "The purpose of this stylesheet is...")
|
13
|
+
# @param name [String] the name of the stylesheet
|
14
|
+
# @param desc [String] a String to describe this stylesheet
|
15
|
+
def initialize(name,desc = 'The purpose of this stylesheet is...')
|
16
|
+
super name
|
17
|
+
@desc = desc
|
18
|
+
end
|
19
|
+
|
20
|
+
attr_reader :desc
|
21
|
+
|
22
|
+
# @return [String] "css"
|
23
|
+
def extension
|
24
|
+
'css'
|
25
|
+
end
|
26
|
+
|
27
|
+
# @return [String] "www/assets/css"
|
28
|
+
def path
|
29
|
+
'www/assets/css'
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#
|
2
|
+
#
|
3
|
+
# twiggenerator.rb
|
4
|
+
# ================
|
5
|
+
#
|
6
|
+
# Generate Twig templates
|
7
|
+
# http://twig.sensiolabs.org
|
8
|
+
#
|
9
|
+
|
10
|
+
# Generator for Twig templates
|
11
|
+
class Ptero::Generator::TwigGenerator < Ptero::Generator
|
12
|
+
|
13
|
+
# @return [String] "html.twig"
|
14
|
+
def extension
|
15
|
+
'html.twig'
|
16
|
+
end
|
17
|
+
|
18
|
+
# @return [String] "views"
|
19
|
+
def path
|
20
|
+
'views'
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
#
|
2
|
+
#
|
3
|
+
#
|
4
|
+
# viewgenerator.rb
|
5
|
+
# ================
|
6
|
+
#
|
7
|
+
# Generate content views for the application
|
8
|
+
#
|
9
|
+
#
|
10
|
+
#
|
11
|
+
|
12
|
+
# Generator for a view that extends a layout
|
13
|
+
class Ptero::Generator::ViewGenerator < Ptero::Generator::TwigGenerator
|
14
|
+
|
15
|
+
# @param name [String] the name of the view
|
16
|
+
# @param parent [String] the name of the layout to extend
|
17
|
+
def initialize(name,parent='application')
|
18
|
+
super(name)
|
19
|
+
@parent = parent
|
20
|
+
end
|
21
|
+
|
22
|
+
attr_reader :parent
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
/*
|
2
|
+
* <%= filename %>
|
3
|
+
* <%= '=' * filename.length %>
|
4
|
+
* <%= desc %>
|
5
|
+
*
|
6
|
+
*
|
7
|
+
*
|
8
|
+
*/
|
9
|
+
|
10
|
+
body {
|
11
|
+
font-family: sans-serif;
|
12
|
+
background-color: #eee;
|
13
|
+
}
|
14
|
+
|
15
|
+
div.header {
|
16
|
+
background-color: white;
|
17
|
+
padding: 1px 0px;
|
18
|
+
}
|
19
|
+
|
20
|
+
div.container {
|
21
|
+
background-color: #25c;
|
22
|
+
width: 650px;
|
23
|
+
height: 610px;
|
24
|
+
margin: 10px auto;
|
25
|
+
padding: 20px;
|
26
|
+
text-align: center;
|
27
|
+
border-radius: 3px;
|
28
|
+
}
|
29
|
+
|
30
|
+
div.content {
|
31
|
+
background-color: white;
|
32
|
+
width: 650px;
|
33
|
+
height: 520px;
|
34
|
+
margin: 10px auto;
|
35
|
+
padding: 3px 0px;
|
36
|
+
}
|
37
|
+
|
38
|
+
div.curvycorners {
|
39
|
+
border-radius: 3px;
|
40
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<?php
|
2
|
+
/*
|
3
|
+
* config.php
|
4
|
+
* return array of configuration values
|
5
|
+
*
|
6
|
+
*
|
7
|
+
*
|
8
|
+
*/
|
9
|
+
|
10
|
+
|
11
|
+
return array(
|
12
|
+
<% options.each_pair do |key,value| %>
|
13
|
+
<% next if key == :database %>
|
14
|
+
'<%= key %>' => '<%= value %>',
|
15
|
+
|
16
|
+
<% end %>
|
17
|
+
|
18
|
+
|
19
|
+
'database' => array(
|
20
|
+
'name' => '<%= options[:database][:name] %>',
|
21
|
+
'user' => '<%= options[:database][:user] %>',
|
22
|
+
'password' => '<%= options[:database][:password] %>',
|
23
|
+
'server' => '<%= options[:database][:server] %>'
|
24
|
+
)
|
25
|
+
)
|
26
|
+
?>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
/*
|
4
|
+
*
|
5
|
+
* <%= filename %>
|
6
|
+
* <%= '=' * filename.length %>
|
7
|
+
* This controller does ...
|
8
|
+
*
|
9
|
+
*/
|
10
|
+
|
11
|
+
namespace <%= app.name.capitalize %>\Controllers;
|
12
|
+
|
13
|
+
|
14
|
+
class <%= name %> extends <%= parent %> {
|
15
|
+
|
16
|
+
// Handle GET requests, use 'public function post()' to handle POST
|
17
|
+
public function get() {
|
18
|
+
// Render template
|
19
|
+
$this->render();
|
20
|
+
}
|
21
|
+
|
22
|
+
}
|
23
|
+
|
24
|
+
|
25
|
+
?>
|
@@ -0,0 +1 @@
|
|
1
|
+
Generated at <%= Time.now %>
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>{{ pagetitle ? '<%= app.name %> - ' ~ pagetitle : '<%= app.name %>' }}</title>
|
5
|
+
|
6
|
+
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script><!-- Thanks jQuery!! -->
|
7
|
+
<script type="text/javascript" src="/assets/js/application.js"></script>
|
8
|
+
<link rel="stylesheet" type="text/css" href="/assets/css/application.css" />
|
9
|
+
|
10
|
+
|
11
|
+
{% block head %}
|
12
|
+
{% endblock %}
|
13
|
+
|
14
|
+
<!-- https://github.com/luminousrubyist/ptero -->
|
15
|
+
</head>
|
16
|
+
<body>
|
17
|
+
{% block body %}
|
18
|
+
|
19
|
+
<div class="container curvycorners">
|
20
|
+
<div class="header curvycorners">
|
21
|
+
<h1><%= app.name %></h1>
|
22
|
+
</div>
|
23
|
+
<div class="content curvycorners">
|
24
|
+
{% block content %}
|
25
|
+
{% autoescape false %}
|
26
|
+
|
27
|
+
<!-- content -->
|
28
|
+
{{ content }}
|
29
|
+
|
30
|
+
{% endautoescape %}
|
31
|
+
{% endblock %}
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
|
35
|
+
{% endblock %}
|
36
|
+
</body>
|
37
|
+
</html>
|
@@ -0,0 +1,21 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
/* Current Database specification
|
4
|
+
* [Your-database-name]/[table-name]
|
5
|
+
* List fields here: e.g. for a Post class:
|
6
|
+
* autoincrement primarykey int post_id
|
7
|
+
* varchar(15) post_title
|
8
|
+
* text post_content
|
9
|
+
* bigint(20) post_timestamp
|
10
|
+
* varchar(15) post_author
|
11
|
+
*
|
12
|
+
*/
|
13
|
+
|
14
|
+
|
15
|
+
namespace <%= app.name.capitalize %>\Models;
|
16
|
+
|
17
|
+
class <%= name %> extends \ActiveRecord\Model {
|
18
|
+
|
19
|
+
}
|
20
|
+
|
21
|
+
?>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{% extends '<%= parent %>.html.twig' %}
|
2
|
+
|
3
|
+
{% block head %}
|
4
|
+
<!-- HTML head code produced by view: <%= name %> -->
|
5
|
+
<script type="text/javascript" src="/assets/js/<%= name.downcase %>.js"></script>
|
6
|
+
<link rel="stylesheet" type="text/css" src="/assets/css/<%= name.downcase %>.css" />
|
7
|
+
{% endblock %}
|
8
|
+
|
9
|
+
{% block content %}
|
10
|
+
<!-- HTML content code produced by view: <%= name %> -->
|
11
|
+
<h2>View: <%= filename %></h2>
|
12
|
+
|
13
|
+
{% endblock %}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{% extends '<%= parent %>.html.twig' %}
|
2
|
+
|
3
|
+
{% block head %}
|
4
|
+
<!-- HTML head code produced by view: <%= name %> -->
|
5
|
+
{% endblock %}
|
6
|
+
|
7
|
+
{% block content %}
|
8
|
+
<!-- HTML content code produced by view: <%= name %> -->
|
9
|
+
<h3 class="message">
|
10
|
+
404 - Page not found
|
11
|
+
</h3>
|
12
|
+
|
13
|
+
{% endblock %}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
|
4
|
+
/*
|
5
|
+
*
|
6
|
+
* <%= filename %>
|
7
|
+
* <%= '=' * filename.length %>
|
8
|
+
* This class does ...
|
9
|
+
*
|
10
|
+
*/
|
11
|
+
|
12
|
+
|
13
|
+
|
14
|
+
namespace <%= app.name.capitalize %>;
|
15
|
+
|
16
|
+
|
17
|
+
class <%= name %> <%= !parent.nil? && "extends #{parent}" %> {
|
18
|
+
|
19
|
+
|
20
|
+
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
?>
|
@@ -0,0 +1,19 @@
|
|
1
|
+
<?php
|
2
|
+
/*
|
3
|
+
* This is the main landing page for the website. All traffic should be directed here.
|
4
|
+
* It requires composer dependencies, then creates $application as a singleton instance of the
|
5
|
+
* \Dinosaur\Application class.
|
6
|
+
* The application then runs the routes file, starting the rendering process
|
7
|
+
*
|
8
|
+
*/
|
9
|
+
|
10
|
+
// Get dependencies
|
11
|
+
require_once __DIR__ . '/../vendor/autoload.php';
|
12
|
+
|
13
|
+
// Initialize application
|
14
|
+
$application = \Dinosaur\Application::getInstance();
|
15
|
+
|
16
|
+
// Run routing
|
17
|
+
require_once 'routes.php';
|
18
|
+
|
19
|
+
?>
|
@@ -0,0 +1,13 @@
|
|
1
|
+
{% extends '<%= parent %>.html.twig' %}
|
2
|
+
|
3
|
+
{% block head %}
|
4
|
+
<!-- HTML head code produced by view: <%= name %> -->
|
5
|
+
|
6
|
+
|
7
|
+
{% endblock %}
|
8
|
+
|
9
|
+
{% block content %}
|
10
|
+
<!-- HTML content code produced by view: <%= name %> -->
|
11
|
+
<h2>View: <%= filename %></h2>
|
12
|
+
|
13
|
+
{% endblock %}
|