class Taxjar::Base

Attributes

attrs[R]
to_h[R]
to_hash[R]

Public Class Methods

attr_reader(*attrs) click to toggle source
# File lib/taxjar/base.rb, line 44
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/taxjar/base.rb, line 56
def define_attribute_method(key1, klass = nil, key2 = nil)
  define_method(key1) do
    if attr_falsey_or_empty?(key1)
    else
      klass.nil? ? @attrs[key1] : klass.new(attrs_for_object(key1, key2))
    end
  end
  memoize(key1)
end
define_predicate_method(key1, key2 = key1) click to toggle source
# File lib/taxjar/base.rb, line 66
def define_predicate_method(key1, key2 = key1)
  define_method(:"#{key1}?") do
    !attr_falsey_or_empty?(key2)
  end
  memoize(:"#{key1}?")
end
new(attributes = {}) click to toggle source
# File lib/taxjar/base.rb, line 74
def initialize(attributes = {})
  @attrs = set_attributes(attributes)
end
object_attr_reader(klass, key1, key2 = nil) click to toggle source
# File lib/taxjar/base.rb, line 51
def object_attr_reader(klass, key1, key2 = nil)
  define_attribute_method(key1, klass, key2)
  define_predicate_method(key1)
end

Public Instance Methods

[](method) click to toggle source
# File lib/taxjar/base.rb, line 78
def [](method)
  warn "#{Kernel.caller.first}: [DEPRECATION] #[#{method.inspect}] is deprecated. Use ##{method} to fetch the value."
  send(method.to_sym)
rescue NoMethodError
  nil
end
map_collection(klass, key) click to toggle source
# File lib/taxjar/base.rb, line 36
def map_collection(klass, key)
  Array(@attrs[key.to_sym]).map do |entity|
    klass.new(entity)
  end
end

Private Instance Methods

attr_falsey_or_empty?(key) click to toggle source
# File lib/taxjar/base.rb, line 87
def attr_falsey_or_empty?(key)
  !@attrs[key] || @attrs[key].respond_to?(:empty?) && @attrs[key].empty?
end
attrs_for_object(key1, key2 = nil) click to toggle source
# File lib/taxjar/base.rb, line 91
def attrs_for_object(key1, key2 = nil)
  if key2.nil?
    @attrs[key1]
  else
    attrs = @attrs.dup
    attrs.delete(key1).merge(key2 => attrs)
  end
end