Class: SimpleEnum::Multiple::Accessors::MultipleAccessor
- Inherits:
-
Accessors::Accessor
- Object
- Accessors::Accessor
- SimpleEnum::Multiple::Accessors::MultipleAccessor
show all
- Defined in:
- lib/simple_enum/multiple/accessors/multiple_accessor.rb
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
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
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
|