class Wordpress::Object::Base

Attributes

client[R]
request[R]

Public Class Methods

new(client = Wordpress.client, response = {}) click to toggle source
# File lib/wordpress/object/base.rb, line 25
def initialize(client = Wordpress.client, response = {})
  @client = client
  assign(response)
end
options() click to toggle source
# File lib/wordpress/object/base.rb, line 11
def options
  @options ||= {}
end

Private Class Methods

attr_parameter(*args) click to toggle source
# File lib/wordpress/object/base.rb, line 17
def attr_parameter(*args)
  opt = args[-1].is_a?(Hash) ? args.pop : {}
  args.each do |arg|
    options[arg.to_s] = opt.dup
  end
end

Public Instance Methods

[](name) click to toggle source
# File lib/wordpress/object/base.rb, line 35
def [](name)
  name = name.to_s
  get_object(name) if available_object?(name)
end
assign(response) click to toggle source
# File lib/wordpress/object/base.rb, line 30
def assign(response)
  @response = Hash[response.map{ |k, v| [k.to_s.downcase, v] }]
  self
end
respond_to_missing?(method_name, include_private = false) click to toggle source
Calls superclass method
# File lib/wordpress/object/base.rb, line 44
def respond_to_missing?(method_name, include_private = false)
  name = method_name.to_s
  is_setter = name.to_s[-1] == '=' ? !!name.pop : false
  (is_setter && available_object?(name[0..-1])) || available_object?(name) || super
end
to_hash() click to toggle source
# File lib/wordpress/object/base.rb, line 40
def to_hash
  @response.dup
end

Private Instance Methods

available_object?(name) click to toggle source
# File lib/wordpress/object/base.rb, line 63
def available_object?(name)
  name = name.to_s
  options.include?(name)
end
get_object(name) click to toggle source
# File lib/wordpress/object/base.rb, line 68
def get_object(name)
  name = name.to_s
  v = @response[name]
  if options && options[name] && (as = options[name][:as])
    if as.is_a?(Proc)
      as.call(client, v)
    elsif as.is_a?(String)
      Wordpress::Object.const_get(as).new(client, v)
    else
      as.new(v)
    end
  elsif v.is_a?(Hash)
    Wordpress::OpenStruct.new(v)
  else
    v
  end
end
method_missing(method_name, *arguments, &block) click to toggle source
Calls superclass method
# File lib/wordpress/object/base.rb, line 52
def method_missing(method_name, *arguments, &block)
  name = method_name.to_s
  is_setter = name.to_s[-1] == '='
  if is_setter
    return set_object(name[0...-1], *arguments) if available_object?(name[0...-1])
  else
    return get_object(name) if available_object?(name)
  end
  super(method_name, *arguments, &block)
end
options() click to toggle source
# File lib/wordpress/object/base.rb, line 90
def options
  self.class.options.freeze
end
set_object(name, v) click to toggle source
# File lib/wordpress/object/base.rb, line 86
def set_object(name, v)
  @response[name] = v
end