rapid-core 0.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -0,0 +1,110 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/../../../spec_helper')
2
+
3
+ describe Rapid::Skeleton::Helpers::IfSetting do
4
+
5
+ before do
6
+ Object.class_eval do
7
+ class MyClass
8
+ include Rapid::Skeleton::Helpers::IfSetting
9
+ end
10
+ end
11
+
12
+ @instance = MyClass.new
13
+ end
14
+
15
+ after do
16
+ Object.send(:remove_const, :MyClass) rescue nil
17
+ end
18
+
19
+ describe "has_if_setting?" do
20
+
21
+ def has_if_setting? options
22
+ @instance.send(:has_if_setting?, options)
23
+ end
24
+
25
+ it "should be true if the options contain an if statement" do
26
+ has_if_setting?(:if => 'foo').should == true
27
+ end
28
+
29
+ it "should be false if the options don't contain an if statement" do
30
+ has_if_setting?(:foo => true).should == false
31
+ end
32
+
33
+ end
34
+
35
+ describe "if_setting_off?" do
36
+
37
+ def if_setting_off? options
38
+ @instance.send(:if_setting_off?, options)
39
+ end
40
+
41
+ def set? setting, bool
42
+ @instance.should_receive(:set?).with(setting).and_return(bool)
43
+ end
44
+
45
+ it "should be true when :if => setting exists and not set" do
46
+ set? 'foo', false
47
+ if_setting_off?(:if => 'foo').should == true
48
+ end
49
+
50
+ it "should be false when :if => setting does not exist" do
51
+ if_setting_off?({}).should == false
52
+ end
53
+
54
+ it "should be false when :if => setting exists and set" do
55
+ set? 'foo', true
56
+ if_setting_off?(:if => 'foo').should == false
57
+ end
58
+
59
+ it "should be true when :if => [setting1, setting2] are all not set" do
60
+ set? 'foo', true
61
+ set? 'bar', true
62
+ if_setting_off?(:if => ['foo', 'bar']).should == false
63
+ end
64
+
65
+ it "should be false when :if => [setting1, setting2] are not all set" do
66
+ set? 'foo', true
67
+ set? 'bar', false
68
+ if_setting_off?(:if => ['foo', 'bar']).should == true
69
+
70
+ set? 'foo', false
71
+ # set? 'bar', true # short-circuited
72
+ if_setting_off?(:if => ['foo', 'bar']).should == true
73
+ end
74
+
75
+ end
76
+
77
+ describe "if_set!" do
78
+
79
+ def if_set! bool, options
80
+ @instance.send(:if_set!, bool, options)
81
+ end
82
+
83
+ it "should set :if => setting to true" do
84
+ @instance.should_receive(:[]=).with('foo', true)
85
+ if_set! true, :if => 'foo'
86
+ end
87
+
88
+ it "should set :if => setting to false" do
89
+ @instance.should_receive(:[]=).with('foo', false)
90
+ if_set! false, :if => 'foo'
91
+ end
92
+
93
+ it "should set :if => [setting1, setting2] to true" do
94
+ @instance.should_receive(:[]).with('foo')
95
+ @instance.should_receive(:[]).with('bar')
96
+ @instance.should_receive(:[]=).with('foo', true)
97
+ @instance.should_receive(:[]=).with('bar', true)
98
+ if_set! true, :if => ['foo', 'bar']
99
+ end
100
+
101
+ it "should not set :if => [setting1, setting2] if it's already set" do
102
+ @instance.should_receive(:[]).with('foo')
103
+ @instance.should_receive(:[]).with('bar').and_return(true)
104
+ @instance.should_receive(:[]=).with('foo', true)
105
+ if_set! true, :if => ['foo', 'bar']
106
+ end
107
+
108
+ end
109
+
110
+ end
@@ -5,7 +5,7 @@ describe Rapid::Skeleton::Helpers::Migration do
5
5
  before do
6
6
  Object.class_eval do
7
7
  class MyClass
8
- include Rapid::Skeleton::Helpers::Template
8
+ include Rapid::Skeleton::Helpers::IfSetting
9
9
  include Rapid::Skeleton::Helpers::Migration
10
10
 
11
11
  attr_accessor :templates_path, :project_path, :get_binding
@@ -13,10 +13,199 @@ describe Rapid::Skeleton::Helpers::Migration do
13
13
  end
14
14
 
15
15
  @instance = MyClass.new
