class Clubhouse::BaseResource

Attributes

endpoint[R]
client[W]

Public Class Methods

all() click to toggle source
# File lib/clubhouse/base_resource.rb, line 27
def all
  payload = client.get(self.endpoint)
  payload.collect{|h| self.new.update_object_from_payload(h) }
end
attributes(*keys, **opts) click to toggle source
# File lib/clubhouse/base_resource.rb, line 43
def self.attributes(*keys, **opts)
  readonly = Array(opts[:readonly])

  class_eval do
    define_method(:attribute_keys) { (keys + readonly) }

    (keys + readonly).each do |key|
      define_method(:"#{key}")  { instance_variable_get("@#{key}") }

      if !readonly.include?(key)
        define_method(:"#{key}=") {|v| instance_variable_set("@#{key}", v) }
      end
    end
  end
end
attributes_for_create(*keys) click to toggle source
# File lib/clubhouse/base_resource.rb, line 69
def self.attributes_for_create(*keys)
  class_eval do
    define_method :create_attributes do
      keys.reduce({}) do |h, k|
        h.merge(k => instance_variable_get("@#{k}"))
      end.reject{|k,v| v.nil?}
    end
  end
end
attributes_for_update(*keys) click to toggle source
# File lib/clubhouse/base_resource.rb, line 59
def self.attributes_for_update(*keys)
  class_eval do
    define_method :update_attributes do
      keys.reduce({}) do |h, k|
        h.merge(k => instance_variable_get("@#{k}"))
      end.reject{|k,v| v.nil?}
    end
  end
end
client() click to toggle source
# File lib/clubhouse/base_resource.rb, line 15
def client
  Clubhouse.default_client
end
delete(id) click to toggle source
# File lib/clubhouse/base_resource.rb, line 23
def delete(id)
  client.delete("#{self.endpoint}/#{id}")
end
find(id) click to toggle source
# File lib/clubhouse/base_resource.rb, line 19
def find(id)
  client.find(self, self.endpoint, id)
end
new(attr = {}) click to toggle source
# File lib/clubhouse/base_resource.rb, line 33
def initialize(attr = {})
  attr.each do |key, value|
    begin
      send("#{key}=", value)
    rescue NoMethodError
      raise InvalidKeyAssignment, "You can't assign value to #{key}"
    end
  end
end
resource(name) click to toggle source
# File lib/clubhouse/base_resource.rb, line 11
def resource(name)
  @endpoint = name
end

Public Instance Methods

client() click to toggle source
# File lib/clubhouse/base_resource.rb, line 79
def client
  @client ||= Clubhouse.default_client
end
reload() click to toggle source
# File lib/clubhouse/base_resource.rb, line 91
def reload
  payload = client.get("#{self.class.endpoint}/#{id}")
  update_object_from_payload(payload)
end
save() click to toggle source
# File lib/clubhouse/base_resource.rb, line 96
def save
  raise ClientNotSetup, "A default client or instance client is not setup" unless client

  payload = if id
              client.put("#{self.class.endpoint}/#{id}", update_attributes)
            else
              client.post(self.class.endpoint, create_attributes)
            end

  update_object_from_payload(payload)
end
update_object_from_payload(payload) click to toggle source
# File lib/clubhouse/base_resource.rb, line 83
def update_object_from_payload(payload)
  attribute_keys.each do |k|
    self.instance_variable_set("@#{k}", payload[k.to_s])
  end

  self
end