rapid-core 0.1 → 0.2.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.
Files changed (89) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile.lock +35 -2
  3. data/Rakefile +77 -48
  4. data/doc/server.txt +15 -0
  5. data/features/settings/double-nested/default.feature +2 -2
  6. data/features/settings/double-nested/validates/presence_of.feature +1 -1
  7. data/features/settings/nested/default.feature +1 -1
  8. data/features/settings/nested/validates/presence_of.feature +1 -1
  9. data/features/settings/not_found.feature +2 -2
  10. data/features/step_definitions/settings_steps.rb +7 -3
  11. data/features/step_definitions/template_steps.rb +3 -1
  12. data/lib/rapid/check.rb +30 -23
  13. data/lib/rapid/core.rb +12 -0
  14. data/lib/rapid/error.rb +1 -0
  15. data/lib/rapid/module.rb +10 -1
  16. data/lib/rapid/railtie.rb +6 -0
  17. data/lib/rapid/setting/base.rb +31 -8
  18. data/lib/rapid/setting/boolean_setting.rb +20 -1
  19. data/lib/rapid/setting/definer.rb +11 -47
  20. data/lib/rapid/setting/integer_setting.rb +7 -7
  21. data/lib/rapid/setting/module.rb +56 -0
  22. data/lib/rapid/setting/namespace/base.rb +35 -60
  23. data/lib/rapid/setting/namespace/instance.rb +195 -28
  24. data/lib/rapid/setting/string_setting.rb +7 -1
  25. data/lib/rapid/settings.rb +51 -65
  26. data/lib/rapid/skeleton/base.rb +39 -18
  27. data/lib/rapid/skeleton/helpers/directory.rb +5 -6
  28. data/lib/rapid/skeleton/helpers/files.rb +62 -0
  29. data/lib/rapid/skeleton/helpers/gem.rb +43 -32
  30. data/lib/rapid/skeleton/helpers/if_setting.rb +44 -0
  31. data/lib/rapid/skeleton/helpers/migration.rb +102 -32
  32. data/lib/rapid/skeleton/helpers/route.rb +8 -12
  33. data/lib/rapid/skeleton/helpers/script.rb +1 -2
  34. data/lib/rapid/skeleton/helpers/template.rb +23 -25
  35. data/lib/rapid/skeleton/helpers/view.rb +7 -7
  36. data/lib/rapid/spec/template.rb +1 -1
  37. data/lib/rapid/version.rb +1 -1
  38. data/lib/rapid/web/base.rb +35 -0
  39. data/lib/rapid/web/bootstrap.rb +98 -0
  40. data/lib/rapid/web/controller_helpers.rb +60 -0
  41. data/lib/rapid/web/navigator.rb +18 -0
  42. data/lib/rapid/web/select_helpers.rb +63 -0
  43. data/lib/rapid/web/settings_form_builder.rb +205 -0
  44. data/lib/rapid/web/static_helpers.rb +28 -0
  45. data/lib/rapid/web/tasks.rb +10 -0
  46. data/public/rapid/core/bootstrap-collapse.js +136 -0
  47. data/public/rapid/core/bootstrap-responsive.min.css +3 -0
  48. data/public/rapid/core/bootstrap.min.css +556 -0
  49. data/public/rapid/core/jquery-1.7.1.js +9253 -0
  50. data/public/rapid/core/prettify.css +30 -0
  51. data/public/rapid/core/prettify.js +28 -0
  52. data/rapid-core.gemspec +5 -0
  53. data/spec/rapid/check_spec.rb +11 -4
  54. data/spec/rapid/module_spec.rb +18 -0
  55. data/spec/rapid/setting/base_spec.rb +71 -0
  56. data/spec/rapid/setting/boolean_setting_spec.rb +95 -0
  57. data/spec/rapid/setting/definer_spec.rb +7 -13
  58. data/spec/rapid/setting/integer_setting_spec.rb +49 -0
  59. data/spec/rapid/setting/module_spec.rb +25 -0
  60. data/spec/rapid/setting/namespace/base_spec.rb +88 -54
  61. data/spec/rapid/setting/namespace/instance_spec.rb +308 -5
  62. data/spec/rapid/setting/string_setting_spec.rb +43 -0
  63. data/spec/rapid/settings_spec.rb +65 -17
  64. data/spec/rapid/skeleton/base_spec.rb +113 -7
  65. data/spec/rapid/skeleton/helpers/directory_spec.rb +8 -6
  66. data/spec/rapid/skeleton/helpers/files_spec.rb +93 -0
  67. data/spec/rapid/skeleton/helpers/gem_spec.rb +65 -36
  68. data/spec/rapid/skeleton/helpers/if_setting_spec.rb +110 -0
  69. data/spec/rapid/skeleton/helpers/migration_spec.rb +190 -1
  70. data/spec/rapid/skeleton/helpers/route_spec.rb +13 -12
  71. data/spec/rapid/skeleton/helpers/script_spec.rb +2 -1
  72. data/spec/rapid/skeleton/helpers/template_spec.rb +22 -35
  73. data/spec/rapid/spec/template_spec.rb +1 -1
  74. data/spec/rapid/web/base_spec.rb +33 -0
  75. data/spec/rapid/web/bootstrap_spec.rb +72 -0
  76. data/spec/rapid/web/controller_helpers_spec.rb +86 -0
  77. data/spec/rapid/web/navigator_spec.rb +17 -0
  78. data/spec/rapid/web/select_helpers_spec.rb +71 -0
  79. data/spec/rapid/web/settings_form_builder_spec.rb +255 -0
  80. data/spec/rapid/web/static_helpers_spec.rb +26 -0
  81. data/spec/spec_helper.rb +3 -0
  82. data/views/index.erb +11 -0
  83. data/views/layout.erb +9 -0
  84. metadata +107 -12
  85. data/lib/rapid.rb +0 -37
  86. data/lib/rapid/setting/class_hash.rb +0 -34
  87. data/lib/rapid/setting/instance_hash.rb +0 -132
  88. data/lib/rapid/setting/instance_root.rb +0 -107
  89. data/spec/rapid/setting/instance_root_spec.rb +0 -161
