lib/simple_enum.rb in simple_enum-1.0.0 vs lib/simple_enum.rb in simple_enum-1.0.1
- old
+ new
@@ -10,16 +10,18 @@
require 'simple_enum/array_support'
require 'simple_enum/enum_hash'
require 'simple_enum/object_support'
require 'simple_enum/validation'
-require 'simple_enum/version'
# Base module which gets included in <tt>ActiveRecord::Base</tt>. See documentation
# of +SimpleEnum::ClassMethods+ for more details.
module SimpleEnum
+ # +SimpleEnum+ version string.
+ VERSION = "1.0.1".freeze
+
class << self
# Provides configurability to SimpleEnum, allows to override some defaults which are
# defined for all uses of +as_enum+. Most options from +as_enum+ are available, such as:
# * <tt>:prefix</tt> - Define a prefix, which is prefixed to the shortcut methods (e.g. <tt><symbol>!</tt> and
@@ -163,29 +165,31 @@
values_inverted[id]
end
# generate setter
define_method("#{enum_cd}=") do |new_value|
- v = new_value.nil? ? nil : values[new_value.to_sym]
- raise(ArgumentError, "Invalid enumeration value: #{new_value}") if (options[:whiny] and v.nil? and !new_value.nil?)
+ v = new_value.blank? ? nil : values[new_value.to_sym]
+ raise(ArgumentError, "Invalid enumeration value: #{new_value}") if (options[:whiny] and v.nil? and !new_value.blank?)
write_attribute options[:column], v
end
# allow access to defined values hash, e.g. in a select helper or finder method.
self_name = enum_cd.to_s.pluralize
self_name.upcase! if options[:upcase]
- class_variable_set :"@@SE_#{self_name.upcase}", values
+
class_eval(<<-EOM, __FILE__, __LINE__ + 1)
+ @#{self_name} = values
+
def self.#{self_name}(*args)
- return @@SE_#{self_name.upcase} if args.first.nil?
- return @@SE_#{self_name.upcase}[args.first] if args.size == 1
- args.inject([]) { |ary, sym| ary << @@SE_#{self_name.upcase}[sym]; ary }
+ return @#{self_name} if args.first.nil?
+ return @#{self_name}[args.first] if args.size == 1
+ args.inject([]) { |ary, sym| ary << @#{self_name}[sym]; ary }
end
def self.#{self_name}_for_select(&block)
- self.#{self_name}.map do |k,v|
- [block_given? ? yield(k,v) : self.human_enum_name(#{self_name.inspect}, k), v]
- end.sort { |a,b| a[1] <=> b[1] }
+ self.#{self_name}.map do |k,v|
+ [block_given? ? yield(k,v) : self.human_enum_name(#{self_name.inspect}, k), k]
+ end.sort
end
EOM
# only create if :slim is not defined
if options[:slim] != true
\ No newline at end of file