class Supai::Resource

Public Class Methods

attr_accessor(*attrs) click to toggle source
Calls superclass method
# File lib/supai/resource.rb, line 10
def self.attr_accessor(*attrs)
  @json_attrs ||= []
  @json_attrs += attrs
  super
end
attr_collections(hash) click to toggle source
# File lib/supai/resource.rb, line 27
def self.attr_collections(hash)
  @json_attrs ||= []
  hash.each do |name, klass|
    @json_attrs << name
    attr_reader(name)
    define_method("#{name}=") { |ary|
      instance_variable_set("@#{name}", parse_collection(ary, klass))
    }
  end
end
attr_objects(hash) click to toggle source
# File lib/supai/resource.rb, line 16
def self.attr_objects(hash)
  @json_attrs ||= []
  hash.each do |name, klass|
    @json_attrs << name
    attr_reader(name)
    define_method("#{name}=") { |obj|
      instance_variable_set("@#{name}", parse_object(obj, klass))
    }
  end
end
attr_timestamp_accessor(*attrs) click to toggle source
# File lib/supai/resource.rb, line 38
def self.attr_timestamp_accessor(*attrs)
  @json_attrs ||= []
  attrs.each do |name|
    @json_attrs << name
    attr_reader(name)
    define_method("#{name}=") { |value|
      instance_variable_set("@#{name}", parse_timestamp(value))
    }
  end
end
attributes() click to toggle source
# File lib/supai/resource.rb, line 6
def self.attributes
  @json_attrs
end

Public Instance Methods

as_json() click to toggle source
# File lib/supai/resource.rb, line 49
def as_json
  self.class.attributes.to_h { |attr|
    value = send(attr)
    json_value = case
                 when value.respond_to?(:as_json)
                   value.as_json
                 when value.is_a?(Array)
                   value.map(&:as_json)
                 else
                   value
                 end
    [attr, json_value]
  }
end
inspect() click to toggle source
# File lib/supai/resource.rb, line 112
def inspect
  "#<#{self.class} #{[@id, @name || @display_name].compact.join(" ")}>"
end
parse_collection(ary, klass) click to toggle source
# File lib/supai/resource.rb, line 84
def parse_collection(ary, klass)
  ary.map { |obj|
    parse_object(obj, klass)
  }
end
parse_object(obj, klass) click to toggle source
# File lib/supai/resource.rb, line 90
def parse_object(obj, klass)
  if obj.is_a?(klass)
    obj
  else
    klass.new(obj)
  end
end
parse_timestamp(value) click to toggle source
# File lib/supai/resource.rb, line 98
def parse_timestamp(value)
  return nil if value.nil?

  if value.is_a? Time
    value
  else
    if Time.respond_to? :zone
      Time.zone.parse(value)
    else
      Time.parse(value)
    end
  end
end
set_attribute(key, value) click to toggle source
# File lib/supai/resource.rb, line 73
def set_attribute(key, value)
  setter = "#{underscore(key)}="
  send(setter, value) if respond_to?(setter)
end
set_attributes(hash) click to toggle source
# File lib/supai/resource.rb, line 78
def set_attributes(hash)
  hash.each do |key, value|
    set_attribute(key, value)
  end
end
underscore(value) click to toggle source
# File lib/supai/resource.rb, line 64
def underscore(value)
  return value unless /[A-Z-]/.match?(value)
  word = value.to_s.gsub(/([A-Z\d]+)([A-Z][a-z])/, '\1_\2')
  word.gsub!(/([a-z\d])([A-Z])/, '\1_\2')
  word.tr!("-", "_")
  word.downcase!
  word
end