@@ -55,7 +55,7 @@ describe Rapid::Skeleton::Base do
55
55
 
56
56
  it "should accept a hash and load the settings with it" do
57
57
  @settings = mock('settings')
58
- @settings.should_receive(:load_hash).with(:foo => "bar")
58
+ @settings.should_receive(:load).with(:foo => "bar")
59
59
 
60
60
  @skeleton = Rapid::Skeleton::Base.new @settings
61
61
  @skeleton.settings = {:foo => "bar"}
@@ -63,6 +63,35 @@ describe Rapid::Skeleton::Base do
63
63
 
64
64
  end
65
65
 
66
+ describe "check" do
67
+
68
+ before do
69
+ @check = Rapid::Check.new ""
70
+ Rapid::Check.current = @check
71
+
72
+ @skeleton = Rapid::Skeleton::Base.new
73
+ end
74
+
75
+ it "should accept a check from options" do
76
+ @check2 = Rapid::Check.new ""
77
+
78
+ @skeleton = Rapid::Skeleton::Base.new nil, :check => @check2
79
+ @skeleton.check.should == @check2
80
+ end
81
+
82
+ it "should use the current check" do
83
+ @skeleton = Rapid::Skeleton::Base.new nil
84
+ @skeleton.check.should == Rapid::Check.current
85
+ end
86
+
87
+ it "should build a check" do
88
+ Rapid::Check.current = nil
89
+ @skeleton = Rapid::Skeleton::Base.new nil, :console => true
90
+ @skeleton.check.console.should == true
91
+ end
92
+
93
+ end
94
+
66
95
  describe "push" do
67
96
 
68
97
  it "should know whether it's pushing" do
@@ -71,6 +100,16 @@ describe Rapid::Skeleton::Base do
71
100
  @skeleton.send(:pushing?).should == false
72
101
  end
73
102
 
103
+ it "should accept settings as a parameter" do
104
+ @settings = mock('settings', :valid? => true)
105
+ @settings.should_receive(:load, :foo => 'bar')
106
+
107
+ @skeleton = Rapid::Skeleton::Base.new @settings
108
+ @skeleton.should_receive(:bones)
109
+
110
+ @skeleton.push :foo => 'bar'
111
+ end
112
+
74
113
  it "should raise a not implemented error" do
