aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib/active_model
diff options
context:
space:
mode:
authorXavier Noria <fxn@hashref.com>2010-05-09 11:46:45 +0200
committerXavier Noria <fxn@hashref.com>2010-05-09 11:46:45 +0200
commite1a0d86fe0355ddff8c86db0f42f3824ffe14c02 (patch)
tree5833022ca41905f243c15c8a5ffdf864de69bfa6 /activemodel/lib/active_model
parent1ff3d951e620ddeeb97e87e2024391470e886467 (diff)
parentdf508bd97062b871fe25eda8d1bb61cd43d79bc4 (diff)
downloadrails-e1a0d86fe0355ddff8c86db0f42f3824ffe14c02.tar.gz
rails-e1a0d86fe0355ddff8c86db0f42f3824ffe14c02.tar.bz2
rails-e1a0d86fe0355ddff8c86db0f42f3824ffe14c02.zip
Merge remote branch 'rails/master'
Diffstat (limited to 'activemodel/lib/active_model')
-rw-r--r--activemodel/lib/active_model/serializers/json.rb6
-rw-r--r--activemodel/lib/active_model/validations.rb17
2 files changed, 17 insertions, 6 deletions
diff --git a/activemodel/lib/active_model/serializers/json.rb b/activemodel/lib/active_model/serializers/json.rb
index 794de7dc55..ffdfbfcaaf 100644
--- a/activemodel/lib/active_model/serializers/json.rb
+++ b/activemodel/lib/active_model/serializers/json.rb
@@ -79,7 +79,11 @@ module ActiveModel
# "title": "So I was thinking"}]}
def encode_json(encoder)
hash = serializable_hash(encoder.options)
- hash = { self.class.model_name.element => hash } if include_root_in_json
+ if include_root_in_json
+ custom_root = encoder.options && encoder.options[:root]
+ hash = { custom_root || self.class.model_name.element => hash }
+ end
+
ActiveSupport::JSON.encode(hash)
end
diff --git a/activemodel/lib/active_model/validations.rb b/activemodel/lib/active_model/validations.rb
index c69cabc888..7c705b8899 100644
--- a/activemodel/lib/active_model/validations.rb
+++ b/activemodel/lib/active_model/validations.rb
@@ -29,7 +29,7 @@ module ActiveModel
# person.invalid?
# #=> false
# person.first_name = 'zoolander'
- # person.valid?
+ # person.valid?
# #=> false
# person.invalid?
# #=> true
@@ -48,6 +48,8 @@ module ActiveModel
extend ActiveModel::Translation
define_callbacks :validate, :scope => :name
+ attr_accessor :validation_context
+
class_attribute :_validators
self._validators = Hash.new { |h,k| h[k] = [] }
end
@@ -117,7 +119,7 @@ module ActiveModel
options = args.last
if options.is_a?(Hash) && options.key?(:on)
options[:if] = Array.wrap(options[:if])
- options[:if] << "@_on_validate == :#{options[:on]}"
+ options[:if] << "validation_context == :#{options[:on]}"
end
set_callback(:validate, *args, &block)
end
@@ -150,15 +152,20 @@ module ActiveModel
end
# Runs all the specified validations and returns true if no errors were added otherwise false.
- def valid?
+ # Context can optionally be supplied to define which callbacks to test against (the context is
+ # defined on the validations using :on).
+ def valid?(context = nil)
+ current_context, self.validation_context = validation_context, context
errors.clear
_run_validate_callbacks
errors.empty?
+ ensure
+ self.validation_context = current_context
end
# Performs the opposite of <tt>valid?</tt>. Returns true if errors were added, false otherwise.
- def invalid?
- !valid?
+ def invalid?(context = nil)
+ !valid?(context)
end
# Hook method defining how an attribute value should be retieved. By default this is assumed