Class: Typhoid::Resource

Inherits:
Object
  • Object
show all
Includes:
Attributes, Multi
Defined in:
lib/typhoid/resource.rb

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Attributes

#after_build, #attributes, included, #load_values, #read_attribute

Methods included from Multi

#remote_resources

Constructor Details

#initialize(params = {}) ⇒ Resource

Returns a new instance of Resource.



33
34
35
# File 'lib/typhoid/resource.rb', line 33

def initialize(params = {})
  load_values(params)
end

Class Attribute Details

.pathObject

Returns the value of attribute path.



10
11
12
# File 'lib/typhoid/resource.rb', line 10

def path
  @path
end

.siteObject

Returns the value of attribute site.



10
11
12
# File 'lib/typhoid/resource.rb', line 10

def site
  @site
end

Instance Attribute Details

#resource_exceptionObject

Returns the value of attribute resource_exception.



13
14
15
# File 'lib/typhoid/resource.rb', line 13

def resource_exception
  @resource_exception
end

Class Method Details

.build_request(uri, options = {}) ⇒ Object



15
16
17
# File 'lib/typhoid/resource.rb', line 15

def self.build_request(uri, options = {})
  Typhoid::RequestBuilder.new(self, uri, options)
end

.request_uri(*more_paths) ⇒ Object

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



29
30
31
# File 'lib/typhoid/resource.rb', line 29

def self.request_uri(*more_paths)
  uri_join site, path, *more_paths
end

.run(request) ⇒ Object



19
20
21
# 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) ⇒ Object



23
24
25
# File 'lib/typhoid/resource.rb', line 23

def self.uri_join(*paths)
  Uri.new(*paths).to_s
end

Instance Method Details

#destroyObject



58
59
60
61
62
# 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!Object



46
47
48
49
# File 'lib/typhoid/resource.rb', line 46

def destroy!
  destroy
  raise resource_exception unless success?
end

#new_record?Boolean Also known as: new?

Returns:

  • (Boolean)


94
95
96
# File 'lib/typhoid/resource.rb', line 94

def new_record?
  id.to_s.length < 1
end

#persisted?Boolean

Returns:

  • (Boolean)


90
91
92
# File 'lib/typhoid/resource.rb', line 90

def persisted?
  !new_record?
end

#request_and_load(&block) ⇒ Object



83
84
85
86
87
88
# 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_uriObject

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



79
80
81
# 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) ⇒ Object



51
52
53
54
55
56
# 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) ⇒ Object



41
42
43
44
# File 'lib/typhoid/resource.rb', line 41

def save!(method = nil)
  save method
  raise resource_exception unless success?
end

#save_http_method(method = nil) ⇒ Object



69
70
71
72
# 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) ⇒ Object



64
65
66
67
# 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?Boolean

Returns:

  • (Boolean)


37
38
39
# File 'lib/typhoid/resource.rb', line 37

def success?
  !resource_exception
end