vraptor-scaffold 0.0.1.beta2 → 0.0.1.beta3

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 (33) hide show
  1. data/.gitignore +1 -0
  2. data/History.txt +18 -0
  3. data/LICENSE +2 -0
  4. data/README.rdoc +49 -14
  5. data/Rakefile +6 -0
  6. data/TODO.txt +11 -5
  7. data/VERSION.yml +1 -1
  8. data/lib/generators/app_generator/app_generator.rb +13 -5
  9. data/lib/generators/app_generator/templates/FreemarkerPathResolver.java +4 -6
  10. data/lib/generators/app_generator/templates/log4j.properties +4 -0
  11. data/lib/generators/app_generator/templates/macros/html.ftl +11 -0
  12. data/lib/generators/app_generator/templates/persistence.xml +4 -2
  13. data/lib/generators/app_generator/templates/pom.erb +1 -1
  14. data/lib/generators/app_generator/templates/web.xml +4 -0
  15. data/lib/generators/attribute.rb +19 -0
  16. data/lib/generators/scaffold_generator/freemarker_generator/freemarker_generator.rb +8 -4
  17. data/lib/generators/scaffold_generator/freemarker_generator/templates/edit.erb +1 -1
  18. data/lib/generators/scaffold_generator/freemarker_generator/templates/index.erb +4 -1
  19. data/lib/generators/scaffold_generator/freemarker_generator/templates/new.erb +1 -1
  20. data/lib/generators/scaffold_generator/freemarker_generator/templates/show.erb +2 -1
  21. data/lib/generators/scaffold_generator/scaffold_generator.rb +22 -5
  22. data/lib/vraptor-scaffold.rb +2 -1
  23. data/spec/lib/generators/app_generator/app_generator_spec.rb +20 -14
  24. data/spec/lib/generators/app_generator/templates/pom.xml +1 -1
  25. data/spec/lib/generators/attribute_spec.rb +82 -0
  26. data/spec/lib/generators/scaffold_generator/freemarker_generator/freemarker_generator_spec.rb +5 -5
  27. data/spec/lib/generators/scaffold_generator/model_generator/templates/Product.java +5 -5
  28. data/spec/lib/generators/scaffold_generator/scaffold_generator_spec.rb +30 -10
  29. data/spec/lib/vraptor-scaffold_spec.rb +8 -1
  30. data/spec/spec_helper.rb +1 -1
  31. data/vraptor-scaffold.gemspec +17 -3
  32. metadata +74 -7
  33. data/lib/generators/app_generator/templates/log4j.xml +0 -20
data/.gitignore CHANGED
@@ -4,3 +4,4 @@
4
4
  coverage
5
5
  pgk
6
6
  Gemfile.lock
7
+ .idea
@@ -0,0 +1,18 @@
1
+ === 0.0.1.beta3 / 2010-07-11
2
+
3
+ == New Features
4
+ * Added command to start web server(jetty).
5
+ * Added boolean support.
6
+
7
+ == Improvements
8
+ * Bumped vraptor version to 3.1.3.
9
+ * Change log4j.xml to log4j.properties.
10
+ * Change views directory from WEB-INF/freemarker to WEB-INF/views.
11
+ * Change hsqldb to use file instead of memory.
12
+
13
+ == Bugfixes
14
+ * Fixed pom when creating project with path like /home/rodolfo/project.
15
+ * Fixed runtime dependencies.
16
+
17
+ === 0.0.1.beta2 / 2010-07-07
18
+ * Crud with vraptor, maven 2, jpa, freemarker e jquery.
data/LICENSE CHANGED
@@ -1,3 +1,5 @@
1
+ The MIT License
2
+
1
3
  Copyright (c) 2010 Rodolfo Liviero
2
4
 
3
5
  Permission is hereby granted, free of charge, to any person obtaining
@@ -1,33 +1,68 @@
1
1
  = Vraptor Scaffold
2
+ Scaffold for vraptor3.
2
3
 
3
4
  == Installation
4
-
5
- gem install vraptor-scaffold --pre
5
+ gem install vraptor-scaffold --pre
6
+
7
+ == Getting Started
8
+ At the command line client:
9
+
10
+ - vraptor new myapp
11
+ - Change directory into myapp
12
+ - vraptor scaffold product name:string value:double
13
+ - vraptor start
14
+ - Go http://localhost:8080/products
6
15
 
7
- == Usage
16
+ == Werb Server
17
+ The default web server is jetty but you can import the project in your favorite ide
18
+ and run your project with tomcat or jboss as for example.
8
19
 
9
- vraptor new store
10
- cd store
11
- vraptor scaffold product name:string
12
- mvn compile war:inplace jetty:run
20
+ == Supported Java Types
21
+ The only supported types for now are: boolean, double, float, short, integer, long and string.
22
+
23
+ == Architecture Overview
24
+ When you run vraptor new command will be created a java web application with:
13
25
 
