rc_rails 2.1.0

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 (98) hide show
  1. data/.gitignore +7 -0
  2. data/CHANGELOG +355 -0
  3. data/Gemfile +5 -0
  4. data/Gemfile.lock.development +117 -0
  5. data/MIT-LICENSE +20 -0
  6. data/README.rdoc +71 -0
  7. data/Rakefile +33 -0
  8. data/Todo.txt +1 -0
  9. data/lib/rc_rails.rb +9 -0
  10. data/lib/resources_controller/actions.rb +147 -0
  11. data/lib/resources_controller/active_record/saved.rb +15 -0
  12. data/lib/resources_controller/helper.rb +123 -0
  13. data/lib/resources_controller/include_actions.rb +37 -0
  14. data/lib/resources_controller/named_route_helper.rb +154 -0
  15. data/lib/resources_controller/railtie.rb +14 -0
  16. data/lib/resources_controller/request_path_introspection.rb +83 -0
  17. data/lib/resources_controller/resource_methods.rb +32 -0
  18. data/lib/resources_controller/singleton_actions.rb +21 -0
  19. data/lib/resources_controller/specification.rb +119 -0
  20. data/lib/resources_controller/version.rb +3 -0
  21. data/lib/resources_controller.rb +849 -0
  22. data/resources_controller.gemspec +29 -0
  23. data/spec/app/database.yml +5 -0
  24. data/spec/app/views/accounts/show.html.erb +0 -0
  25. data/spec/app/views/addresses/edit.html.erb +0 -0
  26. data/spec/app/views/addresses/index.html.erb +0 -0
  27. data/spec/app/views/addresses/new.html.erb +0 -0
  28. data/spec/app/views/addresses/show.html.erb +0 -0
  29. data/spec/app/views/admin/forums/create.html.erb +0 -0
  30. data/spec/app/views/admin/forums/destroy.html.erb +0 -0
  31. data/spec/app/views/admin/forums/edit.html.erb +0 -0
  32. data/spec/app/views/admin/forums/index.html.erb +0 -0
  33. data/spec/app/views/admin/forums/new.html.erb +0 -0
  34. data/spec/app/views/admin/forums/show.html.erb +0 -0
  35. data/spec/app/views/admin/forums/update.html.erb +0 -0
  36. data/spec/app/views/comments/edit.html.erb +0 -0
  37. data/spec/app/views/comments/index.html.erb +0 -0
  38. data/spec/app/views/comments/new.html.erb +0 -0
  39. data/spec/app/views/comments/show.html.erb +0 -0
  40. data/spec/app/views/forum_posts/edit.html.erb +0 -0
  41. data/spec/app/views/forum_posts/index.html.erb +0 -0
  42. data/spec/app/views/forum_posts/new.html.erb +0 -0
  43. data/spec/app/views/forum_posts/show.html.erb +0 -0
  44. data/spec/app/views/forums/create.html.erb +0 -0
  45. data/spec/app/views/forums/destroy.html.erb +0 -0
  46. data/spec/app/views/forums/edit.html.erb +0 -0
  47. data/spec/app/views/forums/index.html.erb +0 -0
  48. data/spec/app/views/forums/new.html.erb +0 -0
  49. data/spec/app/views/forums/show.html.erb +0 -0
  50. data/spec/app/views/forums/update.html.erb +0 -0
  51. data/spec/app/views/infos/edit.html.erb +0 -0
  52. data/spec/app/views/infos/show.html.erb +0 -0
  53. data/spec/app/views/interests/index.html.erb +0 -0
  54. data/spec/app/views/interests/show.html.erb +0 -0
  55. data/spec/app/views/owners/edit.html.erb +0 -0
  56. data/spec/app/views/owners/new.html.erb +0 -0
  57. data/spec/app/views/owners/show.html.erb +0 -0
  58. data/spec/app/views/tags/index.html.erb +0 -0
  59. data/spec/app/views/tags/new.html.erb +0 -0
  60. data/spec/app/views/tags/show.html.erb +0 -0
  61. data/spec/app/views/users/edit.html.erb +0 -0
  62. data/spec/app/views/users/index.html.erb +0 -0
  63. data/spec/app/views/users/show.html.erb +0 -0
  64. data/spec/app.rb +315 -0
  65. data/spec/controllers/accounts_controller_spec.rb +77 -0
  66. data/spec/controllers/addresses_controller_spec.rb +346 -0
  67. data/spec/controllers/admin_forums_controller_spec.rb +638 -0
  68. data/spec/controllers/comments_controller_spec.rb +380 -0
  69. data/spec/controllers/comments_controller_with_models_spec.rb +202 -0
  70. data/spec/controllers/forum_posts_controller_spec.rb +426 -0
  71. data/spec/controllers/forums_controller_spec.rb +694 -0
  72. data/spec/controllers/infos_controller_spec.rb +71 -0
  73. data/spec/controllers/interests_controller_via_forum_spec.rb +80 -0
  74. data/spec/controllers/interests_controller_via_user_spec.rb +114 -0
  75. data/spec/controllers/owners_controller_spec.rb +277 -0
  76. data/spec/controllers/resource_saved_spec.rb +47 -0
  77. data/spec/controllers/resource_service_in_forums_controller_spec.rb +37 -0
  78. data/spec/controllers/resource_service_in_infos_controller_spec.rb +36 -0
  79. data/spec/controllers/resource_service_in_interests_controller_via_forum_spec.rb +51 -0
  80. data/spec/controllers/tags_controller_spec.rb +83 -0
  81. data/spec/controllers/tags_controller_via_account_info_spec.rb +131 -0
  82. data/spec/controllers/tags_controller_via_forum_post_comment_spec.rb +144 -0
  83. data/spec/controllers/tags_controller_via_forum_post_spec.rb +133 -0
  84. data/spec/controllers/tags_controller_via_forum_spec.rb +173 -0
  85. data/spec/controllers/tags_controller_via_user_address_spec.rb +130 -0
  86. data/spec/controllers/users_controller_spec.rb +248 -0
  87. data/spec/lib/action_view_helper_spec.rb +143 -0
  88. data/spec/lib/bug_0001_spec.rb +22 -0
  89. data/spec/lib/include_actions_spec.rb +35 -0
  90. data/spec/lib/load_enclosing_resources_spec.rb +245 -0
  91. data/spec/lib/request_path_introspection_spec.rb +130 -0
  92. data/spec/lib/resource_methods_spec.rb +204 -0
  93. data/spec/lib/resources_controller_spec.rb +57 -0
  94. data/spec/models/comment_saved_spec.rb +24 -0
  95. data/spec/rspec_generator_task.rb +105 -0
  96. data/spec/spec_helper.rb +17 -0
  97. data/spec/verify_rcov.rb +52 -0
  98. metadata +193 -0
