Class: PostcodeAnywhere::ModelBase
- Inherits:
-
Object
- Object
- PostcodeAnywhere::ModelBase
show all
- Includes:
- Memoizable
- Defined in:
- lib/postcode_anywhere/model_base.rb
Instance Attribute Summary collapse
-
#attrs ⇒ Object
(also: #to_h)
readonly
Returns the value of attribute attrs.
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
#attrs ⇒ Object
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?
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
|