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
52
53
54
55
56
57
58
|
# File 'lib/attribute_boolean.rb', line 6
def attr_boolean(*args)
options =
if args.last.kind_of?(Hash)
args.pop
else
{}
end
default_value =
if options.has_key?(:default)
!! options[:default]
elsif options.has_key?("default")
!! options["default"]
else
false
end
false_values =
if options.has_key?(:false_values)
options[:false_values]
elsif options.has_key?("false_values")
options["false_values"]
end
args.each do |name|
ivar = "@#{ name }"
define_method("#{ name }?") do
value = instance_variable_get(ivar)
if value == nil
default_value
else
!! value
end
end
alias_method "#{ name }", "#{ name }?"
define_method("#{ name }=") do |value|
is_true =
if value == nil
default_value
elsif false_values
! false_values.include?(value.to_s)
else
! AttributeBoolean.false_values.include?(value.to_s)
end
instance_variable_set(ivar, is_true)
end
end
end
|