21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/simple_flaggable_column.rb', line 21
def flag_column(name, symbols_flags, options = {})
options = {
throw_on_missing: true
}.merge(options)
flags_symbols = symbols_flags.invert
define_singleton_method :"#{name}_flags" do |*symbols|
if symbols.empty?
symbols_flags
else
SimpleFlaggableColumn.symbols_to_flags(
symbols,
symbols_flags,
options[:throw_on_missing]
)
end
end
define_singleton_method :"flags_#{name}" do
flags_symbols
end
define_method "#{name}=" do |symbols|
if symbols.nil?
write_attribute name, 0
elsif symbols.kind_of? Array
write_attribute name, SimpleFlaggableColumn.symbols_to_flags(
symbols,
symbols_flags,
options[:throw_on_missing]
)
else
write_attribute name, symbols
end
end
define_method name do
SimpleFlaggableColumn.flags_to_symbols(read_attribute(name), symbols_flags)
end
end
|