vraptor-scaffold 0.0.1.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +12 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +19 -0
  5. data/Rakefile +33 -0
  6. data/TODO.txt +7 -0
  7. data/bin/vraptor +7 -0
  8. data/lib/generators/app_generator/app_generator.rb +88 -0
  9. data/lib/generators/app_generator/templates/FreemarkerPathResolver.java +23 -0
  10. data/lib/generators/app_generator/templates/decorators.xml +7 -0
  11. data/lib/generators/app_generator/templates/index.jsp +8 -0
  12. data/lib/generators/app_generator/templates/log4j.xml +20 -0
  13. data/lib/generators/app_generator/templates/main.ftl +12 -0
  14. data/lib/generators/app_generator/templates/persistence.xml +18 -0
  15. data/lib/generators/app_generator/templates/pom.erb +101 -0
  16. data/lib/generators/app_generator/templates/web.xml +52 -0
  17. data/lib/generators/attribute.rb +8 -0
  18. data/lib/generators/base.rb +5 -0
  19. data/lib/generators/scaffold_generator/base_scaffold.rb +21 -0
  20. data/lib/generators/scaffold_generator/controller_generator/controller_generator.rb +18 -0
  21. data/lib/generators/scaffold_generator/controller_generator/templates/controller.erb +72 -0
  22. data/lib/generators/scaffold_generator/freemarker_generator/freemarker_generator.rb +13 -0
  23. data/lib/generators/scaffold_generator/freemarker_generator/templates/edit.erb +12 -0
  24. data/lib/generators/scaffold_generator/freemarker_generator/templates/index.erb +29 -0
  25. data/lib/generators/scaffold_generator/freemarker_generator/templates/new.erb +11 -0
  26. data/lib/generators/scaffold_generator/freemarker_generator/templates/show.erb +12 -0
  27. data/lib/generators/scaffold_generator/model_generator/model_generator.rb +10 -0
  28. data/lib/generators/scaffold_generator/model_generator/templates/model.erb +35 -0
  29. data/lib/generators/scaffold_generator/scaffold_generator.rb +8 -0
  30. data/lib/load_paths.rb +16 -0
  31. data/lib/vraptor-scaffold.rb +11 -0
  32. data/spec/lib/generators/app_generator/app_generator_spec.rb +146 -0
  33. data/spec/lib/generators/app_generator/templates/pom.xml +101 -0
  34. data/spec/lib/generators/attribute_spec.rb +0 -0
  35. data/spec/lib/generators/scaffold_generator/controller_generator/controller_generator_spec.rb +20 -0
  36. data/spec/lib/generators/scaffold_generator/controller_generator/templates/ProductController.java +72 -0
  37. data/spec/lib/generators/scaffold_generator/freemarker_generator/freemarker_generator_spec.rb +30 -0
  38. data/spec/lib/generators/scaffold_generator/model_generator/model_generator_spec.rb +20 -0
  39. data/spec/lib/generators/scaffold_generator/model_generator/templates/Product.java +40 -0
  40. data/spec/lib/generators/scaffold_generator/scaffold_generator_spec.rb +35 -0
  41. data/spec/lib/vraptor-scaffold_spec.rb +37 -0
  42. data/spec/spec.opts +4 -0
  43. data/spec/spec_helper.rb +3 -0
  44. data/vraptor-scaffold.gemspec +92 -0
  45. metadata +121 -0
