class Typhoid::Resource

Attributes

path[RW]
site[RW]
resource_exception[RW]

Public Class Methods

build_request(uri, options = {}) click to toggle source
# File lib/typhoid/resource.rb, line 15
def self.build_request(uri, options = {})
  Typhoid::RequestBuilder.new(self, uri, options)
end
new(params = {}) click to toggle source
# File lib/typhoid/resource.rb, line 33
def initialize(params = {})
  load_values(params)
end
request_uri(*more_paths) click to toggle source

Get this request URI based on site and path, can attach more paths

# File lib/typhoid/resource.rb, line 29
def self.request_uri(*more_paths)
  uri_join site, path, *more_paths
end
run(request) click to toggle source
# File lib/typhoid/resource.rb, line 19
def self.run(request)
  build(request.klass, (Request.new(request.request_uri, request.options).run))
end
uri_join(*paths) click to toggle source
# File lib/typhoid/resource.rb, line 23
def self.uri_join(*paths)
  Uri.new(*paths).to_s
end

Public Instance Methods

destroy() click to toggle source
# File lib/typhoid/resource.rb, line 58
def destroy
  request_and_load do
    Request.new(delete_request.request_uri, delete_request.options).run
  end
end
destroy!() click to toggle source
# File lib/typhoid/resource.rb, line 46
def destroy!
  destroy
  raise resource_exception unless success?
end
new?()
Alias for: new_record?
new_record?() click to toggle source
# File lib/typhoid/resource.rb, line 94
def new_record?
  id.to_s.length < 1
end
Also aliased as: new?
persisted?() click to toggle source
# File lib/typhoid/resource.rb, line 90
def persisted?
  !new_record?
end
request_and_load() { || ... } click to toggle source
# File lib/typhoid/resource.rb, line 83
def request_and_load(&block)
  self.resource_exception = nil
  response = yield
  self.class.load_values(self, response)
  success?
end
request_uri() click to toggle source

Request URI is either in the object we retrieveed initially, built from site + path + id, or fail to the regular class#request_uri

Also, check that the server we're speaking to isn't hypermedia inclined so look at our attributes for a URI

# File lib/typhoid/resource.rb, line 79
def request_uri
  attributes["uri"] || (new_record? ? self.class.request_uri : self.class.request_uri(id))
end
save(method = nil) click to toggle source
# File lib/typhoid/resource.rb, line 51
def save(method = nil)
  request = save_request(method)
  request_and_load do
    Request.new(request.request_uri, request.options).run
  end
end
save!(method = nil) click to toggle source
# File lib/typhoid/resource.rb, line 41
def save!(method = nil)
  save method
  raise resource_exception unless success?
end
save_http_method(method = nil) click to toggle source
# File lib/typhoid/resource.rb, line 69
def save_http_method(method = nil)
  return method if method
  (new_record?) ? :post : :put
end
save_request(method = nil) click to toggle source
# File lib/typhoid/resource.rb, line 64
def save_request(method = nil)
  method ||= save_http_method(method)
  (new_record?) ? create_request(method) : update_request(method)
end
success?() click to toggle source
# File lib/typhoid/resource.rb, line 37
def success?
  !resource_exception
end

Protected Instance Methods

create_request(method = :post) click to toggle source
# File lib/typhoid/resource.rb, line 105
def create_request(method = :post)
  method ||= :post
  Typhoid::RequestBuilder.new(self.class, request_uri, :body => to_params.to_json, :method => method, :headers => {"Content-Type" => 'application/json'})
end
delete_request(method = :delete) click to toggle source
# File lib/typhoid/resource.rb, line 115
def delete_request(method = :delete)
  method ||= :delete
  Typhoid::RequestBuilder.new(self.class, request_uri, :method => method)
end
to_params() click to toggle source
# File lib/typhoid/resource.rb, line 101
def to_params
  attributes
end
update_request(method = :put) click to toggle source
# File lib/typhoid/resource.rb, line 110
def update_request(method = :put)
  method ||= :put
  Typhoid::RequestBuilder.new(self.class, request_uri, :body => to_params.to_json, :method => method, :headers => {"Content-Type" => 'application/json'})
end