class SimpleEnum::Multiple::Accessors::MultipleAccessor

Public Class Methods

new(name, enum, source = nil, prefix = nil) click to toggle source
Calls superclass method
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 8
def initialize(name, enum, source = nil, prefix = nil)
  super
  @source = source.to_s.presence || "#{@name.singularize}#{SimpleEnum.suffix.pluralize}"
end

Public Instance Methods

fetch_keys(values) click to toggle source
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 47
def fetch_keys(values)
  values.map do |value|
    enum.key(value)
  end
end
fetch_values(keys) click to toggle source
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 53
def fetch_values(keys)
  keys.map do |key|
    enum.value(key)
  end
end
filter_keys(keys) click to toggle source
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 41
def filter_keys(keys)
  keys.select do |key|
    enum.value(key)
  end
end
read(object) click to toggle source
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 13
def read(object)
  CollectionProxy.new(read_before_type_cast(object), self)
end
scope(collection, value) click to toggle source
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 37
def scope(collection, value)
  raise NoMethodError, "scopes for accessor: :multiple are not supported!"
end
selected?(object, key = nil) click to toggle source
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 22
def selected?(object, key = nil)
  current = read_before_type_cast(object)
  current.any? && if key
      current.all? do
        current.include?(enum.value(key))
      end
    else
      true
    end
end
was(object) click to toggle source
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 33
def was(object)
  fetch_keys(object.send(:attribute_was, source).to_a)
end
write(object, keys) click to toggle source
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 17
def write(object, keys)
  keys = filter_keys(Array.wrap(keys))
  write_after_type_cast(object, fetch_values(keys)) && keys
end

Private Instance Methods

read_before_type_cast(object) click to toggle source
Calls superclass method
# File lib/simple_enum/multiple/accessors/multiple_accessor.rb, line 61
def read_before_type_cast(object)
  result = super
  unless result
    result = []
    write_after_type_cast(object, result)
  end
  result
end