diff options
author | claudiob <claudiob@gmail.com> | 2015-01-08 09:30:31 -0800 |
---|---|---|
committer | claudiob <claudiob@gmail.com> | 2015-01-08 09:30:31 -0800 |
commit | 9a25603d0aa2d3de35ce59fcfe8b90cdfddb78cf (patch) | |
tree | f57a8159192e1cb676f6167616a74761c947153d /actionpack/test | |
parent | ae9f803c5dfbc06701de87b804250b591fac2d20 (diff) | |
download | rails-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')
-rw-r--r-- | actionpack/test/controller/filters_test.rb | 21 |
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"] |