Module: AttributeBoolean::ClassMethods

Defined in:
lib/attribute_boolean.rb

Instance Method Summary collapse

Instance Method Details

#attr_boolean(*args) ⇒ Object



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