16
+ @instance.project_path = "tmp/test/project"
17
+ @instance.templates_path = "tmp/test/templates"
18
+
19
+ FileUtils.mkdir_p File.join(@instance.project_path, 'db', 'migrate')
20
+ FileUtils.mkdir_p File.join(@instance.templates_path, 'db', 'migrate')
21
+
22
+ @time = Time.parse("Mon Feb 20 17:12:34 -0500 2012")
23
+ Time.stub!(:now).and_return(@time)
16
24
  end
17
25
 
18
26
  after do
19
27
  Object.send(:remove_const, :MyClass) rescue nil
28
+ FileUtils.rm_rf "tmp/test"
29
+ end
30
+
31
+ def create_file name, content
32
+ File.open(name, 'w') {|f| f.write content }
33
+ end
34
+
35
+ def create_project_migration name, content
36
+ path = File.join 'tmp', 'test', 'project', 'db', 'migrate', name
37
+ create_file path, content
38
+ end
39
+
40
+ def create_template_migration name, content
41
+ path = File.join 'tmp', 'test', 'templates', 'db', 'migrate', name
42
+ create_file path, content
43
+ end
44
+
45
+ it "should progressively create timestamped migrations" do
46
+ @instance.send(:timestamped_migration, 'create_users.rb').should == "20120220221234_create_users.rb"
47
+ @instance.send(:timestamped_migration, '02_create_groups.rb').should == "20120220221235_create_groups.rb"
48
+ @instance.send(:timestamped_migration, '02_create_accounts.rb').should == "20120220221236_create_accounts.rb"
49
+ end
50
+
51
+ describe "pull" do
52
+
53
+ before do
54
+ @instance.stub!(:pushing?).and_return(false)
55
+ @instance.stub!(:pulling?).and_return(true)
56
+ end
57
+
58
+ it "should pull the template's timestamped name" do
59
+ @instance.should_receive(:find_project_migration).with('create_users').and_return("01_create_users.rb")
60
+ @instance.should_receive(:pull_template).with("db/migrate/create_users.rb", :to => "db/migrate/01_create_users.rb")
61
+
62
+ @instance.send(:migration, "create_users")
63
+ end
64
+
65
+ it "should should set :if to true when the template exists" do
66
+ @instance.should_receive(:find_project_migration).with('create_users').and_return("01_create_users.rb")
67
+ @instance.should_receive(:pull_template).with("db/migrate/create_users.rb", :to => "db/migrate/01_create_users.rb")
68
+ @instance.should_receive(:[]=).with('foo', true)
69
+
70
+ @instance.send(:migration, "create_users", :if => 'foo')
71
+ end
72
+
73
+ it "should should set :if to false when the template does not exist" do
74
+ @instance.should_receive(:find_project_migration).with('create_users').and_return(nil)
75
+ @instance.should_receive(:[]=).with('foo', false)
76
+
77
+ @instance.send(:migration, "create_users", :if => 'foo')
78
+ end
79
+
80
+ end
81
+
82
+ describe "push" do
83
+
84
+ before do
85
+ @instance.stub!(:pushing?).and_return(true)
86
+ @instance.stub!(:pulling?).and_return(false)
87
+ end
88
+
89
+ def push name, options = {}
90
+ @instance.send :migration, name, options
91
+ end
92
+
93
+ it "should create the migration file" do
94
+ @instance.should_receive(:push_template).with('db/migrate/create_users.rb', :to => "db/migrate/20120220221234_create_users.rb")
95
+ push 'create_users'
96
+ end
97
+
98
+ it "should create the migration file when the if setting is true" do
99
+ @instance.should_receive(:set?).with('foo').and_return(true)
100
+ @instance.should_receive(:push_template).with('db/migrate/create_users.rb', :to => "db/migrate/20120220221234_create_users.rb")
101
+ push 'create_users', :if => 'foo'
102
+ end
103
+
104
+ describe ":if => false" do
105
+
106
+ before do
107
+ @instance.should_receive(:set?).with('foo').and_return(false)
108
+ @instance.should_receive(:find_project_migration).with('create_users').and_return("01_create_users.rb")
109
+ end
110
+
111
+ def in_version_control! bool
112
+ @instance.should_receive(:in_version_control?).with("db/migrate/01_create_users.rb").and_return(bool)
113
+ end
114
+
115
+ def in_schema! bool
116
+ @instance.should_receive(:in_local_schema?).with("db/migrate/01_create_users.rb").and_return(bool)
117
+ end
118
+
119
+ it "should do nothing when it's in version control but not in the schema" do
120
+ in_version_control! true
121
+ in_schema! false
122
+
123
+ push 'create_users', :if => 'foo'
124
+ end
125
+
126
+ it "should create a reverse migration when it's in version control and the schema" do
127
+ @instance.should_receive(:reverse_migration).with("01_create_users.rb", {})
128
+
129
+ in_version_control! true
130
+ in_schema! true
131
+
132
+ push 'create_users', :if => 'foo'
133
+ end
134
+
135
+ it "should delete the migration file when it's not in version control or the local schema" do
136
+ @instance.should_receive(:delete_project_file).with("db/migrate/01_create_users.rb")
137
+
138
+ in_version_control! false
139
+ in_schema! false
140
+
141
+ push 'create_users', :if => 'foo'
142
+ end
143
+
144
+ it "should report an error when it's not in version control but is in the schema" do
145
+ @instance.should_receive(:error).with("create_users", "must be rolled back before removing")
146
+
147
+ in_version_control! false
148
+ in_schema! true
149
+
150
+ push 'create_users', :if => 'foo'
151
+ end
152
+
153
+ end
154
+
155
+ end
156
+
157
+ describe "in_local_schema?" do
158
+
159
+
160
+
161
+ end
162
+
163
+ describe "reverse_migration" do
164
+
165
+ before do
166
+
167
+ @create_users_code = %(class CreateUsers < ActiveRecord::Migration
168
+ def self.up
169
+
170
+ create_table "users", :force => true do |t|
171
+ t.string "email"
172
+ t.datetime "created_at"
173
+ t.datetime "updated_at"
174
+ end
175
+
176
+ end
177
+
178
+ def self.down
179
+ drop_table :users
180
+ end
181
+ end
182
+ )
183
+ end
184
+
185
+
186
+ end
187
+
188
+ describe "find_project_migration" do
189
+
190
+ def find name
191
+ @instance.send(:find_project_migration, name)
192
+ end
193
+
194
+ it "should find the name with timestamps" do
195
+ create_project_migration "01_create_users.rb", "hi"
196
+ find("create_users").should == "01_create_users"
197
+ end
198
+
199
+ it "should find the name without timestamps" do
200
+ create_project_migration "create_users.rb", "hi"
201
+ find("create_users").should == "create_users"
202
+ end
203
+
204
+ it "should not find the name if it's not there" do
205
+ create_project_migration "01_create_accounts.rb", "hi"
206
+ find("create_users").should == nil
207
+ end
208
+
20
209
  end