14
- http://localhost:8080/products
26
+ - Vraptor3 = Controller
27
+ - Jpa(Hibernate) = ORM
28
+ - Freemarker = Template Engine
29
+ - Sitemesh = Decorator
30
+ - Maven2 = Project Management
31
+ - Jquery = JavaScript
32
+
33
+ Tests will use junit, mockito and dbunit.
15
34
 
16
- == Dependency
35
+ src/main/java/app/controllers
36
+ Controllers will be placed here.
37
+ src/main/java/app/models
38
+ Models will be placed here.
39
+ src/main/webapp
40
+ Web root folder.
41
+ src/main/webapp/decorators
42
+ Decorators will be placed here.
43
+ src/main/webapp/macros
44
+ Freemarker macros will be placed here.
45
+ src/main/webapp/javascripts
46
+ JavaScripts will be placed here.
47
+ src/main/webapp/stylesheets
48
+ CSS will be placed here.
49
+ src/main/webapp/WEB-INF/views
50
+ Views will be placed here. Ex: product/index.ftl
51
+
52
+ == Dependencies
53
+ Ensures that you already have installed:
54
+
17
55
  - Java 6
18
56
  - Maven 2
19
57
 
20
58
  == Note on Patches/Pull Requests
21
-
22
59
  - Fork the project.
23
60
  - Make your feature addition or bug fix.
24
61
  - Add tests for it.
25
62
  - Send me a pull request.
26
63
 
27
- == Authors
28
-
64
+ == Author
29
65
  -- Rodolfo Liviero [mailto:rodolfoliviero@gmail.com]
30
66
 
31
67
  == Copyright
32
-
33
- Copyright (c) 2010 Rodolfo Liviero. See LICENSE for details.
68
+ Copyright (c) 2010 Rodolfo Liviero. See LICENSE for details.
data/Rakefile CHANGED
@@ -10,6 +10,12 @@ begin
10
10
  gem.email = "rodolfoliviero@gmail.com"
11
11
  gem.homepage = "http://github.com/rodolfoliviero/vraptor-scaffold"
12
12
  gem.authors = ["Rodolfo Liviero"]
13
+
14
+ gem.add_dependency "thor", ">=0.13.7"
15
+ gem.add_dependency "rake", ">=0.8.7"
16
+ gem.add_dependency "activesupport", ">=2.3.8"
17
+ gem.add_dependency "bundler", ">=1.0.0.beta.2"
18
+
13
19
  gem.post_install_message = "Thank you for installing vraptor-scaffold. Please read http://github.com/rodolfoliviero/vraptor-scaffold/blob/master/README.rdoc for more information."
14
20
  end
15
21
  Jeweler::GemcutterTasks.new
data/TODO.txt CHANGED
@@ -1,8 +1,14 @@
1
- Fix pom when create app with path Ex: /home/rodolfo/src/app
2
- change log4j.xml to lo4j.properties
3
1
  display name web.xml with app name
4
- changelog
5
- create others persistence unit
2
+ create others persistence unit(maven profile?)
6
3
  new java keyword(how to call new method in controller?)
7
- change database to derby
8
4
  create "partial" to form
5
+ update jpa to jpa2(hibernate 3.5.?-FINAL)
6
+ datetime, date and time support.(jquery-ui?)
7
+ relationship support(many-to-one, one-to-many, many-to-many)
8
+ active record is possible?
9
+ generators help
10
+ usage file to each generator
11
+ gem description
12
+ http://waffle.codehaus.org
13
+ put all html input in macros
14
+ i18n
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :minor: 0
3
3
  :patch: 1
4
- :build: beta2
4
+ :build: beta3
5
5
  :major: 0
@@ -4,9 +4,9 @@ class AppGenerator < VraptorScaffold::Base
4
4
  File.dirname(__FILE__)
5
5
  end
6
6
 
7
- def build(project_name)
8
- @project_name = project_name
9
- self.destination_root=(@project_name)
7
+ def build(project_path)
8
+ @project_name = project_path.split("/").last
9
+ self.destination_root=(project_path)
10
10
  empty_directory "."
11
11
  create_pom
12
12
  create_main_java
@@ -48,7 +48,7 @@ class AppGenerator < VraptorScaffold::Base
48
48
  main_resources = "src/main/resources"
49
49
  empty_directory main_resources
50
50
  inside main_resources do
51
- template_from_root("log4j.xml", "#{main_resources}/log4j.xml")
51
+ template_from_root("log4j.properties", "#{main_resources}/log4j.properties")
52
52
  meta_inf = empty_directory "META-INF"
53
53
  template_from_root("persistence.xml", "#{meta_inf}/persistence.xml")
54
54
  end
@@ -62,10 +62,18 @@ class AppGenerator < VraptorScaffold::Base
62
62
  create_decorators
63
63
  create_js
64
64
  create_css
65
+ create_macros
65
66
  create_web_inf
