class CoinbaseCommerce::APIResources::Base::APIObject
Base
APIObject
class Used to work and display with all the data that Coinbase Commerce API returns
Public Class Methods
create_from(values, client = nil)
click to toggle source
Object initialize/update section
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 126 def self.create_from(values, client = nil) values = Util.symbolize_names(values) new(values[:id], client).send(:initialize_from, values) end
new(id = nil, client = nil)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 10 def initialize(id = nil, client = nil) @data = {} @data[:id] = id if id @client = client @unsaved_values = Set.new @transient_values = Set.new end
Public Instance Methods
[](k)
click to toggle source
Base
object options section
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 19 def [](k) @data[k.to_sym] end
[]=(k, v)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 23 def []=(k, v) send(:"#{k}=", v) end
each(&blk)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 35 def each(&blk) @data.each(&blk) end
initialize_from(values, partial = false)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 131 def initialize_from(values, partial = false) removed = partial ? Set.new : Set.new(@data.keys - values.keys) added = Set.new(values.keys - @data.keys) remove_accessors(removed) add_accessors(added, values) removed.each do |k| @data.delete(k) @transient_values.add(k) @unsaved_values.delete(k) end update_attributes(values) values.each_key do |k| @transient_values.delete(k) @unsaved_values.delete(k) end self end
inspect()
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 58 def inspect item_id = respond_to?(:id) && !id.nil? ? "id=#{id}" : "No ID" "#{self.class}: #{item_id}> Serialized: " + JSON.pretty_generate(@data) end
keys()
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 27 def keys @data.keys end
method_missing(name, *args)
click to toggle source
Calls superclass method
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 67 def method_missing(name, *args) if name.to_s.end_with?("=") attr = name.to_s[0...-1].to_sym val = args.first add_accessors([attr], attr => val) begin mth = method(name) rescue NameError raise NoMethodError, "Cannot set #{attr} on this object." end return mth.call(args[0]) elsif @data.key?(name) return @data[name] end begin super rescue NoMethodError => e raise unless @transient_values.include?(name) raise NoMethodError, e.message + " Available attributes: #{@data.keys.join(', ')}" end end
respond_to_missing?(symbol, include_private = false)
click to toggle source
Calls superclass method
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 63 def respond_to_missing?(symbol, include_private = false) @data && @data.key?(symbol) || super end
serialize_params(options = {})
click to toggle source
Object serialize section
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 95 def serialize_params(options = {}) update_hash = {} @data.each do |k, v| if options[:push] || @unsaved_values.include?(k) || v.is_a?(APIObject) push = options[:push] || @unsaved_values.include?(k) update_hash[k.to_sym] = serialize_params_value(@data[k], push) end end update_hash.reject! {|_, v| v.nil? || v.empty?} update_hash end
serialize_params_value(value, push)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 109 def serialize_params_value(value, push) if value.nil? "" elsif value.is_a?(Array) value.map {|v| serialize_params_value(v, push)} elsif value.is_a?(Hash) Util.convert_to_api_object(value, @opts).serialize_params elsif value.is_a?(APIObject) value.serialize_params(push: push) else value end end
to_hash()
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 43 def to_hash @data.each_with_object({}) do |(key, value), output| case value when Array output[key] = value.map {|v| v.respond_to?(:to_hash) ? v.to_hash : v} else output[key] = value.respond_to?(:to_hash) ? value.to_hash : value end end end
to_json(*_a)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 54 def to_json(*_a) JSON.generate(@data) end
to_s(*_args)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 39 def to_s(*_args) JSON.pretty_generate(to_hash) end
update_attributes(values)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 153 def update_attributes(values) values.each do |k, v| add_accessors([k], values) unless metaclass.method_defined?(k.to_sym) @data[k] = Util.convert_to_api_object(v, @client) @unsaved_values.add(k) end end
values()
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 31 def values @data.values end
Protected Instance Methods
add_accessors(keys, values)
click to toggle source
Calls superclass method
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 181 def add_accessors(keys, values) metaclass.instance_eval do keys.each do |k| if k == :method define_method(k) {|*args| args.empty? ? @data[k] : super(*args)} else define_method(k) {@data[k]} end define_method(:"#{k}=") do |v| if v != "" @data[k] = Util.convert_to_api_object(v, @opts) @unsaved_values.add(k) end end if [FalseClass, TrueClass].include?(values[k].class) define_method(:"#{k}?") {@data[k]} end end end end
metaclass()
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 164 def metaclass class << self self end end
remove_accessors(keys)
click to toggle source
# File lib/coinbase_commerce/api_resources/base/api_object.rb, line 170 def remove_accessors(keys) metaclass.instance_eval do keys.each do |k| # Remove methods for the accessor's reader and writer. [k, :"#{k}=", :"#{k}?"].each do |method_name| remove_method(method_name) if method_defined?(method_name) end end end end