21
210
 
22
211
 
@@ -18,7 +18,8 @@ describe Rapid::Skeleton::Helpers::Route do
18
18
  end
19
19
 
20
20
  def routes content
21
- @gemfile = File.open(@instance.routes_path, 'w') {|f| f.write content }
21
+ @instance.stub!(:project_file_exists?).with('config/routes.rb').and_return(true)
22
+ @instance.stub!(:read_project_file).with('config/routes.rb').and_return(content)
22
23
  end
23
24
 
24
25
  it "should not be valid if config/routes.rb does not exist" do
@@ -26,6 +27,7 @@ describe Rapid::Skeleton::Helpers::Route do
26
27
 
27
28
  @instance = MyClass.new
28
29
  @instance.project_path = "tmp"
30
+ @instance.should_receive(:project_file_exists?).with('config/routes.rb').and_return(false)
29
31
 
30
32
  @instance.valid?
31
33
  @instance.errors[:routes].should == ["file does not exist"]
@@ -35,44 +37,42 @@ describe Rapid::Skeleton::Helpers::Route do
35
37
 
36
38
  def push *args
37
39
  @instance.send :route, *args
38
- @routes = File.open(@instance.routes_path) {|f| f.read }
39
40
  end
40
41
 
41
42
  before do
42
- FileUtils.mkdir_p 'tmp/test/config'
43
43
  @instance = MyClass.new
44
- @instance.project_path = 'tmp/test'
44
+ @instance.project_path = 'tmp'
45
45
 
46
46
  @instance.stub!(:pushing?).and_return(true)
47
47
  @instance.stub!(:pulling?).and_return(false)
48
48
  end
49
49
 
50
- after do
51
- FileUtils.rm_rf 'tmp/test'
52
- end
53
-
54
50
  it "should append the routes to the existing file" do
