resource_controller 0.4.9

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 (211) hide show
  1. data/LICENSE +22 -0
  2. data/README +282 -0
  3. data/README.rdoc +282 -0
  4. data/Rakefile +35 -0
  5. data/generators/scaffold_resource/USAGE +29 -0
  6. data/generators/scaffold_resource/scaffold_resource_generator.rb +179 -0
  7. data/generators/scaffold_resource/templates/controller.rb +2 -0
  8. data/generators/scaffold_resource/templates/fixtures.yml +10 -0
  9. data/generators/scaffold_resource/templates/functional_test.rb +57 -0
  10. data/generators/scaffold_resource/templates/helper.rb +2 -0
  11. data/generators/scaffold_resource/templates/migration.rb +15 -0
  12. data/generators/scaffold_resource/templates/model.rb +2 -0
  13. data/generators/scaffold_resource/templates/old_migration.rb +13 -0
  14. data/generators/scaffold_resource/templates/rspec/functional_spec.rb +255 -0
  15. data/generators/scaffold_resource/templates/rspec/helper_spec.rb +11 -0
  16. data/generators/scaffold_resource/templates/rspec/routing_spec.rb +61 -0
  17. data/generators/scaffold_resource/templates/rspec/unit_spec.rb +11 -0
  18. data/generators/scaffold_resource/templates/rspec/views/edit_spec.rb +28 -0
  19. data/generators/scaffold_resource/templates/rspec/views/index_spec.rb +26 -0
  20. data/generators/scaffold_resource/templates/rspec/views/new_spec.rb +30 -0
  21. data/generators/scaffold_resource/templates/rspec/views/show_spec.rb +25 -0
  22. data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
  23. data/generators/scaffold_resource/templates/unit_test.rb +7 -0
  24. data/generators/scaffold_resource/templates/view__form.erb +6 -0
  25. data/generators/scaffold_resource/templates/view__form.haml +5 -0
  26. data/generators/scaffold_resource/templates/view_edit.erb +16 -0
  27. data/generators/scaffold_resource/templates/view_edit.haml +11 -0
  28. data/generators/scaffold_resource/templates/view_index.erb +22 -0
  29. data/generators/scaffold_resource/templates/view_index.haml +19 -0
  30. data/generators/scaffold_resource/templates/view_new.erb +12 -0
  31. data/generators/scaffold_resource/templates/view_new.haml +9 -0
  32. data/generators/scaffold_resource/templates/view_show.erb +9 -0
  33. data/generators/scaffold_resource/templates/view_show.haml +9 -0
  34. data/init.rb +1 -0
  35. data/lib/resource_controller.rb +15 -0
  36. data/lib/resource_controller/accessors.rb +77 -0
  37. data/lib/resource_controller/action_options.rb +40 -0
  38. data/lib/resource_controller/actions.rb +75 -0
  39. data/lib/resource_controller/base.rb +15 -0
  40. data/lib/resource_controller/class_methods.rb +22 -0
  41. data/lib/resource_controller/controller.rb +63 -0
  42. data/lib/resource_controller/failable_action_options.rb +25 -0
  43. data/lib/resource_controller/helpers.rb +28 -0
  44. data/lib/resource_controller/helpers/current_objects.rb +69 -0
  45. data/lib/resource_controller/helpers/internal.rb +76 -0
  46. data/lib/resource_controller/helpers/nested.rb +45 -0
  47. data/lib/resource_controller/helpers/urls.rb +124 -0
  48. data/lib/resource_controller/response_collector.rb +27 -0
  49. data/lib/resource_controller/version.rb +9 -0
  50. data/lib/tasks/gem.rake +67 -0
  51. data/lib/urligence.rb +50 -0
  52. data/rails/init.rb +6 -0
  53. data/test/Rakefile +10 -0
  54. data/test/app/controllers/application.rb +7 -0
  55. data/test/app/controllers/cms/options_controller.rb +3 -0
  56. data/test/app/controllers/cms/products_controller.rb +3 -0
  57. data/test/app/controllers/comments_controller.rb +3 -0
  58. data/test/app/controllers/people_controller.rb +9 -0
  59. data/test/app/controllers/photos_controller.rb +11 -0
  60. data/test/app/controllers/posts_controller.rb +10 -0
  61. data/test/app/controllers/projects_controller.rb +3 -0
  62. data/test/app/controllers/somethings_controller.rb +3 -0
  63. data/test/app/controllers/tags_controller.rb +13 -0
  64. data/test/app/controllers/users_controller.rb +12 -0
  65. data/test/app/helpers/application_helper.rb +3 -0
  66. data/test/app/helpers/cms/products_helper.rb +2 -0
  67. data/test/app/helpers/comments_helper.rb +2 -0
  68. data/test/app/helpers/options_helper.rb +2 -0
  69. data/test/app/helpers/people_helper.rb +2 -0
  70. data/test/app/helpers/photos_helper.rb +2 -0
  71. data/test/app/helpers/posts_helper.rb +2 -0
  72. data/test/app/helpers/projects_helper.rb +2 -0
  73. data/test/app/helpers/somethings_helper.rb +2 -0
  74. data/test/app/helpers/tags_helper.rb +2 -0
  75. data/test/app/helpers/users_helper.rb +2 -0
  76. data/test/app/models/account.rb +3 -0
  77. data/test/app/models/comment.rb +3 -0
  78. data/test/app/models/option.rb +3 -0
  79. data/test/app/models/photo.rb +4 -0
  80. data/test/app/models/post.rb +3 -0
  81. data/test/app/models/product.rb +3 -0
  82. data/test/app/models/project.rb +2 -0
  83. data/test/app/models/something.rb +2 -0
  84. data/test/app/models/tag.rb +3 -0
  85. data/test/app/views/cms/options/edit.rhtml +17 -0
  86. data/test/app/views/cms/options/index.rhtml +20 -0
  87. data/test/app/views/cms/options/new.rhtml +16 -0
  88. data/test/app/views/cms/options/show.rhtml +8 -0
  89. data/test/app/views/cms/products/edit.rhtml +17 -0
  90. data/test/app/views/cms/products/index.rhtml +20 -0
  91. data/test/app/views/cms/products/new.rhtml +16 -0
  92. data/test/app/views/cms/products/show.rhtml +8 -0
  93. data/test/app/views/comments/edit.rhtml +27 -0
  94. data/test/app/views/comments/index.rhtml +24 -0
  95. data/test/app/views/comments/new.rhtml +26 -0
  96. data/test/app/views/comments/show.rhtml +18 -0
  97. data/test/app/views/layouts/application.rhtml +17 -0
  98. data/test/app/views/layouts/comments.rhtml +17 -0
  99. data/test/app/views/layouts/options.rhtml +17 -0
  100. data/test/app/views/layouts/people.rhtml +17 -0
  101. data/test/app/views/layouts/photos.rhtml +17 -0
  102. data/test/app/views/layouts/projects.rhtml +17 -0
  103. data/test/app/views/layouts/somethings.rhtml +17 -0
  104. data/test/app/views/layouts/tags.rhtml +17 -0
  105. data/test/app/views/people/edit.rhtml +17 -0
  106. data/test/app/views/people/index.rhtml +20 -0
  107. data/test/app/views/people/new.rhtml +16 -0
  108. data/test/app/views/people/show.rhtml +8 -0
  109. data/test/app/views/photos/edit.rhtml +17 -0
  110. data/test/app/views/photos/index.rhtml +20 -0
  111. data/test/app/views/photos/new.rhtml +16 -0
  112. data/test/app/views/photos/show.rhtml +8 -0
  113. data/test/app/views/posts/edit.rhtml +22 -0
  114. data/test/app/views/posts/index.rhtml +22 -0
  115. data/test/app/views/posts/new.rhtml +21 -0
  116. data/test/app/views/posts/show.rhtml +13 -0
  117. data/test/app/views/projects/edit.rhtml +17 -0
  118. data/test/app/views/projects/index.rhtml +20 -0
  119. data/test/app/views/projects/new.rhtml +16 -0
  120. data/test/app/views/projects/show.rhtml +8 -0
  121. data/test/app/views/somethings/edit.rhtml +17 -0
  122. data/test/app/views/somethings/index.rhtml +20 -0
  123. data/test/app/views/somethings/new.rhtml +16 -0
  124. data/test/app/views/somethings/show.rhtml +8 -0
  125. data/test/app/views/tags/edit.rhtml +17 -0
  126. data/test/app/views/tags/index.rhtml +20 -0
  127. data/test/app/views/tags/index.rjs +0 -0
  128. data/test/app/views/tags/new.rhtml +16 -0
  129. data/test/app/views/tags/show.rhtml +8 -0
  130. data/test/app/views/users/edit.rhtml +17 -0
  131. data/test/app/views/users/index.rhtml +20 -0
  132. data/test/app/views/users/new.rhtml +16 -0
  133. data/test/app/views/users/show.rhtml +8 -0
  134. data/test/config/boot.rb +109 -0
  135. data/test/config/database.yml +16 -0
  136. data/test/config/environment.rb +64 -0
  137. data/test/config/environments/development.rb +21 -0
  138. data/test/config/environments/test.rb +19 -0
  139. data/test/config/routes.rb +51 -0
  140. data/test/db/migrate/001_create_posts.rb +12 -0
  141. data/test/db/migrate/002_create_products.rb +11 -0
  142. data/test/db/migrate/003_create_comments.rb +13 -0
  143. data/test/db/migrate/004_create_options.rb +12 -0
  144. data/test/db/migrate/005_create_photos.rb +11 -0
  145. data/test/db/migrate/006_create_tags.rb +17 -0
  146. data/test/db/migrate/007_create_somethings.rb +11 -0
  147. data/test/db/migrate/008_create_accounts.rb +11 -0
  148. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  149. data/test/db/migrate/010_create_projects.rb +11 -0
  150. data/test/db/schema.rb +65 -0
  151. data/test/log/development.log +2918 -0
  152. data/test/log/test.log +135619 -0
  153. data/test/log/thin.log +12 -0
  154. data/test/script/console +3 -0
  155. data/test/script/destroy +3 -0
  156. data/test/script/generate +3 -0
  157. data/test/script/server +3 -0
  158. data/test/test/fixtures/accounts.yml +7 -0
  159. data/test/test/fixtures/comments.yml +11 -0
  160. data/test/test/fixtures/options.yml +9 -0
  161. data/test/test/fixtures/photos.yml +9 -0
  162. data/test/test/fixtures/photos_tags.yml +3 -0
  163. data/test/test/fixtures/posts.yml +9 -0
  164. data/test/test/fixtures/products.yml +7 -0
  165. data/test/test/fixtures/projects.yml +7 -0
  166. data/test/test/fixtures/somethings.yml +7 -0
  167. data/test/test/fixtures/tags.yml +7 -0
  168. data/test/test/functional/cms/options_controller_test.rb +23 -0
  169. data/test/test/functional/cms/products_controller_test.rb +23 -0
  170. data/test/test/functional/comments_controller_test.rb +26 -0
  171. data/test/test/functional/people_controller_test.rb +34 -0
  172. data/test/test/functional/photos_controller_test.rb +130 -0
  173. data/test/test/functional/posts_controller_test.rb +34 -0
  174. data/test/test/functional/projects_controller_test.rb +18 -0
  175. data/test/test/functional/somethings_controller_test.rb +28 -0
  176. data/test/test/functional/tags_controller_test.rb +64 -0
  177. data/test/test/functional/users_controller_test.rb +24 -0
  178. data/test/test/test_helper.rb +12 -0
  179. data/test/test/unit/accessors_test.rb +110 -0
  180. data/test/test/unit/account_test.rb +7 -0
  181. data/test/test/unit/action_options_test.rb +109 -0
  182. data/test/test/unit/base_test.rb +11 -0
  183. data/test/test/unit/comment_test.rb +10 -0
  184. data/test/test/unit/failable_action_options_test.rb +77 -0
  185. data/test/test/unit/helpers/current_objects_test.rb +127 -0
  186. data/test/test/unit/helpers/internal_test.rb +106 -0
  187. data/test/test/unit/helpers/nested_test.rb +82 -0
  188. data/test/test/unit/helpers/urls_test.rb +71 -0
  189. data/test/test/unit/helpers_test.rb +25 -0
  190. data/test/test/unit/option_test.rb +10 -0
  191. data/test/test/unit/photo_test.rb +10 -0
  192. data/test/test/unit/post_test.rb +10 -0
  193. data/test/test/unit/project_test.rb +10 -0
  194. data/test/test/unit/response_collector_test.rb +49 -0
  195. data/test/test/unit/something_test.rb +10 -0
  196. data/test/test/unit/tag_test.rb +10 -0
  197. data/test/test/unit/urligence_test.rb +203 -0
  198. data/test/vendor/plugins/shoulda/Rakefile +32 -0
  199. data/test/vendor/plugins/shoulda/bin/convert_to_should_syntax +40 -0
  200. data/test/vendor/plugins/shoulda/init.rb +3 -0
  201. data/test/vendor/plugins/shoulda/lib/shoulda.rb +43 -0
  202. data/test/vendor/plugins/shoulda/lib/shoulda/active_record_helpers.rb +580 -0
  203. data/test/vendor/plugins/shoulda/lib/shoulda/color.rb +77 -0
  204. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/controller_tests.rb +467 -0
  205. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/html.rb +201 -0
  206. data/test/vendor/plugins/shoulda/lib/shoulda/controller_tests/formats/xml.rb +170 -0
  207. data/test/vendor/plugins/shoulda/lib/shoulda/gem/proc_extensions.rb +14 -0
  208. data/test/vendor/plugins/shoulda/lib/shoulda/gem/shoulda.rb +239 -0
  209. data/test/vendor/plugins/shoulda/lib/shoulda/general.rb +118 -0
  210. data/test/vendor/plugins/shoulda/lib/shoulda/private_helpers.rb +22 -0
  211. metadata +312 -0
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../spec_helper')
2
+
3
+ describe <%= controller_class_name %>Helper do
4
+
5
+ #Delete this example and add some real ones or delete this file
6
+ it "should be included in the object returned by #helper" do
7
+ included_modules = (class << helper; self; end).send :included_modules
8
+ included_modules.should include(<%= controller_class_name %>Helper)
9
+ end
10
+
11
+ end
@@ -0,0 +1,61 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../spec_helper')
2
+
3
+ describe <%= controller_class_name %>Controller do
4
+ describe "route generation" do
5
+
6
+ it "should map { :controller => '<%= table_name %>', :action => 'index' } to /<%= table_name %>" do
7
+ route_for(:controller => "<%= table_name %>", :action => "index").should == "/<%= table_name %>"
8
+ end
9
+
10
+ it "should map { :controller => '<%= table_name %>', :action => 'new' } to /<%= table_name %>/new" do
11
+ route_for(:controller => "<%= table_name %>", :action => "new").should == "/<%= table_name %>/new"
12
+ end
13
+
14
+ it "should map { :controller => '<%= table_name %>', :action => 'show', :id => 1 } to /<%= table_name %>/1" do
15
+ route_for(:controller => "<%= table_name %>", :action => "show", :id => 1).should == "/<%= table_name %>/1"
16
+ end
17
+
18
+ it "should map { :controller => '<%= table_name %>', :action => 'edit', :id => 1 } to /<%= table_name %>/1<%= resource_edit_path %>" do
19
+ route_for(:controller => "<%= table_name %>", :action => "edit", :id => 1).should == "/<%= table_name %>/1<%= resource_edit_path %>"
20
+ end
21
+
22
+ it "should map { :controller => '<%= table_name %>', :action => 'update', :id => 1} to /<%= table_name %>/1" do
23
+ route_for(:controller => "<%= table_name %>", :action => "update", :id => 1).should == "/<%= table_name %>/1"
24
+ end
25
+
26
+ it "should map { :controller => '<%= table_name %>', :action => 'destroy', :id => 1} to /<%= table_name %>/1" do
27
+ route_for(:controller => "<%= table_name %>", :action => "destroy", :id => 1).should == "/<%= table_name %>/1"
28
+ end
29
+ end
30
+
31
+ describe "route recognition" do
32
+
33
+ it "should generate params { :controller => '<%= table_name %>', action => 'index' } from GET /<%= table_name %>" do
34
+ params_from(:get, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "index"}
35
+ end
36
+
37
+ it "should generate params { :controller => '<%= table_name %>', action => 'new' } from GET /<%= table_name %>/new" do
38
+ params_from(:get, "/<%= table_name %>/new").should == {:controller => "<%= table_name %>", :action => "new"}
39
+ end
40
+
41
+ it "should generate params { :controller => '<%= table_name %>', action => 'create' } from POST /<%= table_name %>" do
42
+ params_from(:post, "/<%= table_name %>").should == {:controller => "<%= table_name %>", :action => "create"}
43
+ end
44
+
45
+ it "should generate params { :controller => '<%= table_name %>', action => 'show', id => '1' } from GET /<%= table_name %>/1" do
46
+ params_from(:get, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "show", :id => "1"}
47
+ end
48
+
49
+ it "should generate params { :controller => '<%= table_name %>', action => 'edit', id => '1' } from GET /<%= table_name %>/1;edit" do
50
+ params_from(:get, "/<%= table_name %>/1<%= resource_edit_path %>").should == {:controller => "<%= table_name %>", :action => "edit", :id => "1"}
51
+ end
52
+
53
+ it "should generate params { :controller => '<%= table_name %>', action => 'update', id => '1' } from PUT /<%= table_name %>/1" do
54
+ params_from(:put, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "update", :id => "1"}
55
+ end
56
+
57
+ it "should generate params { :controller => '<%= table_name %>', action => 'destroy', id => '1' } from DELETE /<%= table_name %>/1" do
58
+ params_from(:delete, "/<%= table_name %>/1").should == {:controller => "<%= table_name %>", :action => "destroy", :id => "1"}
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,11 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../spec_helper')
2
+
3
+ describe <%= class_name %> do
4
+ before(:each) do
5
+ @<%= file_name %> = <%= class_name %>.new
6
+ end
7
+
8
+ it "should be valid" do
9
+ @<%= file_name %>.should be_valid
10
+ end
11
+ end
@@ -0,0 +1,28 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../../spec_helper')
2
+
3
+ describe "/<%= table_name %>/edit.<%= default_file_extension %>" do
4
+ include <%= controller_class_name %>Helper
5
+
6
+ before do
7
+ @<%= file_name %> = mock_model(<%= class_name %>)
8
+ <% for attribute in attributes -%>
9
+ @<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
10
+ <% end -%>
11
+ assigns[:<%= file_name %>] = @<%= file_name %>
12
+
13
+ template.should_receive(:object_url).twice.and_return(<%= file_name %>_path(@<%= file_name %>))
14
+ template.should_receive(:collection_url).and_return(<%= file_name.pluralize %>_path)
15
+ end
16
+
17
+ it "should render edit form" do
18
+ render "/<%= table_name %>/edit.<%= default_file_extension %>"
19
+
20
+ response.should have_tag("form[action=#{<%= file_name %>_path(@<%= file_name %>)}][method=post]") do
21
+ <% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
22
+ with_tag('<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]', "<%= file_name %>[<%= attribute.name %>]")
23
+ <% end -%><% end -%>
24
+ end
25
+ end
26
+ end
27
+
28
+
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../../spec_helper')
2
+
3
+ describe "/<%= table_name %>/index.<%= default_file_extension %>" do
4
+ include <%= controller_class_name %>Helper
5
+
6
+ before(:each) do
7
+ <% [98,99].each do |id| -%>
8
+ <%= file_name %>_<%= id %> = mock_model(<%= class_name %>)
9
+ <% for attribute in attributes -%>
10
+ <%= file_name %>_<%= id %>.should_receive(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
11
+ <% end -%><% end %>
12
+ assigns[:<%= table_name %>] = [<%= file_name %>_98, <%= file_name %>_99]
13
+
14
+ template.stub!(:object_url).and_return(<%= file_name %>_path(@<%= file_name %>))
15
+ template.stub!(:new_object_url).and_return(new_<%= file_name %>_path)
16
+ template.stub!(:edit_object_url).and_return(edit_<%= file_name %>_path(@<%= file_name %>))
17
+ end
18
+
19
+ it "should render list of <%= table_name %>" do
20
+ render "/<%= table_name %>/index.<%= default_file_extension %>"
21
+ <% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
22
+ response.should have_tag("tr>td", <%= attribute.default_value %>, 2)
23
+ <% end -%><% end -%>
24
+ end
25
+ end
26
+
@@ -0,0 +1,30 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../../spec_helper')
2
+
3
+ describe "/<%= table_name %>/new.<%= default_file_extension %>" do
4
+ include <%= controller_class_name %>Helper
5
+
6
+ before(:each) do
7
+ @<%= file_name %> = mock_model(<%= class_name %>)
8
+ @<%= file_name %>.stub!(:new_record?).and_return(true)
9
+ <% for attribute in attributes -%>
10
+ @<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
11
+ <% end -%>
12
+ assigns[:<%= file_name %>] = @<%= file_name %>
13
+
14
+
15
+ template.stub!(:object_url).and_return(<%= file_name %>_path(@<%= file_name %>))
16
+ template.stub!(:collection_url).and_return(<%= file_name.pluralize %>_path)
17
+ end
18
+
19
+ it "should render new form" do
20
+ render "/<%= table_name %>/new.<%= default_file_extension %>"
21
+
22
+ response.should have_tag("form[action=?][method=post]", <%= table_name %>_path) do
23
+ <% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
24
+ with_tag("<%= attribute.input_type -%>#<%= file_name %>_<%= attribute.name %>[name=?]", "<%= file_name %>[<%= attribute.name %>]")
25
+ <% end -%><% end -%>
26
+ end
27
+ end
28
+ end
29
+
30
+
@@ -0,0 +1,25 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../../spec_helper')
2
+
3
+ describe "/<%= table_name %>/show.<%= default_file_extension %>" do
4
+ include <%= controller_class_name %>Helper
5
+
6
+ before(:each) do
7
+ @<%= file_name %> = mock_model(<%= class_name %>)
8
+ <% for attribute in attributes -%>
9
+ @<%= file_name %>.stub!(:<%= attribute.name %>).and_return(<%= attribute.default_value %>)
10
+ <% end -%>
11
+
12
+ assigns[:<%= file_name %>] = @<%= file_name %>
13
+
14
+ template.stub!(:edit_object_url).and_return(edit_<%= file_name %>_path(@<%= file_name %>))
15
+ template.stub!(:collection_url).and_return(<%= file_name.pluralize %>_path)
16
+ end
17
+
18
+ it "should render attributes in <p>" do
19
+ render "/<%= table_name %>/show.<%= default_file_extension %>"
20
+ <% for attribute in attributes -%><% unless attribute.name =~ /_id/ || [:datetime, :timestamp, :time, :date].index(attribute.type) -%>
21
+ response.should have_text(/<%= Regexp.escape(attribute.default_value)[1..-2]%>/)
22
+ <% end -%><% end -%>
23
+ end
24
+ end
25
+
@@ -0,0 +1,19 @@
1
+ require File.dirname(__FILE__) + '<%= '/..' * controller_class_nesting_depth %>/../test_helper'
2
+ require '<%= controller_file_path %>_controller'
3
+
4
+ # Re-raise errors caught by the controller.
5
+ class <%= controller_class_name %>Controller; def rescue_action(e) raise e end; end
6
+
7
+ class <%= controller_class_name %>ControllerTest < Test::Unit::TestCase
8
+ def setup
9
+ @controller = <%= controller_class_name %>Controller.new
10
+ @request = ActionController::TestRequest.new
11
+ @response = ActionController::TestResponse.new
12
+ @<%= singular_name %> = <%= plural_name %> :one
13
+ end
14
+
15
+ should_be_restful do |resource|
16
+ resource.formats = [:html]
17
+ end
18
+
19
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '<%= '/..' * class_nesting_depth %>/../test_helper'
2
+
3
+ class <%= class_name %>Test < Test::Unit::TestCase
4
+ def test_truth
5
+ assert true
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ <%- for attribute in attributes -%>
2
+ <p>
3
+ <label for="<%= singular_name %>_<%= attribute.name %>"><%= attribute.column.human_name %>:</label>
4
+ <%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
5
+ </p>
6
+ <% end -%>
@@ -0,0 +1,5 @@
1
+ <%- for attribute in attributes -%>
2
+ %p
3
+ %label{:for => "<%= singular_name %>_<%= attribute.name %>"} <%= attribute.column.human_name %>:
4
+ = f.<%= attribute.field_type %> :<%= attribute.name %>
5
+ <% end -%>
@@ -0,0 +1,16 @@
1
+ <h1>Editing <%= singular_name.titleize %></h1>
2
+
3
+ <%%= error_messages_for :<%= singular_name %> %>
4
+
5
+ <%% form_for(:<%= singular_name %>, :url => object_url, :html => { :method => :put }) do |f| %>
6
+ <%%= render :partial => "form", :locals => { :f => f } %>
7
+ <p>
8
+ <%%=submit_tag "Update"%>
9
+ </p>
10
+ <%% end %>
11
+
12
+ <br/>
13
+
14
+ <%%= link_to 'Show', object_url %>
15
+ |
16
+ <%%= link_to 'Back', collection_url %>
@@ -0,0 +1,11 @@
1
+ %h1 Editing <%= singular_name %>
2
+
3
+ = error_messages_for :<%= singular_name %>
4
+
5
+ - form_for(:<%= singular_name %>, :url => object_url, :html => { :method => :put }) do |f|
6
+ = render :partial => "form", :locals => { :f => f }
7
+ %p= submit_tag "Update"
8
+
9
+ = link_to 'Show', object_url
10
+ |
11
+ = link_to 'Back', collection_url
@@ -0,0 +1,22 @@
1
+ <h1>Listing <%= plural_name.titleize %></h1>
2
+
3
+ <table>
4
+ <tr>
5
+ <% for attribute in attributes -%>
6
+ <th><%= attribute.column.human_name %></th>
7
+ <% end -%>
8
+ </tr>
9
+ <%%- @<%= plural_name %>.each do |<%= singular_name %>|%>
10
+ <tr>
11
+ <%- for attribute in attributes -%>
12
+ <td><%%=h <%= singular_name %>.<%= attribute.name %> %></td>
13
+ <%- end -%>
14
+ <td><%%=link_to 'Show', object_url(<%= singular_name %>) %></td>
15
+ <td><%%=link_to 'Edit', edit_object_url(<%= singular_name %>) %></td>
16
+ <td><%%=link_to 'Destroy', object_url(<%= singular_name %>), :confirm => 'Are you sure?', :method => :delete %></td>
17
+ </tr>
18
+ <%% end %>
19
+ </table>
20
+ <br/>
21
+
22
+ <%%= link_to 'New <%= singular_name.titleize %>', new_object_url %>
@@ -0,0 +1,19 @@
1
+ %h1 Listing <%= plural_name %>
2
+
3
+ %table
4
+ %tr
5
+ <% for attribute in attributes -%>
6
+ %th <%= attribute.column.human_name %>
7
+ <% end -%>
8
+ - @<%= plural_name %>.each do |<%= singular_name %>|
9
+ %tr
10
+ <% for attribute in attributes -%>
11
+ %td= h <%= singular_name %>.<%= attribute.name %>
12
+ <% end -%>
13
+ %td= link_to 'Show', object_url(<%= singular_name %>)
14
+ %td= link_to 'Edit', edit_object_url(<%= singular_name %>)
15
+ %td= link_to 'Destroy', object_url(<%= singular_name %>), :confirm => 'Are you sure?', :method => :delete
16
+
17
+ %br/
18
+
19
+ =link_to 'New <%= singular_name %>', new_object_url
@@ -0,0 +1,12 @@
1
+ <h1>New <%= singular_name.titleize %></h1>
2
+
3
+ <%%= error_messages_for :<%= singular_name %> %>
4
+
5
+ <%% form_for(:<%= singular_name %>, :url => collection_url) do |f| %>
6
+ <%%= render :partial => "form", :locals => { :f => f } %>
7
+ <p>
8
+ <%%= submit_tag "Create" %>
9
+ </p>
10
+ <%% end %>
11
+ <br/>
12
+ <%%= link_to 'Back', collection_url %>
@@ -0,0 +1,9 @@
1
+ %h1 New <%= singular_name %>
2
+
3
+ = error_messages_for :<%= singular_name %>
4
+
5
+ - form_for(:<%= singular_name %>, :url => collection_url) do |f|
6
+ = render :partial => "form", :locals => { :f => f }
7
+ %p= submit_tag "Create"
8
+
9
+ = link_to 'Back', collection_url
@@ -0,0 +1,9 @@
1
+ <% for attribute in attributes -%>
2
+ <p>
3
+ <strong><%= attribute.column.human_name %>:</strong><%%=h @<%= singular_name %>.<%= attribute.name %> %>
4
+ </p>
5
+ <% end -%>
6
+
7
+ <%%= link_to 'Edit', edit_object_url %>
8
+ |
9
+ <%%= link_to 'Back', collection_url %>
@@ -0,0 +1,9 @@
1
+ <% for attribute in attributes -%>
2
+ %p
3
+ %strong <%= attribute.column.human_name %>:
4
+ =h @<%= singular_name %>.<%= attribute.name %>
5
+ <% end -%>
6
+
7
+ = link_to 'Edit', edit_object_url
8
+ |
9
+ = link_to 'Back', collection_url
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require File.dirname(__FILE__)+'/rails/init.rb'
@@ -0,0 +1,15 @@
1
+ module ResourceController
2
+ ACTIONS = [:index, :show, :new_action, :create, :edit, :update, :destroy].freeze
3
+ FAILABLE_ACTIONS = ACTIONS - [:index, :new_action, :edit].freeze
4
+ NAME_ACCESSORS = [:model_name, :route_name, :object_name]
5
+
6
+ module ActionControllerExtension
7
+ unloadable
8
+
9
+ def resource_controller
10
+ include ResourceController::Controller
11
+ end
12
+ end
13
+ end
14
+
15
+ require File.dirname(__FILE__)+'/../rails/init.rb' unless ActionController::Base.include?(Urligence)
@@ -0,0 +1,77 @@
1
+ module ResourceController # :nodoc:
2
+ module Accessors # :nodoc:
3
+ private
4
+ def block_accessor(*accessors)
5
+ accessors.each do |block_accessor|
6
+ class_eval <<-"end_eval", __FILE__, __LINE__
7
+
8
+ def #{block_accessor}(*args, &block)
9
+ unless args.empty? && block.nil?
10
+ args.push block if block_given?
11
+ @#{block_accessor} = [args].flatten
12
+ end
13
+
14
+ @#{block_accessor}
15
+ end
16
+
17
+ end_eval
18
+ end
19
+ end
20
+
21
+ def scoping_reader(*accessor_names)
22
+ accessor_names.each do |accessor_name|
23
+ class_eval <<-"end_eval", __FILE__, __LINE__
24
+ def #{accessor_name}(&block)
25
+ @#{accessor_name}.instance_eval &block if block_given?
26
+ @#{accessor_name}
27
+ end
28
+ end_eval
29
+ end
30
+ end
31
+
32
+ def class_scoping_reader(accessor_name, start_value)
33
+ write_inheritable_attribute accessor_name, start_value
34
+
35
+ class_eval <<-"end_eval", __FILE__, __LINE__
36
+ def self.#{accessor_name}(&block)
37
+ read_inheritable_attribute(:#{accessor_name}).instance_eval(&block) if block_given?
38
+ read_inheritable_attribute(:#{accessor_name})
39
+ end
40
+ end_eval
41
+ end
42
+
43
+ def reader_writer(accessor_name)
44
+ class_eval <<-"end_eval", __FILE__, __LINE__
45
+ def #{accessor_name}(*args, &block)
46
+ args << block unless block.nil?
47
+ @#{accessor_name} = args.first unless args.empty?
48
+ @#{accessor_name}
49
+ end
50
+ end_eval
51
+ end
52
+
53
+ def class_reader_writer(*accessor_names)
54
+ accessor_names.each do |accessor_name|
55
+ class_eval <<-"end_eval", __FILE__, __LINE__
56
+ def self.#{accessor_name}(*args)
57
+ unless args.empty?
58
+ write_inheritable_attribute :#{accessor_name}, args.first if args.length == 1
59
+ write_inheritable_attribute :#{accessor_name}, args if args.length > 1
60
+ end
61
+
62
+ read_inheritable_attribute :#{accessor_name}
63
+ end
64
+
65
+ def #{accessor_name}(*args)
66
+ unless args.empty?
67
+ self.class.write_inheritable_attribute :#{accessor_name}, args.first if args.length == 1
68
+ self.class.write_inheritable_attribute :#{accessor_name}, args if args.length > 1
69
+ end
70
+
71
+ self.class.read_inheritable_attribute :#{accessor_name}
72
+ end
73
+ end_eval
74
+ end
75
+ end
76
+ end
77
+ end