66
67
  end
67
68
  end
68
69
 
70
+ def create_macros
71
+ macros = empty_directory "macros"
72
+ inside "macros" do
73
+ template_from_root("macros/html.ftl", "#{macros}/html.ftl")
74
+ end
75
+ end
76
+
69
77
  def create_css
70
78
  css = empty_directory "stylesheets"
71
79
  inside "stylesheets" do
@@ -92,7 +100,7 @@ class AppGenerator < VraptorScaffold::Base
92
100
  inside "WEB-INF" do
93
101
  template_from_root("decorators.xml", "#{web_inf}/decorators.xml")
94
102
  template_from_root("web.xml", "#{web_inf}/web.xml")
95
- empty_directory "freemarker"
103
+ empty_directory "views"
96
104
  end
97
105
  end
98
106
 
@@ -1,20 +1,18 @@
1
1
  package app.infrastructure;
2
2
 
3
- import javax.servlet.http.HttpServletRequest;
4
-
3
+ import br.com.caelum.vraptor.http.FormatResolver;
5
4
  import br.com.caelum.vraptor.ioc.Component;
6
- import br.com.caelum.vraptor.view.AcceptHeaderToFormat;
7
5
  import br.com.caelum.vraptor.view.DefaultPathResolver;
8
6
 
9
7
  @Component
