lib/simple_enum.rb in simple_enum-1.6.8 vs lib/simple_enum.rb in simple_enum-1.6.9
- old
+ new
@@ -180,20 +180,26 @@
values_inverted[id]
end
# generate setter
define_method("#{enum_cd}=") do |new_value|
- new_value = new_value.to_s if options[:strings] && new_value
- real = new_value.blank? ? nil : values[EnumHash.symbolize(new_value)]
- real = new_value if real.nil? && values_inverted[new_value].present?
- raise(ArgumentError, "Invalid enumeration value: #{new_value}") if (options[:whiny] and real.nil? and !new_value.blank?)
+ return send("#{options[:column]}=", nil) if new_value.blank?
+
+ new_value = new_value.to_s if options[:strings]
+ real = nil
+ if values.contains?(new_value)
+ real = values[EnumHash.symbolize(new_value)]
+ real = new_value if real.nil? && values_inverted[new_value].present?
+ end
+
+ raise ArgumentError, "Invalid enumeration value: #{new_value}" if options[:whiny] && !real
send("#{options[:column]}=", real)
end
# generate checker
define_method("#{enum_cd}?") do |*args|
current = send(enum_cd)
- return current == EnumHash.symbolize(args.first) if args.length > 0
+ return current.to_s == args.first.to_s if args.length > 0
!!current
end
# support dirty attributes by delegating to column, currently opt-in