jeffrafter-resource_controller 0.5.5

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 (233) hide show
  1. data/README.rdoc +314 -0
  2. data/VERSION.yml +4 -0
  3. data/generators/scaffold_resource/USAGE +29 -0
  4. data/generators/scaffold_resource/scaffold_resource_generator.rb +179 -0
  5. data/generators/scaffold_resource/templates/controller.rb +2 -0
  6. data/generators/scaffold_resource/templates/fixtures.yml +10 -0
  7. data/generators/scaffold_resource/templates/functional_test.rb +57 -0
  8. data/generators/scaffold_resource/templates/helper.rb +2 -0
  9. data/generators/scaffold_resource/templates/migration.rb +15 -0
  10. data/generators/scaffold_resource/templates/model.rb +2 -0
  11. data/generators/scaffold_resource/templates/old_migration.rb +13 -0
  12. data/generators/scaffold_resource/templates/rspec/functional_spec.rb +255 -0
  13. data/generators/scaffold_resource/templates/rspec/helper_spec.rb +11 -0
  14. data/generators/scaffold_resource/templates/rspec/routing_spec.rb +61 -0
  15. data/generators/scaffold_resource/templates/rspec/unit_spec.rb +11 -0
  16. data/generators/scaffold_resource/templates/rspec/views/edit_spec.rb +28 -0
  17. data/generators/scaffold_resource/templates/rspec/views/index_spec.rb +26 -0
  18. data/generators/scaffold_resource/templates/rspec/views/new_spec.rb +30 -0
  19. data/generators/scaffold_resource/templates/rspec/views/show_spec.rb +25 -0
  20. data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
  21. data/generators/scaffold_resource/templates/unit_test.rb +7 -0
  22. data/generators/scaffold_resource/templates/view__form.erb +6 -0
  23. data/generators/scaffold_resource/templates/view__form.haml +5 -0
  24. data/generators/scaffold_resource/templates/view_edit.erb +16 -0
  25. data/generators/scaffold_resource/templates/view_edit.haml +11 -0
  26. data/generators/scaffold_resource/templates/view_index.erb +22 -0
  27. data/generators/scaffold_resource/templates/view_index.haml +19 -0
  28. data/generators/scaffold_resource/templates/view_new.erb +12 -0
  29. data/generators/scaffold_resource/templates/view_new.haml +9 -0
  30. data/generators/scaffold_resource/templates/view_show.erb +9 -0
  31. data/generators/scaffold_resource/templates/view_show.haml +9 -0
  32. data/lib/resource_controller.rb +26 -0
  33. data/lib/resource_controller/accessors.rb +77 -0
  34. data/lib/resource_controller/action_options.rb +40 -0
  35. data/lib/resource_controller/actions.rb +73 -0
  36. data/lib/resource_controller/base.rb +15 -0
  37. data/lib/resource_controller/class_methods.rb +65 -0
  38. data/lib/resource_controller/controller.rb +69 -0
  39. data/lib/resource_controller/failable_action_options.rb +25 -0
  40. data/lib/resource_controller/helpers.rb +28 -0
  41. data/lib/resource_controller/helpers/current_objects.rb +73 -0
  42. data/lib/resource_controller/helpers/internal.rb +80 -0
  43. data/lib/resource_controller/helpers/nested.rb +67 -0
  44. data/lib/resource_controller/helpers/singleton_customizations.rb +64 -0
  45. data/lib/resource_controller/helpers/urls.rb +132 -0
  46. data/lib/resource_controller/response_collector.rb +27 -0
  47. data/lib/resource_controller/singleton.rb +15 -0
  48. data/lib/urligence.rb +50 -0
  49. data/rails/init.rb +6 -0
  50. data/test/Rakefile +10 -0
  51. data/test/app/controllers/accounts_controller.rb +6 -0
  52. data/test/app/controllers/application.rb +7 -0
  53. data/test/app/controllers/cms/options_controller.rb +3 -0
  54. data/test/app/controllers/cms/personnel_controller.rb +2 -0
  55. data/test/app/controllers/cms/photos_controller.rb +6 -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/images_controller.rb +4 -0
  59. data/test/app/controllers/options_controller.rb +8 -0
  60. data/test/app/controllers/people_controller.rb +9 -0
  61. data/test/app/controllers/photos_controller.rb +12 -0
  62. data/test/app/controllers/posts_controller.rb +10 -0
  63. data/test/app/controllers/projects_controller.rb +3 -0
  64. data/test/app/controllers/somethings_controller.rb +3 -0
  65. data/test/app/controllers/tags_controller.rb +13 -0
  66. data/test/app/controllers/users_controller.rb +12 -0
  67. data/test/app/helpers/accounts_helper.rb +2 -0
  68. data/test/app/helpers/application_helper.rb +3 -0
  69. data/test/app/helpers/cms/products_helper.rb +2 -0
  70. data/test/app/helpers/comments_helper.rb +2 -0
  71. data/test/app/helpers/images_helper.rb +2 -0
  72. data/test/app/helpers/options_helper.rb +2 -0
  73. data/test/app/helpers/people_helper.rb +2 -0
  74. data/test/app/helpers/photos_helper.rb +2 -0
  75. data/test/app/helpers/posts_helper.rb +2 -0
  76. data/test/app/helpers/projects_helper.rb +2 -0
  77. data/test/app/helpers/somethings_helper.rb +2 -0
  78. data/test/app/helpers/tags_helper.rb +2 -0
  79. data/test/app/helpers/users_helper.rb +2 -0
  80. data/test/app/models/account.rb +4 -0
  81. data/test/app/models/comment.rb +3 -0
  82. data/test/app/models/image.rb +3 -0
  83. data/test/app/models/option.rb +3 -0
  84. data/test/app/models/personnel.rb +3 -0
  85. data/test/app/models/photo.rb +5 -0
  86. data/test/app/models/post.rb +3 -0
  87. data/test/app/models/product.rb +3 -0
  88. data/test/app/models/project.rb +2 -0
  89. data/test/app/models/something.rb +2 -0
  90. data/test/app/models/tag.rb +3 -0
  91. data/test/app/models/user.rb +3 -0
  92. data/test/app/views/accounts/_form.html.erb +4 -0
  93. data/test/app/views/accounts/edit.html.erb +14 -0
  94. data/test/app/views/accounts/new.html.erb +12 -0
  95. data/test/app/views/accounts/show.html.erb +5 -0
  96. data/test/app/views/cms/options/edit.rhtml +17 -0
  97. data/test/app/views/cms/options/index.rhtml +20 -0
  98. data/test/app/views/cms/options/new.rhtml +16 -0
  99. data/test/app/views/cms/options/show.rhtml +8 -0
  100. data/test/app/views/cms/photos/edit.rhtml +17 -0
  101. data/test/app/views/cms/photos/index.rhtml +20 -0
  102. data/test/app/views/cms/photos/new.rhtml +16 -0
  103. data/test/app/views/cms/photos/show.rhtml +8 -0
  104. data/test/app/views/cms/products/edit.rhtml +17 -0
  105. data/test/app/views/cms/products/index.rhtml +20 -0
  106. data/test/app/views/cms/products/new.rhtml +16 -0
  107. data/test/app/views/cms/products/show.rhtml +8 -0
  108. data/test/app/views/comments/edit.rhtml +27 -0
  109. data/test/app/views/comments/index.rhtml +24 -0
  110. data/test/app/views/comments/new.rhtml +26 -0
  111. data/test/app/views/comments/show.rhtml +18 -0
  112. data/test/app/views/images/_form.html.erb +4 -0
  113. data/test/app/views/images/edit.html.erb +14 -0
  114. data/test/app/views/images/new.html.erb +12 -0
  115. data/test/app/views/layouts/application.rhtml +17 -0
  116. data/test/app/views/layouts/comments.rhtml +17 -0
  117. data/test/app/views/layouts/options.rhtml +17 -0
  118. data/test/app/views/layouts/people.rhtml +17 -0
  119. data/test/app/views/layouts/photos.rhtml +17 -0
  120. data/test/app/views/layouts/projects.rhtml +17 -0
  121. data/test/app/views/layouts/somethings.rhtml +17 -0
  122. data/test/app/views/layouts/tags.rhtml +17 -0
  123. data/test/app/views/options/_form.html.erb +8 -0
  124. data/test/app/views/options/edit.html.erb +16 -0
  125. data/test/app/views/options/index.html.erb +21 -0
  126. data/test/app/views/options/new.html.erb +12 -0
  127. data/test/app/views/options/show.html.erb +10 -0
  128. data/test/app/views/people/edit.rhtml +17 -0
  129. data/test/app/views/people/index.rhtml +20 -0
  130. data/test/app/views/people/new.rhtml +16 -0
  131. data/test/app/views/people/show.rhtml +8 -0
  132. data/test/app/views/photos/edit.rhtml +17 -0
  133. data/test/app/views/photos/index.rhtml +20 -0
  134. data/test/app/views/photos/new.rhtml +16 -0
  135. data/test/app/views/photos/show.rhtml +8 -0
  136. data/test/app/views/posts/edit.rhtml +22 -0
  137. data/test/app/views/posts/index.rhtml +22 -0
  138. data/test/app/views/posts/new.rhtml +21 -0
  139. data/test/app/views/posts/show.rhtml +13 -0
  140. data/test/app/views/projects/edit.rhtml +17 -0
  141. data/test/app/views/projects/index.rhtml +20 -0
  142. data/test/app/views/projects/new.rhtml +16 -0
  143. data/test/app/views/projects/show.rhtml +8 -0
  144. data/test/app/views/somethings/edit.rhtml +17 -0
  145. data/test/app/views/somethings/index.rhtml +20 -0
  146. data/test/app/views/somethings/new.rhtml +16 -0
  147. data/test/app/views/somethings/show.rhtml +8 -0
  148. data/test/app/views/tags/edit.rhtml +17 -0
  149. data/test/app/views/tags/index.rhtml +20 -0
  150. data/test/app/views/tags/index.rjs +0 -0
  151. data/test/app/views/tags/new.rhtml +16 -0
  152. data/test/app/views/tags/show.rhtml +8 -0
  153. data/test/app/views/users/edit.rhtml +17 -0
  154. data/test/app/views/users/index.rhtml +20 -0
  155. data/test/app/views/users/new.rhtml +16 -0
  156. data/test/app/views/users/show.rhtml +8 -0
  157. data/test/config/boot.rb +109 -0
  158. data/test/config/database.yml +9 -0
  159. data/test/config/environment.rb +49 -0
  160. data/test/config/environments/development.rb +20 -0
  161. data/test/config/environments/test.rb +19 -0
  162. data/test/config/initializers/inflections.rb +14 -0
  163. data/test/config/routes.rb +61 -0
  164. data/test/db/migrate/001_create_posts.rb +12 -0
  165. data/test/db/migrate/002_create_products.rb +11 -0
  166. data/test/db/migrate/003_create_comments.rb +13 -0
  167. data/test/db/migrate/004_create_options.rb +13 -0
  168. data/test/db/migrate/005_create_photos.rb +11 -0
  169. data/test/db/migrate/006_create_tags.rb +17 -0
  170. data/test/db/migrate/007_create_somethings.rb +11 -0
  171. data/test/db/migrate/008_create_accounts.rb +11 -0
  172. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  173. data/test/db/migrate/010_create_projects.rb +11 -0
  174. data/test/db/migrate/011_create_images.rb +12 -0
  175. data/test/db/migrate/012_create_users.rb +11 -0
  176. data/test/db/migrate/013_create_personnel.rb +11 -0
  177. data/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
  178. data/test/db/schema.rb +78 -0
  179. data/test/script/console +3 -0
  180. data/test/script/destroy +3 -0
  181. data/test/script/generate +3 -0
  182. data/test/script/server +3 -0
  183. data/test/test/fixtures/accounts.yml +7 -0
  184. data/test/test/fixtures/comments.yml +11 -0
  185. data/test/test/fixtures/images.yml +6 -0
  186. data/test/test/fixtures/options.yml +9 -0
  187. data/test/test/fixtures/personnel.yml +5 -0
  188. data/test/test/fixtures/photos.yml +9 -0
  189. data/test/test/fixtures/photos_tags.yml +3 -0
  190. data/test/test/fixtures/posts.yml +9 -0
  191. data/test/test/fixtures/products.yml +7 -0
  192. data/test/test/fixtures/projects.yml +7 -0
  193. data/test/test/fixtures/somethings.yml +7 -0
  194. data/test/test/fixtures/tags.yml +7 -0
  195. data/test/test/fixtures/users.yml +5 -0
  196. data/test/test/functional/cms/options_controller_test.rb +23 -0
  197. data/test/test/functional/cms/photos_controller_test.rb +43 -0
  198. data/test/test/functional/cms/products_controller_test.rb +23 -0
  199. data/test/test/functional/comments_controller_test.rb +26 -0
  200. data/test/test/functional/images_controller_test.rb +37 -0
  201. data/test/test/functional/people_controller_test.rb +34 -0
  202. data/test/test/functional/photos_controller_test.rb +130 -0
  203. data/test/test/functional/posts_controller_test.rb +34 -0
  204. data/test/test/functional/projects_controller_test.rb +18 -0
  205. data/test/test/functional/somethings_controller_test.rb +28 -0
  206. data/test/test/functional/tags_controller_test.rb +64 -0
  207. data/test/test/functional/users_controller_test.rb +24 -0
  208. data/test/test/test_helper.rb +12 -0
  209. data/test/test/unit/accessors_test.rb +110 -0
  210. data/test/test/unit/account_test.rb +7 -0
  211. data/test/test/unit/action_options_test.rb +109 -0
  212. data/test/test/unit/base_test.rb +11 -0
  213. data/test/test/unit/comment_test.rb +10 -0
  214. data/test/test/unit/failable_action_options_test.rb +77 -0
  215. data/test/test/unit/helpers/current_objects_test.rb +133 -0
  216. data/test/test/unit/helpers/internal_test.rb +106 -0
  217. data/test/test/unit/helpers/nested_test.rb +86 -0
  218. data/test/test/unit/helpers/singleton_current_objects_test.rb +68 -0
  219. data/test/test/unit/helpers/singleton_nested_test.rb +77 -0
  220. data/test/test/unit/helpers/singleton_urls_test.rb +67 -0
  221. data/test/test/unit/helpers/urls_test.rb +75 -0
  222. data/test/test/unit/helpers_test.rb +25 -0
  223. data/test/test/unit/image_test.rb +7 -0
  224. data/test/test/unit/option_test.rb +10 -0
  225. data/test/test/unit/photo_test.rb +10 -0
  226. data/test/test/unit/post_test.rb +10 -0
  227. data/test/test/unit/project_test.rb +10 -0
  228. data/test/test/unit/response_collector_test.rb +49 -0
  229. data/test/test/unit/something_test.rb +10 -0
  230. data/test/test/unit/tag_test.rb +10 -0
  231. data/test/test/unit/urligence_test.rb +203 -0
  232. data/test/vendor/gems/resource_controller-10.0.0 +1 -0
  233. metadata +329 -0
