diff options
author | Ernie Miller <ernie@erniemiller.org> | 2012-08-22 10:27:42 -0400 |
---|---|---|
committer | Ernie Miller <ernie@erniemiller.org> | 2012-09-03 13:13:16 -0400 |
commit | 4037e31d8874250e485ca6a27bd792a3beb13f76 (patch) | |
tree | 448dc02534c5b9d5116bc0b11d19a56125873411 /actionpack/test | |
parent | 30a8f0d5b675d0eddc0af05103f4eb7f95c7caad (diff) | |
download | rails-4037e31d8874250e485ca6a27bd792a3beb13f76.tar.gz rails-4037e31d8874250e485ca6a27bd792a3beb13f76.tar.bz2 rails-4037e31d8874250e485ca6a27bd792a3beb13f76.zip |
Allow routing concerns to accept a callable
This allows us to make alterations to the generated routes based on the
scope of the current mapper, and otherwise allows us to move larger
blocks of concerns out of the routes file, altogether.
Diffstat (limited to 'actionpack/test')
-rw-r--r-- | actionpack/test/abstract_unit.rb | 1 | ||||
-rw-r--r-- | actionpack/test/dispatch/routing/concerns_test.rb | 28 |
2 files changed, 27 insertions, 2 deletions
diff --git a/actionpack/test/abstract_unit.rb b/actionpack/test/abstract_unit.rb index e5054a9eb8..4f5b2895c9 100644 --- a/actionpack/test/abstract_unit.rb +++ b/actionpack/test/abstract_unit.rb @@ -358,6 +358,7 @@ end class ThreadsController < ResourcesController; end class MessagesController < ResourcesController; end class CommentsController < ResourcesController; end +class ReviewsController < ResourcesController; end class AuthorsController < ResourcesController; end class LogosController < ResourcesController; end diff --git a/actionpack/test/dispatch/routing/concerns_test.rb b/actionpack/test/dispatch/routing/concerns_test.rb index 21da3bd77a..8600da32ad 100644 --- a/actionpack/test/dispatch/routing/concerns_test.rb +++ b/actionpack/test/dispatch/routing/concerns_test.rb @@ -1,6 +1,16 @@ require 'abstract_unit' class RoutingConcernsTest < ActionDispatch::IntegrationTest + class Reviewable + def self.call(mapper) + if mapper.current_scope[:controller] == 'posts' + mapper.resources :reviews + elsif mapper.current_scope[:controller] == 'videos' + mapper.resources :reviews, as: :video_reviews + end + end + end + Routes = ActionDispatch::Routing::RouteSet.new.tap do |app| app.draw do concern :commentable do @@ -11,8 +21,10 @@ class RoutingConcernsTest < ActionDispatch::IntegrationTest resources :images, only: :index end - resources :posts, concerns: [:commentable, :image_attachable] do - resource :video, concerns: :commentable + concern :reviewable, Reviewable + + resources :posts, concerns: [:commentable, :image_attachable, :reviewable] do + resource :video, concerns: [:commentable, :reviewable] end resource :picture, concerns: :commentable do @@ -63,6 +75,18 @@ class RoutingConcernsTest < ActionDispatch::IntegrationTest assert_equal "404", @response.code end + def test_accessing_callable_concern_from_resources + get "/posts/1/reviews/1" + assert_equal "200", @response.code + assert_equal "/posts/1/reviews/1", post_review_path(post_id: 1, id: 1) + end + + def test_callable_concern_can_adapt_to_mapper + get "/posts/1/video/reviews/1" + assert_equal "200", @response.code + assert_equal "/posts/1/video/reviews/1", post_video_video_review_path(post_id: 1, id: 1) + end + def test_accessing_concern_from_a_scope get "/videos/comments" assert_equal "200", @response.code |