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.
- data/.gitignore +5 -0
- data/Gemfile +12 -0
- data/LICENSE +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +33 -0
- data/TODO.txt +7 -0
- data/bin/vraptor +7 -0
- data/lib/generators/app_generator/app_generator.rb +88 -0
- data/lib/generators/app_generator/templates/FreemarkerPathResolver.java +23 -0
- data/lib/generators/app_generator/templates/decorators.xml +7 -0
- data/lib/generators/app_generator/templates/index.jsp +8 -0
- data/lib/generators/app_generator/templates/log4j.xml +20 -0
- data/lib/generators/app_generator/templates/main.ftl +12 -0
- data/lib/generators/app_generator/templates/persistence.xml +18 -0
- data/lib/generators/app_generator/templates/pom.erb +101 -0
- data/lib/generators/app_generator/templates/web.xml +52 -0
- data/lib/generators/attribute.rb +8 -0
- data/lib/generators/base.rb +5 -0
- data/lib/generators/scaffold_generator/base_scaffold.rb +21 -0
- data/lib/generators/scaffold_generator/controller_generator/controller_generator.rb +18 -0
- data/lib/generators/scaffold_generator/controller_generator/templates/controller.erb +72 -0
- data/lib/generators/scaffold_generator/freemarker_generator/freemarker_generator.rb +13 -0
- data/lib/generators/scaffold_generator/freemarker_generator/templates/edit.erb +12 -0
- data/lib/generators/scaffold_generator/freemarker_generator/templates/index.erb +29 -0
- data/lib/generators/scaffold_generator/freemarker_generator/templates/new.erb +11 -0
- data/lib/generators/scaffold_generator/freemarker_generator/templates/show.erb +12 -0
- data/lib/generators/scaffold_generator/model_generator/model_generator.rb +10 -0
- data/lib/generators/scaffold_generator/model_generator/templates/model.erb +35 -0
- data/lib/generators/scaffold_generator/scaffold_generator.rb +8 -0
- data/lib/load_paths.rb +16 -0
- data/lib/vraptor-scaffold.rb +11 -0
- data/spec/lib/generators/app_generator/app_generator_spec.rb +146 -0
- data/spec/lib/generators/app_generator/templates/pom.xml +101 -0
- data/spec/lib/generators/attribute_spec.rb +0 -0
- data/spec/lib/generators/scaffold_generator/controller_generator/controller_generator_spec.rb +20 -0
- data/spec/lib/generators/scaffold_generator/controller_generator/templates/ProductController.java +72 -0
- data/spec/lib/generators/scaffold_generator/freemarker_generator/freemarker_generator_spec.rb +30 -0
- data/spec/lib/generators/scaffold_generator/model_generator/model_generator_spec.rb +20 -0
- data/spec/lib/generators/scaffold_generator/model_generator/templates/Product.java +40 -0
- data/spec/lib/generators/scaffold_generator/scaffold_generator_spec.rb +35 -0
- data/spec/lib/vraptor-scaffold_spec.rb +37 -0
- data/spec/spec.opts +4 -0
- data/spec/spec_helper.rb +3 -0
- data/vraptor-scaffold.gemspec +92 -0
- metadata +121 -0
@@ -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,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
|
+
}
|
data/lib/load_paths.rb
ADDED
@@ -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
|