class PostcodeAnywhere::ModelBase
Attributes
attrs[R]
to_h[R]
to_hash[R]
Public Class Methods
attr_reader(*attrs)
click to toggle source
# 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)
click to toggle source
# 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)
click to toggle source
# 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
new(attrs = {})
click to toggle source
# File lib/postcode_anywhere/model_base.rb, line 57 def initialize(attrs = {}) @attrs = attrs || {} end
object_attr_reader(klass, key1, key2 = nil)
click to toggle source
# 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)
click to toggle source
# 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
Private Instance Methods
attrs_for_object(key1, key2 = nil)
click to toggle source
# File lib/postcode_anywhere/model_base.rb, line 63 def attrs_for_object(key1, key2 = nil) if key2.nil? @attrs[key1] else attrs = @attrs.dup attrs.delete(key1).merge(key2 => attrs) end end