lib/ripple/validations/associated_validator.rb in ripple-0.9.5 vs lib/ripple/validations/associated_validator.rb in ripple-1.0.0.beta
- old
+ new
@@ -1,29 +1,38 @@
-# Copyright 2010 Sean Cribbs, Sonian Inc., and Basho Technologies, Inc.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Taken from ActiveRecord::Validations::AssociatedValidators
-#
require 'active_model/validator'
module Ripple
module Validations
class AssociatedValidator < ActiveModel::EachValidator
+ include Translation
def validate_each(record, attribute, value)
return if (value.is_a?(Array) ? value : [value]).collect{ |r| r.nil? || r.valid? }.all?
- record.errors.add(attribute, :invalid, options.merge(:value => value))
+ record.errors.add(attribute, error_message_for(attribute, value))
end
+
+ private
+
+ def error_message_for(attribute, associated_records)
+ if associated_records.respond_to?(:each_with_index)
+ record_errors = associated_records.enum_for(:each_with_index).collect do |record, index|
+ next unless record.errors.any?
+
+ t("associated_document_error_summary",
+ :doc_type => attribute.to_s.singularize,
+ :doc_id => index + 1,
+ :errors => record.errors.full_messages.to_sentence
+ )
+ end
+ record_errors.compact!
+ record_errors.flatten!
+
+ t("many_association_validation_error",
+ :association_errors => record_errors.join('; '))
+ else
+ t("one_association_validation_error",
+ :association_errors => associated_records.errors.full_messages.to_sentence)
+ end
+ end
end
module ClassMethods
def validates_associated(*attr_names)
validates_with AssociatedValidator, _merge_attributes(attr_names)