@@ -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
@@ -0,0 +1,26 @@
1
+ require_dependency 'application'
2
+
3
+ Dir[File.join(File.dirname(__FILE__), 'resource_controller/**/*.rb')].each { |f|
4
+ require f
5
+ }
6
+
7
+ module ResourceController
8
+ ACTIONS = [:index, :show, :new_action, :create, :edit, :update, :destroy].freeze
9
+ SINGLETON_ACTIONS = (ACTIONS - [:index]).freeze
10
+ FAILABLE_ACTIONS = ACTIONS - [:index, :new_action, :edit].freeze
11
+ NAME_ACCESSORS = [:model_name, :route_name, :object_name]
12
+
13
+ module ActionControllerExtension
14
+ unloadable
15
+
16
+ def resource_controller(*args)
17
+ include ResourceController::Controller
18
+
19
+ if args.include?(:singleton)
20
+ include ResourceController::Helpers::SingletonCustomizations
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ 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
@@ -0,0 +1,40 @@
1
+ module ResourceController
2
+ class ActionOptions
3
+ extend ResourceController::Accessors
4
+
5
+ reader_writer :flash
6
+ reader_writer :flash_now
7
+
8
+ block_accessor :after, :before
9
+
10
+ def initialize
11
+ @collector = ResourceController::ResponseCollector.new
12
+ end
13
+
14
+ def response(*args, &block)
15
+ if !args.empty? || block_given?
16
+ @collector.clear
17
+ args.flatten.each { |symbol| @collector.send(symbol) }
18
+ block.call(@collector) if block_given?
19
+ end
20
+
21
+ @collector.responses
22
+ end
23
+ alias_method :respond_to, :response
24
+ alias_method :responds_to, :response
25
+
26
+ def wants
27
+ @collector
28
+ end
29
+
30
+ def dup
31
+ returning self.class.new do |duplicate|
32
+ duplicate.instance_variable_set(:@collector, wants.dup)
33
+ duplicate.instance_variable_set(:@before, before.dup) unless before.nil?
34
+ duplicate.instance_variable_set(:@after, after.dup) unless after.nil?
35
+ duplicate.instance_variable_set(:@flash, flash.dup) unless flash.nil?
36
+ duplicate.instance_variable_set(:@flash_now, flash_now.dup) unless flash_now.nil?
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,73 @@
1
+ module ResourceController
2
+ module Actions
3
+
4
+ def index
5
+ load_collection
6
+ before :index
7
+ response_for :index
8
+ end
9
+
10
+ def show
11
+ load_object
12
+ before :show
13
+ response_for :show
14
+ end
15
+
16
+ def create
17
+ build_object
18
+ load_object
19
+ before :create
20
+ if object.save
21
+ after :create
22
+ set_flash :create
23
+ response_for :create
24
+ else
25
+ after :create_fails
26
+ set_flash :create_fails
27
+ response_for :create_fails
28
+ end
29
+ end
30
+
31
+ def update
32
+ load_object
33
+ before :update
34
+ if object.update_attributes object_params
35
+ after :update
36
+ set_flash :update
37
+ response_for :update
38
+ else
39
+ after :update_fails
40
+ set_flash :update_fails
41
+ response_for :update_fails
42
+ end
43
+ end
44
+
45
+ def new
46
+ build_object
47
+ load_object
48
+ before :new_action
49
+ response_for :new_action
50
+ end
51
+
52
+ def edit
53
+ load_object
54
+ before :edit
55
+ response_for :edit
56
+ end
57
+
58
+ def destroy
59
+ load_object
60
+ before :destroy
61
+ if object.destroy
62
+ after :destroy
63
+ set_flash :destroy
64
+ response_for :destroy
65
+ else
66
+ after :destroy_fails
67
+ set_flash :destroy_fails
68
+ response_for :destroy_fails
69
+ end
70
+ end
71
+
72
+ end
73
+ end