Class: SimpleEnum::Multiple::Accessors::MultipleAccessor

Inherits:
Accessors::Accessor
  • Object
show all
Defined in:
lib/simple_enum/multiple/accessors/multiple_accessor.rb

Direct Known Subclasses

BitwiseAccessor, JoinTableAccessor

Instance Method Summary collapse

Constructor Details

#initialize(name, enum, source = nil, prefix = nil) ⇒ MultipleAccessor

Returns a new instance of MultipleAccessor.



8
9
10
11
# 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

Instance Method Details

#fetch_keys(values) ⇒ Object



47
48
49
50
51
# 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) ⇒ Object



53
54
55
56
57
# 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) ⇒ Object



41
42
43
44
45
# 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) ⇒ Object



13
14
15
# 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) ⇒ Object

Raises:

  • (NoMethodError)


37
38
39
# 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) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
25
26
27
28
29
30
31
# 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) ⇒ Object



33
34
35
# 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) ⇒ Object



17
18
19
20
# 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