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
destroy(opts={})
Alias for: delete
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