51
+ @instance.should_receive(:write_project_file).with('config/routes.rb', %(HelloWorld::Application.routes.draw do\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\nend))
52
+
55
53
  routes %(HelloWorld::Application.routes.draw do\nend)
56
54
  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
55
  end
59
56
 
60
57
  it "should not append the same route twice" do
58
+ @instance.should_receive(:write_project_file).with('config/routes.rb', %(HelloWorld::Application.routes.draw do\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\nend))
59
+
61
60
  routes %(HelloWorld::Application.routes.draw do\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\nend)
62
61
  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
62
  end
65
63
 
66
64
  it "should append a route to a new namespace" do
65
+ @instance.should_receive(:write_project_file).with('config/routes.rb', %(HelloWorld::Application.routes.draw do\n namespace :admin do\n get 'sign-in', :to => 'user_sessions#new', :as => :sign_in\n end\nend))
66
+
67
67
  routes %(HelloWorld::Application.routes.draw do\nend)
68
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
69
  end
71
70
 
72
71
  it "should append a route to an existing namespace" do
72
+ @instance.should_receive(:write_project_file).with('config/routes.rb', %(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))
73
+
73
74
  routes %(HelloWorld::Application.routes.draw do\n namespace :admin do\n get 'foo'\n end\nend)
74
75
  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
76
  end
77
77
 
78
78
  end
@@ -96,6 +96,7 @@ describe Rapid::Skeleton::Helpers::Route do
96
96
  end
97
97
 
98
98
  it "should report an error when the routes file does not exist" do
99
+ @instance.should_receive(:project_file_exists?).with('config/routes.rb').and_return(false)
99
100
  @instance.should_receive(:error).with("config/routes.rb", "doesn't exist")
100
101
 
101
102
  @instance.send :route, :match, "/sign-in"
@@ -30,7 +30,8 @@ describe Rapid::Skeleton::Helpers::Script do
30
30
 
31
31
  it "should push_template and chmod it executable" do
32
32
  @instance.should_receive(:push_template).with("script/test", {})
33
- File.should_receive(:chmod).with(0755, 'tmp/script/test')
33
+ @instance.should_receive(:project_file_exists?).with('script/test').and_return(true)
34
+ @instance.should_receive(:chmod_project_file).with(0755, 'script/test')
34
35
 
35
36
  @instance.send :script, "script/test"
36
37
  end
@@ -5,38 +5,29 @@ describe Rapid::Skeleton::Helpers::Template do
5
5
  before do
6
6
  Object.class_eval do
7
7
  class MyClass
8
+ include Rapid::Skeleton::Helpers::IfSetting
8
9
  include Rapid::Skeleton::Helpers::Template
9
10
 
10
11
  attr_accessor :templates_path, :project_path, :get_binding
11
12
  end
12
13
  end
13
14
 
14
- @test_path = File.join 'tmp', 'test'
15
- @templates_path = File.join @test_path, 'templates'
16
- @project_path = File.join @test_path, 'project'
17
-
18
15
  @instance = MyClass.new
19
- @instance.templates_path = @templates_path
20
- @instance.project_path = @project_path
16
+ @instance.templates_path = 'templates'
17
+ @instance.project_path = 'project'
21
18
  end
22
19
 
23
20
  after do
24
21
  Object.send(:remove_const, :MyClass) rescue nil
25
- FileUtils.rm_rf @test_path
26
22
  end
27
23
 
28
24
  def create_template filename, content
29
- template_path = File.join @templates_path, filename
30
-
31
- FileUtils.mkdir_p File.dirname(template_path)
32
- File.open(template_path, 'w') {|f| f.write content }
25
+ @instance.stub!(:read_template_file).with(filename).and_return(content)
33
26
  end
34
27
 
35
28
  def create_output filename, content
36
- output_path = File.join @project_path, filename
37
-
38
- FileUtils.mkdir_p File.dirname(output_path)
39
- File.open(output_path, 'w') {|f| f.write content }
29
+ @instance.stub!(:project_file_exists?).with(filename).and_return(true)
30
+ @instance.stub!(:read_project_file).with(filename).and_return(content)
40
31
  end
41
32
 
42
33
  describe "push_template" do
@@ -47,42 +38,33 @@ describe Rapid::Skeleton::Helpers::Template do
47
38
  end
48
39
 
49
40
  it "should render the template and write it to the given file" do
41
+ @instance.should_receive(:write_project_file).with('db/migrate/20120202030406_create_users.rb', 'foo 3 bar')
42
+
50
43
  create_template 'db/migrate/01_create_users.rb', 'foo <%= 3 %> bar'
