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