@@ -0,0 +1,346 @@
1
+ require 'spec_helper'
2
+
3
+ module AddressesSpecHelper
4
+ def setup_mocks
5
+ @user = mock('User')
6
+ @user_addresses = mock('Assoc: user_addresses')
7
+ @user.stub!(:addresses).and_return(@user_addresses)
8
+ @user.stub!(:to_param).and_return("dave")
9
+
10
+ User.stub!(:find_by_login).and_return(@user)
11
+ end
12
+ end
13
+
14
+ describe AddressesController do
15
+ describe "Routing shortcuts for Addresses (users/dave/addresses/1) should map" do
16
+ include AddressesSpecHelper
17
+
18
+ before(:each) do
19
+ setup_mocks
20
+ @address = mock('Address')
21
+ @address.stub!(:to_param).and_return('1')
22
+ @user_addresses.stub!(:find).and_return(@address)
23
+
24
+ get :show, :user_id => "dave", :id => "1"
25
+ end
26
+
27
+ it "resources_path to /users/dave/addresses" do
28
+ controller.resources_path.should == '/users/dave/addresses'
29
+ end
30
+
31
+ it "resource_path to /users/dave/addresses/1" do
32
+ controller.resource_path.should == '/users/dave/addresses/1'
33
+ end
34
+
35
+ it "resource_path(9) to /users/dave/addresses/9" do
36
+ controller.resource_path(9).should == '/users/dave/addresses/9'
37
+ end
38
+
39
+ it "edit_resource_path to /users/dave/addresses/1/edit" do
40
+ controller.edit_resource_path.should == '/users/dave/addresses/1/edit'
41
+ end
42
+
43
+ it "edit_resource_path(9) to /users/dave/addresses/9/edit" do
44
+ controller.edit_resource_path(9).should == '/users/dave/addresses/9/edit'
45
+ end
46
+
47
+ it "new_resource_path to /users/dave/addresses/new" do
48
+ controller.new_resource_path.should == '/users/dave/addresses/new'
49
+ end
50
+ end
51
+
52
+ describe "resource_service in AddressesController" do
53
+
54
+ before(:each) do
55
+ @user = User.create :login => 'dave'
56
+ @address = Address.create :user_id => @user.id
57
+ @other_user = User.create
58
+ @other_address = Address.create :user_id => @other_user.id
59
+
60
+ get :index, :user_id => 'dave'
61
+ @resource_service = controller.send :resource_service
62
+ end
63
+
64
+ it "should build new address with @user foreign key with new" do
65
+ resource = @resource_service.new
66
+ resource.should be_kind_of(Address)
67
+ resource.user_id.should == @user.id
68
+ end
69
+
70
+ it "should find @address with find(@address.id)" do
71
+ resource = @resource_service.find(@address.id)
72
+ resource.should == @address
73
+ end
74
+
75
+ it "should raise RecordNotFound with find(@other_address.id)" do
76
+ lambda{ @resource_service.find(@other_address.id) }.should raise_error(ActiveRecord::RecordNotFound)
77
+ end
78
+
79
+ it "should find only addresses belonging to @user with find(:all)" do
80
+ resources = @resource_service.find(:all)
81
+ resources.should be == Address.find(:all, :conditions => "user_id = #{@user.id}")
82
+ end
83
+ end
84
+
85
+ describe "Requesting /users/dave/addresses" do
86
+ include AddressesSpecHelper
87
+
88
+ before(:each) do
89
+ setup_mocks
90
+ @addresses = mock('Addresses')
91
+ @user_addresses.stub!(:all).and_return(@addresses)
92
+ end
93
+
94
+ def do_get
95
+ get :index, :user_id => 'dave'
96
+ end
97
+
98
+ it "should find the user" do
99
+ User.should_receive(:find_by_login).with('dave').and_return(@user)
100
+ do_get
101
+ end
102
+
103
+ it "should assign the found user for the view" do
104
+ do_get
105
+ assigns[:user].should == @user
106
+ end
107
+
108
+ it "should assign the user_addresses association as the addresses resource_service" do
109
+ @user.should_receive(:addresses).and_return(@user_addresses)
110
+ do_get
111
+ @controller.resource_service.should == @user_addresses
112
+ end
113
+ end
114
+
115
+ describe "Requesting /users/dave/addresses using GET" do
116
+ include AddressesSpecHelper
117
+
118
+ before(:each) do
119
+ setup_mocks
120
+ @addresses = mock('Addresses')
121
+ @user_addresses.stub!(:all).and_return(@addresses)
122
+ end
123
+
124
+ def do_get
125
+ get :index, :user_id => '2'
126
+ end
127
+
128
+ it "should be successful" do
129
+ do_get
130
+ response.should be_success
131
+ end
132
+
133
+ it "should render index.rhtml" do
134
+ do_get
135
+ response.should render_template(:index)
136
+ end
137
+
138
+ it "should find all addresses" do
139
+ @user_addresses.should_receive(:all).and_return(@addresses)
140
+ do_get
141
+ end
142
+
143
+ it "should assign the found addresses for the view" do
144
+ do_get
145
+ assigns[:addresses].should == @addresses
146
+ end
147
+ end
148
+
149
+ describe "Requesting /users/dave/addresses/1 using GET" do
150
+ include AddressesSpecHelper
151
+
152
+ before(:each) do
153
+ setup_mocks
154
+ @address = mock('a address')
155
+ @user_addresses.stub!(:find).and_return(@address)
156
+ end
157
+
158
+ def do_get
159
+ get :show, :id => "1", :user_id => "dave"
160
+ end
161
+
162
+ it "should be successful" do
163
+ do_get
164
+ response.should be_success
165
+ end
166
+
167
+ it "should render show.rhtml" do
168
+ do_get
169
+ response.should render_template(:show)
170
+ end
171
+
172
+ it "should find the thing requested" do
173
+ @user_addresses.should_receive(:find).with("1").and_return(@address)
174
+ do_get
175
+ end
176
+
177
+ it "should assign the found thing for the view" do
178
+ do_get
179
+ assigns[:address].should == @address
180
+ end
181
+ end
182
+
183
+ describe "Requesting /users/dave/addresses/new using GET" do
184
+ include AddressesSpecHelper
185
+
186
+ before(:each) do
187
+ setup_mocks
188
+ @address = mock('new Address')
189
+ @user_addresses.stub!(:build).and_return(@address)
190
+ end
191
+
192
+ def do_get
193
+ get :new, :user_id => "dave"
194
+ end
195
+
196
+ it "should be successful" do
197
+ do_get
198
+ response.should be_success
199
+ end
200
+
201
+ it "should render new.rhtml" do
202
+ do_get
203
+ response.should render_template(:new)
204
+ end
205
+
206
+ it "should create an new thing" do
207
+ @user_addresses.should_receive(:build).and_return(@address)
208
+ do_get
209
+ end
210
+
211
+ it "should not save the new thing" do
212
+ @address.should_not_receive(:save)
213
+ do_get
214
+ end
215
+
216
+ it "should assign the new thing for the view" do
217
+ do_get
218
+ assigns[:address].should == @address
219
+ end
220
+ end
221
+
222
+ describe "Requesting /users/dave/addresses/1/edit using GET" do
223
+ include AddressesSpecHelper
224
+
225
+ before(:each) do
226
+ setup_mocks
227
+ @address = mock('Address')
228
+ @user_addresses.stub!(:find).and_return(@address)
229
+ end
230
+
231
+ def do_get
232
+ get :edit, :id => "1", :user_id => "dave"
233
+ end
234
+
235
+ it "should be successful" do
236
+ do_get
237
+ response.should be_success
238
+ end
239
+
240
+ it "should render edit.rhtml" do
241
+ do_get
242
+ response.should render_template(:edit)
243
+ end
244
+
245
+ it "should find the thing requested" do
246
+ @user_addresses.should_receive(:find).with("1").and_return(@address)
247
+ do_get
248
+ end
249
+
250
+ it "should assign the found Thing for the view" do
251
+ do_get
252
+ assigns(:address).should equal(@address)
253
+ end
254
+ end
255
+
256
+ describe "Requesting /users/dave/addresses using POST" do
257
+ include AddressesSpecHelper
258
+
259
+ before(:each) do
260
+ setup_mocks
261
+ @address = mock('Address')
262
+ @address.stub!(:save).and_return(true)
263
+ @address.stub!(:to_param).and_return("1")
264
+ @user_addresses.stub!(:build).and_return(@address)
265
+ end
266
+
267
+ def do_post
268
+ post :create, :address => {:name => 'Address'}, :user_id => "dave"
269
+ end
270
+
271
+ it "should create a new address" do
272
+ @user_addresses.should_receive(:build).with({'name' => 'Address'}).and_return(@address)
273
+ do_post
274
+ end
275
+
276
+ it "should redirect to the new address" do
277
+ do_post
278
+ response.should be_redirect
279
+ response.redirect_url.should == "http://test.host/users/dave/addresses/1"
280
+ end
281
+ end
282
+
283
+ describe "Requesting /users/dave/addresses/1 using PUT" do
284
+ include AddressesSpecHelper
285
+
286
+ before(:each) do
287
+ setup_mocks
288
+ @address = mock('Address').as_null_object
289
+ @address.stub!(:to_param).and_return("1")
290
+ @user_addresses.stub!(:find).and_return(@address)
291
+ end
292
+
293
+ def do_update
294
+ put :update, :id => "1", :user_id => "dave"
295
+ end
296
+
297
+ it "should find the address requested" do
298
+ @user_addresses.should_receive(:find).with("1").and_return(@address)
299
+ do_update
300
+ end
301
+
302
+ it "should update the found address" do
303
+ @address.should_receive(:update_attributes).and_return(true)
304
+ do_update
305
+ end
306
+
307
+ it "should assign the found address for the view" do
308
+ do_update
309
+ assigns(:address).should == @address
310
+ end
311
+
312
+ it "should redirect to the address" do
313
+ do_update
314
+ response.should be_redirect
315
+ response.redirect_url.should == "http://test.host/users/dave/addresses/1"
316
+ end
317
+ end
318
+
319
+ describe "Requesting /users/dave/addresses/1 using DELETE" do
320
+ include AddressesSpecHelper
321
+
322
+ before(:each) do
323
+ setup_mocks
324
+ @address = mock('Address', :id => "1").as_null_object
325
+ @user_addresses.stub!(:find).and_return(@address)
326
+ @user_addresses.stub!(:destroy)
327
+ end
328
+
329
+ def do_delete
330
+ delete :destroy, :id => "1", :user_id => "dave"
331
+ end
332
+
333
+ it "should find and destroy the address requested" do
334
+ @user_addresses.should_receive(:find).with("1").and_return(@address)
335
+ @user_addresses.should_receive(:destroy).with("1")
336
+ do_delete
337
+ assigns(:address).should == @address
338
+ end
339
+
340
+ it "should redirect to the things list" do
341
+ do_delete
342
+ response.should be_redirect
343
+ response.redirect_url.should == "http://test.host/users/dave/addresses"
344
+ end
345
+ end
346
+ end