module PromisePay::Lib::DynamicAccessors

Public Instance Methods

accessor_defined?(attribute) click to toggle source
# File lib/promise_pay/lib/dynamic_accessors.rb, line 23
def accessor_defined?(attribute)
  respond_to?(attribute) && respond_to?("#{attribute}=")
end
assign_instance_variables(result) click to toggle source
# File lib/promise_pay/lib/dynamic_accessors.rb, line 4
def assign_instance_variables(result)
  return if result.empty?

  result.each do |attribute, value|
    if value.is_a?(Hash)
      value.each { |att, val| initialize_property(att, val) }
    else
      initialize_property(attribute, value)
    end
  end
  self
end
define_accessor(attribute, value, object) click to toggle source
# File lib/promise_pay/lib/dynamic_accessors.rb, line 32
def define_accessor(attribute, value, object)
  klass = object.class
  if attribute.to_s.end_with? "_at"
    define_date_based_accessors(attribute, value, klass)
  else
    define_standard_accessors(attribute, value, klass)
  end
end
initialize_property(attribute, value) click to toggle source
# File lib/promise_pay/lib/dynamic_accessors.rb, line 17
def initialize_property(attribute, value)
  attribute = attribute.gsub(/s$/, '_id') if ["buyers","sellers"].include? attribute
  define_accessor(attribute, value, self) unless accessor_defined?(attribute)
  set_property(attribute, value)
end
set_property(attribute, value) click to toggle source
# File lib/promise_pay/lib/dynamic_accessors.rb, line 27
def set_property(attribute, value)
  setter_method = "#{attribute}="
  self.send(setter_method, value)
end

Private Instance Methods

define_date_based_accessors(attribute, value, klass) click to toggle source
# File lib/promise_pay/lib/dynamic_accessors.rb, line 43
def define_date_based_accessors(attribute, value, klass)
  klass.class_eval %Q"
    def #{attribute}=(value)
      @#{attribute} = value.nil? ? nil : Time.parse(value).to_i
    end

    def #{attribute}
      @#{attribute}.nil? ? nil : Time.at(@#{attribute})
    end
  "
end
define_standard_accessors(attribute, value, klass) click to toggle source
# File lib/promise_pay/lib/dynamic_accessors.rb, line 55
def define_standard_accessors(attribute, value, klass)
  klass.class_eval %Q"
    def #{attribute}=(value)
      @#{attribute} = value
    end

    def #{attribute}
      @#{attribute}
    end
  "
end