Module: StrEnum

Defined in:
lib/str_enum.rb,
lib/str_enum/version.rb

Constant Summary collapse

VERSION =
"0.1.4"

Instance Method Summary collapse

Instance Method Details

#str_enum(column, values, validate: true, scopes: true, accessor_methods: true, prefix: false, suffix: false) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/str_enum.rb', line 5

def str_enum(column, values, validate: true, scopes: true, accessor_methods: true, prefix: false, suffix: false)
  values = values.map(&:to_s)
  validates column, presence: true, inclusion: {in: values} if validate
  values.each do |value|
    prefix = column if prefix == true
    suffix = column if suffix == true
    method_name = [prefix, value, suffix].select { |v| v }.join("_")
    scope method_name, -> { where(column => value) } if scopes && !respond_to?(method_name)
    if accessor_methods && !method_defined?("#{method_name}?")
      define_method "#{method_name}?" do
        read_attribute(column) == value
      end
    end
  end
  after_initialize do
    send("#{column}=", values.first) unless try(column)
  end
  define_singleton_method column.to_s.pluralize do
    values
  end
end