75
114
  @skeleton = Rapid::Skeleton::Base.new
76
115
  lambda { @skeleton.push }.should raise_error(NotImplementedError)
@@ -95,6 +134,16 @@ describe Rapid::Skeleton::Base do
95
134
  @skeleton.push!
96
135
  end
97
136
 
137
+ it "should accept settings as a parameter" do
138
+ @settings = mock('settings', :valid? => true)
139
+ @settings.should_receive(:load, :foo => 'bar')
140
+
141
+ @skeleton = Rapid::Skeleton::Base.new @settings
142
+ @skeleton.should_receive(:bones)
143
+
144
+ @skeleton.push! :foo => 'bar'
145
+ end
146
+
98
147
  end
99
148
 
100
149
  describe "pull" do
@@ -119,11 +168,73 @@ describe Rapid::Skeleton::Base do
119
168
 
120
169
  it "should return false if it does not encounter an error" do
121
170
  @skeleton = Rapid::Skeleton::Base.new
122
- Rapid::Check.should_receive(:encounters_error?).and_return(true)
171
+ @skeleton.check.should_receive(:encounters_error?).and_return(true)
123
172
 
124
173
  @skeleton.pull.should == false
125
174
  end
126
175
 
176
+ it "should log values" do
177
+ @settings = mock('settings')
178
+ @settings.should_receive(:[]=).with('foo', 'bar')
179
+ @skeleton = Rapid::Skeleton::Base.new @settings
180
+
181
+ @skeleton.check.should_receive(:log_value).with(:info, "foo", "bar")
182
+ @skeleton["foo"] = "bar"
183
+ end
184
+
185
+ it "should warn when setting to a different value during a pull" do
186
+ @settings = {'foo' => 'bar'}
187
+ @skeleton = Rapid::Skeleton::Base.new @settings
188
+
189
+ @skeleton.check.should_receive(:log_value).with(:warning, 'foo', 'baz')
190
+ @skeleton.instance_variable_set(:@pulled_settings, ['foo'])
191
+
192
+ @skeleton['foo'] = 'baz'
193
+ end
194
+
195
+ it "should just log when a boolean setting from true to 'true'" do
196
+ @settings = mock('settings')
197
+ @settings.should_receive(:[]).with('foo').twice.and_return(true)
198
+ @settings.should_receive(:[]=).with('foo', 'true')
199
+
200
+ @skeleton = Rapid::Skeleton::Base.new @settings
201
+
202
+ @skeleton.check.should_receive(:log_value).with(:info, 'foo', 'true')
203
+ @skeleton.instance_variable_set(:@pulled_settings, ['foo'])
204
+
205
+ @skeleton['foo'] = 'true'
206
+ end
207
+
208
+ it "should log a warning when a namespace previously turned off is set to on" do
209
+ @ns = mock('namespace', :namespaces => [], :scalars => [])
210
+ @namespace = Rapid::Setting::Namespace::Instance.new @ns, @parent
211
+
212
+ @settings = mock('settings')
213
+ @settings.should_receive(:[]).with('foo').twice.and_return(@namespace)
214
+ @settings.should_receive(:[]=).with('foo', 'true')
215
+
216
+ # goes from on to off
217
+ @namespace.should_receive(:on?).and_return(true)
218
+ @namespace.should_receive(:on?).and_return(false)
219
+
220
+ @skeleton = Rapid::Skeleton::Base.new @settings
221
+
222
+ @skeleton.check.should_receive(:log_value).with(:warning, 'foo', 'true')
223
+ @skeleton.instance_variable_set(:@pulled_settings, ['foo'])
224
+
225
+ @skeleton['foo'] = 'true'
226
+ end
227
+
228
+ it "should just log info when setting it to the same value" do
229
+ @settings = {'foo' => 'bar'}
230
+ @skeleton = Rapid::Skeleton::Base.new @settings
231
+
232
+ @skeleton.check.should_receive(:log_value).with(:info, 'foo', 'bar')
233
+ @skeleton.instance_variable_set(:@pulled_settings, ['foo'])
234
+
235
+ @skeleton['foo'] = 'bar'
236
+ end
237
+
127
238
  end
