From b930d2f259f7ebf3c7134db82dde02c55e00070c Mon Sep 17 00:00:00 2001 From: Mike Gunderloy Date: Tue, 18 Nov 2008 11:03:31 -0600 Subject: Finishing up RDoc 2.x markup for cattr_accessors --- activemodel/lib/active_model/errors.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'activemodel/lib/active_model/errors.rb') diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index a99bb001e4..bcf0810290 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -24,6 +24,8 @@ module ActiveModel :even => "must be even" } + ## + # :singleton-method: # Holds a hash with all the default error messages that can be replaced by your own copy or localizations. cattr_accessor :default_error_messages -- cgit v1.2.3 From f320c994dbf0c1b0c03cd2ddc64aa52a4f5859b8 Mon Sep 17 00:00:00 2001 From: Rodrigo Rosenfeld Rosas Date: Thu, 30 Jul 2009 13:19:09 -0300 Subject: Fix typo in generate_message documentation. --- activemodel/lib/active_model/errors.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activemodel/lib/active_model/errors.rb') diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index a4cf700231..1f2d20f6e2 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -113,7 +113,7 @@ module ActiveModel full_messages end - # Translates an error message in it's default scope (activemodel.errrors.messages). + # Translates an error message in it's default scope (activemodel.errors.messages). # Error messages are first looked up in models.MODEL.attributes.ATTRIBUTE.MESSAGE, if it's not there, # it's looked up in models.MODEL.MESSAGE and if that is not there it returns the translation of the # default message (e.g. activemodel.errors.messages.MESSAGE). The translated model name, -- cgit v1.2.3 From 38e6eb74abdf379ceb02ae896c0f77a95d5664f4 Mon Sep 17 00:00:00 2001 From: Jay Pignata Date: Thu, 17 Sep 2009 23:03:36 -0400 Subject: Fixing typo in ActiveRecord::Errors documentation --- activemodel/lib/active_model/errors.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activemodel/lib/active_model/errors.rb') diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index b31ab0b837..1a3d120761 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -113,7 +113,7 @@ module ActiveModel full_messages end - # Translates an error message in it's default scope (activemodel.errors.messages). + # Translates an error message in its default scope (activemodel.errors.messages). # Error messages are first looked up in models.MODEL.attributes.ATTRIBUTE.MESSAGE, if it's not there, # it's looked up in models.MODEL.MESSAGE and if that is not there it returns the translation of the # default message (e.g. activemodel.errors.messages.MESSAGE). The translated model name, -- cgit v1.2.3 From 4d4bdb0766713d78a2e5126ab4832c45324aa471 Mon Sep 17 00:00:00 2001 From: Mikel Lindsaar Date: Sun, 17 Jan 2010 15:17:54 +1100 Subject: Added ActiveModel::Errors documentation --- activemodel/lib/active_model/errors.rb | 107 +++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) (limited to 'activemodel/lib/active_model/errors.rb') diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index 0b6c75c46e..a51aa9698d 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -2,9 +2,66 @@ require 'active_support/core_ext/string/inflections' require 'active_support/ordered_hash' module ActiveModel + # Provides a modified +OrderedHash+ that you can include in your object + # for handling error messages and interacting with Action Pack helpers. + # + # A minimal implementation could be: + # + # class Person + # + # def initialize + # @errors = ActiveModel::Errors.new(self) + # end + # + # attr_accessor :name + # attr_reader :errors + # + # def validate! + # errors.add(:name, "can not be nil") if name == nil + # end + # + # # The following methods are needed to be minimally implemented + # + # def read_attribute_for_validation(attr) + # send(attr) + # end + # + # def ErrorsPerson.human_attribute_name(attr, options = {}) + # attr + # end + # + # def ErrorsPerson.lookup_ancestors + # [self] + # end + # + # def ErrorsPerson.model_name + # ActiveModel::Name.new(ErrorsPerson) + # end + # + # end + # + # The last four methods are required in your object for Errors to be + # able to generate error messages correctly and also handle multiple + # languages. + # + # The above allows you to do: + # + # p = Person.new + # p.validate! # => ["can not be nil"] + # p.errors.full_messages # => ["name can not be nil"] + # # etc.. class Errors < ActiveSupport::OrderedHash include DeprecatedErrorMethods + # Pass in the instance of the object that is using the errors object. + # + # class Person + # def initialize + # @errors = ActiveModel::Errors.new(self) + # end + # end + # + # def initialize(base) @base = base super() @@ -13,6 +70,10 @@ module ActiveModel alias_method :get, :[] alias_method :set, :[]= + # When passed a symbol or a name of a method, returns an array of errors for the method. + # + # p.errors[:name] #=> ["can not be nil"] + # p.errors['name'] #=> ["can not be nil"] def [](attribute) if errors = get(attribute.to_sym) errors @@ -21,28 +82,73 @@ module ActiveModel end end + # Adds to the supplied attribute the supplied error message. + # + # p.errors[:name] = "must be set" + # p.errors[:name] #=> ['must be set'] def []=(attribute, error) self[attribute.to_sym] << error end + # Iterates through each error key, value pair in the error messages hash. + # Yields the attribute and the error for that attribute. If the attribute + # has more than one error message, yields once for each error message. + # + # p.errors.add(:name, "can't be blank") + # p.errors.each do |attribute, errors_array| + # # Will yield :name and "can't be blank" + # end + # + # p.errors.add(:name, "must be specified") + # p.errors.each do |attribute, errors_array| + # # Will yield :name and "can't be blank" + # # then yield :name and "must be specified" + # end def each each_key do |attribute| self[attribute].each { |error| yield attribute, error } end end + # Returns the number of error messages. + # + # p.errors.add(:name, "can't be blank") + # p.errors.size #=> 1 + # p.errors.add(:name, "must be specified") + # p.errors.size #=> 2 def size values.flatten.size end + # Returns an array of error messages, with the attribute name included + # + # p.errors.add(:name, "can't be blank") + # p.errors.add(:name, "must be specified") + # p.errors.to_a #=> ["name can't be blank", "name must be specified"] def to_a full_messages end + # Returns the number of error messages. + # p.errors.add(:name, "can't be blank") + # p.errors.count #=> 1 + # p.errors.add(:name, "must be specified") + # p.errors.count #=> 2 def count to_a.size end + # Returns an xml formatted representation of the Errors hash. + # + # p.errors.add(:name, "can't be blank") + # p.errors.add(:name, "must be specified") + # p.errors.to_xml #=> Produces: + # + # # + # # + # # name can't be blank + # # name must be specified + # # def to_xml(options={}) require 'builder' unless defined? ::Builder options[:root] ||= "errors" @@ -59,6 +165,7 @@ module ActiveModel # for the same attribute and ensure that this error object returns false when asked if empty?. More than one # error can be added to the same +attribute+ in which case an array will be returned on a call to on(attribute). # If no +messsage+ is supplied, :invalid is assumed. + # # If +message+ is a Symbol, it will be translated, using the appropriate scope (see translate_error). def add(attribute, message = nil, options = {}) message ||= :invalid -- cgit v1.2.3 From 87bd8c803b530fedde3d440f991da2726541990c Mon Sep 17 00:00:00 2001 From: Mikel Lindsaar Date: Sun, 17 Jan 2010 15:41:41 +1100 Subject: Update errors docs --- activemodel/lib/active_model/errors.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'activemodel/lib/active_model/errors.rb') diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index a51aa9698d..6ea85a288c 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -9,6 +9,9 @@ module ActiveModel # # class Person # + # # Required dependency for ActiveModel::Errors + # extend ActiveModel::Naming + # # def initialize # @errors = ActiveModel::Errors.new(self) # end @@ -34,13 +37,9 @@ module ActiveModel # [self] # end # - # def ErrorsPerson.model_name - # ActiveModel::Name.new(ErrorsPerson) - # end - # # end # - # The last four methods are required in your object for Errors to be + # The last three methods are required in your object for Errors to be # able to generate error messages correctly and also handle multiple # languages. # -- cgit v1.2.3 From a6831b95d6755b8cab0ab06921aa5aa6ea5a9e95 Mon Sep 17 00:00:00 2001 From: Mikel Lindsaar Date: Sun, 17 Jan 2010 20:22:14 +1100 Subject: Updating ActiveModel::Errors documentation to plug Translations and Validations modules --- activemodel/lib/active_model/errors.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'activemodel/lib/active_model/errors.rb') diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index 6ea85a288c..93935c0473 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -41,7 +41,10 @@ module ActiveModel # # The last three methods are required in your object for Errors to be # able to generate error messages correctly and also handle multiple - # languages. + # languages. Of course, if you extend your object with ActiveModel::Translations + # you will not need to implement the last two. Likewise, using + # ActiveModel::Validations will handle the validation related methods + # for you. # # The above allows you to do: # -- cgit v1.2.3 From a98db7c6ef7384d60a1c7f02d43ee601e2647eea Mon Sep 17 00:00:00 2001 From: Jeremy Kemper Date: Sat, 27 Mar 2010 11:50:11 -0700 Subject: Use Array.wrap uniformly --- activemodel/lib/active_model/errors.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'activemodel/lib/active_model/errors.rb') diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb index d8320275df..a9a54a90e0 100644 --- a/activemodel/lib/active_model/errors.rb +++ b/activemodel/lib/active_model/errors.rb @@ -1,3 +1,4 @@ +require 'active_support/core_ext/array/wrap' require 'active_support/core_ext/string/inflections' require 'active_support/ordered_hash' @@ -206,7 +207,7 @@ module ActiveModel full_messages = [] each do |attribute, messages| - messages = Array(messages) + messages = Array.wrap(messages) next if messages.empty? if attribute == :base -- cgit v1.2.3