Class: Typhoid::Resource
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
.path ⇒ Object
Returns the value of attribute path.
10
11
12
|
# File 'lib/typhoid/resource.rb', line 10
def path
@path
end
|
.site ⇒ Object
Returns the value of attribute site.
10
11
12
|
# File 'lib/typhoid/resource.rb', line 10
def site
@site
end
|
Instance Attribute Details
#resource_exception ⇒ Object
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
#destroy ⇒ Object
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?
94
95
96
|
# File 'lib/typhoid/resource.rb', line 94
def new_record?
id.to_s.length < 1
end
|
#persisted? ⇒ 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_uri ⇒ Object
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
37
38
39
|
# File 'lib/typhoid/resource.rb', line 37
def success?
!resource_exception
end
|