128
239
 
129
240
  describe "pull!" do
@@ -157,11 +268,6 @@ describe Rapid::Skeleton::Base do
157
268
  Rapid::Check.current = nil
158
269
  end
159
270
 
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
271
  it "should delegate ok to Rapid::Check.current" do
166
272
  @check.should_receive(:ok).with('foo', 'bar')
167
273
  @skeleton.send(:ok, 'foo', 'bar')
@@ -5,6 +5,8 @@ describe Rapid::Skeleton::Helpers::Directory do
5
5
  before do
6
6
  Object.class_eval do
7
7
  class MyClass
8
+ include Rapid::Skeleton::Helpers::IfSetting
9
+ include Rapid::Skeleton::Helpers::Files
8
10
  include Rapid::Skeleton::Helpers::Directory
9
11
 
10
12
  attr_accessor :templates_path, :project_path, :get_binding
@@ -32,17 +34,17 @@ describe Rapid::Skeleton::Helpers::Directory do
32
34
  @instance.send :directory, 'foo/bar'
33
35
  end
34
36
 
35
- it "shouldn't push the directory if setting is false" do
36
- FileUtils.should_not_receive(:mkdir_p)
37
+ it "should push the directory if the setting is true" do
38
+ @instance.should_receive(:make_project_directory).with('foo/bar')
37
39
 
38
- @instance.should_receive(:set?).with('foo').and_return(false)
40
+ @instance.should_receive(:set?).with('foo').and_return(true)
39
41
  @instance.send :directory, 'foo/bar', :if => 'foo'
40
42
  end
41
43
 
42
- it "should push the directory if the setting is true" do
43
- FileUtils.should_receive(:mkdir_p).with('tmp/foo/bar')
44
+ it "should delete the directory if setting is false" do
45
+ @instance.should_receive(:delete_project_directory).with('foo/bar')
44
46
 
45
- @instance.should_receive(:set?).with('foo').and_return(true)
47
+ @instance.should_receive(:set?).with('foo').and_return(false)
46
48
  @instance.send :directory, 'foo/bar', :if => 'foo'
47
49
  end
48
50
 
