Class: PostcodeAnywhere::ModelBase

Inherits:
Object
  • Object
show all
Includes:
Memoizable
Defined in:
lib/postcode_anywhere/model_base.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attrs = {}) ⇒ ModelBase

Returns a new instance of ModelBase.



57
58
59
# File 'lib/postcode_anywhere/model_base.rb', line 57

def initialize(attrs = {})
  @attrs = attrs || {}
end

Instance Attribute Details

#attrsObject (readonly) Also known as: to_h

Returns the value of attribute attrs.



6
7
8
# File 'lib/postcode_anywhere/model_base.rb', line 6

def attrs
  @attrs
end

Class Method Details

.attr_reader(*attrs) ⇒ Object



11
12
13
14
15
16
# File 'lib/postcode_anywhere/model_base.rb', line 11

def attr_reader(*attrs)
  attrs.each do |attr|
    define_attribute_method(attr)
    define_predicate_method(attr)
  end
end

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



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/postcode_anywhere/model_base.rb', line 30

def define_attribute_method(key1, klass = nil, key2 = nil)
  define_method(key1) do ||
    if @attrs[key1].nil? || @attrs[key1].respond_to?(:empty?) && @attrs[key1].empty?
      # NullObject.new
    else
      if klass.nil?
        @attrs[key1]
      else
        attrs = attrs_for_object(key1, key2)
        PostcodeAnywhere.const_get(klass).new(attrs)
      end
    end
  end
  memoize(key1)
end

.define_predicate_method(key1, key2 = key1) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/postcode_anywhere/model_base.rb', line 46

def define_predicate_method(key1, key2 = key1)
  define_method(:"#{key1}?") do ||
    !@attrs[key2].nil? &&
    @attrs[key2] != false &&
    !(@attrs[key2].respond_to?(:empty?) &&
    @attrs[key2].empty?)
  end
  memoize(:"#{key1}?")
end

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



25
26
27
28
# File 'lib/postcode_anywhere/model_base.rb', line 25

def object_attr_reader(klass, key1, key2 = nil)
  define_attribute_method(key1, klass, key2)
  define_predicate_method(key1)
end

.predicate_attr_reader(*attrs) ⇒ Object



18
19
20
21
22
23
# File 'lib/postcode_anywhere/model_base.rb', line 18

def predicate_attr_reader(*attrs)
  attrs.each do |attr|
    define_predicate_method(attr)
    deprecate_attribute_method(attr)
  end
end