Class: Deploy::Resource
- Inherits:
-
Object
- Object
- Deploy::Resource
- Defined in:
- lib/deploy/resource.rb
Direct Known Subclasses
Deployment, DeploymentStep, DeploymentStepLog, Project, Server, ServerGroup
Instance Attribute Summary collapse
-
#attributes ⇒ Object
Store all attributes for the model we’re working with.
-
#errors ⇒ Object
Store all attributes for the model we’re working with.
-
#id ⇒ Object
Store all attributes for the model we’re working with.
Class Method Summary collapse
-
.class_name ⇒ Object
Return the deploy class name.
-
.collection_path(params = {}) ⇒ Object
Return the collection path for this model.
-
.find(type, params = {}) ⇒ Object
Find a record or set of records.
-
.find_all(params) ⇒ Object
Find all objects and return an array of objects with the attributes set.
-
.find_single(id, params = {}) ⇒ Object
Find a single object and return an object for it.
-
.member_path(id, params = {}) ⇒ Object
Return the member path for the passed ID & attributes.
-
.post(path) ⇒ Object
Post to the specified object on the collection path.
Instance Method Summary collapse
- #create ⇒ Object
-
#destroy ⇒ Object
Delete this record from the remote service.
-
#method_missing(method, *params) ⇒ Object
Pass any methods via.
- #new_record? ⇒ Boolean
-
#post(action, data = nil) ⇒ Object
Run a post on the member path.
- #save ⇒ Object
-
#update ⇒ Object
Push the updated attributes to the remote.
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *params) ⇒ Object
Pass any methods via. the attributes hash to see if they exist before resuming normal method_missing behaviour
9 10 11 12 13 14 15 16 17 18 |
# File 'lib/deploy/resource.rb', line 9 def method_missing(method, *params) set = method.to_s.include?('=') key = method.to_s.sub('=', '') self.attributes = Hash.new unless self.attributes.is_a?(Hash) if set self.attributes[key] = params.first else self.attributes[key] end end |
Instance Attribute Details
#attributes ⇒ Object
Store all attributes for the model we’re working with.
5 6 7 |
# File 'lib/deploy/resource.rb', line 5 def attributes @attributes end |
#errors ⇒ Object
Store all attributes for the model we’re working with.
5 6 7 |
# File 'lib/deploy/resource.rb', line 5 def errors @errors end |
#id ⇒ Object
Store all attributes for the model we’re working with.
5 6 7 |
# File 'lib/deploy/resource.rb', line 5 def id @id end |
Class Method Details
.class_name ⇒ Object
Return the deploy class name
71 72 73 |
# File 'lib/deploy/resource.rb', line 71 def class_name self.name.to_s.split('::').last.downcase end |
.collection_path(params = {}) ⇒ Object
Return the collection path for this model. Very lazy pluralizion here at the moment, nothing in Deploy needs to be pluralized with anything other than just adding an ‘s’.
61 62 63 |
# File 'lib/deploy/resource.rb', line 61 def collection_path(params = {}) class_name.downcase + 's' end |
.find(type, params = {}) ⇒ Object
Find a record or set of records. Passing :all will return all records and passing an integer will return the individual record for the ID passed.
24 25 26 27 28 29 |
# File 'lib/deploy/resource.rb', line 24 def find(type, params = {}) case type when :all then find_all(params) else find_single(type, params) end end |
.find_all(params) ⇒ Object
Find all objects and return an array of objects with the attributes set.
32 33 34 35 36 37 38 39 40 41 |
# File 'lib/deploy/resource.rb', line 32 def find_all(params) output = JSON.parse(Request.new(collection_path(params)).make.output) if output.is_a?(Hash) && output['records'] && output['pagination'] output = output['records'] end return [] unless output.is_a?(Array) output.map do |o| create_object(o, params) end end |
.find_single(id, params = {}) ⇒ Object
Find a single object and return an object for it.
44 45 46 47 48 49 50 51 |
# File 'lib/deploy/resource.rb', line 44 def find_single(id, params = {}) o = JSON.parse(Request.new(member_path(id, params)).make.output) if o.is_a?(Hash) create_object(o, params) else raise Deploy::Errors::NotFound, "Record not found" end end |
.member_path(id, params = {}) ⇒ Object
Return the member path for the passed ID & attributes
66 67 68 |
# File 'lib/deploy/resource.rb', line 66 def member_path(id, params = {}) [collection_path, id].join('/') end |
Instance Method Details
#create ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 125 |
# File 'lib/deploy/resource.rb', line 113 def create request = Request.new(self.class.collection_path(default_params), :post) request.data = {self.class.class_name.downcase.to_sym => attributes_to_post} if request.make && request.success? new_record = JSON.parse(request.output) self.attributes = new_record self.identifier = new_record['identifier'] true else populate_errors(request.output) false end end |
#destroy ⇒ Object
Delete this record from the remote service. Returns true or false depending on the success status of the destruction.
101 102 103 |
# File 'lib/deploy/resource.rb', line 101 def destroy Request.new(self.class.member_path(self.id, default_params), :delete).make.success? end |
#new_record? ⇒ Boolean
105 106 107 |
# File 'lib/deploy/resource.rb', line 105 def new_record? self.id.nil? end |
#post(action, data = nil) ⇒ Object
Run a post on the member path. Returns the ouput from the post, false if a conflict or raises a Deploy::Error. Optionally, pass a second ‘data’ parameter to send data to the post action.
92 93 94 95 96 97 |
# File 'lib/deploy/resource.rb', line 92 def post(action, data = nil) path = self.class.member_path(self.id, default_params) + "/" + action.to_s request = Request.new(path, :post) request.data = data request.make end |
#save ⇒ Object
109 110 111 |
# File 'lib/deploy/resource.rb', line 109 def save new_record? ? create : update end |
#update ⇒ Object
Push the updated attributes to the remote. Returns true if the record was saved successfully other false if not. If not saved successfully, the errors hash will be updated with an array of all errors with the submission.
130 131 132 133 134 135 136 137 138 139 |
# File 'lib/deploy/resource.rb', line 130 def update request = Request.new(self.class.member_path(self.id, default_params), :put) request.data = {self.class.class_name.downcase.to_sym => attributes_to_post} if request.make && request.success? true else populate_errors(request.output) false end end |