diff options
author | Xavier Noria <fxn@hashref.com> | 2010-05-09 11:46:45 +0200 |
---|---|---|
committer | Xavier Noria <fxn@hashref.com> | 2010-05-09 11:46:45 +0200 |
commit | e1a0d86fe0355ddff8c86db0f42f3824ffe14c02 (patch) | |
tree | 5833022ca41905f243c15c8a5ffdf864de69bfa6 /activemodel/lib/active_model | |
parent | 1ff3d951e620ddeeb97e87e2024391470e886467 (diff) | |
parent | df508bd97062b871fe25eda8d1bb61cd43d79bc4 (diff) | |
download | rails-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.rb | 6 | ||||
-rw-r--r-- | activemodel/lib/active_model/validations.rb | 17 |
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 |