class ACTV::Base

Attributes

attrs[R]
body[R]

Public Class Methods

attr_reader(*attrs) click to toggle source

Define methods that retrieve the value from an initialized instance variable Hash, using the attribute as a key

@overload self. attr_reader(attr)

@param attr [Symbol]

@overload self. attr_reader(attrs)

@param attrs [Array<Symbol>]
# File lib/actv/base.rb, line 15
def self.attr_reader(*attrs)
  attrs.each do |attribute|
    define_attribute_method(attribute)
    define_predicate_method(attribute)
  end
end
define_attribute_method(key1, klass=nil, key2=nil) click to toggle source
# File lib/actv/base.rb, line 49
def self.define_attribute_method(key1, klass=nil, key2=nil)
  define_method(key1) do
    memoize(key1) do
      if klass.nil?
        @attrs[key1]
      else
        if @attrs[key1]
          if key2.nil?
            ACTV.const_get(klass).new(@attrs[key1])
          else
            attrs = @attrs.dup
            value = attrs.delete(key1)
            ACTV.const_get(klass).new(value.update(key2 => attrs))
          end
        else
          ACTV::NullObject.instance
        end
      end
    end
  end
end
define_predicate_method(key1, key2=key1) click to toggle source
# File lib/actv/base.rb, line 71
def self.define_predicate_method(key1, key2=key1)
  define_method(:"#{key1}?") do
    !!@attrs[key2]
  end
end
define_uri_method(key1, key2) click to toggle source
# File lib/actv/base.rb, line 41
def self.define_uri_method(key1, key2)
  define_method(key1) do
    memoize(key1) do
      ::URI.parse(@attrs[key2]) if @attrs[key2]
    end
  end
end
from_response(response={}) click to toggle source
# File lib/actv/base.rb, line 77
def self.from_response response={}
  new response[:body]
end
new(attrs={}) click to toggle source
# File lib/actv/base.rb, line 81
def initialize attrs={}
  @attrs = attrs || {}
end
object_attr_reader(klass, key1, key2=nil) click to toggle source
# File lib/actv/base.rb, line 22
def self.object_attr_reader(klass, key1, key2=nil)
  define_attribute_method(key1, kass, key2)
  define_predicate_method(key1)
end
uri_attr_reader(*attrs) click to toggle source
# File lib/actv/base.rb, line 27
def self.uri_attr_reader(*attrs)
  attrs.each do |uri_key|
    array = uri_key.to_s.split("_")
    index = array.index("uri")
    array[index] = "url"
    url_key = array.join("_").to_sym
    define_uri_method(uri_key, url_key)
    define_predicate_method(uri_key, url_key)

    alias_method(url_key, uri_key)
    alias_method("#{url_key}?", "#{uri_key}?")
  end
end

Public Instance Methods

[](method) click to toggle source
# File lib/actv/base.rb, line 93
def [](method)
  send(method)
rescue NoMethodError
  nil
end
delete(key) click to toggle source
# File lib/actv/base.rb, line 85
def delete key
  attrs.delete key
end
memoize(key, &block) click to toggle source
# File lib/actv/base.rb, line 99
def memoize(key, &block)
  ivar = :"@#{key}"
  return instance_variable_get(ivar) if instance_variable_defined?(ivar)
  result = block.call
  instance_variable_set(ivar, result)
end
method_missing(meth, *args, &block) click to toggle source
Calls superclass method
# File lib/actv/base.rb, line 106
def method_missing(meth, *args, &block)
  if @attrs && @attrs.has_key?(meth)
    @attrs[meth]
  elsif meth.to_s.include?('=') and !args.empty?
    @attrs[meth[0..-2].to_sym] = args.first
  else
    super
  end
end
respond_to?(meth, *args) click to toggle source
Calls superclass method
# File lib/actv/base.rb, line 116
def respond_to?(meth, *args)
  if @attrs && @attrs.has_key?(meth)
    true
  else
    super
  end
end
to_hash() click to toggle source

Creation of object hash when sending request to soap

# File lib/actv/base.rb, line 125
def to_hash
  hash = {}
  hash["attrs"] = @attrs

  self.instance_variables.keep_if { |key| key != :@attrs }.each do |var|
    val = self.instance_variable_get(var)
    hash["attrs"][var.to_s.delete("@").to_sym] = val.to_hash if val.is_a? ACTV::Base
  end

  hash["attrs"]
end
update(key) click to toggle source
# File lib/actv/base.rb, line 89
def update key
  attrs.update key
end

Protected Instance Methods

attr_equal(attr, other) click to toggle source

@param attr [Symbol] @param other [ACTV::Base] @return [Boolean]

# File lib/actv/base.rb, line 142
def attr_equal(attr, other)
  self.class == other.class && !other.send(attr).nil? && send(attr) == other.send(attr)
end
attrs_equal(other) click to toggle source

@param other [ACTV::Base] @return [Boolean]

# File lib/actv/base.rb, line 148
def attrs_equal(other)
  self.class == other.class && !other.attrs.empty? && attrs == other.attrs
end