forked from sinetris/custom_fields
/
boolean.rb
51 lines (39 loc) · 1.15 KB
/
boolean.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
module CustomFields
module Types
module Boolean
extend ActiveSupport::Concern
#
# TODO
#
module TargetMethods
def apply_boolean_custom_field(name, accessors_module)
# puts "...define singleton methods :#{name} & :#{name}=" # DEBUG
# # getter
# define_singleton_method(name) { get_boolean(name) }
#
# # setter
# define_singleton_method(:"#{name}=") { |value| set_boolean(name, value) }
accessors_module.class_eval <<-EOV
def #{name}
get_boolean('#{name}')
end
def #{name}=(value)
set_boolean('#{name}', value)
end
EOV
end
protected
def get_boolean(name)
self.boolean_serializer.deserialize(self.read_attribute(name.to_s))
end
def set_boolean(name, value)
self.write_attribute(name.to_s, self.boolean_serializer.serialize(value))
end
#:nodoc:
def boolean_serializer
@boolean_serializer ||= Mongoid::Fields::Serializable::Boolean.new
end
end
end
end
end