Class: Point::Base
- Inherits:
-
Object
- Object
- Point::Base
- Defined in:
- lib/point/base.rb
Direct Known Subclasses
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 point 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/point/base.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/point/base.rb', line 5 def attributes @attributes end |
#errors ⇒ Object
Store all attributes for the model we’re working with.
5 6 7 |
# File 'lib/point/base.rb', line 5 def errors @errors end |
#id ⇒ Object
Store all attributes for the model we’re working with.
5 6 7 |
# File 'lib/point/base.rb', line 5 def id @id end |
Class Method Details
.class_name ⇒ Object
Return the point class name
66 67 68 |
# File 'lib/point/base.rb', line 66 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 Point needs to be pluralized with anything other than just adding an ‘s’.
56 57 58 |
# File 'lib/point/base.rb', line 56 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/point/base.rb', line 24 def find(type, params = {}) case type when :all then find_all(params) when Integer then 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 |
# File 'lib/point/base.rb', line 32 def find_all(params) JSON.parse(Request.new(collection_path(params)).make.output).map do |o| create_object(o[class_name.downcase], params) end end |
.find_single(id, params = {}) ⇒ Object
Find a single object and return an object for it.
39 40 41 42 43 44 45 46 |
# File 'lib/point/base.rb', line 39 def find_single(id, params = {}) o = JSON.parse(Request.new(member_path(id, params)).make.output) if o[class_name.downcase] create_object(o[class_name.downcase], params) else raise Point::Errors::NotFound, "Record not found" end end |
.member_path(id, params = {}) ⇒ Object
Return the member path for the passed ID & attributes
61 62 63 |
# File 'lib/point/base.rb', line 61 def member_path(id, params = {}) [collection_path, id].join('/') end |
Instance Method Details
#create ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 |
# File 'lib/point/base.rb', line 108 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.class.class_name] self.id = new_record['id'] 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.
96 97 98 |
# File 'lib/point/base.rb', line 96 def destroy Request.new(self.class.member_path(self.id, default_params), :delete).make.success? end |
#new_record? ⇒ Boolean
100 101 102 |
# File 'lib/point/base.rb', line 100 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 Point::Error. Optionally, pass a second ‘data’ parameter to send data to the post action.
87 88 89 90 91 92 |
# File 'lib/point/base.rb', line 87 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
104 105 106 |
# File 'lib/point/base.rb', line 104 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.
124 125 126 127 128 129 130 131 132 133 |
# File 'lib/point/base.rb', line 124 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 |