Sha256: eb2970caacf9042f0b229556da4939bb506649c110a6c3059a76b9ee5ad6e020
Contents?: true
Size: 1.34 KB
Versions: 3
Compression:
Stored size: 1.34 KB
Contents
module ArEnums module EnumDefinition def self.included(base) base.send :extend, ClassMethods end module ClassMethods include ArEnums::OptionsHelper def enum field_name, *config, &block field = EnumField.new field_name add_option config, field: field, active_record: self enums = Factory.make_enums *config, &block define_enums_getter field, enums define_enum_getter_and_setter field, enums end private def asume_external_style field lambda { |options| external_class(field, options).all } end def external_class field, options = {} compute_type options.delete(:class_name) || field.name.camelize end def define_enums_getter field, enums meta_def(field.enums_getter) { enums } end def define_enum_getter_and_setter field, enums define_method field.name do enums.detect { |enum| enum.id == read_attribute(field.foreign_key) } end define_method "#{field.name}=" do |value| write_attribute field.foreign_key, enums.detect { |enum| enum == value }.try(:id) end end end end end ActiveRecord::Base.send :include, ArEnums::EnumDefinition
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
ar-enums-2.0.2 | lib/ar_enums/enum_definition.rb |
ar-enums-2.0.1 | lib/ar_enums/enum_definition.rb |
ar-enums-2.0.0 | lib/ar_enums/enum_definition.rb |