lib/simple_model/attributes.rb in simple_model-1.2.21 vs lib/simple_model/attributes.rb in simple_model-1.2.22
- old
+ new
@@ -38,13 +38,12 @@
def set_attribute(attr,val)
options = self.class.defined_attributes[attr] || {}
if allow_attribute_action?(val,options)
val = fetch_default_value(options[:default]) if (!options[:allow_blank] && options.key?(:default) && val.blank?)
- val = options[:on_set].call(self,val) unless (!options.key?(:on_set) || (val.blank? && !options[:allow_blank]) )
- will_change = "#{attr}_will_change!".to_sym
- self.send(will_change) if (initialized?(attr) && val != self.attributes[attr])
+ val = options[:on_set].call(self,val) if options[:on_set] #(!options.key?(:on_set) || (val.blank? && !options[:allow_blank]) )
+ self.send("#{attr}_will_change!") if (initialized?(attr) && val != self.attributes[attr])
self.attributes[attr] = val
options[:after_set].call(self,val) if options[:after_set]
end
end
@@ -96,35 +95,39 @@
end
# Only set default if there is a default value, initializing is allow and
# new attributes do not have a value to set and
def allow_init_default?(d,k,v)
- (v[:default] && (v[:initialize] != false) && (!d.key?(k) && !attributes_have_alias?(d,k)))
+ (v[:default] && v[:initialize] && (!d.key?(k) && !attributes_have_alias?(d,k)))
end
def attributes_have_alias?(attrs,attr)
!(self.class.alias_attributes.select{ |a, m| (m == attr && attrs.key?(a.to_sym)) }).empty?
end
def allow_attribute_action?(val,options)
- return true if (options[:if].blank? && options[:unless].blank?)
+ return true unless (options[:if] || options[:unless])
b = true
- if options[:if].is_a?(Symbol)
- if options[:if] == :blank
- b = (b && val.blank?)
+ opt = options[:if]
+ if opt.is_a?(Symbol)
+ if opt == :blank
+ b = val.blank?
else
- b = (b && send(options[:if]))
+ b = send(opt)
end
+ elsif opt.is_a?(Proc)
+ b = opt.call(self,val)
end
- b = (b && options[:if].call(self,val)) if options[:if].is_a?(Proc)
- if options[:unless].is_a?(Symbol)
- if options[:unless] == :blank
- b = (b && !val.blank?)
+ opt = options[:unless]
+ if opt.is_a?(Symbol)
+ if opt == :blank
+ b = !val.blank?
else
- b = (b && !send(options[:unless]))
+ b = !send(opt)
end
+ elsif opt.is_a?(Proc)
+ b = !opt.call(self,val)
end
- b = (b && !options[:unless].call(self,val)) if options[:unless].is_a?(Proc)
b
end
# Rails 3.2 + required when searching for attributes in from inherited classes/models
def attribute(name)