10
8
  public class FreemarkerPathResolver extends DefaultPathResolver {
11
9
 
12
- public FreemarkerPathResolver(HttpServletRequest request, AcceptHeaderToFormat acceptHeaderToFormat) {
13
- super(request, acceptHeaderToFormat);
10
+ public FreemarkerPathResolver(FormatResolver resolver) {
11
+ super(resolver);
14
12
  }
15
13
 
16
14
  protected String getPrefix() {
17
- return "/WEB-INF/freemarker/";
15
+ return "/WEB-INF/views/";
18
16
  }
19
17
 
20
18
  protected String getExtension() {
@@ -0,0 +1,4 @@
1
+ log4j.appender.console=org.apache.log4j.ConsoleAppender
2
+ log4j.appender.console.layout=org.apache.log4j.PatternLayout
3
+ log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n
4
+ log4j.rootLogger=info, console
@@ -0,0 +1,11 @@
1
+ <#macro checkbox name checked=false>
2
+ <#if checked>
3
+ <input type="checkbox" name="${name}" checked>
4
+ <#else>
5
+ <input type="checkbox" name="${name}">
6
+ </#if>
7
+ </#macro>
8
+
9
+ <#macro text name value="">
10
+ <input type="text" name="${name}" value="${value}">
11
+ </#macro>
@@ -9,9 +9,11 @@
9
9
 
10
10
  <properties>
11
11
  <property name="hibernate.connection.driver_class" value="org.hsqldb.jdbcDriver" />
12
- <property name="hibernate.connection.url" value="jdbc:hsqldb:mem:testdb" />
13
- <property name="hibernate.hbm2ddl.auto" value="create" />
12
+ <property name="hibernate.connection.url" value="jdbc:hsqldb:file:tmp/devdb" />
13
+ <property name="hibernate.hbm2ddl.auto" value="update" />
14
14
  <property name="hibernate.query.substitutions" value="true=1, false=0"/>
15
+ <property name="hibernate.show_sql" value="true" />
16
+ <property name="hibernate.format_sql" value="true" />
15
17
  </properties>
16
18
  </persistence-unit>
17
19
 
@@ -64,7 +64,7 @@
64
64
  <dependency>
65
65
  <groupId>br.com.caelum</groupId>
66
66
  <artifactId>vraptor</artifactId>
67
- <version>3.1.2</version>
67
+ <version>3.1.3</version>
68
68
  </dependency>
69
69
  <dependency>
70
70
  <groupId>opensymphony</groupId>
@@ -42,6 +42,10 @@
42
42
  <param-name>default_encoding</param-name>
43
43
  <param-value>ISO-8859-1</param-value>
44
44
  </init-param>
45
+ <init-param>
46
+ <param-name>auto_import</param-name>
47
+ <param-value>macros/html.ftl as html</param-value>
48
+ </init-param>
45
49
  <load-on-startup>1</load-on-startup>
46
50
  </servlet>
47
51
 
@@ -3,6 +3,25 @@ class Attribute
3
3
 
4
4
  def initialize(name, type)
5
5
  @name = name
6
+ set_type(type)
7
+ end
8
+
9
+ def set_type(type)
6
10
  @type = type
11
+ @type = @type.capitalize unless boolean?
12
+ end
13
+
14
+ def html_input
15
+ input = "text"
16
+ input = "checkbox" if boolean?
17
+ input
18
+ end
19
+
20
+ def boolean?
21
+ type.eql? "boolean"
22
+ end
23
+
24
+ def self.valid_types
25
+ %w(boolean double float short integer long string)
7
26
  end
8
27
  end
@@ -5,10 +5,14 @@ class FreemarkerGenerator < BaseScaffold
5
5
  end
6
6
 
7
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#{class_name}.ftl")
11
- template("templates/edit.erb", "src/main/webapp/WEB-INF/freemarker/#{@model}/edit.ftl")
8
+ create_view("index")
9
+ create_view("show")
10
+ create_view("new", "new#{class_name}")
11
+ create_view("edit")
12
+ end
13
+
14
+ def create_view(template_name, file_name=template_name)
15
+ template("templates/#{template_name}.erb", "src/main/webapp/WEB-INF/views/#{@model}/#{file_name}.ftl")
12
16
  end
13
17
 
14
18
  def path
@@ -7,7 +7,7 @@
7
7
  <% @attributes.each do |att| -%>
8
8
  <div class="field">
9
9
  <%= att.name.capitalize %>:<br />
10
- <input type="text" name="<%= "#{@model}.#{att.name}" %>" value="<%= "${#{@model}.#{att.name}}" %>">
10
+ <%= "<@html.#{att.html_input} \"#{@model}.#{att.name}\" #{@model}.#{att.name}/>" %>
11
11
  </div>
12
12
  <% end -%>
13
13
  <div class="actions">
@@ -14,7 +14,10 @@
14
14
  <#list <%= "#{@model}List as #@model" %>>
15
15
  <tr>
16
16
  <% @attributes.each do |att| -%>
17
- <td><%= "${#{@model}.#{att.name}!\"\"}" %></td>
17
+ <td>
18
+ <%= "${#{@model}.#{att.name}!\"\"}" unless att.boolean? %>
19
+ <%= "${#{@model}.#{att.name}?string}" if att.boolean? %>
20
+ </td>
18
21
  <% end -%>
19
22
  <td><a href="<%= "#{path}/${#{@model}.id}/show" %>">show</a></td>
20
23
  <td><a href="<%= "#{path}/${#{@model}.id}/edit" %>">edit</a></td>
@@ -4,7 +4,7 @@
4
4
  <% @attributes.each do |att| -%>
5
5
  <div class="field">
6
6
  <%= att.name.capitalize %>:<br />
7
- <input type="text" name="<%= "#{@model}.#{att.name}" %>">
7
+ <%= "<@html.#{att.html_input} \"#{@model}.#{att.name}\"/>" %>
8
8
  </div>
9
9
  <% end -%>
10
10
  <div class="actions">
@@ -3,7 +3,8 @@
3
3
  <% @attributes.each do |att| -%>
4
4
  <p>
5
5
  <b><%= att.name.capitalize %>:</b>
6
- <%= "${#{@model}.#{att.name}!\"\"}" %>
6
+ <%= "${#{@model}.#{att.name}!\"\"}" unless att.boolean? %>
7
+ <%= "${#{@model}.#{att.name}?string}" if att.boolean? %>
7
8
  </p>
8
9
  <% end -%>
9
10
 
@@ -3,8 +3,9 @@ class ScaffoldGenerator
3
3
  attr_accessor :attributes, :model
4
4
 
5
5
  def initialize(args)
6
- @model = args.delete_at(0).downcase
7
- parse_attributes(args)
6
+ @model = args.shift.downcase
7
+ @attributes = []
8
+ validate_scaffold_command(args)
8
9
  end
9
10
 
10
11
  def build
@@ -14,11 +15,27 @@ class ScaffoldGenerator
14
15
  end
15
16
 
16
17
  private
17
- def parse_attributes(args)
18
- @attributes = []
18
+ def validate_scaffold_command(args)
19
+ unless File.exist?("pom.xml")
20
+ puts "To run scaffold please go to the project root folder."
21
+ Kernel::exit
22
+ end
23
+ validate_parse_attributes(args)
24
+ end
25
+
26
+ def validate_parse_attributes(args)
19
27
  args.each do |arg|
20
28
  parsedAttribute = arg.split(":")
21
- @attributes << Attribute.new(parsedAttribute[0], parsedAttribute[1].capitalize)
29
+ validate_parse_attribute(parsedAttribute)
30
+ end
31
+ end
32
+
33
+ def validate_parse_attribute(parsedAttribute)
34
+ type = parsedAttribute.last.downcase
35
+ unless Attribute.valid_types.include?(type)
36
+ puts "Attribute #{type} is not supported. The supported attributes types are: #{Attribute.valid_types.join(" ")}"
37
+ Kernel::exit
22
38
  end
39
+ @attributes << Attribute.new(parsedAttribute.first, type)
23
40
  end
24
41
  end
@@ -3,9 +3,10 @@ require File.dirname(__FILE__) + '/load_paths'
3
3
  module VraptorScaffold
4
4
  class Main
5
5
  def self.execute(args)
6
- action = args.delete_at(0)
6
+ action = args.shift
7
7
  AppGenerator.new.build(args[0]) if action == "new"
8
8
  ScaffoldGenerator.new(args).build if action == "scaffold"
9
+ exec("mvn compile war:inplace jetty:run") if action == "start"
9
10
  end
10
11
  end
11
12
  end
@@ -3,28 +3,28 @@ require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper")
3
3
  describe AppGenerator do
4
4
 
5
5
  before(:all) do
6
- @project_name = "vraptor-scaffold"
7
- AppGenerator.new.build(@project_name)
6
+ @project_path = "src/vraptor-scaffold"
7
+ AppGenerator.new.build(@project_path)
8
8
  end
9
9
 
10
10
  after(:all) do
11
- FileUtils.remove_dir(@project_name)
11
+ FileUtils.remove_dir(@project_path)
12
12
  end
13
13
 
14
14
  context "build new application" do
15
15
  it "should create directory with project name" do
16
- File.exist?(@project_name).should be_true
16
+ File.exist?(@project_path).should be_true
17
17
  end
18
18
 
19
19
  it "should create pom" do
20
20
  from = File.expand_path(File.dirname(__FILE__) + "/templates/pom.xml")
21
- to = "#{@project_name}/pom.xml"
21
+ to = "#{@project_path}/pom.xml"
22
22
  FileUtils.compare_file(from, to).should be_true
23
23
  end
24
24
 
25
25
  context "creating main java" do
26
26
  before(:all) do
27
- @main_java = "#{@project_name}/src/main/java"
27
+ @main_java = "#{@project_path}/src/main/java"
28
28
  @app = "#{@main_java}/app"
29
29
  end
30
30
 
@@ -57,7 +57,7 @@ describe AppGenerator do
57
57
 
58
58
  context "creating main resources" do
59
59
  before(:all) do
60
- @main_resources = "#{@project_name}/src/main/resources"
60
+ @main_resources = "#{@project_path}/src/main/resources"
61
61
  @meta_inf = "#{@main_resources}/META-INF"
62
62
  end
63
63
 
@@ -66,8 +66,8 @@ describe AppGenerator do
66
66
  end
67
67
 
68
68
  it "should create log4j" do
69
- from = "#{AppGenerator.source_root}/templates/log4j.xml"
70
- to = "#{@main_resources}/log4j.xml"
69
+ from = "#{AppGenerator.source_root}/templates/log4j.properties"
70
+ to = "#{@main_resources}/log4j.properties"
71
71
  FileUtils.compare_file(from, to).should be_true
72
72
  end
73
73
 
@@ -83,7 +83,7 @@ describe AppGenerator do
83
83
  end
84
84
  context "creating webapp" do
85
85
  before(:all) do
86
- @webapp = "#{@project_name}/src/main/webapp"
86
+ @webapp = "#{@project_path}/src/main/webapp"
87
87
  @web_inf = "#{@webapp}/WEB-INF"
88
88
  @decorators = "#{@webapp}/decorators"
89
89
  end
@@ -108,6 +108,12 @@ describe AppGenerator do
108
108
  FileUtils.compare_file(from, to).should be_true
109
109
  end
110
110
 
111
+ it "should create html macro file" do
112
+ from = "#{AppGenerator.source_root}/templates/macros/html.ftl"
113
+ to = "#{@webapp}/macros/html.ftl"
114
+ FileUtils.compare_file(from, to).should be_true
115
+ end
116
+
111
117
  it "should create WEB-INF folder" do
112
118
  File.exist?(@web_inf).should be_true
113
119
  end
@@ -124,8 +130,8 @@ describe AppGenerator do
124
130
  FileUtils.compare_file(from, to).should be_true
125
131
  end
126
132
 
127
- it "should create freemarker folder" do
128
- File.exist?("#{@web_inf}/freemarker").should be_true
133
+ it "should create views folder" do
134
+ File.exist?("#{@web_inf}/views").should be_true
129
135
  end
130
136
 
131
137
  it "should create scaffold css" do
@@ -142,8 +148,8 @@ describe AppGenerator do
142
148
  end
143
149
  context "creating test" do
144
150
  before(:all) do
145
- @test_java = "#{@project_name}/src/test/java"
146
- @test_resource = "#{@project_name}/src/test/java"
151
+ @test_java = "#{@project_path}/src/test/java"
152
+ @test_resource = "#{@project_path}/src/test/java"
147
153
  end
148
154
 
149
155
  it "should create test source folder" do
@@ -64,7 +64,7 @@
64
64
  <dependency>
65
65
  <groupId>br.com.caelum</groupId>
66
66
  <artifactId>vraptor</artifactId>
67
- <version>3.1.2</version>
67
+ <version>3.1.3</version>
68
68
  </dependency>
69
69
  <dependency>
70
70
  <groupId>opensymphony</groupId>
@@ -0,0 +1,82 @@
1
+ require File.expand_path(File.dirname(__FILE__) + "/../../spec_helper")
2
+
3
+ describe Attribute do
4
+
5
+ context "supported types" do
6
+ it "should support boolean" do
7
+ Attribute.valid_types.include?"boolean".should be_true
8
+ end
9
+
10
+ it "should support double" do
11
+ Attribute.valid_types.include?"double".should be_true
12
+ end
13
+
14
+ it "should support string" do
15
+ Attribute.valid_types.include?"string".should be_true
16
+ end
17
+
18
+ it "should support float" do
19
+ Attribute.valid_types.include?"float".should be_true
20
+ end
21
+
22
+ it "should support short" do
23
+ Attribute.valid_types.include?"short".should be_true
24
+ end
25
+
26
+ it "should support integer" do
27
+ Attribute.valid_types.include?"integer".should be_true
28
+ end
29
+
30
+ it "should support long" do
31
+ Attribute.valid_types.include?"long".should be_true
32
+ end
33
+ end
34
+
35
+ context "html_input" do
36
+ it "should know html input to boolean" do
37
+ Attribute.new("flag", "boolean").html_input.should eql("checkbox")
38
+ end
39
+
40
+ it "should know html input to string" do
41
+ Attribute.new("name", "string").html_input.should eql("text")
42
+ end
43
+
44
+ it "should know html input to double" do
45
+ Attribute.new("name", "double").html_input.should eql("text")
46
+ end
47
+
48
+ it "should know html input to float" do
49
+ Attribute.new("name", "float").html_input.should eql("text")
50
+ end
51
+
52
+ it "should know html input to short" do
53
+ Attribute.new("name", "short").html_input.should eql("text")
54
+ end
55
+
56
+ it "should know html input to integer" do
57
+ Attribute.new("name", "integer").html_input.should eql("text")
58
+ end
59
+
60
+ it "should know html input to long" do
61
+ Attribute.new("name", "long").html_input.should eql("text")
62
+ end
63
+ end
64
+
65
+ context "set type" do
66
+ it "should set corret type to boolean" do
67
+ Attribute.new("flag", "boolean").type.should eql("boolean")
68
+ end
69
+
70
+ it "should set corret type otherwise" do
71
+ Attribute.new("id", "long").type.should eql("Long")
72
+ end
73
+ end
74
+
75
+ it "should be boolean when type is boolean" do
76
+ Attribute.new("flag", "boolean").boolean?.should be_true
77
+ end
78
+
79
+ it "cannot be boolean otherwise" do
80
+ Attribute.new("flag", "short").boolean?.should be_false
81
+ end
82
+ end
@@ -12,19 +12,19 @@ describe FreemarkerGenerator do
12
12
  end
13
13
 
14
14
  it "should create index view" do
15
- File.exist?("src/main/webapp/WEB-INF/freemarker/product/index.ftl").should be_true
15
+ File.exist?("src/main/webapp/WEB-INF/views/product/index.ftl").should be_true
16
16
  end
17
17
 
18
18
  it "should create show view" do
19
- File.exist?("src/main/webapp/WEB-INF/freemarker/product/show.ftl").should be_true
19
+ File.exist?("src/main/webapp/WEB-INF/views/product/show.ftl").should be_true
20
20
  end
21
21
 
22
22
  it "should create new view" do
23
- File.exist?("src/main/webapp/WEB-INF/freemarker/product/newProduct.ftl").should be_true
23
+ File.exist?("src/main/webapp/WEB-INF/views/product/newProduct.ftl").should be_true
24
24
  end
25
-
25
+
26
26
  it "should create edit view" do
27
- File.exist?("src/main/webapp/WEB-INF/freemarker/product/edit.ftl").should be_true
27
+ File.exist?("src/main/webapp/WEB-INF/views/product/edit.ftl").should be_true
28
28
  end
29
29
 
30
30
  end
@@ -11,7 +11,7 @@ public class Product {
11
11
  private Long id;
12
12
 
13
13
  private String name;
14
- private Double value;
14
+ private boolean flag;
15
15
 
16
16
  public void setId(Long id) {
17
17
  this.id = id;
@@ -29,12 +29,12 @@ public class Product {
29
29
  return name;
30
30
  }
31
31
 
32
- public void setValue(Double value) {
33
- this.value = value;
32
+ public void setFlag(boolean flag) {
33
+ this.flag = flag;
34
34
  }
35
35
 
36
- public Double getValue() {
37
- return value;
36
+ public boolean getFlag() {
37
+ return flag;
38
38
  }
39
39
 
40
40
  }
@@ -3,24 +3,44 @@ require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper")
3
3
  describe ScaffoldGenerator do
4
4
 
5
5
  before(:each) do
6
- args = ["product", "name:string", "value:double"]
7
- @generator = ScaffoldGenerator.new(args)
6
+ @args = ["product", "name:String", "value:double"]
7
+ end
8
+
9
+ context "invalid scaffold command" do
10
+ it "outside project root" do
11
+ File.stub!(:exist?).with("pom.xml").and_return(false)
12
+ Kernel.should_receive(:exit)
13
+ ScaffoldGenerator.new(@args)
14
+ end
8
15
 
9
- @model_generator = mock(ModelGenerator)
10
- ModelGenerator.stub!(:new).with(@generator.model, @generator.attributes).and_return(@model_generator)
16
+ it "invalid attribute type" do
17
+ File.stub!(:exist?).and_return(true)
18
+ args = ["product", "name:string", "value:char"]
19
+ Kernel.should_receive(:exit)
20
+ ScaffoldGenerator.new(args)
21
+ end
22
+ end
23
+
24
+ context "valid scaffold command" do
25
+
26
+ before(:each) do
27
+ File.stub!(:exist?).and_return(true)
28
+ @generator = ScaffoldGenerator.new(@args)
11
29
 
12
- @controller_generator = mock(ControllerGenerator)
30
+ @model_generator = mock(ModelGenerator)
31
+ ModelGenerator.stub!(:new).with(@generator.model, @generator.attributes).and_return(@model_generator)
13
32
 
14
- ControllerGenerator.stub!(:new).with(@generator.model, @generator.attributes).and_return(@controller_generator)
15
- @freemarker_generator = mock(FreemarkerGenerator)
16
- FreemarkerGenerator.stub!(:new).with(@generator.model, @generator.attributes).and_return(@freemarker_generator)
33
+ @controller_generator = mock(ControllerGenerator)
34
+ ControllerGenerator.stub!(:new).with(@generator.model, @generator.attributes).and_return(@controller_generator)
35
+
36
+ @freemarker_generator = mock(FreemarkerGenerator)
37
+ FreemarkerGenerator.stub!(:new).with(@generator.model, @generator.attributes).and_return(@freemarker_generator)
17
38
 
18
39
  @model_generator.stub!(:build)
19
40
  @controller_generator.stub!(:build)
20
41
  @freemarker_generator.stub!(:build)
21
42
  end
22
-
23
- context "build scaffold" do
43
+
24
44
  it "should call model generator" do
25
45
  @model_generator.should_receive(:build)
26
46
  @generator.build
@@ -16,7 +16,7 @@ describe VraptorScaffold::Main do
16
16
  end
17
17
 
18
18
  it "cannot call app generator when not typed new" do
19
- @args.delete("new")
19
+ @args.shift
20
20
  @generator.should_not_receive(:build)
21
21
  VraptorScaffold::Main.execute(@args)
22
22
  end
@@ -34,4 +34,11 @@ describe VraptorScaffold::Main do
34
34
  VraptorScaffold::Main.execute(@args)
35
35
  end
36
36
  end
37
+
38
+ context "web server" do
39
+ it "should start server when typed start" do
40
+ VraptorScaffold::Main.should_receive(:exec).with("mvn compile war:inplace jetty:run")
41
+ VraptorScaffold::Main.execute(["start"])
42
+ end
43
+ end
37
44
  end
@@ -3,5 +3,5 @@ require 'spec/autorun'
3
3
  require File.dirname(__FILE__) + '/../lib/vraptor-scaffold'
4
4
 
5
5
  def build_attributes
6
- attributes = [Attribute.new("name", "String"), Attribute.new("value", "Double")]
6
+ [Attribute.new("name", "string"), Attribute.new("flag", "boolean")]
7
7
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{vraptor-scaffold}
8
- s.version = "0.0.1.beta2"
8
+ s.version = "0.0.1.beta3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Rodolfo Liviero"]
12
- s.date = %q{2010-07-08}
12
+ s.date = %q{2010-07-11}
13
13
  s.default_executable = %q{vraptor}
14
14
  s.description = %q{}
15
15
  s.email = %q{rodolfoliviero@gmail.com}
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
22
22
  ".document",
23
23
  ".gitignore",
24
24
  "Gemfile",
25
+ "History.txt",
25
26
  "LICENSE",
26
27
  "README.rdoc",
27
28
  "Rakefile",
@@ -33,7 +34,8 @@ Gem::Specification.new do |s|
33
34
  "lib/generators/app_generator/templates/decorators.xml",
34
35
  "lib/generators/app_generator/templates/index.jsp",
35
36
  "lib/generators/app_generator/templates/javascripts/jquery-1.4.2.min.js",
36
- "lib/generators/app_generator/templates/log4j.xml",
37
+ "lib/generators/app_generator/templates/log4j.properties",
38
+ "lib/generators/app_generator/templates/macros/html.ftl",
37
39
  "lib/generators/app_generator/templates/main.ftl",
38
40
  "lib/generators/app_generator/templates/persistence.xml",
39
41
  "lib/generators/app_generator/templates/pom.erb",
@@ -90,9 +92,21 @@ Gem::Specification.new do |s|
90
92
  s.specification_version = 3
91
93
 
92
94
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
95
+ s.add_runtime_dependency(%q<thor>, [">= 0.13.7"])
96
+ s.add_runtime_dependency(%q<rake>, [">= 0.8.7"])
97
+ s.add_runtime_dependency(%q<activesupport>, [">= 2.3.8"])
98
+ s.add_runtime_dependency(%q<bundler>, [">= 1.0.0.beta.2"])
93
99
  else
100
+ s.add_dependency(%q<thor>, [">= 0.13.7"])
101
+ s.add_dependency(%q<rake>, [">= 0.8.7"])
102
+ s.add_dependency(%q<activesupport>, [">= 2.3.8"])
103
+ s.add_dependency(%q<bundler>, [">= 1.0.0.beta.2"])
94
104
  end
95
105
  else
106
+ s.add_dependency(%q<thor>, [">= 0.13.7"])
107
+ s.add_dependency(%q<rake>, [">= 0.8.7"])
108
+ s.add_dependency(%q<activesupport>, [">= 2.3.8"])
109
+ s.add_dependency(%q<bundler>, [">= 1.0.0.beta.2"])
96
110
  end
97
111
  end
98
112
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vraptor-scaffold
3
3
  version: !ruby/object:Gem::Version
4
- hash: 299253582
4
+ hash: 299253583
5
5
  prerelease: true
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
9
  - 1
10
- - beta2
11
- version: 0.0.1.beta2
10
+ - beta3
11
+ version: 0.0.1.beta3
12
12
  platform: ruby
13
13
  authors:
14
14
  - Rodolfo Liviero
@@ -16,10 +16,75 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2010-07-08 00:00:00 -03:00
19
+ date: 2010-07-11 00:00:00 -03:00
20
20
  default_executable: vraptor
21
- dependencies: []
22
-
21
+ dependencies:
22
+ - !ruby/object:Gem::Dependency
23
+ name: thor
24
+ prerelease: false
25
+ requirement: &id001 !ruby/object:Gem::Requirement
26
+ none: false
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 37
31
+ segments:
32
+ - 0
33
+ - 13
34
+ - 7
35
+ version: 0.13.7
36
+ type: :runtime
37
+ version_requirements: *id001
38
+ - !ruby/object:Gem::Dependency
39
+ name: rake
40
+ prerelease: false
41
+ requirement: &id002 !ruby/object:Gem::Requirement
42
+ none: false
43
+ requirements:
44
+ - - ">="
45
+ - !ruby/object:Gem::Version
46
+ hash: 49
47
+ segments:
48
+ - 0
49
+ - 8
50
+ - 7
51
+ version: 0.8.7
52
+ type: :runtime
53
+ version_requirements: *id002
54
+ - !ruby/object:Gem::Dependency
55
+ name: activesupport
56
+ prerelease: false
57
+ requirement: &id003 !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ hash: 19
63
+ segments:
64
+ - 2
65
+ - 3
66
+ - 8
67
+ version: 2.3.8
68
+ type: :runtime
69
+ version_requirements: *id003
70
+ - !ruby/object:Gem::Dependency
71
+ name: bundler
72
+ prerelease: false
73
+ requirement: &id004 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ hash: 62196359
79
+ segments:
80
+ - 1
81
+ - 0
82
+ - 0
83
+ - beta
84
+ - 2
85
+ version: 1.0.0.beta.2
86
+ type: :runtime
87
+ version_requirements: *id004
23
88
  description: ""
24
89
  email: rodolfoliviero@gmail.com
25
90
  executables:
@@ -33,6 +98,7 @@ files:
33
98
  - .document
34
99
  - .gitignore
35
100
  - Gemfile
101
+ - History.txt
36
102
  - LICENSE
37
103
  - README.rdoc
38
104
  - Rakefile
@@ -44,7 +110,8 @@ files:
44
110
  - lib/generators/app_generator/templates/decorators.xml
45
111
  - lib/generators/app_generator/templates/index.jsp
46
112
  - lib/generators/app_generator/templates/javascripts/jquery-1.4.2.min.js
47
- - lib/generators/app_generator/templates/log4j.xml
113
+ - lib/generators/app_generator/templates/log4j.properties
114
+ - lib/generators/app_generator/templates/macros/html.ftl
48
115
  - lib/generators/app_generator/templates/main.ftl
49
116
  - lib/generators/app_generator/templates/persistence.xml
50
117
  - lib/generators/app_generator/templates/pom.erb
@@ -1,20 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
3
-
4
- <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
5
- <layout class="org.apache.log4j.PatternLayout">
6
- <param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %5p [%-20c{1}] %m%n" />
7
- </layout>
8
- </appender>
9
-
10
- <logger name="org.hibernate">
11
- <level value="WARN" />
12
- <appender-ref ref="CONSOLE" />
13
- </logger>
14
-
15
- <root>
16
- <priority value="INFO" />
17
- <appender-ref ref="CONSOLE" />
18
- </root>
19
-
20
- </log4j:configuration>