class PlateApi::ObjectHandler
Attributes
api_connector[R]
handling_class[R]
Public Class Methods
new(handling_class, api_connector)
click to toggle source
# File lib/plate_api/object_handler.rb, line 7 def initialize(handling_class, api_connector) raise ArgumentError, "`handling_class` given for #new is not valid" unless handling_class raise ArgumentError, "`api_connector` given for #new is not valid" unless api_connector @handling_class = handling_class @api_connector = api_connector end
Public Instance Methods
create(parent, attributes, create_method=:post)
click to toggle source
# File lib/plate_api/object_handler.rb, line 36 def create(parent, attributes, create_method=:post) raise ArgumentError, "`parent` given for #create is not valid" unless parent raise ArgumentError, "`attributes` given for #create is not valid" unless attributes.is_a? Hash parameters = case create_method when :post {"data" => attributes} when :post_multipart attributes end result = @api_connector.send(create_method, collection_path(parent.class, parent.id), parameters) if result["data"] return new_object(result["data"]) else raise Error::Response, result end end
delete(id)
click to toggle source
# File lib/plate_api/object_handler.rb, line 55 def delete(id) raise ArgumentError, "`id` given for #find is not valid" unless id result = @api_connector.delete(resource_path(id)) if result["data"] return new_object(result["data"]) else raise Error::Response, result end end
find(id)
click to toggle source
# File lib/plate_api/object_handler.rb, line 14 def find(id) raise ArgumentError, "`id` given for #find is not valid" unless id result = @api_connector.get(resource_path(id)) if result["data"] return new_object(result["data"]) else raise Error::Response, result end end
index(parent_class, parent_id, extra_params={})
click to toggle source
# File lib/plate_api/object_handler.rb, line 65 def index(parent_class, parent_id, extra_params={}) raise ArgumentError, "`parent_id` given for #index is not valid" unless parent_id raise ArgumentError, "`parent_class` given for #index is not valid" unless parent_class result = @api_connector.get(collection_path(parent_class, parent_id), extra_params) if result["data"] return result["data"].map{|x| new_object(x)} else raise Error::Response, result end end
index_total_count(parent)
click to toggle source
# File lib/plate_api/object_handler.rb, line 77 def index_total_count(parent) result = @api_connector.get(collection_path(parent.class, parent.id), per_page: 1) if result["meta"] return result["meta"]["pagination"]["total_records"] else raise Error::Response, result end end
update(id, attributes)
click to toggle source
# File lib/plate_api/object_handler.rb, line 24 def update(id, attributes) raise ArgumentError, "`id` given for #update is not valid" unless id raise ArgumentError, "`attributes` given for #update is not valid" unless attributes.is_a? Hash result = @api_connector.put(resource_path(id), {"data" => attributes}) if result["data"] return new_object(result["data"]) else raise Error::Response, result end end
Private Instance Methods
collection_path(parent_class=nil, parent_id=nil)
click to toggle source
# File lib/plate_api/object_handler.rb, line 102 def collection_path(parent_class=nil, parent_id=nil) if (parent_class != nil) ^ (parent_id != nil) raise ArgumentError, "An invalid combination `parent_class` and `parent_id` is given. Provide both or none." end if parent_class "#{parent_class.api_name}/#{parent_id}/#{@handling_class.api_name}" else "#{@handling_class.api_name}" end end
new_object(api_response)
click to toggle source
Construct a new object of @handling_class, given a succesful api_response
# File lib/plate_api/object_handler.rb, line 89 def new_object(api_response) @handling_class.new( api_response["id"], api_response["attributes"], api_response["relations"], self ) end
resource_path(id)
click to toggle source
# File lib/plate_api/object_handler.rb, line 98 def resource_path(id) "#{@handling_class.api_name}/#{id}" end