ptero 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +350 -0
  6. data/Rakefile +10 -0
  7. data/bin/ptero +13 -0
  8. data/lib/ptero.rb +14 -0
  9. data/lib/ptero/application.rb +281 -0
  10. data/lib/ptero/cli.rb +35 -0
  11. data/lib/ptero/cli/root.rb +282 -0
  12. data/lib/ptero/composer_default.json +8 -0
  13. data/lib/ptero/exception.rb +26 -0
  14. data/lib/ptero/exceptions/applicationexception.rb +9 -0
  15. data/lib/ptero/exceptions/generatorexception.rb +9 -0
  16. data/lib/ptero/generator.rb +146 -0
  17. data/lib/ptero/generators/applicationjavascriptgenerator.rb +19 -0
  18. data/lib/ptero/generators/applicationstylesheetgenerator.rb +18 -0
  19. data/lib/ptero/generators/configgenerator.rb +34 -0
  20. data/lib/ptero/generators/controllergenerator.rb +23 -0
  21. data/lib/ptero/generators/htaccessgenerator.rb +27 -0
  22. data/lib/ptero/generators/javascriptgenerator.rb +34 -0
  23. data/lib/ptero/generators/landinggenerator.rb +23 -0
  24. data/lib/ptero/generators/layoutgenerator.rb +19 -0
  25. data/lib/ptero/generators/loadallgenerator.rb +26 -0
  26. data/lib/ptero/generators/modelgenerator.rb +22 -0
  27. data/lib/ptero/generators/pagegenerator.rb +56 -0
  28. data/lib/ptero/generators/pagenotfoundgenerator.rb +16 -0
  29. data/lib/ptero/generators/phpclassgenerator.rb +27 -0
  30. data/lib/ptero/generators/phpgenerator.rb +18 -0
  31. data/lib/ptero/generators/phpinfogenerator.rb +16 -0
  32. data/lib/ptero/generators/routesgenerator.rb +68 -0
  33. data/lib/ptero/generators/setupgenerator.rb +13 -0
  34. data/lib/ptero/generators/stylesheetgenerator.rb +33 -0
  35. data/lib/ptero/generators/twiggenerator.rb +24 -0
  36. data/lib/ptero/generators/viewgenerator.rb +24 -0
  37. data/lib/ptero/templates/applicationjavascriptgenerator.js.erb +11 -0
  38. data/lib/ptero/templates/applicationstylesheetgenerator.css.erb +40 -0
  39. data/lib/ptero/templates/configgenerator.php.erb +26 -0
  40. data/lib/ptero/templates/controllergenerator.php.erb +25 -0
  41. data/lib/ptero/templates/generator.txt.erb +1 -0
  42. data/lib/ptero/templates/htaccessgenerator.htaccess.erb +9 -0
  43. data/lib/ptero/templates/javascriptgenerator.js.erb +11 -0
  44. data/lib/ptero/templates/landinggenerator.php.erb +3 -0
  45. data/lib/ptero/templates/layoutgenerator.html.twig.erb +37 -0
  46. data/lib/ptero/templates/loadallgenerator.php.erb +12 -0
  47. data/lib/ptero/templates/modelgenerator.php.erb +21 -0
  48. data/lib/ptero/templates/pagegenerator.html.twig.erb +13 -0
  49. data/lib/ptero/templates/pagenotfoundgenerator.html.twig.erb +13 -0
  50. data/lib/ptero/templates/phpclassgenerator.php.erb +24 -0
  51. data/lib/ptero/templates/phpgenerator.php.erb +3 -0
  52. data/lib/ptero/templates/phpinfogenerator.php.erb +3 -0
  53. data/lib/ptero/templates/routesgenerator.php.erb +13 -0
  54. data/lib/ptero/templates/setupgenerator.php.erb +19 -0
  55. data/lib/ptero/templates/stylesheetgenerator.css.erb +8 -0
  56. data/lib/ptero/templates/twiggenerator.html.twig.erb +5 -0
  57. data/lib/ptero/templates/viewgenerator.html.twig.erb +13 -0
  58. data/lib/ptero/version.rb +4 -0
  59. data/ptero.gemspec +28 -0
  60. data/test/fixtures/test_generators_fixtures.yaml +74 -0
  61. data/test/test_application.rb +123 -0
  62. data/test/test_exceptions.rb +52 -0
  63. data/test/test_generators.rb +110 -0
  64. data/test/test_root.rb +212 -0
  65. 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,11 @@
1
+ /*
2
+ * <%= filename %>
3
+ * <%= '=' * filename.length %>
4
+ * <%= desc %>
5
+ *
6
+ */
7
+
8
+
9
+ $(function() {
10
+ console.log('Loaded <%= filename %>')
11
+ });
@@ -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,9 @@
1
+ Options -Indexes
2
+
3
+ DirectoryIndex /index.php
4
+
5
+ RewriteEngine on
6
+ RewriteCond %{REQUEST_FILENAME} !-f
7
+ RewriteCond %{REQUEST_FILENAME} !-d
8
+ RewriteCond $1 !^(index\.php)
9
+ RewriteRule ^(.*)$ /index.php/$1 [L]
@@ -0,0 +1,11 @@
1
+ /*
2
+ * <%= filename %>
3
+ * <%= '=' * filename.length %>
4
+ * <%= desc %>
5
+ *
6
+ */
7
+
8
+
9
+ $(function() {
10
+ console.log('Loaded <%= filename %>')
11
+ });
@@ -0,0 +1,3 @@
1
+ <?php
2
+ require_once __DIR__ . '/../php/<%= app.name %>.php';
3
+ ?>
@@ -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,12 @@
1
+ <?php
2
+
3
+ <% priorities.each do |name| %>
4
+ require_once '<%= name %>.php';
5
+ <% end %>
6
+
7
+ foreach(glob(__DIR__ . '/*.php') as $filename) {
8
+ require_once $filename;
9
+ }
10
+
11
+
12
+ ?>
@@ -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,3 @@
1
+ <?php
2
+ echo 'Generated at <%= Time.now %>'
3
+ ?>
@@ -0,0 +1,3 @@
1
+ <?
2
+ phpinfo();
3
+ ?>
@@ -0,0 +1,13 @@
1
+ <?php
2
+
3
+ // Application route maps
4
+ $application->route(array(
5
+
6
+ <% routes.each_pair do |key,value| %>
7
+ '<%= key %>' => '<%= app.name.capitalize %>\Controllers\<%= value %>Controller',
8
+ <% end %>
9
+ ));
10
+
11
+
12
+
13
+ ?>
@@ -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,8 @@
1
+ /*
2
+ * <%= filename %>
3
+ * <%= '=' * filename.length %>
4
+ * <%= desc %>
5
+ *
6
+ *
7
+ *
8
+ */
@@ -0,0 +1,5 @@
1
+ <html>
2
+ <body>
3
+ {{ <%= "Generated at #{Time.now}" }}
4
+ </body>
5
+ </html>
@@ -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 %}