@@ -0,0 +1,93 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
2
+
3
+ describe Rapid::Skeleton::Helpers::Files do
4
+
5
+ before do
6
+ Object.class_eval do
7
+ class MyClass
8
+ include Rapid::Skeleton::Helpers::Files
9
+
10
+ attr_accessor :templates_path, :project_path
11
+ end
12
+ end
13
+
14
+ @instance = MyClass.new
15
+ @instance.templates_path = 'tmp/test/templates'
16
+ @instance.project_path = 'tmp/test/project'
17
+
18
+ FileUtils.mkdir_p @instance.templates_path
19
+ FileUtils.mkdir_p @instance.project_path
20
+ end
21
+
22
+ after do
23
+ Object.send(:remove_const, :MyClass) rescue nil
24
+ FileUtils.rm_rf 'tmp/test'
25
+ end
26
+
27
+ def create_file path, content
28
+ File.open(path, 'w') {|f| f.write content }
29
+ end
30
+
31
+ it "should read a template file" do
32
+ create_file 'tmp/test/templates/foo.rb', 'foo'
33
+ @instance.send(:read_template_file, 'foo.rb').should == 'foo'
34
+ end
35
+
36
+ it "should raise an error when reading a template file that doesn't exist" do
37
+ lambda { @instance.send(:read_template_file, 'foo.rb') }.should raise_error(Rapid::TemplateNotFoundError)
38
+ end
39
+
40
+ it "should know if a project file exists" do
41
+ @instance.send(:project_file_exists?, "foo.rb").should == false
42
+
43
+ create_file 'tmp/test/project/foo.rb', 'hi'
44
+ @instance.send(:project_file_exists?, "foo.rb").should == true
45
+ end
46
+
47
+ it "should make a project directory" do
48
+ FileUtils.should_receive(:mkdir_p).with('tmp/foo')
49
+ @instance.project_path = 'tmp'
50
+ @instance.send(:make_project_directory, "foo")
51
+ end
52
+
53
+ it "should delete a project directory" do
54
+ FileUtils.should_receive(:rm_rf).with('tmp/test')
55
+ FileUtils.should_receive(:rm_rf).with('tmp/foo')
56
+ @instance.project_path = 'tmp'
57
+ @instance.send(:delete_project_directory, "foo")
58
+ end
59
+
60
+ it "should read a project file" do
61
+ create_file 'tmp/test/project/foo.rb', 'hi'
62
+ @instance.send(:read_project_file, "foo.rb").should == 'hi'
63
+ end
64
+
65
+ it "should raise an error when reading a project file that doesn't exist" do
66
+ lambda { @instance.send(:read_project_file, "foo.rb") }.should raise_error(Rapid::ProjectFileNotFoundError)
67
+ end
68
+
69
+ it "should write a project file" do
70
+ @instance.send(:write_project_file, "config/foo.rb", "hi")
71
+ @instance.send(:read_project_file, "config/foo.rb").should == "hi"
72
+ end
73
+
74
+ it "should delete a project file" do
75
+ create_file "tmp/test/project/foo.rb", "hi"
76
+ @instance.send(:delete_project_file, "foo.rb")
77
+ File.exists?("tmp/test/project/foo.rb").should == false
78
+ end
79
+
80
+ it "should not raise an error when deleting a project file that doesn't exist" do
81
+ @instance.send(:delete_project_file, "foo.rb")
82
+ end
83
+
84
+ it "should chmod a file" do
85
+ File.should_receive(:chmod).with(0755, "tmp/test/project/foo.rb")
86
+ @instance.send(:chmod_project_file, 0755, "foo.rb")
87
+ end
88
+
89
+ it "should raise an error when chmodding a file that doesn't exist" do
90
+ lambda { @instance.send(:chmod_project_file, 0755, "foo.rb") }.should raise_error(Rapid::ProjectFileNotFoundError)
91
+ end
92
+
93
+ end
@@ -6,6 +6,7 @@ describe Rapid::Skeleton::Helpers::Gem do
6
6
  Object.class_eval do
7
7
  class MyClass
8
8
  include ActiveModel::Validations
9
+ include Rapid::Skeleton::Helpers::IfSetting
9
10
  include Rapid::Skeleton::Helpers::Gem
10
11
 
11
12
  attr_accessor :templates_path, :project_path, :get_binding
@@ -18,7 +19,8 @@ describe Rapid::Skeleton::Helpers::Gem do
18
19
  end
19
20
 
20
21
  def gemfile content
21
- @gemfile = File.open(@instance.gemfile_path, 'w') {|f| f.write content }
22
+ @instance.stub!(:project_file_exists?).with("Gemfile").and_return(true)
23
+ @instance.stub!(:read_project_file).with("Gemfile").and_return(content)
22
24
  end
23
25
 
24
26
  it "should not be valid if the Gemfile does not exist" do
@@ -26,6 +28,7 @@ describe Rapid::Skeleton::Helpers::Gem do
26
28
 
27
29
  @instance = MyClass.new
28
30
  @instance.project_path = "tmp"
31
+ @instance.should_receive(:project_file_exists?).with("Gemfile").and_return(false)
29
32
 
30
33
  @instance.valid?
31
34
  @instance.errors[:gem].should == ["file does not exist"]
@@ -35,11 +38,9 @@ describe Rapid::Skeleton::Helpers::Gem do
35
38
 
36
39
  def push *args
37
40
  @instance.send :gem, *args
38
- @gemfile = File.open(@instance.gemfile_path) {|f| f.read }
39
41
  end
40
42
 
41
43
  before do
42
- FileUtils.mkdir_p 'tmp/test'
43
44
  @instance = MyClass.new
44
45
  @instance.project_path = 'tmp/test'
45
46
 
@@ -47,72 +48,90 @@ describe Rapid::Skeleton::Helpers::Gem do
47
48
  @instance.stub!(:pulling?).and_return(false)
48
49
  end
49
50
 
50
- after do
51
- FileUtils.rm_rf 'tmp/test'
52
- end
53
-
54
51
  it "should append the gem to the existing list" do
55
- gemfile %(gem 'rails', '3.1.0')
52
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\ngem 'kaminari'))
53
+ gemfile %(\ngem 'rails', '3.1.0')
56
54
  push 'kaminari'
