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