Method: ACTV::Base.define_attribute_method

Defined in:
lib/actv/base.rb

.define_attribute_method(key1, klass = nil, key2 = nil) ⇒ Object



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/actv/base.rb', line 52

def self.define_attribute_method(key1, klass=nil, key2=nil)
  define_method(key1) do
    memoize(key1) do
      if klass.nil?
        @attrs[key1]
      else
        if @attrs[key1]
          if key2.nil?
            ACTV.const_get(klass).new(@attrs[key1])
          else
            attrs = @attrs.dup
            value = attrs.delete(key1)
            ACTV.const_get(klass).new(value.update(key2 => attrs))
          end
        else
          ACTV::NullObject.instance
        end
      end
    end
  end
end