57
- @gemfile.should == %(gem 'rails', '3.1.0'\ngem 'kaminari')
58
55
  end
59
56
 
60
57
  it "should push a version" do
61
- gemfile %(gem 'rails', '3.1.0')
58
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\ngem 'kaminari', '1.0'))
59
+
60
+ gemfile %(\ngem 'rails', '3.1.0')
62
61
  push 'kaminari', '1.0'
63
- @gemfile.should == %(gem 'rails', '3.1.0'\ngem 'kaminari', '1.0')
64
62
  end
65
63
 
66
64
  it "should push options" do
67
- gemfile %(gem 'rails', '3.1.0')
65
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\ngem 'kaminari', :git => "git://somewhere"))
66
+
67
+ gemfile %(\ngem 'rails', '3.1.0')
68
68
  push 'kaminari', :git => 'git://somewhere'
69
- @gemfile.should == %(gem 'rails', '3.1.0'\ngem 'kaminari', :git => "git://somewhere")
70
69
  end
71
70
 
72
71
  it "should not append the gem if it already exists" do
73
- gemfile %(gem 'rails', '3.1.0')
72
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'))
73
+ gemfile %(\ngem 'rails', '3.1.0')
74
74
  push 'rails'
75
- @gemfile.should == %(gem 'rails', '3.1.0')
75
+
76
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'))
77
+ push 'rails', '3.1.0'
76
78
  end
77
79
 
78
80
  it "should append to group block if available" do
79
- gemfile %(gem 'rails', '3.1.0'\n\ngroup :development do\n gem 'capistrano'\nend)
81
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\n\ngroup :development do\n gem 'capistrano'\n gem 'capistrano-ext'\nend))
82
+ gemfile %(\ngem 'rails', '3.1.0'\n\ngroup :development do\n gem 'capistrano'\nend)
80
83
  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
84
  end
83
85
 
84
86
  it "should append with group option if group does not exist" do
85
- gemfile %(gem 'rails', '3.1.0')
87
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\ngem 'capistrano-ext', :group => :development))
88
+ gemfile %(\ngem 'rails', '3.1.0')
86
89
  push 'capistrano-ext', :group => 'development'
87
- @gemfile.should == %(gem 'rails', '3.1.0'\ngem 'capistrano-ext', :group => :development)
88
90
  end
89
91
 
90
92
  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)
93
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\n\ngroup :development, :test do\n gem 'capistrano'\n gem 'capistrano-ext'\nend))
94
+ gemfile %(\ngem 'rails', '3.1.0'\n\ngroup :development, :test do\n gem 'capistrano'\nend)
92
95
  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
96
  end
95
97
 
96
98
  it "should append with multiple groups option if group does not exist" do
97
- gemfile %(gem 'rails', '3.1.0')
99
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\ngem 'capistrano-ext', :groups => [:development, :test]))
100
+
101
+ gemfile %(\ngem 'rails', '3.1.0')
98
102
  push 'capistrano-ext', :groups => ['development', 'test']
99
- @gemfile.should == %(gem 'rails', '3.1.0'\ngem 'capistrano-ext', :groups => [:development, :test])
100
103
  end
101
104
 
102
105
  it "should push when :if is true" do
106
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\ngem 'capistrano-ext'))
103
107
  @instance.should_receive(:set?).with('foo').and_return(true)
104
- gemfile %(gem 'rails', '3.1.0')
105
108
 
109
+ gemfile %(\ngem 'rails', '3.1.0')
106
110
  push 'capistrano-ext', :if => 'foo'
107
- @gemfile.should == %(gem 'rails', '3.1.0'\ngem 'capistrano-ext')
108
111
  end
109
112
 
110
- it "should not push when :if is false" do
113
+ it "should remove the gem :if is false" do
114
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'))
111
115
  @instance.should_receive(:set?).with('foo').and_return(false)
112
- gemfile %(gem 'rails', '3.1.0')
113
116
 
117
+ gemfile %(\ngem 'rails', '3.1.0'\ngem 'capistrano-ext')
114
118
  push 'capistrano-ext', :if => 'foo'
