module Inum::ActiveRecordMixin
Mixin module to ActiveRecord.
@example
class Fruit < ActiveRecord::Base bind_enum :type, FruitType end
Public Instance Methods
bind_inum(column, enum_class, options = {})
click to toggle source
Define compare method in class.
@param column [Symbol] Binding column name. @param enum_class [Inum::Base] Binding Enum. @param options [Hash] option @option options [Symbol] :prefix Prefix. (default: column)
# File lib/inum/active_record_mixin.rb, line 16 def bind_inum(column, enum_class, options = {}) options = { prefix: column }.merge(options) options[:prefix] = options[:prefix] ? "#{options[:prefix]}_" : '' self.class_eval do define_method(column) do enum_class.parse(read_attribute(column)) end define_method("#{column}=") do |value| enum_class.parse(value).tap do |enum| if enum write_attribute(column, enum.to_i) else write_attribute(column, nil) end end end enum_class.each do |enum| define_method("#{options[:prefix]}#{enum.to_s.underscore}?") do enum.eql?(read_attribute(column)) end end end end