class OptimizePlayer::ApiObject
Attributes
context[R]
Public Class Methods
construct_from(context, response)
click to toggle source
# File lib/optimize_player/api_object.rb, line 22 def self.construct_from(context, response) api_object = self.new(context, response) api_object.refresh api_object end
new(context, attrs={})
click to toggle source
# File lib/optimize_player/api_object.rb, line 7 def initialize(context, attrs={}) @context = context @data = attrs @new_data = Set.new end
Public Instance Methods
[](k)
click to toggle source
# File lib/optimize_player/api_object.rb, line 49 def [](k) @data[k] end
[]=(k, v)
click to toggle source
# File lib/optimize_player/api_object.rb, line 53 def []=(k, v) send(:"#{k}=", v) end
add_accessors(keys)
click to toggle source
# File lib/optimize_player/api_object.rb, line 129 def add_accessors(keys) metaclass.instance_eval do keys.each do |k| next if @@permanent_attributes.include?(k.to_sym) k_eq = :"#{k}=" define_method(k) { @data[k] } define_method(k_eq) do |v| if v == "" raise ArgumentError.new( "You cannot set #{k} to an empty string." + "We interpret empty strings as nil in requests." + "You may set #{self}.#{k} = nil to delete the property.") end @data[k] = v @new_data.add(k) end end end end
as_json(*a)
click to toggle source
# File lib/optimize_player/api_object.rb, line 45 def as_json(*a) @data.as_json(*a) end
delete(opts={})
click to toggle source
# File lib/optimize_player/api_object.rb, line 101 def delete(opts={}) response = context.client.send_request("#{context.entity_name}/#{id}", :delete) refresh_from(response) self end
Also aliased as: destroy
inspect()
click to toggle source
# File lib/optimize_player/api_object.rb, line 13 def inspect() id_string = (self.respond_to?(:id) && !self.id.nil?) ? " id=#{self.id}" : "" "#<#{self.class}:0x#{self.object_id.to_s(16)}#{id_string}> JSON: " + JSON.pretty_generate(@data) end
keys()
click to toggle source
# File lib/optimize_player/api_object.rb, line 33 def keys @data.keys end
metaclass()
click to toggle source
# File lib/optimize_player/api_object.rb, line 18 def metaclass class << self; self; end end
method_missing(name, *args)
click to toggle source
Calls superclass method
# File lib/optimize_player/api_object.rb, line 108 def method_missing(name, *args) if name.to_s.end_with?('=') attr = name.to_s[0...-1].to_sym add_accessors([attr]) begin mth = method(name) rescue NameError raise NoMethodError.new("Cannot set #{attr} on this object") end return mth.call(args[0]) else return @data[name.to_s] if @data.has_key?(name.to_s) end super end
refresh()
click to toggle source
# File lib/optimize_player/api_object.rb, line 57 def refresh instance_eval do add_accessors(@data.keys) end @data.each do |k, v| @data[k] = Converter.convert_to_object(context, v) end self end
refresh_from(data)
click to toggle source
# File lib/optimize_player/api_object.rb, line 69 def refresh_from(data) removed = Set.new(@data.keys - data.keys) added = Set.new(data.keys - @data.keys) instance_eval do remove_accessors(removed) add_accessors(added) end removed.each do |k| @data.delete(k) @new_data.delete(k) end data.each do |k, v| @data[k] = Converter.convert_to_object(context, v) @new_data.delete(k) end end
remove_accessors(keys)
click to toggle source
# File lib/optimize_player/api_object.rb, line 150 def remove_accessors(keys) metaclass.instance_eval do keys.each do |k| next if @@permanent_attributes.include?(k.to_sym) k_eq = :"#{k}=" remove_method(k) if method_defined?(k) remove_method(k_eq) if method_defined?(k_eq) end end end
respond_to_missing?(symbol, include_private = false)
click to toggle source
Calls superclass method
# File lib/optimize_player/api_object.rb, line 125 def respond_to_missing?(symbol, include_private = false) @data.has_key?(symbol) || super end
save(opts={})
click to toggle source
# File lib/optimize_player/api_object.rb, line 87 def save(opts={}) attrs = {} @new_data.each do |n| attrs[n] = @data[n] end attrs = attrs.merge(opts) if attrs.any? response = context.client.send_request("#{context.entity_name}/#{id}", :patch, attrs) refresh_from(response) end self end
to_hash()
click to toggle source
# File lib/optimize_player/api_object.rb, line 29 def to_hash @data end
to_json(*a)
click to toggle source
# File lib/optimize_player/api_object.rb, line 41 def to_json(*a) JSON.generate(@data) end
values()
click to toggle source
# File lib/optimize_player/api_object.rb, line 37 def values @data.values end