makandra_resource_controller 0.7.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 (251) hide show
  1. data/LICENSE +22 -0
  2. data/README.rdoc +343 -0
  3. data/TODO +0 -0
  4. data/VERSION.yml +5 -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/lib/resource_controller.rb +37 -0
  35. data/lib/resource_controller/accessors.rb +77 -0
  36. data/lib/resource_controller/action_options.rb +40 -0
  37. data/lib/resource_controller/actions.rb +75 -0
  38. data/lib/resource_controller/base.rb +15 -0
  39. data/lib/resource_controller/class_methods.rb +25 -0
  40. data/lib/resource_controller/controller.rb +69 -0
  41. data/lib/resource_controller/failable_action_options.rb +25 -0
  42. data/lib/resource_controller/helpers.rb +34 -0
  43. data/lib/resource_controller/helpers/current_objects.rb +73 -0
  44. data/lib/resource_controller/helpers/internal.rb +80 -0
  45. data/lib/resource_controller/helpers/nested.rb +67 -0
  46. data/lib/resource_controller/helpers/singleton_customizations.rb +64 -0
  47. data/lib/resource_controller/helpers/urls.rb +132 -0
  48. data/lib/resource_controller/response_collector.rb +27 -0
  49. data/lib/resource_controller/singleton.rb +15 -0
  50. data/lib/urligence.rb +52 -0
  51. data/rails/init.rb +6 -0
  52. data/test/Gemfile +13 -0
  53. data/test/Gemfile.lock +95 -0
  54. data/test/Rakefile +10 -0
  55. data/test/app/controllers/accounts_controller.rb +6 -0
  56. data/test/app/controllers/application_controller.rb +5 -0
  57. data/test/app/controllers/cms/options_controller.rb +3 -0
  58. data/test/app/controllers/cms/personnel_controller.rb +2 -0
  59. data/test/app/controllers/cms/photos_controller.rb +6 -0
  60. data/test/app/controllers/cms/products_controller.rb +3 -0
  61. data/test/app/controllers/comments_controller.rb +3 -0
  62. data/test/app/controllers/images_controller.rb +4 -0
  63. data/test/app/controllers/options_controller.rb +8 -0
  64. data/test/app/controllers/people_controller.rb +9 -0
  65. data/test/app/controllers/photos_controller.rb +12 -0
  66. data/test/app/controllers/posts_controller.rb +10 -0
  67. data/test/app/controllers/projects_controller.rb +3 -0
  68. data/test/app/controllers/somethings_controller.rb +3 -0
  69. data/test/app/controllers/tags_controller.rb +13 -0
  70. data/test/app/controllers/users_controller.rb +12 -0
  71. data/test/app/helpers/accounts_helper.rb +2 -0
  72. data/test/app/helpers/application_helper.rb +3 -0
  73. data/test/app/helpers/cms/products_helper.rb +2 -0
  74. data/test/app/helpers/comments_helper.rb +2 -0
  75. data/test/app/helpers/images_helper.rb +2 -0
  76. data/test/app/helpers/options_helper.rb +2 -0
  77. data/test/app/helpers/people_helper.rb +2 -0
  78. data/test/app/helpers/photos_helper.rb +2 -0
  79. data/test/app/helpers/posts_helper.rb +2 -0
  80. data/test/app/helpers/projects_helper.rb +2 -0
  81. data/test/app/helpers/somethings_helper.rb +2 -0
  82. data/test/app/helpers/tags_helper.rb +2 -0
  83. data/test/app/helpers/users_helper.rb +2 -0
  84. data/test/app/models/account.rb +4 -0
  85. data/test/app/models/comment.rb +3 -0
  86. data/test/app/models/image.rb +3 -0
  87. data/test/app/models/option.rb +3 -0
  88. data/test/app/models/personnel.rb +3 -0
  89. data/test/app/models/photo.rb +5 -0
  90. data/test/app/models/post.rb +3 -0
  91. data/test/app/models/product.rb +3 -0
  92. data/test/app/models/project.rb +2 -0
  93. data/test/app/models/something.rb +2 -0
  94. data/test/app/models/tag.rb +3 -0
  95. data/test/app/models/user.rb +3 -0
  96. data/test/app/views/accounts/_form.html.erb +4 -0
  97. data/test/app/views/accounts/edit.html.erb +14 -0
  98. data/test/app/views/accounts/new.html.erb +12 -0
  99. data/test/app/views/accounts/show.html.erb +5 -0
  100. data/test/app/views/cms/options/edit.rhtml +17 -0
  101. data/test/app/views/cms/options/index.rhtml +20 -0
  102. data/test/app/views/cms/options/new.rhtml +16 -0
  103. data/test/app/views/cms/options/show.rhtml +8 -0
  104. data/test/app/views/cms/photos/edit.rhtml +17 -0
  105. data/test/app/views/cms/photos/index.rhtml +20 -0
  106. data/test/app/views/cms/photos/new.rhtml +16 -0
  107. data/test/app/views/cms/photos/show.rhtml +8 -0
  108. data/test/app/views/cms/products/edit.rhtml +17 -0
  109. data/test/app/views/cms/products/index.rhtml +20 -0
  110. data/test/app/views/cms/products/new.rhtml +16 -0
  111. data/test/app/views/cms/products/show.rhtml +8 -0
  112. data/test/app/views/comments/edit.rhtml +27 -0
  113. data/test/app/views/comments/index.rhtml +24 -0
  114. data/test/app/views/comments/new.rhtml +26 -0
  115. data/test/app/views/comments/show.rhtml +18 -0
  116. data/test/app/views/images/_form.html.erb +4 -0
  117. data/test/app/views/images/edit.html.erb +14 -0
  118. data/test/app/views/images/new.html.erb +12 -0
  119. data/test/app/views/layouts/application.rhtml +17 -0
  120. data/test/app/views/layouts/comments.rhtml +17 -0
  121. data/test/app/views/layouts/options.rhtml +17 -0
  122. data/test/app/views/layouts/people.rhtml +17 -0
  123. data/test/app/views/layouts/photos.rhtml +17 -0
  124. data/test/app/views/layouts/projects.rhtml +17 -0
  125. data/test/app/views/layouts/somethings.rhtml +17 -0
  126. data/test/app/views/layouts/tags.rhtml +17 -0
  127. data/test/app/views/options/_form.html.erb +8 -0
  128. data/test/app/views/options/edit.html.erb +16 -0
  129. data/test/app/views/options/index.html.erb +21 -0
  130. data/test/app/views/options/new.html.erb +12 -0
  131. data/test/app/views/options/show.html.erb +10 -0
  132. data/test/app/views/people/edit.rhtml +17 -0
  133. data/test/app/views/people/index.rhtml +20 -0
  134. data/test/app/views/people/new.rhtml +16 -0
  135. data/test/app/views/people/show.rhtml +8 -0
  136. data/test/app/views/photos/edit.rhtml +17 -0
  137. data/test/app/views/photos/index.rhtml +20 -0
  138. data/test/app/views/photos/new.rhtml +16 -0
  139. data/test/app/views/photos/show.rhtml +8 -0
  140. data/test/app/views/posts/edit.rhtml +22 -0
  141. data/test/app/views/posts/index.rhtml +22 -0
  142. data/test/app/views/posts/new.rhtml +21 -0
  143. data/test/app/views/posts/show.rhtml +13 -0
  144. data/test/app/views/projects/edit.rhtml +17 -0
  145. data/test/app/views/projects/index.rhtml +20 -0
  146. data/test/app/views/projects/new.rhtml +16 -0
  147. data/test/app/views/projects/show.rhtml +8 -0
  148. data/test/app/views/somethings/edit.rhtml +17 -0
  149. data/test/app/views/somethings/index.rhtml +20 -0
  150. data/test/app/views/somethings/new.rhtml +16 -0
  151. data/test/app/views/somethings/show.rhtml +8 -0
  152. data/test/app/views/tags/edit.rhtml +17 -0
  153. data/test/app/views/tags/index.rhtml +20 -0
  154. data/test/app/views/tags/index.rjs +0 -0
  155. data/test/app/views/tags/new.rhtml +16 -0
  156. data/test/app/views/tags/show.rhtml +8 -0
  157. data/test/app/views/users/edit.rhtml +17 -0
  158. data/test/app/views/users/index.rhtml +20 -0
  159. data/test/app/views/users/new.rhtml +16 -0
  160. data/test/app/views/users/show.rhtml +8 -0
  161. data/test/config.ru +4 -0
  162. data/test/config/application.rb +41 -0
  163. data/test/config/boot.rb +6 -0
  164. data/test/config/database.yml +9 -0
  165. data/test/config/environment.rb +5 -0
  166. data/test/config/environments/development.rb +19 -0
  167. data/test/config/environments/test.rb +34 -0
  168. data/test/config/initializers/inflections.rb +14 -0
  169. data/test/config/initializers/secret_token.rb +7 -0
  170. data/test/config/initializers/session_store.rb +8 -0
  171. data/test/config/routes.rb +35 -0
  172. data/test/db/migrate/001_create_posts.rb +12 -0
  173. data/test/db/migrate/002_create_products.rb +11 -0
  174. data/test/db/migrate/003_create_comments.rb +13 -0
  175. data/test/db/migrate/004_create_options.rb +13 -0
  176. data/test/db/migrate/005_create_photos.rb +11 -0
  177. data/test/db/migrate/006_create_tags.rb +17 -0
  178. data/test/db/migrate/007_create_somethings.rb +11 -0
  179. data/test/db/migrate/008_create_accounts.rb +11 -0
  180. data/test/db/migrate/009_add_account_id_to_photos.rb +9 -0
  181. data/test/db/migrate/010_create_projects.rb +11 -0
  182. data/test/db/migrate/011_create_images.rb +12 -0
  183. data/test/db/migrate/012_create_users.rb +11 -0
  184. data/test/db/migrate/013_create_personnel.rb +11 -0
  185. data/test/db/migrate/014_add_personnel_id_to_photos.rb +9 -0
  186. data/test/db/schema.rb +79 -0
  187. data/test/script/console +3 -0
  188. data/test/script/destroy +3 -0
  189. data/test/script/generate +3 -0
  190. data/test/script/rails +6 -0
  191. data/test/script/server +3 -0
  192. data/test/test/fixtures/accounts.yml +7 -0
  193. data/test/test/fixtures/comments.yml +11 -0
  194. data/test/test/fixtures/images.yml +6 -0
  195. data/test/test/fixtures/options.yml +9 -0
  196. data/test/test/fixtures/personnel.yml +5 -0
  197. data/test/test/fixtures/photos.yml +9 -0
  198. data/test/test/fixtures/photos_tags.yml +3 -0
  199. data/test/test/fixtures/posts.yml +9 -0
  200. data/test/test/fixtures/products.yml +7 -0
  201. data/test/test/fixtures/projects.yml +7 -0
  202. data/test/test/fixtures/somethings.yml +7 -0
  203. data/test/test/fixtures/tags.yml +7 -0
  204. data/test/test/fixtures/users.yml +5 -0
  205. data/test/test/functional/cms/options_controller_test.rb +140 -0
  206. data/test/test/functional/cms/photos_controller_test.rb +37 -0
  207. data/test/test/functional/cms/products_controller_test.rb +37 -0
  208. data/test/test/functional/comments_controller_test.rb +140 -0
  209. data/test/test/functional/images_controller_test.rb +30 -0
  210. data/test/test/functional/people_controller_test.rb +147 -0
  211. data/test/test/functional/photos_controller_test.rb +199 -0
  212. data/test/test/functional/posts_controller_test.rb +21 -0
  213. data/test/test/functional/projects_controller_test.rb +137 -0
  214. data/test/test/functional/somethings_controller_test.rb +15 -0
  215. data/test/test/functional/tags_controller_test.rb +53 -0
  216. data/test/test/functional/users_controller_test.rb +137 -0
  217. data/test/test/test_helper.rb +14 -0
  218. data/test/test/unit/accessors_test.rb +110 -0
  219. data/test/test/unit/account_test.rb +7 -0
  220. data/test/test/unit/action_options_test.rb +109 -0
  221. data/test/test/unit/base_test.rb +11 -0
  222. data/test/test/unit/comment_test.rb +10 -0
  223. data/test/test/unit/failable_action_options_test.rb +77 -0
  224. data/test/test/unit/helpers/current_objects_test.rb +133 -0
  225. data/test/test/unit/helpers/internal_test.rb +106 -0
  226. data/test/test/unit/helpers/nested_test.rb +86 -0
  227. data/test/test/unit/helpers/singleton_current_objects_test.rb +68 -0
  228. data/test/test/unit/helpers/singleton_nested_test.rb +77 -0
  229. data/test/test/unit/helpers/singleton_urls_test.rb +67 -0
  230. data/test/test/unit/helpers/urls_test.rb +75 -0
  231. data/test/test/unit/helpers_test.rb +25 -0
  232. data/test/test/unit/image_test.rb +7 -0
  233. data/test/test/unit/option_test.rb +10 -0
  234. data/test/test/unit/photo_test.rb +10 -0
  235. data/test/test/unit/post_test.rb +10 -0
  236. data/test/test/unit/project_test.rb +10 -0
  237. data/test/test/unit/response_collector_test.rb +49 -0
  238. data/test/test/unit/something_test.rb +10 -0
  239. data/test/test/unit/tag_test.rb +10 -0
  240. data/test/test/unit/urligence_test.rb +205 -0
  241. data/test/vendor/plugins/d +1 -0
  242. data/test/vendor/plugins/dynamic_form/MIT-LICENSE +20 -0
  243. data/test/vendor/plugins/dynamic_form/README +13 -0
  244. data/test/vendor/plugins/dynamic_form/Rakefile +10 -0
  245. data/test/vendor/plugins/dynamic_form/init.rb +5 -0
  246. data/test/vendor/plugins/dynamic_form/lib/action_view/helpers/dynamic_form.rb +300 -0
  247. data/test/vendor/plugins/dynamic_form/lib/action_view/locale/en.yml +8 -0
  248. data/test/vendor/plugins/dynamic_form/test/dynamic_form_i18n_test.rb +42 -0
  249. data/test/vendor/plugins/dynamic_form/test/dynamic_form_test.rb +370 -0
  250. data/test/vendor/plugins/dynamic_form/test/test_helper.rb +9 -0
  251. metadata +427 -0
