Sha256: acdfacc463aaaa884c3a099df0f8860976645537c66a88959f6b528f85b826fd
Contents?: true
Size: 1.72 KB
Versions: 3
Compression:
Stored size: 1.72 KB
Contents
module ActiveRecord module Enumerations class Factory include OptionsHelper def self.make_enums *config, &block new.make_enums *config, &block end def make_enums *config, &block values, options = extract_values_and_options config options[:enum_class].label_method = options.delete(:label) || :desc create_enums(values, options, &block).tap do |enums| define_question_methods options[:enum_class], enums define_extra_columns_methods options[:enum_class], enums end end private def create_enums values, options, &block enums = if block_given? block_style options, &block elsif values.any? array_of_values_or_hashes_style values, options elsif options[:on_style_not_matched] options[:on_style_not_matched].call options end end def block_style options, &block EnumBlock.new(options).instance_eval(&block) end def array_of_values_or_hashes_style values, options values.map { |value| options[:enum_class].create_from(value, values, options) } end def define_question_methods enum_class, enums enums.each do |e| enum_class.class_eval %Q{ def #{e.name}? self == :#{e.name} end } end end def define_extra_columns_methods enum_class, enums extra_columns_names = enums.map(&:extra_columns).map(&:keys).flatten.uniq extra_columns_names.each do |ecn| enum_class.class_eval %Q{ def #{ecn} extra_columns[:#{ecn}] end } end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ar-enums-0.3.2 | lib/factory.rb |
ar-enums-0.3.1 | lib/factory.rb |
ar-enums-0.3.0 | lib/factory.rb |