rapid-core 0.1
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 +7 -0
- data/.rspec +2 -0
- data/Gemfile +11 -0
- data/Gemfile.lock +53 -0
- data/Rakefile +61 -0
- data/cucumber.yml +3 -0
- data/doc/plan.txt +89 -0
- data/doc/scaffold/controller.rb +83 -0
- data/doc/scaffold/helper.rb +2 -0
- data/doc/scaffold/model.rb +5 -0
- data/doc/scaffold/rapid_scaffold.rb +5 -0
- data/doc/scaffold/views/_form.html.erb +25 -0
- data/doc/scaffold/views/edit.html.erb +6 -0
- data/doc/scaffold/views/index.html.erb +25 -0
- data/doc/scaffold/views/new.html.erb +5 -0
- data/doc/scaffold/views/show.html.erb +15 -0
- data/features/settings/boolean/default.feature +36 -0
- data/features/settings/double-nested/default.feature +50 -0
- data/features/settings/double-nested/if.feature +41 -0
- data/features/settings/double-nested/unless.feature +39 -0
- data/features/settings/double-nested/validates/exclusion_of.feature +30 -0
- data/features/settings/double-nested/validates/format_of.feature +30 -0
- data/features/settings/double-nested/validates/inclusion_of.feature +30 -0
- data/features/settings/double-nested/validates/length_of.feature +30 -0
- data/features/settings/double-nested/validates/presence_of.feature +37 -0
- data/features/settings/double-nested/validates/size_of.feature +30 -0
- data/features/settings/integer/default.feature +49 -0
- data/features/settings/nested/default.feature +50 -0
- data/features/settings/nested/if.feature +53 -0
- data/features/settings/nested/unless.feature +32 -0
- data/features/settings/nested/validates/exclusion_of.feature +30 -0
- data/features/settings/nested/validates/format_of.feature +30 -0
- data/features/settings/nested/validates/inclusion_of.feature +30 -0
- data/features/settings/nested/validates/length_of.feature +30 -0
- data/features/settings/nested/validates/presence_of.feature +37 -0
- data/features/settings/nested/validates/size_of.feature +30 -0
- data/features/settings/not_found.feature +33 -0
- data/features/settings/string/default.feature +36 -0
- data/features/settings/string/validates/exclusion_of.feature +30 -0
- data/features/settings/string/validates/format_of.feature +30 -0
- data/features/settings/string/validates/inclusion_of.feature +30 -0
- data/features/settings/string/validates/length_of.feature +30 -0
- data/features/settings/string/validates/presence_of.feature +37 -0
- data/features/settings/string/validates/size_of.feature +30 -0
- data/features/step_definitions/settings_steps.rb +92 -0
- data/features/step_definitions/skeleton_steps.rb +68 -0
- data/features/step_definitions/template_steps.rb +39 -0
- data/features/support/env.rb +6 -0
- data/features/templates/comment_if.feature +55 -0
- data/features/templates/comment_unless.feature +56 -0
- data/features/templates/for/for.feature +51 -0
- data/features/templates/if/else.feature +60 -0
- data/features/templates/if/elsif.feature +82 -0
- data/features/templates/if/if.feature +55 -0
- data/features/templates/namespaces/exist.feature +54 -0
- data/features/templates/static.feature +37 -0
- data/features/templates/variables.feature +61 -0
- data/lib/rapid/check.rb +162 -0
- data/lib/rapid/core.rb +37 -0
- data/lib/rapid/error.rb +84 -0
- data/lib/rapid/module.rb +35 -0
- data/lib/rapid/railtie.rb +18 -0
- data/lib/rapid/setting/base.rb +35 -0
- data/lib/rapid/setting/boolean_setting.rb +17 -0
- data/lib/rapid/setting/class_hash.rb +34 -0
- data/lib/rapid/setting/comments.rb +25 -0
- data/lib/rapid/setting/definer.rb +151 -0
- data/lib/rapid/setting/instance_hash.rb +132 -0
- data/lib/rapid/setting/instance_root.rb +107 -0
- data/lib/rapid/setting/integer_setting.rb +24 -0
- data/lib/rapid/setting/namespace/base.rb +113 -0
- data/lib/rapid/setting/namespace/instance.rb +84 -0
- data/lib/rapid/setting/nested_validations.rb +86 -0
- data/lib/rapid/setting/string_setting.rb +13 -0
- data/lib/rapid/settings.rb +129 -0
- data/lib/rapid/skeleton/base.rb +164 -0
- data/lib/rapid/skeleton/helpers/directory.rb +53 -0
- data/lib/rapid/skeleton/helpers/gem.rb +133 -0
- data/lib/rapid/skeleton/helpers/migration.rb +46 -0
- data/lib/rapid/skeleton/helpers/route.rb +115 -0
- data/lib/rapid/skeleton/helpers/script.rb +33 -0
- data/lib/rapid/skeleton/helpers/template.rb +73 -0
- data/lib/rapid/skeleton/helpers/view.rb +35 -0
- data/lib/rapid/spec/template.rb +104 -0
- data/lib/rapid/spec.rb +1 -0
- data/lib/rapid/tasks.rb +29 -0
- data/lib/rapid/template/base.rb +49 -0
- data/lib/rapid/template/node/base.rb +43 -0
- data/lib/rapid/template/node/comment_node.rb +42 -0
- data/lib/rapid/template/node/if_node.rb +109 -0
- data/lib/rapid/template/node/root.rb +51 -0
- data/lib/rapid/template/node/static.rb +29 -0
- data/lib/rapid/template/node/variable.rb +86 -0
- data/lib/rapid/template/parser.rb +167 -0
- data/lib/rapid/template/pulling/base.rb +91 -0
- data/lib/rapid/template/pulling/explicit.rb +92 -0
- data/lib/rapid/template/pulling/forgiving.rb +58 -0
- data/lib/rapid/version.rb +3 -0
- data/lib/rapid.rb +37 -0
- data/rapid-core.gemspec +26 -0
- data/spec/rapid/check_spec.rb +119 -0
- data/spec/rapid/error_spec.rb +14 -0
- data/spec/rapid/module_spec.rb +28 -0
- data/spec/rapid/setting/base_spec.rb +17 -0
- data/spec/rapid/setting/definer_spec.rb +318 -0
- data/spec/rapid/setting/instance_root_spec.rb +161 -0
- data/spec/rapid/setting/namespace/base_spec.rb +93 -0
- data/spec/rapid/setting/namespace/instance_spec.rb +12 -0
- data/spec/rapid/setting/nested_validations_spec.rb +72 -0
- data/spec/rapid/settings_spec.rb +51 -0
- data/spec/rapid/skeleton/base_spec.rb +224 -0
- data/spec/rapid/skeleton/helpers/directory_spec.rb +104 -0
- data/spec/rapid/skeleton/helpers/gem_spec.rb +180 -0
- data/spec/rapid/skeleton/helpers/migration_spec.rb +23 -0
- data/spec/rapid/skeleton/helpers/route_spec.rb +120 -0
- data/spec/rapid/skeleton/helpers/script_spec.rb +57 -0
- data/spec/rapid/skeleton/helpers/template_spec.rb +142 -0
- data/spec/rapid/skeleton/helpers/view_spec.rb +54 -0
- data/spec/rapid/spec/template_spec.rb +168 -0
- data/spec/rapid/template/base_spec.rb +290 -0
- data/spec/rapid/template/node/base_spec.rb +9 -0
- data/spec/rapid/template/node/comment_node_spec.rb +46 -0
- data/spec/rapid/template/node/if_node_spec.rb +28 -0
- data/spec/rapid/template/node/root_spec.rb +9 -0
- data/spec/rapid/template/node/static_spec.rb +17 -0
- data/spec/rapid/template/node/variable_spec.rb +87 -0
- data/spec/rapid/template/parser_spec.rb +187 -0
- data/spec/rapid/template/pulling/base_spec.rb +81 -0
- data/spec/rapid/template/pulling/explicit_spec.rb +33 -0
- data/spec/rapid/template/pulling/forgiving_spec.rb +132 -0
- data/spec/spec_helper.rb +10 -0
- metadata +325 -0
@@ -0,0 +1,224 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::Skeleton::Base do
|
4
|
+
|
5
|
+
describe "project_path" do
|
6
|
+
|
7
|
+
it "should accept it as a parameter" do
|
8
|
+
@skeleton = Rapid::Skeleton::Base.new nil, :project_path => "/foo"
|
9
|
+
@skeleton.project_path.should == "/foo"
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should default to the application root" do
|
13
|
+
@skeleton = Rapid::Skeleton::Base.new
|
14
|
+
@skeleton.project_path.should == File.expand_path('.')
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
|
19
|
+
describe "templates_path" do
|
20
|
+
|
21
|
+
after do
|
22
|
+
FileUtils.rm_rf "tmp/test/lib"
|
23
|
+
FileUtils.rm_rf "tmp/test/templates"
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should accept it as a parameter" do
|
27
|
+
@skeleton = Rapid::Skeleton::Base.new nil, :templates_path => "foo"
|
28
|
+
@skeleton.templates_path.should == "foo"
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should discover the templates path given a file" do
|
32
|
+
FileUtils.mkdir_p "tmp/test/lib/rapid/app"
|
33
|
+
FileUtils.mkdir_p "tmp/test/templates"
|
34
|
+
@skeleton = Rapid::Skeleton::Base.new nil, :file => "tmp/test/lib/rapid/app/skeleton.rb"
|
35
|
+
@skeleton.templates_path.should == "tmp/test/templates"
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
describe "valid?" do
|
41
|
+
|
42
|
+
it "should check with the settings" do
|
43
|
+
@settings = mock('settings')
|
44
|
+
@settings.should_receive(:valid?).with.and_return(false)
|
45
|
+
@settings.should_receive(:errors).with.and_return('name' => ["can't be blank"])
|
46
|
+
|
47
|
+
@skeleton = Rapid::Skeleton::Base.new @settings
|
48
|
+
@skeleton.valid?.should be_false
|
49
|
+
@skeleton.errors.full_messages.should == ["Name can't be blank"]
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
53
|
+
|
54
|
+
describe "settings=" do
|
55
|
+
|
56
|
+
it "should accept a hash and load the settings with it" do
|
57
|
+
@settings = mock('settings')
|
58
|
+
@settings.should_receive(:load_hash).with(:foo => "bar")
|
59
|
+
|
60
|
+
@skeleton = Rapid::Skeleton::Base.new @settings
|
61
|
+
@skeleton.settings = {:foo => "bar"}
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "push" do
|
67
|
+
|
68
|
+
it "should know whether it's pushing" do
|
69
|
+
@skeleton = Rapid::Skeleton::Base.new
|
70
|
+
|
71
|
+
@skeleton.send(:pushing?).should == false
|
72
|
+
end
|
73
|
+
|
74
|
+
it "should raise a not implemented error" do
|
75
|
+
@skeleton = Rapid::Skeleton::Base.new
|
76
|
+
lambda { @skeleton.push }.should raise_error(NotImplementedError)
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
|
81
|
+
describe "push!" do
|
82
|
+
|
83
|
+
it "should raise an error if the skeleton is not valid" do
|
84
|
+
@skeleton = Rapid::Skeleton::Base.new
|
85
|
+
@skeleton.should_receive(:valid?).and_return(false)
|
86
|
+
|
87
|
+
lambda { @skeleton.push! }.should raise_error(Rapid::InvalidSkeletonError)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should push if valid" do
|
91
|
+
@skeleton = Rapid::Skeleton::Base.new
|
92
|
+
@skeleton.should_receive(:valid?).and_return(true)
|
93
|
+
@skeleton.should_receive(:bones).with.and_return(true)
|
94
|
+
|
95
|
+
@skeleton.push!
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
|
100
|
+
describe "pull" do
|
101
|
+
|
102
|
+
it "should know whether it's pulling" do
|
103
|
+
@skeleton = Rapid::Skeleton::Base.new
|
104
|
+
|
105
|
+
@skeleton.send(:pulling?).should == false
|
106
|
+
end
|
107
|
+
|
108
|
+
it "should raise a not implemented error" do
|
109
|
+
@skeleton = Rapid::Skeleton::Base.new
|
110
|
+
lambda { @skeleton.pull }.should raise_error(NotImplementedError)
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should return true if it does not encounter an error" do
|
114
|
+
@skeleton = Rapid::Skeleton::Base.new
|
115
|
+
@skeleton.should_receive(:bones).and_return
|
116
|
+
|
117
|
+
@skeleton.pull.should == true
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should return false if it does not encounter an error" do
|
121
|
+
@skeleton = Rapid::Skeleton::Base.new
|
122
|
+
Rapid::Check.should_receive(:encounters_error?).and_return(true)
|
123
|
+
|
124
|
+
@skeleton.pull.should == false
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
describe "pull!" do
|
130
|
+
|
131
|
+
it "should raise an error if the pull fails" do
|
132
|
+
@skeleton = Rapid::Skeleton::Base.new
|
133
|
+
@skeleton.should_receive(:pull).and_return(false)
|
134
|
+
|
135
|
+
lambda { @skeleton.pull! }.should raise_error(Rapid::InvalidSkeletonError)
|
136
|
+
end
|
137
|
+
|
138
|
+
it "should not raise an error if the pull succeeds" do
|
139
|
+
@skeleton = Rapid::Skeleton::Base.new
|
140
|
+
@skeleton.should_receive(:pull).and_return(true)
|
141
|
+
|
142
|
+
@skeleton.pull!
|
143
|
+
end
|
144
|
+
|
145
|
+
end
|
146
|
+
|
147
|
+
describe "logging" do
|
148
|
+
|
149
|
+
before do
|
150
|
+
@check = Rapid::Check.new ""
|
151
|
+
Rapid::Check.current = @check
|
152
|
+
|
153
|
+
@skeleton = Rapid::Skeleton::Base.new
|
154
|
+
end
|
155
|
+
|
156
|
+
after do
|
157
|
+
Rapid::Check.current = nil
|
158
|
+
end
|
159
|
+
|
160
|
+
it "should raise an error if Rapid::Check.current is nil" do
|
161
|
+
Rapid::Check.current = nil
|
162
|
+
lambda { @skeleton.send(:ok, 'foo', 'bar') }.should raise_error
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should delegate ok to Rapid::Check.current" do
|
166
|
+
@check.should_receive(:ok).with('foo', 'bar')
|
167
|
+
@skeleton.send(:ok, 'foo', 'bar')
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should delegate warning to Rapid::Check.current" do
|
171
|
+
@check.should_receive(:warning).with('foo', 'bar')
|
172
|
+
@skeleton.send(:warning, 'foo', 'bar')
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should delegate error to Rapid::Check.current" do
|
176
|
+
@check.should_receive(:error).with('foo', 'bar')
|
177
|
+
@skeleton.send(:error, 'foo', 'bar')
|
178
|
+
end
|
179
|
+
|
180
|
+
it "should delegate error to Rapid::Check.current" do
|
181
|
+
@check.should_receive(:exception).with('foo', 'bar')
|
182
|
+
@skeleton.send(:exception, 'foo', 'bar')
|
183
|
+
end
|
184
|
+
|
185
|
+
end
|
186
|
+
|
187
|
+
describe "section" do
|
188
|
+
|
189
|
+
after do
|
190
|
+
Rapid::Check.current = nil
|
191
|
+
end
|
192
|
+
|
193
|
+
it "should work with Rapid::Check.current" do
|
194
|
+
@check = Rapid::Check.new ""
|
195
|
+
Rapid::Check.current = @check
|
196
|
+
|
197
|
+
@skeleton = Rapid::Skeleton::Base.new
|
198
|
+
@skeleton.send(:section, "foo") do
|
199
|
+
@skeleton.send :ok, "hi", "hey"
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should work without Rapid::Check.current" do
|
204
|
+
@skeleton = Rapid::Skeleton::Base.new
|
205
|
+
@skeleton.send(:section, "foo") do
|
206
|
+
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
it "should work without a block" do
|
211
|
+
@skeleton = Rapid::Skeleton::Base.new
|
212
|
+
@skeleton.should_receive(:foo)
|
213
|
+
@skeleton.send(:section, "foo")
|
214
|
+
end
|
215
|
+
|
216
|
+
it "should work without a block and an option" do
|
217
|
+
@skeleton = Rapid::Skeleton::Base.new
|
218
|
+
@skeleton.should_receive(:bar)
|
219
|
+
@skeleton.send(:section, "foo", :method => "bar")
|
220
|
+
end
|
221
|
+
|
222
|
+
end
|
223
|
+
|
224
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::Skeleton::Helpers::Directory do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Object.class_eval do
|
7
|
+
class MyClass
|
8
|
+
include Rapid::Skeleton::Helpers::Directory
|
9
|
+
|
10
|
+
attr_accessor :templates_path, :project_path, :get_binding
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
@instance = MyClass.new
|
15
|
+
end
|
16
|
+
|
17
|
+
after do
|
18
|
+
Object.send(:remove_const, :MyClass) rescue nil
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "push_directory" do
|
22
|
+
|
23
|
+
before do
|
24
|
+
@instance.project_path = 'tmp'
|
25
|
+
@instance.stub!(:pushing?).and_return(true)
|
26
|
+
@instance.stub!(:pulling?).and_return(false)
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should create the directory" do
|
30
|
+
FileUtils.should_receive(:mkdir_p).with('tmp/foo/bar')
|
31
|
+
|
32
|
+
@instance.send :directory, 'foo/bar'
|
33
|
+
end
|
34
|
+
|
35
|
+
it "shouldn't push the directory if setting is false" do
|
36
|
+
FileUtils.should_not_receive(:mkdir_p)
|
37
|
+
|
38
|
+
@instance.should_receive(:set?).with('foo').and_return(false)
|
39
|
+
@instance.send :directory, 'foo/bar', :if => 'foo'
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should push the directory if the setting is true" do
|
43
|
+
FileUtils.should_receive(:mkdir_p).with('tmp/foo/bar')
|
44
|
+
|
45
|
+
@instance.should_receive(:set?).with('foo').and_return(true)
|
46
|
+
@instance.send :directory, 'foo/bar', :if => 'foo'
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
|
51
|
+
describe "pull_directory" do
|
52
|
+
|
53
|
+
before do
|
54
|
+
@instance.project_path = 'tmp/test'
|
55
|
+
|
56
|
+
@instance.stub!(:pushing?).and_return(false)
|
57
|
+
@instance.stub!(:pulling?).and_return(true)
|
58
|
+
end
|
59
|
+
|
60
|
+
after do
|
61
|
+
FileUtils.rm_rf 'tmp/test'
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should warn when the directory does not exist" do
|
65
|
+
@instance.should_receive(:warning).with('foo/bar', "doesn't exist")
|
66
|
+
|
67
|
+
@instance.send :directory, 'foo/bar'
|
68
|
+
end
|
69
|
+
|
70
|
+
it "should error when the directory is just a file" do
|
71
|
+
FileUtils.mkdir_p('tmp/test/foo')
|
72
|
+
File.open('tmp/test/foo/bar', 'w') {|f| f.write "hi"}
|
73
|
+
|
74
|
+
@instance.should_receive(:error).with('foo/bar', "isn't a directory")
|
75
|
+
|
76
|
+
@instance.send :directory, 'foo/bar'
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should report ok when directory exists" do
|
80
|
+
FileUtils.mkdir_p('tmp/test/foo')
|
81
|
+
|
82
|
+
@instance.should_receive(:ok).with('foo', "is good")
|
83
|
+
|
84
|
+
@instance.send :directory, 'foo'
|
85
|
+
end
|
86
|
+
|
87
|
+
it "should set the 'if' setting false" do
|
88
|
+
@instance.should_receive(:ok).with('foo', "doesn't exist")
|
89
|
+
@instance.should_receive(:[]=).with('foo', false)
|
90
|
+
|
91
|
+
@instance.send :directory, 'foo', :if => 'foo'
|
92
|
+
end
|
93
|
+
|
94
|
+
it "should set the 'if' setting true" do
|
95
|
+
FileUtils.mkdir_p('tmp/test/foo')
|
96
|
+
@instance.should_receive(:ok).with('foo', "is good")
|
97
|
+
@instance.should_receive(:[]=).with('foo', true)
|
98
|
+
|
99
|
+
@instance.send :directory, 'foo', :if => 'foo'
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::Skeleton::Helpers::Gem do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Object.class_eval do
|
7
|
+
class MyClass
|
8
|
+
include ActiveModel::Validations
|
9
|
+
include Rapid::Skeleton::Helpers::Gem
|
10
|
+
|
11
|
+
attr_accessor :templates_path, :project_path, :get_binding
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
after do
|
17
|
+
Object.send(:remove_const, :MyClass) rescue nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def gemfile content
|
21
|
+
@gemfile = File.open(@instance.gemfile_path, 'w') {|f| f.write content }
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not be valid if the Gemfile does not exist" do
|
25
|
+
MyClass.validate :validate_gemfile_exists
|
26
|
+
|
27
|
+
@instance = MyClass.new
|
28
|
+
@instance.project_path = "tmp"
|
29
|
+
|
30
|
+
@instance.valid?
|
31
|
+
@instance.errors[:gem].should == ["file does not exist"]
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "push_gem" do
|
35
|
+
|
36
|
+
def push *args
|
37
|
+
@instance.send :gem, *args
|
38
|
+
@gemfile = File.open(@instance.gemfile_path) {|f| f.read }
|
39
|
+
end
|
40
|
+
|
41
|
+
before do
|
42
|
+
FileUtils.mkdir_p 'tmp/test'
|
43
|
+
@instance = MyClass.new
|
44
|
+
@instance.project_path = 'tmp/test'
|
45
|
+
|
46
|
+
@instance.stub!(:pushing?).and_return(true)
|
47
|
+
@instance.stub!(:pulling?).and_return(false)
|
48
|
+
end
|
49
|
+
|
50
|
+
after do
|
51
|
+
FileUtils.rm_rf 'tmp/test'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should append the gem to the existing list" do
|
55
|
+
gemfile %(gem 'rails', '3.1.0')
|
56
|
+
push 'kaminari'
|
57
|
+
@gemfile.should == %(gem 'rails', '3.1.0'\ngem 'kaminari')
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should push a version" do
|
61
|
+
gemfile %(gem 'rails', '3.1.0')
|
62
|
+
push 'kaminari', '1.0'
|
63
|
+
@gemfile.should == %(gem 'rails', '3.1.0'\ngem 'kaminari', '1.0')
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should push options" do
|
67
|
+
gemfile %(gem 'rails', '3.1.0')
|
68
|
+
push 'kaminari', :git => 'git://somewhere'
|
69
|
+
@gemfile.should == %(gem 'rails', '3.1.0'\ngem 'kaminari', :git => "git://somewhere")
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should not append the gem if it already exists" do
|
73
|
+
gemfile %(gem 'rails', '3.1.0')
|
74
|
+
push 'rails'
|
75
|
+
@gemfile.should == %(gem 'rails', '3.1.0')
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should append to group block if available" do
|
79
|
+
gemfile %(gem 'rails', '3.1.0'\n\ngroup :development do\n gem 'capistrano'\nend)
|
80
|
+
push 'capistrano-ext', :group => 'development'
|
81
|
+
@gemfile.should == %(gem 'rails', '3.1.0'\n\ngroup :development do\n gem 'capistrano'\n gem 'capistrano-ext'\nend)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should append with group option if group does not exist" do
|
85
|
+
gemfile %(gem 'rails', '3.1.0')
|
86
|
+
push 'capistrano-ext', :group => 'development'
|
87
|
+
@gemfile.should == %(gem 'rails', '3.1.0'\ngem 'capistrano-ext', :group => :development)
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should append to multiple groups block if available" do
|
91
|
+
gemfile %(gem 'rails', '3.1.0'\n\ngroup :development, :test do\n gem 'capistrano'\nend)
|
92
|
+
push 'capistrano-ext', :groups => ['development', 'test']
|
93
|
+
@gemfile.should == %(gem 'rails', '3.1.0'\n\ngroup :development, :test do\n gem 'capistrano'\n gem 'capistrano-ext'\nend)
|
94
|
+
end
|
95
|
+
|
96
|
+
it "should append with multiple groups option if group does not exist" do
|
97
|
+
gemfile %(gem 'rails', '3.1.0')
|
98
|
+
push 'capistrano-ext', :groups => ['development', 'test']
|
99
|
+
@gemfile.should == %(gem 'rails', '3.1.0'\ngem 'capistrano-ext', :groups => [:development, :test])
|
100
|
+
end
|
101
|
+
|
102
|
+
it "should push when :if is true" do
|
103
|
+
@instance.should_receive(:set?).with('foo').and_return(true)
|
104
|
+
gemfile %(gem 'rails', '3.1.0')
|
105
|
+
|
106
|
+
push 'capistrano-ext', :if => 'foo'
|
107
|
+
@gemfile.should == %(gem 'rails', '3.1.0'\ngem 'capistrano-ext')
|
108
|
+
end
|
109
|
+
|
110
|
+
it "should not push when :if is false" do
|
111
|
+
@instance.should_receive(:set?).with('foo').and_return(false)
|
112
|
+
gemfile %(gem 'rails', '3.1.0')
|
113
|
+
|
114
|
+
push 'capistrano-ext', :if => 'foo'
|
115
|
+
@gemfile.should == %(gem 'rails', '3.1.0')
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "pull_gem" do
|
121
|
+
|
122
|
+
before do
|
123
|
+
FileUtils.mkdir_p 'tmp/test'
|
124
|
+
@instance = MyClass.new
|
125
|
+
@instance.project_path = 'tmp/test'
|
126
|
+
|
127
|
+
@instance.stub!(:pushing?).and_return(false)
|
128
|
+
@instance.stub!(:pulling?).and_return(true)
|
129
|
+
end
|
130
|
+
|
131
|
+
after do
|
132
|
+
FileUtils.rm_rf 'tmp/test'
|
133
|
+
end
|
134
|
+
|
135
|
+
it "should report an error it doesn't know where the Gemfile is" do
|
136
|
+
@instance.project_path = nil
|
137
|
+
@instance.should_receive(:error).with("kaminari", "Unknown Gemfile location")
|
138
|
+
|
139
|
+
@instance.send :gem, 'kaminari'
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should report an error when the gemfile doesn't exist" do
|
143
|
+
@instance.should_receive(:error).with("kaminari", "Gemfile doesn't exist")
|
144
|
+
|
145
|
+
@instance.send :gem, 'kaminari'
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should report an error when the gem isn't in the gem file" do
|
149
|
+
gemfile %()
|
150
|
+
@instance.should_receive(:error).with("kaminari", "isn't in your Gemfile")
|
151
|
+
|
152
|
+
@instance.send :gem, 'kaminari'
|
153
|
+
end
|
154
|
+
|
155
|
+
it "should report ok when the gem is in the gem file" do
|
156
|
+
gemfile %(gem 'kaminari')
|
157
|
+
@instance.should_receive(:ok).with("kaminari", "is in your Gemfile")
|
158
|
+
|
159
|
+
@instance.send :gem, 'kaminari'
|
160
|
+
end
|
161
|
+
|
162
|
+
it "should set the 'if' setting false" do
|
163
|
+
gemfile %()
|
164
|
+
@instance.should_receive(:ok).with('kaminari', "isn't in your Gemfile")
|
165
|
+
@instance.should_receive(:[]=).with('foo', false)
|
166
|
+
|
167
|
+
@instance.send :gem, 'kaminari', :if => 'foo'
|
168
|
+
end
|
169
|
+
|
170
|
+
it "should set the 'if' setting true" do
|
171
|
+
gemfile %(gem 'kaminari')
|
172
|
+
@instance.should_receive(:ok).with('kaminari', "is in your Gemfile")
|
173
|
+
@instance.should_receive(:[]=).with('foo', true)
|
174
|
+
|
175
|
+
@instance.send :gem, 'kaminari', :if => 'foo'
|
176
|
+
end
|
177
|
+
|
178
|
+
end
|
179
|
+
|
180
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::Skeleton::Helpers::Migration do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Object.class_eval do
|
7
|
+
class MyClass
|
8
|
+
include Rapid::Skeleton::Helpers::Template
|
9
|
+
include Rapid::Skeleton::Helpers::Migration
|
10
|
+
|
11
|
+
attr_accessor :templates_path, :project_path, :get_binding
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
@instance = MyClass.new
|
16
|
+
end
|
17
|
+
|
18
|
+
after do
|
19
|
+
Object.send(:remove_const, :MyClass) rescue nil
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
|
2
|
+
|
3
|
+
describe Rapid::Skeleton::Helpers::Route do
|
4
|
+
|
5
|
+
before do
|
6
|
+
Object.class_eval do
|
7
|
+
class MyClass
|
8
|
+
include ActiveModel::Validations
|
9
|
+
include Rapid::Skeleton::Helpers::Route
|
10
|
+
|
11
|
+
attr_accessor :templates_path, :project_path, :get_binding
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
after do
|
17
|
+
Object.send(:remove_const, :MyClass) rescue nil
|
18
|
+
end
|
19
|
+
|
20
|
+
def routes content
|
21
|
+
@gemfile = File.open(@instance.routes_path, 'w') {|f| f.write content }
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not be valid if config/routes.rb does not exist" do
|
25
|
+
MyClass.validate :validate_routes_file_exists
|
26
|
+
|
27
|
+
@instance = MyClass.new
|
28
|
+
@instance.project_path = "tmp"
|
29
|
+
|
30
|
+
@instance.valid?
|
31
|
+
@instance.errors[:routes].should == ["file does not exist"]
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "push_route" do
|
35
|
+
|
36
|
+
def push *args
|
37
|
+
@instance.send :route, *args
|
38
|
+
@routes = File.open(@instance.routes_path) {|f| f.read }
|
39
|
+
end
|
40
|
+
|
41
|
+
before do
|
42
|
+
FileUtils.mkdir_p 'tmp/test/config'
|
43
|
+
@instance = MyClass.new
|
44
|
+
@instance.project_path = 'tmp/test'
|
45
|
+
|
46
|
+
@instance.stub!(:pushing?).and_return(true)
|
47
|
+
@instance.stub!(:pulling?).and_return(false)
|
48
|
+
end
|
49
|
+
|
50
|
+
after do
|
51
|
+
FileUtils.rm_rf 'tmp/test'
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should append the routes to the existing file" do
|
55
|
+
routes %(HelloWorld::Application.routes.draw do\nend)
|
56
|
+
push :get, 'sign-in', :to => 'user_sessions#new', :as => :sign_in
|
57
|
+
@routes.should == %(HelloWorld::Application.routes.draw do\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\nend)
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should not append the same route twice" do
|
61
|
+
routes %(HelloWorld::Application.routes.draw do\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\nend)
|
62
|
+
push :get, 'sign-in', :to => 'user_sessions#new', :as => :sign_in
|
63
|
+
@routes.should == %(HelloWorld::Application.routes.draw do\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\nend)
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should append a route to a new namespace" do
|
67
|
+
routes %(HelloWorld::Application.routes.draw do\nend)
|
68
|
+
push :get, 'sign-in', :to => 'user_sessions#new', :as => :sign_in, :namespace => :admin
|
69
|
+
@routes.should == %(HelloWorld::Application.routes.draw do\n namespace :admin do\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\n end\nend)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should append a route to an existing namespace" do
|
73
|
+
routes %(HelloWorld::Application.routes.draw do\n namespace :admin do\n get 'foo'\n end\nend)
|
74
|
+
push :get, 'sign-in', :to => 'user_sessions#new', :as => :sign_in, :namespace => :admin
|
75
|
+
@routes.should == %(HelloWorld::Application.routes.draw do\n namespace :admin do\n get 'foo'\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\n end\nend)
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
|
80
|
+
describe "pull_route" do
|
81
|
+
|
82
|
+
before do
|
83
|
+
FileUtils.mkdir_p 'tmp/test/config'
|
84
|
+
@instance = MyClass.new
|
85
|
+
@instance.project_path = 'tmp/test'
|
86
|
+
|
87
|
+
@instance.stub!(:pushing?).and_return(false)
|
88
|
+
@instance.stub!(:pulling?).and_return(true)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "should report an error when the project location is unknown" do
|
92
|
+
@instance.project_path = nil
|
93
|
+
@instance.should_receive(:error).with("config/routes.rb", "location is unknown")
|
94
|
+
|
95
|
+
@instance.send :route, :match, "/sign-in"
|
96
|
+
end
|
97
|
+
|
98
|
+
it "should report an error when the routes file does not exist" do
|
99
|
+
@instance.should_receive(:error).with("config/routes.rb", "doesn't exist")
|
100
|
+
|
101
|
+
@instance.send :route, :match, "/sign-in"
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should report an error when the route does not exist" do
|
105
|
+
@instance.should_receive(:error).with(%(match '/sign-in'), "doesn't exist")
|
106
|
+
routes %()
|
107
|
+
|
108
|
+
@instance.send :route, :match, "/sign-in"
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should report ok when the route exists" do
|
112
|
+
@instance.should_receive(:ok).with(%(match '/sign-in'), "exists")
|
113
|
+
routes %(HelloWorld::Application.routes.draw do\n match '/sign-in'\nend)
|
114
|
+
|
115
|
+
@instance.send :route, :match, "/sign-in"
|
116
|
+
end
|
117
|
+
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|