aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/test/controller/filters_test.rb
diff options
context:
space:
mode:
authorclaudiob <claudiob@gmail.com>2015-01-08 09:30:31 -0800
committerclaudiob <claudiob@gmail.com>2015-01-08 09:30:31 -0800
commit9a25603d0aa2d3de35ce59fcfe8b90cdfddb78cf (patch)
treef57a8159192e1cb676f6167616a74761c947153d /actionpack/test/controller/filters_test.rb
parentae9f803c5dfbc06701de87b804250b591fac2d20 (diff)
downloadrails-9a25603d0aa2d3de35ce59fcfe8b90cdfddb78cf.tar.gz
rails-9a25603d0aa2d3de35ce59fcfe8b90cdfddb78cf.tar.bz2
rails-9a25603d0aa2d3de35ce59fcfe8b90cdfddb78cf.zip
Add test/doc for :if/:except in skip_before_action
The new test/docs further explain the conflicts that can happen when mixing `:if`/`:unless` options with `:only`/`:except` options in `skip_before_action`. The gist is that "positive" filters always have priority over negative ones. The previous commit already showed that `:only` has priority over `:if`. This commit shows that `:if` has priority over `:except`. For instance, the following snippets are equivalent: ```ruby skip_before_action :some_callback, if: -> { condition }, except: action ``` ```ruby skip_before_action :some_callback, if: -> { condition } ```
Diffstat (limited to 'actionpack/test/controller/filters_test.rb')
-rw-r--r--actionpack/test/controller/filters_test.rb21
1 files changed, 19 insertions, 2 deletions
diff --git a/actionpack/test/controller/filters_test.rb b/actionpack/test/controller/filters_test.rb
index c5484e4b71..b9fb6be4e3 100644
--- a/actionpack/test/controller/filters_test.rb
+++ b/actionpack/test/controller/filters_test.rb
@@ -225,7 +225,7 @@ class FilterTest < ActionController::TestCase
skip_before_action :clean_up_tmp, if: -> { true }
end
- class SkipFilterUsingOnlyAndConditional < ConditionalFilterController
+ class SkipFilterUsingOnlyAndIf < ConditionalFilterController
before_action :clean_up_tmp
before_action :ensure_login
@@ -237,6 +237,18 @@ class FilterTest < ActionController::TestCase
end
end
+ class SkipFilterUsingIfAndExcept < ConditionalFilterController
+ before_action :clean_up_tmp
+ before_action :ensure_login
+
+ skip_before_action :ensure_login, if: -> { false }, except: :login
+ skip_before_action :clean_up_tmp, if: -> { true }, except: :login
+
+ def login
+ render text: 'ok'
+ end
+ end
+
class ClassController < ConditionalFilterController
before_action ConditionalClassFilter
end
@@ -609,10 +621,15 @@ class FilterTest < ActionController::TestCase
end
def test_if_is_ignored_when_used_with_only
- test_process(SkipFilterUsingOnlyAndConditional, 'login')
+ test_process(SkipFilterUsingOnlyAndIf, 'login')
assert_nil assigns['ran_filter']
end
+ def test_except_is_ignored_when_used_with_if
+ test_process(SkipFilterUsingIfAndExcept, 'login')
+ assert_equal %w(ensure_login), assigns["ran_filter"]
+ end
+
def test_skipping_class_actions
test_process(ClassController)
assert_equal true, assigns["ran_class_action"]