matid-resource_controller 0.6.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 (227) hide show
  1. data/LICENSE +23 -0
  2. data/README.rdoc +330 -0
  3. data/VERSION.yml +4 -0
  4. data/generators/scaffold_resource/USAGE +29 -0
  5. data/generators/scaffold_resource/scaffold_resource_generator.rb +179 -0
  6. data/generators/scaffold_resource/templates/controller.rb +2 -0
  7. data/generators/scaffold_resource/templates/fixtures.yml +10 -0
  8. data/generators/scaffold_resource/templates/functional_test.rb +57 -0
  9. data/generators/scaffold_resource/templates/helper.rb +2 -0
  10. data/generators/scaffold_resource/templates/migration.rb +15 -0
  11. data/generators/scaffold_resource/templates/model.rb +2 -0
  12. data/generators/scaffold_resource/templates/old_migration.rb +13 -0
  13. data/generators/scaffold_resource/templates/rspec/functional_spec.rb +255 -0
  14. data/generators/scaffold_resource/templates/rspec/helper_spec.rb +11 -0
  15. data/generators/scaffold_resource/templates/rspec/routing_spec.rb +61 -0
  16. data/generators/scaffold_resource/templates/rspec/unit_spec.rb +11 -0
  17. data/generators/scaffold_resource/templates/rspec/views/edit_spec.rb +28 -0
  18. data/generators/scaffold_resource/templates/rspec/views/index_spec.rb +26 -0
  19. data/generators/scaffold_resource/templates/rspec/views/new_spec.rb +30 -0
  20. data/generators/scaffold_resource/templates/rspec/views/show_spec.rb +25 -0
  21. data/generators/scaffold_resource/templates/shoulda_functional_test.rb +19 -0
  22. data/generators/scaffold_resource/templates/unit_test.rb +7 -0
  23. data/generators/scaffold_resource/templates/view__form.erb +6 -0
  24. data/generators/scaffold_resource/templates/view__form.haml +5 -0
  25. data/generators/scaffold_resource/templates/view_edit.erb +16 -0
  26. data/generators/scaffold_resource/templates/view_edit.haml +11 -0
  27. data/generators/scaffold_resource/templates/view_index.erb +22 -0
  28. data/generators/scaffold_resource/templates/view_index.haml +19 -0
  29. data/generators/scaffold_resource/templates/view_new.erb +12 -0
  30. data/generators/scaffold_resource/templates/view_new.haml +9 -0
  31. data/generators/scaffold_resource/templates/view_show.erb +9 -0
  32. data/generators/scaffold_resource/templates/view_show.haml +9 -0
  33. data/lib/resource_controller.rb +23 -0
  34. data/lib/resource_controller/accessors.rb +77 -0
  35. data/lib/resource_controller/base.rb +15 -0
  36. data/lib/resource_controller/controller.rb +38 -0
  37. data/lib/resource_controller/helpers.rb +27 -0
  38. data/lib/resource_controller/helpers/current_objects.rb +73 -0
  39. data/lib/resource_controller/helpers/nested.rb +67 -0
  40. data/lib/resource_controller/helpers/singleton_customizations.rb +64 -0
  41. data/lib/resource_controller/helpers/urls.rb +132 -0
  42. data/lib/resource_controller/singleton.rb +15 -0
  43. data/lib/urligence.rb +50 -0
  44. data/rails/init.rb +6 -0
  45. data/test/Rakefile +10 -0
  46. data/test/app/controllers/accounts_controller.rb +6 -0
  47. data/test/app/controllers/application_controller.rb +5 -0
  48. data/test/app/controllers/cms/options_controller.rb +3 -0
  49. data/test/app/controllers/cms/personnel_controller.rb +2 -0
  50. data/test/app/controllers/cms/photos_controller.rb +6 -0
  51. data/test/app/controllers/cms/products_controller.rb +3 -0
  52. data/test/app/controllers/comments_controller.rb +3 -0
  53. data/test/app/controllers/images_controller.rb +4 -0
  54. data/test/app/controllers/options_controller.rb +8 -0
  55. data/test/app/controllers/people_controller.rb +9 -0
  56. data/test/app/controllers/photos_controller.rb +12 -0
  57. data/test/app/controllers/posts_controller.rb +10 -0
  58. data/test/app/controllers/projects_controller.rb +3 -0
  59. data/test/app/controllers/somethings_controller.rb +3 -0
  60. data/test/app/controllers/tags_controller.rb +13 -0
  61. data/test/app/controllers/users_controller.rb +12 -0
  62. data/test/app/helpers/accounts_helper.rb +2 -0
  63. data/test/app/helpers/application_helper.rb +3 -0
  64. data/test/app/helpers/cms/products_helper.rb +2 -0
  65. data/test/app/helpers/comments_helper.rb +2 -0
  66. data/test/app/helpers/images_helper.rb +2 -0
  67. data/test/app/helpers/options_helper.rb +2 -0
  68. data/test/app/helpers/people_helper.rb +2 -0
  69. data/test/app/helpers/photos_helper.rb +2 -0
  70. data/test/app/helpers/posts_helper.rb +2 -0
  71. data/test/app/helpers/projects_helper.rb +2 -0
  72. data/test/app/helpers/somethings_helper.rb +2 -0
  73. data/test/app/helpers/tags_helper.rb +2 -0
  74. data/test/app/helpers/users_helper.rb +2 -0
  75. data/test/app/models/account.rb +4 -0
  76. data/test/app/models/comment.rb +3 -0
  77. data/test/app/models/image.rb +3 -0
  78. data/test/app/models/option.rb +3 -0
  79. data/test/app/models/personnel.rb +3 -0
  80. data/test/app/models/photo.rb +5 -0
  81. data/test/app/models/post.rb +3 -0
  82. data/test/app/models/product.rb +3 -0
  83. data/test/app/models/project.rb +2 -0
  84. data/test/app/models/something.rb +2 -0
  85. data/test/app/models/tag.rb +3 -0
  86. data/test/app/models/user.rb +3 -0
  87. data/test/app/views/accounts/_form.html.erb +4 -0
  88. data/test/app/views/accounts/edit.html.erb +14 -0
  89. data/test/app/views/accounts/new.html.erb +12 -0
  90. data/test/app/views/accounts/show.html.erb +5 -0
  91. data/test/app/views/cms/options/edit.rhtml +17 -0
  92. data/test/app/views/cms/options/index.rhtml +20 -0
  93. data/test/app/views/cms/options/new.rhtml +16 -0
  94. data/test/app/views/cms/options/show.rhtml +8 -0
  95. data/test/app/views/cms/photos/edit.rhtml +17 -0
  96. data/test/app/views/cms/photos/index.rhtml +20 -0
  97. data/test/app/views/cms/photos/new.rhtml +16 -0
  98. data/test/app/views/cms/photos/show.rhtml +8 -0
  99. data/test/app/views/cms/products/edit.rhtml +17 -0
  100. data/test/app/views/cms/products/index.rhtml +20 -0
  101. data/test/app/views/cms/products/new.rhtml +16 -0
  102. data/test/app/views/cms/products/show.rhtml +8 -0
  103. data/test/app/views/comments/edit.rhtml +27 -0
  104. data/test/app/views/comments/index.rhtml +24 -0
  105. data/test/app/views/comments/new.rhtml +26 -0
  106. data/test/app/views/comments/show.rhtml +18 -0
  107. data/test/app/views/images/_form.html.erb +4 -0
  108. data/test/app/views/images/edit.html.erb +14 -0
  109. data/test/app/views/images/new.html.erb +12 -0
  110. data/test/app/views/layouts/application.rhtml +17 -0
  111. data/test/app/views/layouts/comments.rhtml +17 -0
  112. data/test/app/views/layouts/options.rhtml +17 -0
  113. data/test/app/views/layouts/people.rhtml +17 -0
  114. data/test/app/views/layouts/photos.rhtml +17 -0
  115. data/test/app/views/layouts/projects.rhtml +17 -0
  116. data/test/app/views/layouts/somethings.rhtml +17 -0
  117. data/test/app/views/layouts/tags.rhtml +17 -0
  118. data/test/app/views/options/_form.html.erb +8 -0
  119. data/test/app/views/options/edit.html.erb +16 -0
  120. data/test/app/views/options/index.html.erb +21 -0
  121. data/test/app/views/options/new.html.erb +12 -0
  122. data/test/app/views/options/show.html.erb +10 -0
  123. data/test/app/views/people/edit.rhtml +17 -0
  124. data/test/app/views/people/index.rhtml +20 -0
  125. data/test/app/views/people/new.rhtml +16 -0
  126. data/test/app/views/people/show.rhtml +8 -0
  127. data/test/app/views/photos/edit.rhtml +17 -0
  128. data/test/app/views/photos/index.rhtml +20 -0
  129. data/test/app/views/photos/new.rhtml +16 -0
  130. data/test/app/views/photos/show.rhtml +8 -0
  131. data/test/app/views/posts/edit.rhtml +22 -0
  132. data/test/app/views/posts/index.rhtml +22 -0
  133. data/test/app/views/posts/new.rhtml +21 -0
  134. data/test/app/views/posts/show.rhtml +13 -0
  135. data/test/app/views/projects/edit.rhtml +17 -0
  136. data/test/app/views/projects/index.rhtml +20 -0
  137. data/test/app/views/projects/new.rhtml +16 -0
  138. data/test/app/views/projects/show.rhtml +8 -0
  139. data/test/app/views/somethings/edit.rhtml +17 -0
  140. data/test/app/views/somethings/index.rhtml +20 -0
  141. data/test/app/views/somethings/new.rhtml +16 -0
  142. data/test/app/views/somethings/show.rhtml +8 -0
  143. data/test/app/views/tags/edit.rhtml +17 -0
  144. data/test/app/views/tags/index.rhtml +20 -0
  145. data/test/app/views/tags/index.rjs +0 -0
  146. data/test/app/views/tags/new.rhtml +16 -0
  147. data/test/app/views/tags/show.rhtml +8 -0
  148. data/test/app/views/users/edit.rhtml +17 -0
  149. data/test/app/views/users/index.rhtml +20 -0
  150. data/test/app/views/users/new.rhtml +16 -0
  151. data/test/app/views/users/show.rhtml +8 -0
  152. data/test/config/boot.rb +110 -0
  153. data/test/config/database.yml +9 -0
  154. data/test/config/environment.rb +49 -0
  155. data/test/config/environments/development.rb +17 -0
  156. data/test/config/environments/test.rb +19 -0
  157. data/test/config/initializers/inflections.rb +14 -0
  158. data/test/config/routes.rb +61 -0
  159. data/test/db/migrate/001_create_posts.rb +12 -0
  160. data/test/db/migrate/002_create_products.rb +11 -0
  161. data/test/db/migrate/003_create_comments.rb +13 -0
  162. data/test/db/migrate/004_create_options.rb +13 -0
  163. data/test/db/migrate/005_create_photos.rb +11 -0
  164. data/test/db/migrate/006_create_tags.rb +17 -0
  165. data/test/db/migrate/007_create_somethings.rb +11 -0
  166. data/test/db/migrate/008_create_accounts.rb +11 -0
  167. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  168. data/test/db/migrate/010_create_projects.rb +11 -0
  169. data/test/db/migrate/011_create_images.rb +12 -0
  170. data/test/db/migrate/012_create_users.rb +11 -0
  171. data/test/db/migrate/013_create_personnel.rb +11 -0
  172. data/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
  173. data/test/db/schema.rb +78 -0
  174. data/test/script/console +3 -0
  175. data/test/script/destroy +3 -0
  176. data/test/script/generate +3 -0
  177. data/test/script/server +3 -0
  178. data/test/test/fixtures/accounts.yml +7 -0
  179. data/test/test/fixtures/comments.yml +11 -0
  180. data/test/test/fixtures/images.yml +6 -0
  181. data/test/test/fixtures/options.yml +9 -0
  182. data/test/test/fixtures/personnel.yml +5 -0
  183. data/test/test/fixtures/photos.yml +9 -0
  184. data/test/test/fixtures/photos_tags.yml +3 -0
  185. data/test/test/fixtures/posts.yml +9 -0
  186. data/test/test/fixtures/products.yml +7 -0
  187. data/test/test/fixtures/projects.yml +7 -0
  188. data/test/test/fixtures/somethings.yml +7 -0
  189. data/test/test/fixtures/tags.yml +7 -0
  190. data/test/test/fixtures/users.yml +5 -0
  191. data/test/test/functional/cms/options_controller_test.rb +23 -0
  192. data/test/test/functional/cms/photos_controller_test.rb +43 -0
  193. data/test/test/functional/cms/products_controller_test.rb +23 -0
  194. data/test/test/functional/comments_controller_test.rb +19 -0
  195. data/test/test/functional/images_controller_test.rb +30 -0
  196. data/test/test/functional/people_controller_test.rb +27 -0
  197. data/test/test/functional/photos_controller_test.rb +123 -0
  198. data/test/test/functional/posts_controller_test.rb +27 -0
  199. data/test/test/functional/projects_controller_test.rb +21 -0
  200. data/test/test/functional/somethings_controller_test.rb +21 -0
  201. data/test/test/functional/tags_controller_test.rb +57 -0
  202. data/test/test/functional/users_controller_test.rb +17 -0
  203. data/test/test/test_helper.rb +13 -0
  204. data/test/test/unit/accessors_test.rb +110 -0
  205. data/test/test/unit/account_test.rb +7 -0
  206. data/test/test/unit/action_options_test.rb +109 -0
  207. data/test/test/unit/base_test.rb +11 -0
  208. data/test/test/unit/comment_test.rb +10 -0
  209. data/test/test/unit/failable_action_options_test.rb +77 -0
  210. data/test/test/unit/helpers/current_objects_test.rb +133 -0
  211. data/test/test/unit/helpers/internal_test.rb +106 -0
  212. data/test/test/unit/helpers/nested_test.rb +86 -0
  213. data/test/test/unit/helpers/singleton_current_objects_test.rb +68 -0
  214. data/test/test/unit/helpers/singleton_nested_test.rb +77 -0
  215. data/test/test/unit/helpers/singleton_urls_test.rb +67 -0
  216. data/test/test/unit/helpers/urls_test.rb +75 -0
  217. data/test/test/unit/helpers_test.rb +25 -0
  218. data/test/test/unit/image_test.rb +7 -0
  219. data/test/test/unit/option_test.rb +10 -0
  220. data/test/test/unit/photo_test.rb +10 -0
  221. data/test/test/unit/post_test.rb +10 -0
  222. data/test/test/unit/project_test.rb +10 -0
  223. data/test/test/unit/response_collector_test.rb +49 -0
  224. data/test/test/unit/something_test.rb +10 -0
  225. data/test/test/unit/tag_test.rb +10 -0
  226. data/test/test/unit/urligence_test.rb +203 -0
  227. metadata +379 -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 %>_99))
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 %>_99))
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,23 @@
1
+ begin
2
+ require_dependency 'application_controller'
3
+ rescue LoadError => e
4
+ require_dependency 'application'
5
+ end
6
+
7
+ module ResourceController
8
+ NAME_ACCESSORS = [:model_name, :route_name, :object_name]
9
+
10
+ module ActionControllerExtension
11
+ unloadable
12
+
13
+ def resource_controller(*args)
14
+ include ResourceController::Controller
15
+
16
+ if args.include?(:singleton)
17
+ include ResourceController::Helpers::SingletonCustomizations
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ 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,15 @@
1
+ module ResourceController
2
+
3
+ # == ResourceController::Base
4
+ #
5
+ # Inherit from this class to create your RESTful controller. See the README for usage.
6
+ #
7
+ class Base < ::ApplicationController
8
+ unloadable
9
+
10
+ def self.inherited(subclass)
11
+ super
12
+ subclass.class_eval { resource_controller }
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,38 @@
1
+ module ResourceController
2
+ module Controller
3
+ def self.included(subclass)
4
+ subclass.class_eval do
5
+ include ResourceController::Helpers
6
+ extend ResourceController::Accessors
7
+
8
+ before_filter :load_collection, :only => [:index]
9
+ before_filter :build_object, :only => [:new, :create]
10
+ before_filter :load_object, :only => [:show, :create, :update, :new, :edit, :destroy]
11
+
12
+ class_reader_writer :belongs_to, *NAME_ACCESSORS
13
+ NAME_ACCESSORS.each { |accessor| send(accessor, controller_name.singularize.underscore) }
14
+
15
+ self.helper_method :object_url, :edit_object_url, :new_object_url, :collection_url, :object, :collection,
16
+ :parent, :parent_type, :parent_object, :parent_model, :model_name, :model, :object_path,
17
+ :edit_object_path, :new_object_path, :collection_path, :hash_for_collection_path, :hash_for_object_path,
18
+ :hash_for_edit_object_path, :hash_for_new_object_path, :hash_for_collection_url,
19
+ :hash_for_object_url, :hash_for_edit_object_url, :hash_for_new_object_url, :parent?,
20
+ :collection_url_options, :object_url_options, :new_object_url_options
21
+
22
+ end
23
+
24
+ init_default_actions(subclass)
25
+ end
26
+
27
+ private
28
+ def self.init_default_actions(klass)
29
+ klass.class_eval do
30
+ class << self
31
+ def singleton?
32
+ false
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end