motion-prime/models/errors.rb in motion-prime-0.2.1 vs motion-prime/models/errors.rb in motion-prime-0.3.0

- old
+ new

@@ -1,54 +1,63 @@ module MotionPrime class Errors - attr_accessor :keys + attr_accessor :_unique_keys def initialize(model) - @keys = [] + @_unique_keys = [] + @model = model model.class.attributes.map(&:to_sym).each do |key| initialize_for_key key end end + def unique_key(key) + [key, @model.object_id].join('_').to_sym + end + def initialize_for_key(key) - return if @keys.include?(key.to_sym) - @keys << key.to_sym unless @keys.include?(key.to_sym) - unless instance_variable_get("@#{key}") - instance_variable_set("@#{key}", []) - end - self.class.send :attr_accessor, key.to_sym + unique_key = unique_key(key) + + return if @_unique_keys.include?(unique_key) + @_unique_keys << unique_key + instance_variable_set("@#{unique_key}", []) + self.class.send :attr_accessor, unique_key end def get(key) initialize_for_key(key) - send(:"#{key.to_sym}") + send(unique_key(key)) end def set(key, errors) initialize_for_key(key) - send :"#{key.to_sym}=", Array.wrap(errors) + send :"#{unique_key(key)}=", Array.wrap(errors) end def add(key, error) - get(key) << error + send(unique_key(key)) << error end def [](key) get(key) end def []=(key, errors) set(key, errors) end + def reset_for(key) + send :"#{unique_key(key)}=", [] + end + def reset - @keys.each do |key| - set(key, []) + @_unique_keys.each do |unique_key| + send :"#{unique_key}=", [] end end def messages - @keys.map{ |k| get(k)}.compact.flatten + @_unique_keys.map{ |uniq_k| send(uniq_k) }.compact.flatten end def blank? messages.blank? end \ No newline at end of file