diff options
Diffstat (limited to 'activemodel/lib/active_model/validations')
| -rw-r--r-- | activemodel/lib/active_model/validations/callbacks.rb | 24 | ||||
| -rw-r--r-- | activemodel/lib/active_model/validations/validates.rb | 2 | 
2 files changed, 16 insertions, 10 deletions
| diff --git a/activemodel/lib/active_model/validations/callbacks.rb b/activemodel/lib/active_model/validations/callbacks.rb index 4d0ab2a2fe..887d31ae2a 100644 --- a/activemodel/lib/active_model/validations/callbacks.rb +++ b/activemodel/lib/active_model/validations/callbacks.rb @@ -54,15 +54,18 @@ module ActiveModel          #   person.valid? # => true          #   person.name   # => "bob"          def before_validation(*args, &block) -          options = args.last -          if options.is_a?(Hash) && options[:on] -            options[:if] = Array(options[:if]) +          options = args.extract_options! + +          if options.key?(:on) +            options = options.dup              options[:on] = Array(options[:on]) +            options[:if] = Array(options[:if])              options[:if].unshift ->(o) { -              options[:on].include? o.validation_context +              !(options[:on] & Array(o.validation_context)).empty?              }            end -          set_callback(:validation, :before, *args, &block) + +          set_callback(:validation, :before, *args, options, &block)          end          # Defines a callback that will get called right after validation. @@ -93,15 +96,18 @@ module ActiveModel          #   person.status # => true          def after_validation(*args, &block)            options = args.extract_options! +          options = options.dup            options[:prepend] = true -          options[:if] = Array(options[:if]) -          if options[:on] + +          if options.key?(:on)              options[:on] = Array(options[:on]) +            options[:if] = Array(options[:if])              options[:if].unshift ->(o) { -              options[:on].include? o.validation_context +              !(options[:on] & Array(o.validation_context)).empty?              }            end -          set_callback(:validation, :after, *(args << options), &block) + +          set_callback(:validation, :after, *args, options, &block)          end        end diff --git a/activemodel/lib/active_model/validations/validates.rb b/activemodel/lib/active_model/validations/validates.rb index 43d9f82d9f..e28e7e9219 100644 --- a/activemodel/lib/active_model/validations/validates.rb +++ b/activemodel/lib/active_model/validations/validates.rb @@ -154,7 +154,7 @@ module ActiveModel        # When creating custom validators, it might be useful to be able to specify        # additional default keys. This can be done by overwriting this method.        def _validates_default_keys -        [:if, :unless, :on, :allow_blank, :allow_nil , :strict] +        [:if, :unless, :on, :allow_blank, :allow_nil, :strict]        end        def _parse_validates_options(options) | 