115
- @gemfile.should == %(gem 'rails', '3.1.0')
119
+ end
120
+
121
+ it "should remove the gem :if is false and the gem is in a group" do
122
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'))
123
+ @instance.should_receive(:set?).with('foo').and_return(false)
124
+
125
+ gemfile %(\ngem 'rails', '3.1.0'\ngem 'capistrano-ext', :group => :development)
126
+ push 'capistrano-ext', :group => :development, :if => 'foo'
127
+ end
128
+
129
+ it "should remove the gem :if is false and the gem is in a group block" do
130
+ @instance.should_receive(:write_project_file).with("Gemfile", %(\ngem 'rails', '3.1.0'\n\ngroup :development do\n gem 'capistrano'\nend))
131
+ @instance.should_receive(:set?).with('foo').and_return(false)
132
+
133
+ gemfile %(\ngem 'rails', '3.1.0'\n\ngroup :development do\n gem 'capistrano'\n gem 'capistrano-ext'\nend)
134
+ push 'capistrano-ext', :group => :development, :if => 'foo'
116
135
  end
117
136
 
118
137
  end
@@ -120,7 +139,6 @@ describe Rapid::Skeleton::Helpers::Gem do
120
139
  describe "pull_gem" do
121
140
 
122
141
  before do
123
- FileUtils.mkdir_p 'tmp/test'
124
142
  @instance = MyClass.new
125
143
  @instance.project_path = 'tmp/test'
126
144
 
@@ -128,10 +146,6 @@ describe Rapid::Skeleton::Helpers::Gem do
128
146
  @instance.stub!(:pulling?).and_return(true)
129
147
  end
130
148
 
131
- after do
132
- FileUtils.rm_rf 'tmp/test'
133
- end
134
-
135
149
  it "should report an error it doesn't know where the Gemfile is" do
136
150
  @instance.project_path = nil
137
151
  @instance.should_receive(:error).with("kaminari", "Unknown Gemfile location")
@@ -140,20 +154,35 @@ describe Rapid::Skeleton::Helpers::Gem do
140
154
  end
141
155
 
142
156
  it "should report an error when the gemfile doesn't exist" do
157
+ @instance.should_receive(:project_file_exists?).with("Gemfile").and_return(false)
143
158
  @instance.should_receive(:error).with("kaminari", "Gemfile doesn't exist")
144
159
 
145
160
  @instance.send :gem, 'kaminari'
146
161
  end
147
162
 
148
163
  it "should report an error when the gem isn't in the gem file" do
149
- gemfile %()
164
+ gemfile %(\n)
150
165
  @instance.should_receive(:error).with("kaminari", "isn't in your Gemfile")
151
166
 
152
167
  @instance.send :gem, 'kaminari'
153
168
  end
154
169
 
170
+ it "should report an error when the gem is in the Gemfile, but commented out" do
171
+ gemfile %(\n# gem 'kaminari')
172
+ @instance.should_receive(:error).with("kaminari", "isn't in your Gemfile")
173
+
174
+ @instance.send :gem, 'kaminari'
175
+ end
176
+
177
+ it "should not be tricked by the same gem in the file twice, once commented, once not" do
178
+ gemfile %(\n# gem 'kaminari'\ngem 'kaminari')
179
+ @instance.should_receive(:ok).with("kaminari", "is in your Gemfile")
180
+
181
+ @instance.send :gem, 'kaminari'
182
+ end
183
+
155
184
  it "should report ok when the gem is in the gem file" do
156
- gemfile %(gem 'kaminari')
185
+ gemfile %(\ngem 'kaminari')
157
186
  @instance.should_receive(:ok).with("kaminari", "is in your Gemfile")
158
187
 
159
188
  @instance.send :gem, 'kaminari'
@@ -168,7 +197,7 @@ describe Rapid::Skeleton::Helpers::Gem do
168
197
  end
169
198
 
170
199
  it "should set the 'if' setting true" do
171
- gemfile %(gem 'kaminari')
200
+ gemfile %(\ngem 'kaminari')
172
201
  @instance.should_receive(:ok).with('kaminari', "is in your Gemfile")
173
202
  @instance.should_receive(:[]=).with('foo', true)
174
203