springmvc-scaffold 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +45 -0
- data/README.markdown +31 -0
- data/Rakefile +9 -0
- data/bin/springmvc +7 -0
- data/lib/springmvc-scaffold.rb +14 -0
- data/lib/springmvc-scaffold/configuration.rb +50 -0
- data/lib/springmvc-scaffold/execution.rb +20 -0
- data/lib/springmvc-scaffold/generators/app/app_generator.rb +123 -0
- data/lib/springmvc-scaffold/generators/app/dependencies.rb +26 -0
- data/lib/springmvc-scaffold/generators/app/dependency.rb +15 -0
- data/lib/springmvc-scaffold/generators/app/templates/build.gradle.erb +56 -0
- data/lib/springmvc-scaffold/generators/app/templates/models/Entity.erb +46 -0
- data/lib/springmvc-scaffold/generators/app/templates/orm/Repository-hibernate.java.tt +51 -0
- data/lib/springmvc-scaffold/generators/app/templates/orm/Repository-jpa.java.tt +49 -0
- data/lib/springmvc-scaffold/generators/app/templates/pom.erb +95 -0
- data/lib/springmvc-scaffold/generators/app/templates/resources/hibernate.properties +16 -0
- data/lib/springmvc-scaffold/generators/app/templates/resources/log4j.properties +4 -0
- data/lib/springmvc-scaffold/generators/app/templates/resources/messages.properties +0 -0
- data/lib/springmvc-scaffold/generators/app/templates/springmvc-scaffold.erb +6 -0
- data/lib/springmvc-scaffold/generators/app/templates/webapp/.bowerrc +3 -0
- data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/jsp/decorators/main.jsp +15 -0
- data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/jsp/prelude.jspf +4 -0
- data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/sitemesh3.xml +3 -0
- data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/spring-servlet.xml.tt +42 -0
- data/lib/springmvc-scaffold/generators/app/templates/webapp/WEB-INF/web.xml.tt +52 -0
- data/lib/springmvc-scaffold/generators/app/templates/webapp/bower.json.tt +7 -0
- data/lib/springmvc-scaffold/generators/app/templates/webapp/stylesheets/application.css +38 -0
- data/lib/springmvc-scaffold/generators/base.rb +17 -0
- data/lib/springmvc-scaffold/generators/scaffold/attribute.rb +68 -0
- data/lib/springmvc-scaffold/generators/scaffold/base_scaffold.rb +54 -0
- data/lib/springmvc-scaffold/generators/scaffold/controller/controller_generator.rb +20 -0
- data/lib/springmvc-scaffold/generators/scaffold/controller/templates/controller.erb +126 -0
- data/lib/springmvc-scaffold/generators/scaffold/controller/templates/controller_test.erb +13 -0
- data/lib/springmvc-scaffold/generators/scaffold/imports.rb +18 -0
- data/lib/springmvc-scaffold/generators/scaffold/jsp/jsp_generator.rb +40 -0
- data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/edit.erb +15 -0
- data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/form.erb +14 -0
- data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/index.erb +38 -0
- data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/new.erb +14 -0
- data/lib/springmvc-scaffold/generators/scaffold/jsp/templates/show.erb +16 -0
- data/lib/springmvc-scaffold/generators/scaffold/model/model_generator.rb +16 -0
- data/lib/springmvc-scaffold/generators/scaffold/model/templates/model.erb +22 -0
- data/lib/springmvc-scaffold/generators/scaffold/model/templates/model_test.erb +13 -0
- data/lib/springmvc-scaffold/generators/scaffold/repository/repository_generator.rb +30 -0
- data/lib/springmvc-scaffold/generators/scaffold/repository/templates/repository.erb +18 -0
- data/lib/springmvc-scaffold/generators/scaffold/repository/templates/repository_test.erb +13 -0
- data/lib/springmvc-scaffold/generators/scaffold/scaffold_generator.rb +31 -0
- data/lib/springmvc-scaffold/runner.rb +7 -0
- data/lib/springmvc-scaffold/runner/commands_help.rb +11 -0
- data/lib/springmvc-scaffold/runner/generator.rb +14 -0
- data/lib/springmvc-scaffold/runner/help.rb +10 -0
- data/lib/springmvc-scaffold/runner/scaffold.rb +15 -0
- data/lib/springmvc-scaffold/version.rb +3 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/springmvc-scaffold/configuration_spec.rb +124 -0
- data/spec/springmvc-scaffold/execution_spec.rb +40 -0
- data/spec/springmvc-scaffold/generators/app/app_generator_spec.rb +226 -0
- data/spec/springmvc-scaffold/generators/app/dependency_spec.rb +14 -0
- data/spec/springmvc-scaffold/generators/app/templates/Entity.java +46 -0
- data/spec/springmvc-scaffold/generators/app/templates/RepositoryJPA.java +49 -0
- data/spec/springmvc-scaffold/generators/app/templates/build.gradle +59 -0
- data/spec/springmvc-scaffold/generators/app/templates/pom.xml +146 -0
- data/spec/springmvc-scaffold/generators/app/templates/springmvc-scaffold.properties +6 -0
- data/spec/springmvc-scaffold/generators/scaffold/attribute_spec.rb +215 -0
- data/spec/springmvc-scaffold/generators/scaffold/base_scaffold_spec.rb +70 -0
- data/spec/springmvc-scaffold/generators/scaffold/controller/controller_generator_spec.rb +53 -0
- data/spec/springmvc-scaffold/generators/scaffold/controller/templates/ProductsController.java +97 -0
- data/spec/springmvc-scaffold/generators/scaffold/imports_spec.rb +9 -0
- data/spec/springmvc-scaffold/generators/scaffold/jsp/jsp_generator_spec.rb +46 -0
- data/spec/springmvc-scaffold/generators/scaffold/jsp/templates/form.jsp +25 -0
- data/spec/springmvc-scaffold/generators/scaffold/model/model_generator_spec.rb +28 -0
- data/spec/springmvc-scaffold/generators/scaffold/model/templates/Product.java +43 -0
- data/spec/springmvc-scaffold/generators/scaffold/repository/repository_generator_spec.rb +49 -0
- data/spec/springmvc-scaffold/generators/scaffold/repository/templates/Clients.java +16 -0
- data/spec/springmvc-scaffold/generators/scaffold/repository/templates/Products.java +10 -0
- data/spec/springmvc-scaffold/generators/scaffold/scaffold_generator_spec.rb +60 -0
- data/spec/springmvc-scaffold/runner/commands_help_spec.rb +13 -0
- data/spec/springmvc-scaffold/runner/generator_spec.rb +21 -0
- data/spec/springmvc-scaffold/runner/help_spec.rb +22 -0
- data/spec/springmvc-scaffold/runner/scaffold_spec.rb +36 -0
- data/spec/springmvc-scaffold_spec.rb +4 -0
- data/springmvc-scaffold.gemspec +27 -0
- metadata +185 -0
@@ -0,0 +1,18 @@
|
|
1
|
+
package <%= Configuration.package %>.<%= Configuration.repositories_package %>;
|
2
|
+
|
3
|
+
<% if Configuration.hibernate? -%>
|
4
|
+
import <%= orm_import %>;
|
5
|
+
import org.springframework.beans.factory.annotation.Autowired;
|
6
|
+
<% end -%>
|
7
|
+
import org.springframework.stereotype.Repository;
|
8
|
+
|
9
|
+
import <%= Configuration.full_models_package %>.<%= class_name %>;
|
10
|
+
|
11
|
+
@Repository
|
12
|
+
public class <%= repository_class_name %> extends GenericRepository<<%= class_name %>> {
|
13
|
+
<%- if Configuration.hibernate? %>
|
14
|
+
@Autowired
|
15
|
+
public <%= repository_class_name %>(<%= orm_class %> <%= orm_parameter_name %>) {
|
16
|
+
super(<%= orm_parameter_name %>);
|
17
|
+
}<% end %>
|
18
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
package <%= Configuration.package %>.<%= Configuration.repositories_package %>;
|
2
|
+
|
3
|
+
import static org.junit.Assert.assertNotNull;
|
4
|
+
|
5
|
+
import org.junit.Test;
|
6
|
+
|
7
|
+
public class <%= repository_test_class_name %> {
|
8
|
+
|
9
|
+
@Test
|
10
|
+
public void fakeTest() {
|
11
|
+
assertNotNull("test something real");
|
12
|
+
}
|
13
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
class ScaffoldGenerator < SpringMvcScaffold::Base
|
2
|
+
|
3
|
+
attr_accessor :generated_attributes
|
4
|
+
argument :model
|
5
|
+
argument :attributes, type: :hash, default: {}, banner: "field:type field:type"
|
6
|
+
|
7
|
+
def self.banner
|
8
|
+
"springmvc scaffold #{self.arguments.map(&:usage).join(' ')}"
|
9
|
+
end
|
10
|
+
|
11
|
+
def initialize(args)
|
12
|
+
super(args)
|
13
|
+
@generated_attributes = attributes.map {|field, type| Attribute.new(field, type) }
|
14
|
+
end
|
15
|
+
|
16
|
+
def controller_generator
|
17
|
+
ControllerGenerator.new(model, generated_attributes).build
|
18
|
+
end
|
19
|
+
|
20
|
+
def model_generator
|
21
|
+
ModelGenerator.new(model, generated_attributes).build
|
22
|
+
end
|
23
|
+
|
24
|
+
def template_generator
|
25
|
+
JspGenerator.new(model, generated_attributes).build
|
26
|
+
end
|
27
|
+
|
28
|
+
def repository_generator
|
29
|
+
RepositoryGenerator.new(model, generated_attributes).build
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module SpringMvcScaffold::Runner
|
2
|
+
|
3
|
+
class Generator
|
4
|
+
def run(args)
|
5
|
+
project_path = args.shift
|
6
|
+
if SpringMvcScaffold::Runner::Help.help?(project_path)
|
7
|
+
AppGenerator.start(["-h"])
|
8
|
+
else
|
9
|
+
AppGenerator.new(project_path, args).invoke_all
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module SpringMvcScaffold::Runner
|
2
|
+
|
3
|
+
class Scaffold
|
4
|
+
def run(args)
|
5
|
+
if SpringMvcScaffold::Runner::Help.help?(args.first)
|
6
|
+
ScaffoldGenerator.start(["-h"])
|
7
|
+
elsif File.exists?("src")
|
8
|
+
ScaffoldGenerator.new(args).invoke_all
|
9
|
+
else
|
10
|
+
Kernel.puts "To run springmvc scaffold please go to the project root folder."
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../lib/springmvc-scaffold'
|
2
|
+
|
3
|
+
def exists_and_identical?(source, created)
|
4
|
+
c = File.open(created).read.gsub( /\r/m, "" )
|
5
|
+
c2 = File.open(source).read.gsub( /\r/m, "" )
|
6
|
+
expect(c).to eq c2
|
7
|
+
end
|
8
|
+
|
9
|
+
def build_attributes
|
10
|
+
[Attribute.new("name", "string"), Attribute.new("active", "boolean"),
|
11
|
+
Attribute.new("price", "double"), Attribute.new("category", "references")]
|
12
|
+
end
|
13
|
+
|
14
|
+
def mock_config_file
|
15
|
+
file = YAML.load_file(File.join(File.dirname(__FILE__), "springmvc-scaffold/generators/app/templates/springmvc-scaffold.properties"))
|
16
|
+
allow(Configuration).to receive(:config).and_return(file)
|
17
|
+
end
|
18
|
+
|
19
|
+
def double_generator(generator_class)
|
20
|
+
generator = double(generator_class)
|
21
|
+
allow(generator_class).to receive(:new).with(model, attributes).and_return(generator)
|
22
|
+
generator
|
23
|
+
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
|
+
describe Configuration do
|
4
|
+
|
5
|
+
it "configures main source" do
|
6
|
+
expect(Configuration::MAIN_SRC).to eq "src/main/java"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "configures main resources" do
|
10
|
+
expect(Configuration::MAIN_RESOURCES).to eq "src/main/resources"
|
11
|
+
end
|
12
|
+
|
13
|
+
it "configures webapp" do
|
14
|
+
expect(Configuration::WEB_APP).to eq "src/main/webapp"
|
15
|
+
end
|
16
|
+
|
17
|
+
it "configures web-inf" do
|
18
|
+
expect(Configuration::WEB_INF).to eq "#{Configuration::WEB_APP}/WEB-INF"
|
19
|
+
end
|
20
|
+
|
21
|
+
it "configures meta-inf" do
|
22
|
+
expect(Configuration::META_INF).to eq "#{Configuration::WEB_APP}/META-INF"
|
23
|
+
end
|
24
|
+
|
25
|
+
it "configures test source" do
|
26
|
+
expect(Configuration::TEST_SRC).to eq "src/test/java"
|
27
|
+
end
|
28
|
+
|
29
|
+
it "configures test resources" do
|
30
|
+
expect(Configuration::TEST_RESOURCES).to eq "src/test/resources"
|
31
|
+
end
|
32
|
+
|
33
|
+
it "configures scaffold properties" do
|
34
|
+
expect(Configuration::FILENAME).to eq "#{Configuration::META_INF}/springmvc-scaffold.properties"
|
35
|
+
end
|
36
|
+
|
37
|
+
context "load config file" do
|
38
|
+
let(:config) { {"template_engine" => "jsp", "package" => "br.com.juliano", "orm" => "jpa", "models_package" => "models", "controllers_package" => "controllers", "repositories_package" => "repositories"} }
|
39
|
+
before do
|
40
|
+
allow(YAML).to receive(:load_file).with(Configuration::FILENAME).and_return(config)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "knows models package" do
|
44
|
+
expect(Configuration.models_package).to eq "models"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "knows full models package" do
|
48
|
+
expect(Configuration.full_models_package).to eq "br.com.juliano.models"
|
49
|
+
end
|
50
|
+
|
51
|
+
it "builds main class path with base package" do
|
52
|
+
expect(Configuration.main_class_path("models", "Product.java")).to eq "src/main/java/br/com/juliano/models/Product.java"
|
53
|
+
end
|
54
|
+
|
55
|
+
it "builds test class path with base package" do
|
56
|
+
expect(Configuration.test_class_path("models", "Product.java")).to eq "src/test/java/br/com/juliano/models/Product.java"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "knows orm" do
|
60
|
+
expect(Configuration.orm).to eq "jpa"
|
61
|
+
end
|
62
|
+
|
63
|
+
it "orm is not hibernate" do
|
64
|
+
expect(Configuration.hibernate?).to be false
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
context "hibernate" do
|
69
|
+
let(:config) { {"package" => "br.com.juliano", "orm" => "hibernate"} }
|
70
|
+
before do
|
71
|
+
allow(YAML).to receive(:load_file).with(Configuration::FILENAME).and_return(config)
|
72
|
+
end
|
73
|
+
|
74
|
+
it "knows orm" do
|
75
|
+
expect(Configuration.orm).to eq "hibernate"
|
76
|
+
end
|
77
|
+
|
78
|
+
it "orm is hibernate" do
|
79
|
+
expect(Configuration.hibernate?).to be true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
context "properties without default configs" do
|
84
|
+
before do
|
85
|
+
allow(YAML).to receive(:load_file).with(Configuration::FILENAME).and_return({})
|
86
|
+
end
|
87
|
+
|
88
|
+
it "knows models package" do
|
89
|
+
expect(Configuration.models_package).to eq "models"
|
90
|
+
end
|
91
|
+
|
92
|
+
it "knows controllers package" do
|
93
|
+
expect(Configuration.controllers_package).to eq "controllers"
|
94
|
+
end
|
95
|
+
|
96
|
+
it "knows repositories package" do
|
97
|
+
expect(Configuration.repositories_package).to eq "repositories"
|
98
|
+
end
|
99
|
+
|
100
|
+
it "knows full models package" do
|
101
|
+
expect(Configuration.full_models_package).to eq "app.models"
|
102
|
+
end
|
103
|
+
|
104
|
+
it "knows base package" do
|
105
|
+
expect(Configuration.package).to eq "app"
|
106
|
+
end
|
107
|
+
|
108
|
+
it "knows orm" do
|
109
|
+
expect(Configuration.orm).to eq "jpa"
|
110
|
+
end
|
111
|
+
|
112
|
+
it "orm is not hibernate" do
|
113
|
+
expect(Configuration.hibernate?).to be false
|
114
|
+
end
|
115
|
+
|
116
|
+
it "builds main class path with base package" do
|
117
|
+
expect(Configuration.main_class_path("models", "Product.java")).to eq "src/main/java/app/models/Product.java"
|
118
|
+
end
|
119
|
+
|
120
|
+
it "builds test class path with base package" do
|
121
|
+
expect(Configuration.test_class_path("models", "Product.java")).to eq "src/test/java/app/models/Product.java"
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe SpringMvcScaffold::Execution do
|
4
|
+
|
5
|
+
context "discover runner for action" do
|
6
|
+
it "should be commands help when no action" do
|
7
|
+
expect(subject.runner_for(nil)).to be SpringMvcScaffold::Runner::CommandsHelp
|
8
|
+
end
|
9
|
+
|
10
|
+
it "should be app generator when -h action" do
|
11
|
+
expect(subject.runner_for("-h")).to be SpringMvcScaffold::Runner::Generator
|
12
|
+
end
|
13
|
+
|
14
|
+
it "should be app generator when --help action" do
|
15
|
+
expect(subject.runner_for("--help")).to be SpringMvcScaffold::Runner::Generator
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should be app generator when new action" do
|
19
|
+
expect(subject.runner_for("new")).to be SpringMvcScaffold::Runner::Generator
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should be app generator when scaffold action" do
|
23
|
+
expect(subject.runner_for("scaffold")).to be SpringMvcScaffold::Runner::Scaffold
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should be commands help when scaffold when unknown action" do
|
27
|
+
expect(subject.runner_for("xpto")).to be SpringMvcScaffold::Runner::CommandsHelp
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should discover runner and run" do
|
32
|
+
runner = double(SpringMvcScaffold::Runner::Generator)
|
33
|
+
allow(runner).to receive(:new).and_return(runner)
|
34
|
+
expect(runner).to receive(:run).with(['app'])
|
35
|
+
|
36
|
+
allow(subject).to receive(:runner_for).with('new').and_return(runner)
|
37
|
+
subject.run(['new', 'app'])
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,226 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../../spec_helper")
|
2
|
+
|
3
|
+
describe AppGenerator do
|
4
|
+
|
5
|
+
context "build new application" do
|
6
|
+
let(:project_path) { "src/springmvc-scaffold" }
|
7
|
+
|
8
|
+
before { described_class.new(project_path).invoke_all }
|
9
|
+
|
10
|
+
after { FileUtils.remove_dir("src") }
|
11
|
+
|
12
|
+
it "creates directory with project name" do
|
13
|
+
expect(File.exist?(project_path)).to be true
|
14
|
+
end
|
15
|
+
|
16
|
+
it "is invalid when project name already exist" do
|
17
|
+
expect(Kernel).to receive(:exit)
|
18
|
+
described_class.new(project_path)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "creates pom.xml" do
|
22
|
+
source = File.join(File.dirname(__FILE__), "templates", "pom.xml")
|
23
|
+
destination = "#{project_path}/pom.xml"
|
24
|
+
exists_and_identical?(source, destination)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "cannot create build.gradle" do
|
28
|
+
expect(File.exist?("#{project_path}/build.gradle")).to be false
|
29
|
+
end
|
30
|
+
|
31
|
+
it "configures springmvc-scaffold.properties" do
|
32
|
+
source = File.join(File.dirname(__FILE__), "templates", "springmvc-scaffold.properties")
|
33
|
+
destination = "#{project_path}/#{Configuration::FILENAME}"
|
34
|
+
exists_and_identical?(source, destination)
|
35
|
+
end
|
36
|
+
|
37
|
+
context "creating main java" do
|
38
|
+
let(:main_java) { "#{project_path}/#{Configuration::MAIN_SRC}" }
|
39
|
+
let(:app) { "#{main_java}/app" }
|
40
|
+
|
41
|
+
it "creates source folder" do
|
42
|
+
expect(File.exist?(main_java)).to be true
|
43
|
+
end
|
44
|
+
|
45
|
+
it "creates app folder" do
|
46
|
+
expect(File.exist?(app)).to be true
|
47
|
+
end
|
48
|
+
|
49
|
+
it "creates controllers folder" do
|
50
|
+
expect(File.exist?("#{app}/controllers")).to be true
|
51
|
+
end
|
52
|
+
|
53
|
+
it "creates models folder" do
|
54
|
+
expect(File.exist?("#{app}/models")).to be true
|
55
|
+
end
|
56
|
+
|
57
|
+
it "creates generic entity" do
|
58
|
+
source = File.join(File.dirname(__FILE__), "templates", "Entity.java")
|
59
|
+
destination = "#{app}/models/Entity.java"
|
60
|
+
exists_and_identical?(source, destination)
|
61
|
+
end
|
62
|
+
|
63
|
+
it "creates repositories folder" do
|
64
|
+
expect(File.exist?("#{app}/repositories")).to be true
|
65
|
+
end
|
66
|
+
|
67
|
+
it "creates generic repository" do
|
68
|
+
source = File.join(File.dirname(__FILE__), "templates", "RepositoryJPA.java")
|
69
|
+
destination = "#{app}/repositories/GenericRepository.java"
|
70
|
+
exists_and_identical?(source, destination)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "creating main resources" do
|
75
|
+
let(:main_resources) { "#{project_path}/#{Configuration::MAIN_RESOURCES}" }
|
76
|
+
|
77
|
+
it "creates resources folder" do
|
78
|
+
expect(File.exist?(main_resources)).to be true
|
79
|
+
end
|
80
|
+
|
81
|
+
it "creates hibernate.properties" do
|
82
|
+
source = "#{AppGenerator.source_root}/resources/hibernate.properties"
|
83
|
+
destination = "#{main_resources}/hibernate.properties"
|
84
|
+
exists_and_identical?(source, destination)
|
85
|
+
end
|
86
|
+
|
87
|
+
it "creates log4j" do
|
88
|
+
source = "#{AppGenerator.source_root}/resources/log4j.properties"
|
89
|
+
destination = "#{main_resources}/log4j.properties"
|
90
|
+
exists_and_identical?(source, destination)
|
91
|
+
end
|
92
|
+
|
93
|
+
it "creates messages.properties" do
|
94
|
+
source = "#{AppGenerator.source_root}/resources/messages.properties"
|
95
|
+
destination = "#{main_resources}/messages.properties"
|
96
|
+
exists_and_identical?(source, destination)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
context "creating main webapp" do
|
101
|
+
let(:webapp) { "#{project_path}/#{Configuration::WEB_APP}" }
|
102
|
+
let(:web_inf) { "#{project_path}/#{Configuration::WEB_INF}" }
|
103
|
+
|
104
|
+
it "creates webapp folder" do
|
105
|
+
expect(File.exist?(webapp)).to be true
|
106
|
+
end
|
107
|
+
|
108
|
+
it "creates WEB-INF folder" do
|
109
|
+
expect(File.exist?(web_inf)).to be true
|
110
|
+
end
|
111
|
+
|
112
|
+
it "creates application.js" do
|
113
|
+
appjs = "#{webapp}/javascripts/application.js"
|
114
|
+
expect(File.exist?(appjs)).to be true
|
115
|
+
end
|
116
|
+
|
117
|
+
it "creates application.css" do
|
118
|
+
source = "#{AppGenerator.source_root}/webapp/stylesheets/application.css"
|
119
|
+
destination = "#{webapp}/stylesheets/application.css"
|
120
|
+
exists_and_identical?(source, destination)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
124
|
+
context "creating test" do
|
125
|
+
let(:test_java) { "#{project_path}/#{Configuration::TEST_SRC}" }
|
126
|
+
let(:test_resources) { "#{project_path}/#{Configuration::TEST_RESOURCES}" }
|
127
|
+
let(:app) { "#{test_java}/app" }
|
128
|
+
|
129
|
+
it "creates test source folder" do
|
130
|
+
expect(File.exist?(test_java)).to be true
|
131
|
+
end
|
132
|
+
|
133
|
+
it "creates test resources folder" do
|
134
|
+
expect(File.exist?(test_resources)).to be true
|
135
|
+
end
|
136
|
+
|
137
|
+
it "creates controllers folder" do
|
138
|
+
expect(File.exist?("#{app}/controllers")).to be true
|
139
|
+
end
|
140
|
+
|
141
|
+
it "creates models folder" do
|
142
|
+
expect(File.exist?("#{app}/models")).to be true
|
143
|
+
end
|
144
|
+
|
145
|
+
it "creates repositories folder" do
|
146
|
+
expect(File.exist?("#{app}/repositories")).to be true
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
context "build app with complex package" do
|
152
|
+
let(:project_path) { "src/springmvc-scaffold" }
|
153
|
+
let(:main_java) { "#{project_path}/#{Configuration::MAIN_SRC}/br/com/juliano" }
|
154
|
+
let(:test_java) { "#{project_path}/#{Configuration::TEST_SRC}/br/com/juliano" }
|
155
|
+
|
156
|
+
before do
|
157
|
+
described_class.new(project_path, ["-p=br.com.juliano"]).invoke_all
|
158
|
+
end
|
159
|
+
|
160
|
+
after { FileUtils.remove_dir("src") }
|
161
|
+
|
162
|
+
it "creates main path" do
|
163
|
+
expect(File.exist?(main_java)).to be true
|
164
|
+
end
|
165
|
+
|
166
|
+
it "creates test path" do
|
167
|
+
expect(File.exist?(test_java)).to be true
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
context "creating gradle application" do
|
172
|
+
let(:project_path) { "springmvc-scaffold" }
|
173
|
+
|
174
|
+
before { described_class.new(project_path, ["-b=gradle"]).invoke_all }
|
175
|
+
|
176
|
+
after { FileUtils.remove_dir(project_path) }
|
177
|
+
|
178
|
+
it "creates build.gradle" do
|
179
|
+
source = File.join(File.dirname(__FILE__), "templates", "build.gradle")
|
180
|
+
destination = "#{project_path}/build.gradle"
|
181
|
+
exists_and_identical?(source, destination)
|
182
|
+
end
|
183
|
+
|
184
|
+
it "cannot create pom.xml" do
|
185
|
+
expect(File.exist?("#{project_path}/pom.xml")).to be false
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
context "valid build tools" do
|
190
|
+
it "maven is valid" do
|
191
|
+
expect(AppGenerator::BUILD_TOOLS.include?("mvn")).to be true
|
192
|
+
end
|
193
|
+
|
194
|
+
it "gradle is valid" do
|
195
|
+
expect(AppGenerator::BUILD_TOOLS.include?("gradle")).to be true
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
context "valid orm" do
|
200
|
+
it "jpa is valid" do
|
201
|
+
expect(AppGenerator::ORMS.include?("jpa")).to be true
|
202
|
+
end
|
203
|
+
|
204
|
+
it "hibernate is valid" do
|
205
|
+
expect(AppGenerator::ORMS.include?("hibernate")).to be true
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
context "validate options" do
|
210
|
+
let(:project_path) { "springmvc-scaffold" }
|
211
|
+
|
212
|
+
it "is invalid when build tool is not supported" do
|
213
|
+
expect(Kernel).to receive(:exit)
|
214
|
+
AppGenerator.new(project_path, ["-b=maven"])
|
215
|
+
end
|
216
|
+
|
217
|
+
it "is invalid when orm is not supported" do
|
218
|
+
expect(Kernel).to receive(:exit)
|
219
|
+
AppGenerator.new(project_path, ["-o=toplink"])
|
220
|
+
end
|
221
|
+
end
|
222
|
+
|
223
|
+
it "configures banner" do
|
224
|
+
expect(AppGenerator.banner).to eq "springmvc new PROJECT_PATH [options]"
|
225
|
+
end
|
226
|
+
end
|