# File lib/enumerize/attribute.rb, line 5 def initialize(klass, name, options={}) raise ArgumentError, ':in option is required' unless options[:in] extend Multiple if options[:multiple] @klass = klass @name = name.to_sym @values = Array(options[:in]).map { |v| Value.new(self, *v) } @value_hash = Hash[@values.map { |v| [v.value.to_s, v] }] @value_hash.merge! Hash[@values.map { |v| [v.to_s, v] }] if options[:i18n_scope] raise ArgumentError, ':i18n_scope option accepts only String or Array of strings' unless Array(options[:i18n_scope]).all? { |s| s.is_a?(String) } @i18n_scope = options[:i18n_scope] end if options[:default] @default_value = find_default_value(options[:default]) raise ArgumentError, 'invalid default value' unless @default_value end end
# File lib/enumerize/attribute.rb, line 70 def define_methods!(mod) mod.module_eval def #{name} if defined?(super) self.class.enumerized_attributes[:#{name}].find_value(super) elsif respond_to?(:read_attribute) self.class.enumerized_attributes[:#{name}].find_value(read_attribute(:#{name})) else if defined?(@#{name}) self.class.enumerized_attributes[:#{name}].find_value(@#{name}) else @#{name} = nil end end end def #{name}=(new_value) _enumerized_values_for_validation[:#{name}] = new_value.nil? ? nil : new_value.to_s allowed_value_or_nil = self.class.enumerized_attributes[:#{name}].find_value(new_value) allowed_value_or_nil = allowed_value_or_nil.value unless allowed_value_or_nil.nil? if defined?(super) super allowed_value_or_nil elsif respond_to?(:write_attribute, true) write_attribute '#{name}', allowed_value_or_nil else @#{name} = allowed_value_or_nil end end def #{name}_text self.#{name} && self.#{name}.text end def #{name}_value self.#{name} && self.#{name}.value end, __FILE__, __LINE__ + 1 end
# File lib/enumerize/attribute.rb, line 27 def find_default_value(value) if value.respond_to?(:call) value else find_value(value) end end
# File lib/enumerize/attribute.rb, line 35 def find_value(value) @value_hash[value.to_s] unless value.nil? end
# File lib/enumerize/attribute.rb, line 39 def i18n_scopes @i18n_scopes ||= if i18n_scope scopes = Array(i18n_scope) elsif @klass.respond_to?(:model_name) scopes = ["enumerize.#{@klass.model_name.i18n_key}.#{name}"] else [] end end
# File lib/enumerize/attribute.rb, line 49 def options(options = {}) values = if options.empty? @values else raise ArgumentError, 'Options cannot have both :only and :except' if options[:only] && options[:except] only = Array(options[:only]).map(&:to_s) except = Array(options[:except]).map(&:to_s) @values.reject do |value| if options[:only] !only.include?(value) elsif options[:except] except.include?(value) end end end values.map { |v| [v.text, v.to_s] } end
Generated with the Darkfish Rdoc Generator 2.