@@ -0,0 +1,8 @@
1
+ class Attribute
2
+ attr_accessor :name, :type
3
+
4
+ def initialize(name, type)
5
+ @name = name
6
+ @type = type
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ module VraptorScaffold
2
+ class Base < Thor::Group
3
+ include Thor::Actions
4
+ end
5
+ end
@@ -0,0 +1,21 @@
1
+ class BaseScaffold < VraptorScaffold::Base
2
+
3
+ def initialize(args)
4
+ super
5
+ @model = args.delete_at(0).downcase
6
+ parse_attributes args
7
+ end
8
+
9
+ def class_name
10
+ @model.capitalize
11
+ end
12
+
13
+ private
14
+ def parse_attributes(args)
15
+ @attributes = []
16
+ args.each do |arg|
17
+ parsedAttribute = arg.split(":")
18
+ @attributes << Attribute.new(parsedAttribute[0], parsedAttribute[1].capitalize)
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ class ControllerGenerator < BaseScaffold
2
+
3
+ def self.source_root
4
+ File.dirname(__FILE__)
5
+ end
6
+
7
+ def build
8
+ template("templates/controller.erb", "src/main/java/app/controllers/#{controller_class_name}.java")
9
+ end
10
+
11
+ def controller_class_name
12
+ "#{@model.capitalize}Controller"
13
+ end
14
+
15
+ def path
16
+ "/#{@model.pluralize}"
17
+ end
18
+ end
@@ -0,0 +1,72 @@
1
+ package app.controllers;
2
+
3
+ import java.util.List;
4
+
5
+ import javax.persistence.EntityManager;
6
+
7
+ import app.models.<%= class_name %>;
8
+ import br.com.caelum.vraptor.Delete;
9
+ import br.com.caelum.vraptor.Get;
10
+ import br.com.caelum.vraptor.Path;
11
+ import br.com.caelum.vraptor.Post;
12
+ import br.com.caelum.vraptor.Put;
13
+ import br.com.caelum.vraptor.Resource;
14
+ import br.com.caelum.vraptor.Result;
15
+ import br.com.caelum.vraptor.view.Results;
16
+
17
+ @Resource
18
+ public class <%= controller_class_name %> {
19
+
20
+ private Result result;
21
+ private EntityManager entityManager;
22
+
23
+ public <%= controller_class_name %>(Result result, EntityManager entityManager) {
24
+ this.entityManager = entityManager;
25
+ this.result = result;
26
+ }
27
+
28
+ @Get
29
+ @Path("<%= path %>")
30
+ public List<<%= class_name %>> index() {
31
+ return entityManager.createQuery("from <%= class_name %>").getResultList();
32
+ }
33
+
34
+ @Post
35
+ @Path("<%= path %>")
36
+ public void create(<%= class_name %> <%= @model %>) {
37
+ entityManager.persist(<%= @model %>);
38
+ result.use(Results.logic()).redirectTo(<%= controller_class_name %>.class).index();
39
+ }
40
+
41
+ @Get
42
+ @Path("<%= "#{path}/new" %>")
43
+ public <%= class_name %> new<%= class_name %>() {
44
+ return new <%= class_name %>();
45
+ }
46
+
47
+ @Put
48
+ @Path("<%= path %>")
49
+ public void update(<%= class_name %> <%= @model %>) {
50
+ entityManager.merge(<%= @model %>);
51
+ result.use(Results.logic()).redirectTo(<%= controller_class_name %>.class).index();
52
+ }
53
+
54
+ @Get
55
+ @Path("<%= "#{path}/#{@model}.id/edit" %>")
56
+ public <%= class_name %> edit(<%= @model.capitalize %> <%= @model %>) {
57
+ return entityManager.find(<%= @model.capitalize %>.class, <%= @model %>.getId());
58
+ }
59
+
60
+ @Get
61
+ @Path("<%= "#{path}/#{@model}.id/show" %>")
62
+ public <%= class_name %> show(<%= @model.capitalize %> <%= @model %>) {
63
+ return entityManager.find(<%= @model.capitalize %>.class, <%= @model %>.getId());
64
+ }
65
+
66
+ @Delete
67
+ @Path("<%= path %>")
68
+ public void destroy(<%= class_name %> <%= @model %>) {
69
+ entityManager.remove(entityManager.find(<%= class_name %>.class, <%= @model %>.getId()));
70
+ result.use(Results.logic()).redirectTo(<%= controller_class_name %>.class).index();
71
+ }
72
+ }
@@ -0,0 +1,13 @@
1
+ class FreemarkerGenerator < BaseScaffold
2
+
3
+ def self.source_root
4
+ File.dirname(__FILE__)
5
+ end
6
+
7
+ def build
8
+ template("templates/index.erb", "src/main/webapp/WEB-INF/freemarker/#{@model}/index.ftl")
9
+ template("templates/show.erb", "src/main/webapp/WEB-INF/freemarker/#{@model}/show.ftl")
10
+ template("templates/new.erb", "src/main/webapp/WEB-INF/freemarker/#{@model}/new.ftl")
11
+ template("templates/edit.erb", "src/main/webapp/WEB-INF/freemarker/#{@model}/edit.ftl")
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ <body>
2
+ <form action="${"$"}${"{base}"}/${modelPlural}" method="post">
3
+ <@generate_input />
4
+ <input type="submit" value="update">
5
+ </form>
6
+
7
+ <#macro generate_input>
8
+ <#list attributes as attribute>
9
+ <input type="text" name="${model}.${attribute.name}">
10
+ </#list>
11
+ </#macro>
12
+ </body>
@@ -0,0 +1,29 @@
1
+ <h1>Listing ${modelPlural}</h1>
2
+ <table>
3
+ <tr>
4
+ <@generate_tds />
5
+ </tr>
6
+ <tr>
7
+ ${"<#list ${model}List as ${model}>"}
8
+ <@generate_tds_value />
9
+ ${"</#list>"}
10
+ </tr>
11
+ </table>
12
+
13
+ <br />
14
+
15
+ <a href="${modelPlural}/new">Novo</a>
16
+
17
+ <#macro generate_tds>
18
+ <#list attributes as attribute>
19
+ <td>${attribute.name}</td>
20
+ </#list>
21
+ </#macro>
22
+
23
+ <#macro generate_tds_value>
24
+ <tr>
25
+ <#list attributes as attribute>
26
+ <td>${"$"}${"{"}${model}.${attribute.name}${"!\"\"}"}</td>
27
+ </#list>
28
+ </tr>
29
+ </#macro>
@@ -0,0 +1,11 @@
1
+ <form action="${"$"}${"{base}"}/${modelPlural}" method="post">
2
+ <@generate_text />
3
+ <input type="submit" value="save">
4
+ </form>
5
+
6
+ <#macro generate_text>
7
+ <#list attributes as attribute>
8
+ <input type="text" name="${model}.${attribute.name}">
9
+ </#list>
10
+ </#macro>
11
+
@@ -0,0 +1,12 @@
1
+ <body>
2
+ <@show_attributes />
3
+ </body>
4
+
5
+ <#macro show_attributes>
6
+ <#list attributes as attribute>
7
+ <p>
8
+ <b>${attribute.name?cap_first}:</b>
9
+ ${"$"}${"{"}${model}.${attribute.name}${"!\"\"}"}
10
+ </p>
11
+ </#list>
12
+ </#macro>
@@ -0,0 +1,10 @@
1
+ class ModelGenerator < BaseScaffold
2
+
3
+ def self.source_root
4
+ File.dirname(__FILE__)
5
+ end
6
+
7
+ def build
8
+ template("templates/model.erb", "src/main/java/app/models/#{class_name}.java")
9
+ end
10
+ end
@@ -0,0 +1,35 @@
1
+ package app.models;
2
+
3
+ import javax.persistence.Entity;
4
+ import javax.persistence.GeneratedValue;
5
+ import javax.persistence.Id;
6
+
7
+ @Entity
8
+ public class <%= class_name %> {
9
+
10
+ @Id @GeneratedValue
11
+ private Long id;
12
+
13
+ <% @attributes.each do |att| -%>
14
+ private <%= att.type %> <%= att.name %>;
15
+ <% end -%>
16
+
17
+ public void setId(Long id) {
18
+ this.id = id;
19
+ }
20
+
21
+ public Long getId() {
22
+ return id;
23
+ }
24
+
25
+ <% @attributes.each do |att| -%>
26
+ public void set<%= att.name.capitalize %>(<%= att.type %> <%= att.name %>) {
27
+ this.<%= att.name %> = <%= att.name %>;
28
+ }
29
+
30
+ public <%= att.type %> get<%= att.name.capitalize %>() {
31
+ return <%= att.name %>;
32
+ }
33
+
34
+ <% end -%>
35
+ }
@@ -0,0 +1,8 @@
1
+ class ScaffoldGenerator
2
+
3
+ def build(args)
4
+ ModelGenerator.new(args).build
5
+ ControllerGenerator.new(args).build
6
+ FreemarkerGenerator.new(args).build
7
+ end
8
+ end
@@ -0,0 +1,16 @@
1
+ require 'rubygems'
2
+ require "bundler"
3
+ Bundler.setup
4
+ require 'thor/actions'
5
+ require 'thor/group'
6
+ require 'active_support/inflector'
7
+
8
+ require File.dirname(__FILE__) + '/../lib/generators/attribute'
9
+ require File.dirname(__FILE__) + '/../lib/generators/base'
10
+ require File.dirname(__FILE__) + '/../lib/generators/scaffold_generator/scaffold_generator'
11
+ require File.dirname(__FILE__) + '/../lib/generators/scaffold_generator/base_scaffold'
12
+ require File.dirname(__FILE__) + '/../lib/generators/scaffold_generator/model_generator/model_generator'
13
+ require File.dirname(__FILE__) + '/../lib/generators/scaffold_generator/controller_generator/controller_generator'
14
+ require File.dirname(__FILE__) + '/../lib/generators/scaffold_generator/freemarker_generator/freemarker_generator'
15
+ require File.dirname(__FILE__) + '/../lib/generators/app_generator/app_generator'
16
+
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__) + '/load_paths'
2
+
3
+ module VraptorScaffold
4
+ class Main
5
+ def self.execute(args)
6
+ action = args.delete_at(0)
7
+ AppGenerator.new.build(args[0]) if action == "new"
8
+ ScaffoldGenerator.new.build(args) if action == "scaffold"
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,146 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper")
2
+
3
+ describe AppGenerator do
4
+
5
+ before(:all) do
6
+ @project_name = "vraptor-scaffold"
7
+ AppGenerator.new.build(@project_name)
8
+ end
9
+
10
+ after(:all) do
11
+ FileUtils.remove_dir(@project_name)
12
+ end
13
+
14
+ context "build new application" do
15
+ it "should create directory with project name" do
16
+ File.exist?(@project_name).should be_true
17
+ end
18
+
19
+ it "should create pom" do
20
+ from = File.expand_path(File.dirname(__FILE__) + "/templates/pom.xml")
21
+ to = "#{@project_name}/pom.xml"
22
+ FileUtils.compare_file(from, to).should be_true
23
+ end
24
+
25
+ context "creating main java" do
26
+ before(:all) do
27
+ @main_java = "#{@project_name}/src/main/java"
28
+ @app = "#{@main_java}/app"
29
+ end
30
+
31
+ it "should create source folder" do
32
+ File.exist?(@main_java).should be_true
33
+ end
34
+
35
+ it "should create app folder" do
36
+ File.exist?(@app).should be_true
37
+ end
38
+
39
+ it "should create controllers folder" do
40
+ File.exist?("#{@app}/controllers").should be_true
41
+ end
42
+
43
+ it "should create models folder" do
44
+ File.exist?("#{@app}/models").should be_true
45
+ end
46
+
47
+ it "should create infrastructure folder" do
48
+ File.exist?("#{@app}/infrastructure").should be_true
49
+ end
50
+
51
+ it "should create path resolver" do
52
+ from = "#{AppGenerator.source_root}/templates/FreemarkerPathResolver.java"
53
+ to = "#{@app}/infrastructure/FreemarkerPathResolver.java"
54
+ FileUtils.compare_file(from, to).should be_true
55
+ end
56
+ end
57
+
58
+ context "creating main resources" do
59
+ before(:all) do
60
+ @main_resources = "#{@project_name}/src/main/resources"
61
+ @meta_inf = "#{@main_resources}/META-INF"
62
+ end
63
+
64
+ it "should create resource folder" do
65
+ File.exist?(@main_resources).should be_true
66
+ end
67
+
68
+ it "should create log4j" do
69
+ from = "#{AppGenerator.source_root}/templates/log4j.xml"
70
+ to = "#{@main_resources}/log4j.xml"
71
+ FileUtils.compare_file(from, to).should be_true
72
+ end
73
+
74
+ it "should create META-INF" do
75
+ File.exist?(@meta_inf).should be_true
76
+ end
77
+
78
+ it "should create log4j" do
79
+ from = "#{AppGenerator.source_root}/templates/persistence.xml"
80
+ to = "#{@meta_inf}/persistence.xml"
81
+ FileUtils.compare_file(from, to).should be_true
82
+ end
83
+ end
84
+ context "creating webapp" do
85
+ before(:all) do
86
+ @webapp = "#{@project_name}/src/main/webapp"
87
+ @web_inf = "#{@webapp}/WEB-INF"
88
+ @decorators = "#{@webapp}/decorators"
89
+ end
90
+
91
+ it "should create webapp folder" do
92
+ File.exist?(@webapp).should be_true
93
+ end
94
+
95
+ it "should create index" do
96
+ from = "#{AppGenerator.source_root}/templates/index.jsp"
97
+ to = "#{@webapp}/index.jsp"
98
+ FileUtils.compare_file(from, to).should be_true
99
+ end
100
+
101
+ it "should create decorators folder" do
102
+ File.exist?(@decorators).should be_true
103
+ end
104
+
105
+ it "should create decorator file" do
106
+ from = "#{AppGenerator.source_root}/templates/main.ftl"
107
+ to = "#{@decorators}/main.ftl"
108
+ FileUtils.compare_file(from, to).should be_true
109
+ end
110
+
111
+ it "should create WEB-INF folder" do
112
+ File.exist?(@web_inf).should be_true
113
+ end
114
+
115
+ it "should create decorators.xml" do
116
+ from = "#{AppGenerator.source_root}/templates/decorators.xml"
117
+ to = "#{@web_inf}/decorators.xml"
118
+ FileUtils.compare_file(from, to).should be_true
119
+ end
120
+
121
+ it "should create web.xml" do
122
+ from = "#{AppGenerator.source_root}/templates/web.xml"
123
+ to = "#{@web_inf}/web.xml"
124
+ FileUtils.compare_file(from, to).should be_true
125
+ end
126
+
127
+ it "should create freemarker folder" do
128
+ File.exist?("#{@web_inf}/freemarker").should be_true
129
+ end
130
+ end
131
+ context "creating test" do
132
+ before(:all) do
133
+ @test_java = "#{@project_name}/src/test/java"
134
+ @test_resource = "#{@project_name}/src/test/java"
135
+ end
136
+
137
+ it "should create test source folder" do
138
+ File.exist?(@test_java).should be_true
139
+ end
140
+
141
+ it "should create test resource folder" do
142
+ File.exist?(@test_resource).should be_true
143
+ end
144
+ end
145
+ end
146
+ end