@@ -0,0 +1,11 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class BaseTest < ActiveSupport::TestCase
4
+ def setup
5
+ @controller = ResourceController::Base.new
6
+ end
7
+
8
+ def test_case_name
9
+
10
+ end
11
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/../test_helper'
2
+
3
+ class CommentTest < ActiveSupport::TestCase
4
+ fixtures :comments
5
+
6
+ # Replace this with your real tests.
7
+ def test_truth
8
+ assert true
9
+ end
10
+ end
@@ -0,0 +1,77 @@
1
+ require File.dirname(__FILE__)+'/../test_helper'
2
+
3
+ class FailableActionOptionsTest < ActiveSupport::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+ @create = ResourceController::FailableActionOptions.new
7
+ end
8
+
9
+ should "have success and fails" do
10
+ assert ResourceController::ActionOptions, @create.success.class
11
+ assert ResourceController::ActionOptions, @create.fails.class
12
+ end
13
+
14
+ %w(before).each do |accessor|
15
+ should "have a block accessor for #{accessor}" do
16
+ @create.send(accessor) do
17
+ "return_something"
18
+ end
19
+
20
+ assert_equal "return_something", @create.send(accessor).first.call(nil)
21
+ end
22
+ end
23
+
24
+ should "delegate flash to success" do
25
+ @create.flash "Successfully created."
26
+ assert_equal "Successfully created.", @create.success.flash
27
+ end
28
+
29
+ should "delegate after to success" do
30
+ @create.after do
31
+ "something"
32
+ end
33
+
34
+ assert_equal "something", @create.success.after.first.call
35
+ end
36
+
37
+ should "delegate response to success" do
38
+ @create.response do |wants|
39
+ wants.html
40
+ end
41
+
42
+ assert @create.wants[:html]
43
+ end
44
+
45
+ should "delegate wants to success" do
46
+ @create.wants.html
47
+
48
+ assert @create.wants[:html]
49
+ end
50
+
51
+ context "duplication" do
52
+ setup do
53
+ @opts = ResourceController::FailableActionOptions.new
54
+ @opts.wants.js
55
+ @opts.failure.wants.js
56
+ @opts.before {}
57
+
58
+ @dup = @opts.dup
59
+ end
60
+
61
+ should "duplicate success" do
62
+ assert !@dup.success.equal?(@opts.success)
63
+ assert @dup.success.wants[:js]
64
+ end
65
+
66
+ should "duplicate failure" do
67
+ assert !@dup.failure.equal?(@opts.failure)
68
+ assert @dup.failure.wants[:js]
69
+ end
70
+
71
+ should "duplicate before" do
72
+ assert !@dup.before.equal?(@opts.before)
73
+ assert @dup.before
74
+ end
75
+ end
76
+
77
+ end
@@ -0,0 +1,133 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class ResourceController::Helpers::CurrentObjectsTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+
7
+ @params = stub :[] => "1"
8
+ @controller.stubs(:params).returns(@params)
9
+
10
+ @request = stub :path => ""
11
+ @controller.stubs(:request).returns(@request)
12
+
13
+ @object = Post.new
14
+ Post.stubs(:find).with("1").returns(@object)
15
+
16
+ @collection = mock()
17
+ Post.stubs(:find).with(:all).returns(@collection)
18
+ end
19
+
20
+ context "model helper" do
21
+ should "return constant" do
22
+ assert_equal Post, @controller.send(:model)
23
+ end
24
+ end
25
+
26
+ context "collection helper" do
27
+ should "find all" do
28
+ assert_equal @collection, @controller.send(:collection)
29
+ end
30
+ end
31
+
32
+ context "param helper" do
33
+ should "return the correct param" do
34
+ assert_equal "1", @controller.send(:param)
35
+ end
36
+ end
37
+
38
+ context "object helper" do
39
+ should "find the correct object" do
40
+ assert_equal @object, @controller.send(:object)
41
+ end
42
+ end
43
+
44
+ context "load object helper" do
45
+ setup do
46
+ @controller.send(:load_object)
47
+ end
48
+
49
+ should "load object as instance variable" do
50
+ assert_equal @object, @controller.instance_variable_get("@post")
51
+ end
52
+
53
+ context "with an alternate object_name" do
54
+ setup do
55
+ @controller.stubs(:object_name).returns('asdf')
56
+ @controller.send(:load_object)
57
+ end
58
+
59
+ should "use the variable name" do
60
+ assert_equal @object, @controller.instance_variable_get("@asdf")
61
+ end
62
+ end
63
+ end
64
+
65
+ context "load_collection helper" do
66
+ context "with resource_name" do
67
+ setup do
68
+ @controller.send(:load_collection)
69
+ end
70
+
71
+ should "load collection in to instance variable with plural model_name" do
72
+ assert_equal @collection, @controller.instance_variable_get("@posts")
73
+ end
74
+ end
75
+ end
76
+
77
+ context "object params helper" do
78
+ context "without alternate variable name" do
79
+ setup do
80
+ @params.expects(:[]).with("post").returns(2)
81
+ end
82
+
83
+ should "get params for object" do
84
+ assert_equal 2, @controller.send(:object_params)
85
+ end
86
+ end
87
+
88
+ context "with alternate object_name" do
89
+ setup do
90
+ @params.expects(:[]).with("something").returns(3)
91
+ @controller.expects(:object_name).returns("something")
92
+ end
93
+
94
+ should "use variable name" do
95
+ assert_equal 3, @controller.send(:object_params)
96
+ end
97
+ end
98
+ end
99
+
100
+ context "build object helper" do
101
+ context "with no parents" do
102
+ setup do
103
+ Post.expects(:new).with("1").returns("a new post")
104
+ end
105
+
106
+ should "build new object" do
107
+ assert_equal "a new post", @controller.send(:build_object)
108
+ end
109
+ end
110
+
111
+ context "with parent" do
112
+ setup do
113
+ @comments_controller = CommentsController.new
114
+ @comment_params = stub()
115
+ @comment_params.stubs(:[]).with(:post_id).returns 2
116
+ @comment_params.stubs(:[]).with('comment').returns ""
117
+ @comments_controller.stubs(:params).returns(@comment_params)
118
+
119
+ @request = stub :path => ""
120
+ @comments_controller.stubs(:request).returns(@request)
121
+
122
+ Post.expects(:find).with(2).returns(Post.new)
123
+ @comments = stub()
124
+ @comments.expects(:build).with("").returns("a new comment")
125
+ Post.any_instance.stubs(:comments).returns(@comments)
126
+ end
127
+
128
+ should "build new object" do
129
+ assert_equal "a new comment", @comments_controller.send(:build_object)
130
+ end
131
+ end
132
+ end
133
+ end
@@ -0,0 +1,106 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class ResourceController::Helpers::InternalTest < Test::Unit::TestCase
4
+ def setup
5
+ @controller = PostsController.new
6
+
7
+ @params = stubs(:[]).returns("1")
8
+ @controller.stubs(:params).returns(@params)
9
+
10
+ @object = Post.new
11
+ Post.stubs(:find).with("1").returns(@object)
12
+
13
+ @collection = mock()
14
+ Post.stubs(:find).with(:all).returns(@collection)
15
+ end
16
+
17
+ context "response_for" do
18
+ setup do
19
+ @options = ResourceController::ActionOptions.new
20
+ @options.response {|wants| wants.html}
21
+ @controller.expects(:respond_to).yields(mock(:html => ""))
22
+ @controller.stubs(:options_for).with(:create).returns( @options )
23
+ end
24
+
25
+ should "yield a wants object to the response block" do
26
+ @controller.send :response_for, :create
27
+ end
28
+ end
29
+
30
+ context "after" do
31
+ setup do
32
+ @options = ResourceController::FailableActionOptions.new
33
+ @options.success.after { }
34
+ @controller.stubs(:options_for).with(:create).returns( @options )
35
+ @nil_options = ResourceController::FailableActionOptions.new
36
+ @controller.stubs(:options_for).with(:non_existent).returns(@nil_options)
37
+ end
38
+
39
+ should "grab the correct block for after create" do
40
+ @controller.send :after, :create
41
+ end
42
+
43
+ should "not choke if there is no block" do
44
+ assert_nothing_raised do
45
+ @controller.send :after, :non_existent
46
+ end
47
+ end
48
+ end
49
+
50
+ context "before" do
51
+ setup do
52
+ PostsController.stubs(:non_existent).returns ResourceController::ActionOptions.new
53
+ end
54
+
55
+ should "not choke if there is no block" do
56
+ assert_nothing_raised do
57
+ @controller.send :before, :non_existent
58
+ end
59
+ end
60
+ end
61
+
62
+ context "get options for action" do
63
+ setup do
64
+ @create = ResourceController::FailableActionOptions.new
65
+ PostsController.stubs(:create).returns @create
66
+ end
67
+
68
+ should "get correct object for failure action" do
69
+ assert_equal @create.fails, @controller.send(:options_for, :create_fails)
70
+ end
71
+
72
+ should "get correct object for successful action" do
73
+ assert_equal @create.success, @controller.send(:options_for, :create)
74
+ end
75
+
76
+ should "get correct object for non-failable action" do
77
+ @index = ResourceController::ActionOptions.new
78
+ PostsController.stubs(:index).returns @index
79
+ assert_equal @index, @controller.send(:options_for, :index)
80
+ end
81
+
82
+ should "understand new_action to mean new" do
83
+ @new_action = ResourceController::ActionOptions.new
84
+ PostsController.stubs(:new_action).returns @new_action
85
+ assert_equal @new_action, @controller.send(:options_for, :new_action)
86
+ end
87
+ end
88
+
89
+ context "flash now helper" do
90
+ setup do
91
+ klass = Class.new do
92
+ include ResourceController::Helpers::Internal
93
+ end
94
+
95
+ @c = klass.new
96
+ @c.stubs(:options_for).returns(stub(:flash_now => 'something'))
97
+ flash_now = mock()
98
+ flash_now.expects(:[]=).with(:notice, 'something')
99
+ @c.stubs(:flash).returns(stub(:now => flash_now))
100
+ end
101
+
102
+ should "set the flash_now" do
103
+ @c.send :set_flash_now, :new
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,86 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class PostsControllerMock
4
+ include ResourceController::Helpers
5
+ extend ResourceController::Accessors
6
+ class_reader_writer :belongs_to
7
+ end
8
+
9
+ class CommentsControllerMock
10
+ include ResourceController::Helpers
11
+ extend ResourceController::Accessors
12
+ class_reader_writer :belongs_to
13
+ belongs_to :post
14
+ end
15
+
16
+ class ResourceController::Helpers::NestedTest < Test::Unit::TestCase
17
+ def setup
18
+ @controller = PostsControllerMock.new
19
+
20
+ @params = stub :[] => "1"
21
+ @controller.stubs(:params).returns(@params)
22
+
23
+ @request = stub :path => ""
24
+ @controller.stubs(:request).returns(@request)
25
+
26
+ @object = Post.new
27
+ Post.stubs(:find).with("1").returns(@object)
28
+
29
+ @collection = mock()
30
+ Post.stubs(:find).with(:all).returns(@collection)
31
+ end
32
+
33
+ context "parent type helper" do
34
+ setup do
35
+ @comments_controller = CommentsControllerMock.new
36
+ @comment_params = stub()
37
+ @comment_params.stubs(:[]).with(:post_id).returns 2
38
+
39
+ @comments_controller.stubs(:params).returns(@comment_params)
40
+ end
41
+
42
+ should "get the params for the current parent" do
43
+ assert_equal :post, @comments_controller.send(:parent_type)
44
+ end
45
+
46
+ context "with multiple possible parents" do
47
+ setup do
48
+ CommentsControllerMock.class_eval do
49
+ belongs_to :post, :product
50
+ end
51
+
52
+ @comment_params = stub()
53
+ @comment_params.stubs(:[]).with(:product_id).returns 5
54
+ @comment_params.stubs(:[]).with(:post_id).returns nil
55
+ @comments_controller.stubs(:params).returns(@comment_params)
56
+ end
57
+
58
+ should "get the params for whatever models are available" do
59
+ assert_equal :product, @comments_controller.send(:parent_type)
60
+ end
61
+ end
62
+
63
+ context "with no possible parent" do
64
+ should "return nil" do
65
+ assert_nil @controller.send(:parent_type)
66
+ end
67
+ end
68
+ end
69
+
70
+ context "parent object helper" do
71
+ setup do
72
+ @comments_controller = CommentsControllerMock.new
73
+ @comment_params = stub()
74
+ @comment_params.stubs(:[]).with(:post_id).returns 2
75
+ @request = stub :path => ""
76
+ @comments_controller.stubs(:request).returns(@request)
77
+ @comments_controller.stubs(:params).returns(@comment_params)
78
+ @post = Post.new
79
+ Post.stubs(:find).with(2).returns @post
80
+ end
81
+
82
+ should "return post with id 2" do
83
+ assert_equal @post, @comments_controller.send(:parent_object)
84
+ end
85
+ end
86
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__)+'/../../test_helper'
2
+
3
+ class ResourceController::Helpers::SingletonCurrentObjectsTest < Test::Unit::TestCase
4
+ context "singleton" do
5
+ setup do
6
+ @image_controller = ImagesController.new
7
+ @image_params = stub()
8
+ @image_params.stubs(:[]).with(:user_id).returns 2
9
+ @image_params.stubs(:[]).with('image').returns ""
10
+ @image_controller.stubs(:params).returns(@image_params)
11
+
12
+ @request = stub :path => ""
13
+ @image_controller.stubs(:request).returns(@request)
14
+ @user = stub()
15
+ User.expects(:find).with(2).returns(@user)
16
+ @image = stub()
17
+ end
18
+
19
+ context "build object helper with parent" do
20
+ should "build new object" do
21
+ @user.expects(:build_image).with("").returns("a new image")
22
+ assert_equal "a new image", @image_controller.send(:build_object)
23
+ end
24
+ end
25
+
26
+ context "object helper with parent" do
27
+ should "fetch the correct object" do
28
+ @user.expects(:image).returns(@image)
29
+ assert_equal @image, @image_controller.send(:object)
30
+ end
31
+ end
32
+ end
33
+
34
+ context "with singleton parent" do
35
+ setup do
36
+ @options_controller = OptionsController.new
37
+ @options_params = stub :[] => "1"
38
+ @options_params.stubs(:[]).with('option').returns ""
39
+ @options_params.stubs(:[]).with(:id).returns 1
40
+ @options_controller.stubs(:params).returns(@options_params)
41
+
42
+ @option = Option.new
43
+
44
+ @account = Account.new
45
+ @options_controller.stubs(:parent_object).returns(@account)
46
+
47
+ @request = stub :path => "account/options/1"
48
+ @options_controller.stubs(:request).returns(@request)
49
+
50
+ @options = stub()
51
+ Account.any_instance.stubs(:options).returns(@options)
52
+ end
53
+
54
+ context "build object helper" do
55
+ should "build new object" do
56
+ @options.expects(:build).with("").returns("a new option")
57
+ assert_equal "a new option", @options_controller.send(:build_object)
58
+ end
59
+ end
60
+
61
+ context "object helper" do
62
+ should "fetch the correct object" do
63
+ @options.expects(:find).with(1).returns(@option)
64
+ assert_equal @option, @options_controller.send(:object)
65
+ end
66
+ end
67
+ end
68
+ end