51
44
  @instance.send :template, "db/migrate/01_create_users.rb", :to => "db/migrate/20120202030406_create_users.rb"
52
-
53
- output_path = File.join @project_path, "db/migrate/20120202030406_create_users.rb"
54
- File.open(output_path) {|f| f.read }.should == "foo 3 bar"
55
45
  end
56
46
 
57
47
  it "should write the rendered template to the template path if :to option is not given" do
48
+ @instance.should_receive(:write_project_file).with('config/initializers/airbrake.rb', 'foo 3 bar')
49
+
58
50
  create_template 'config/initializers/airbrake.rb', 'foo <%= 3 %> bar'
59
51
  @instance.send :template, "config/initializers/airbrake.rb"
60
-
61
- output_path = File.join @project_path, "config/initializers/airbrake.rb"
62
- File.open(output_path) {|f| f.read }.should == "foo 3 bar"
63
- end
64
-
65
- it "should raise a template not found error when told to push an non-existing template" do
66
- lambda { @instance.send :template, "db/migrate/01_create_users.rb", :to => "db/migrate/20120202030406_create_users.rb" }.should raise_error(Rapid::TemplateNotFoundError)
67
52
  end
68
53
 
69
54
  it "should push when :if is true" do
55
+ @instance.should_receive(:write_project_file).with('foo.rb', 'hi')
56
+
70
57
  create_template 'foo.rb', 'hi'
71
58
  @instance.should_receive(:set?).with('foo').and_return(true)
72
59
 
73
60
  @instance.send :template, "foo.rb", :if => 'foo'
74
-
75
- output_path = File.join @project_path, "foo.rb"
76
- File.open(output_path) {|f| f.read }.should == "hi"
77
61
  end
78
62
 
79
- it "should not push when :if is false" do
63
+ it "should delete the template when :if is false" do
80
64
  @instance.should_receive(:set?).with('foo').and_return(false)
65
+ @instance.should_receive(:delete_project_file).with('foo.rb')
81
66
 
82
67
  @instance.send :template, "foo.rb", :if => 'foo'
83
-
84
- output_path = File.join @project_path, "foo.rb"
85
- File.exists?(output_path).should == false
86
68
  end
87
69
 
88
70
  end
@@ -95,9 +77,11 @@ describe Rapid::Skeleton::Helpers::Template do
95
77
  end
96
78
 
97
79
  it "should report an error when the template does not exist" do
98
- create_template 'config/initializers/airbrake.rb', 'foo <%= 3 %> bar'
80
+ @instance.should_receive(:project_file_exists?).with('config/initializers/airbrake.rb').and_return(false)
99
81
  @instance.should_receive(:error).with("config/initializers/airbrake.rb", "doesn't exist")
100
82
 
83
+ create_template 'config/initializers/airbrake.rb', 'foo <%= 3 %> bar'
84
+
101
85
  @instance.send :template, "config/initializers/airbrake.rb"
102
86
  end
103
87
 
@@ -115,15 +99,17 @@ describe Rapid::Skeleton::Helpers::Template do
115
99
  create_output 'config/initializers/airbrake.rb', 'foo Dan bar'
116
100
 
117
101
  @instance.should_receive(:ok).with("config/initializers/airbrake.rb", "is good")
102
+ @instance.should_receive(:[]=).with("name", "Dan")
118
103
 
119
104
  @instance.send :template, "config/initializers/airbrake.rb"
120
105
  end
121
106
 
122
107
  it "should set the 'if' setting false if the project file is missing" do
123
- create_template 'foo.rb', 'foo <%= name %> bar'
124
-
108
+ @instance.should_receive(:project_file_exists?).with('foo.rb').and_return(false)
125
109
  @instance.should_receive(:[]=).with('foo', false)
126
110
 
111
+ create_template 'foo.rb', 'foo <%= name %> bar'
112
+
127
113
  @instance.send :template, 'foo.rb', :if => 'foo'
128
114
  end
129
115
 
@@ -132,6 +118,7 @@ describe Rapid::Skeleton::Helpers::Template do
132
118
  create_output 'foo.rb', 'foo Dan bar'
133
119
 
134
120
  @instance.should_receive(:ok)
121
+ @instance.should_receive(:[]=).with('name', "Dan")
135
122
  @instance.should_receive(:[]=).with('foo', true)
136
123
 
137
124
  @instance.send :template, 'foo.rb', :if => 'foo'