class SimpleEnum::Accessors::Accessor

Attributes

enum[R]
name[R]
source[R]

Public Class Methods

new(name, enum, source = nil, prefix = nil) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 6
def initialize(name, enum, source = nil, prefix = nil)
  @name = name.to_s
  @enum = enum
  @source = source.to_s.presence || "#{name}#{SimpleEnum.suffix}"
  @prefix = prefix
end

Public Instance Methods

changed?(object) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 31
def changed?(object)
  object.send(:attribute_changed?, source)
end
prefix() click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 13
def prefix
  @cached_prefix ||= @prefix && "#{@prefix == true ? name : @prefix}_" || ""
end
read(object) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 17
def read(object)
  enum.key(read_before_type_cast(object))
end
scope(relation, value) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 41
def scope(relation, value)
  relation.where(source => value)
end
selected?(object, key = nil) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 25
def selected?(object, key = nil)
  current = read_before_type_cast(object)
  return current && current == enum[key] if key
  current
end
to_s() click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 45
def to_s
  name
end
was(object) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 35
def was(object)
  changes = object.send(:changed_attributes)
  key = changes.fetch(source, read_before_type_cast(object))
  enum.key(key) if key
end
write(object, key) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 21
def write(object, key)
  write_after_type_cast(object, enum[key]) && key
end

Private Instance Methods

read_before_type_cast(object) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 51
def read_before_type_cast(object)
  source == name ? object[source] : object.send(source)
end
write_after_type_cast(object, value) click to toggle source
# File lib/simple_enum/accessors/accessor.rb, line 55
def write_after_type_cast(object, value)
  source == name ? object[source] = value : object.send("#{source}=", value)
  value
end