module TinyClient::NestedSupport
Mixin that add support for nested resource to {TinyClient::Resource} Each nested resource will be accessible with:
<resource_name>s # List the existing ( index ) <resource_name>(id) # Show an existing ( show ) add_<resource_name>(resource) # To create a new one ( post ) remove_<resource_name>(resource) # Remove an existing ( delete ) update_<resource_name>(resource) # Update an existing ( put )
@see file:README.md#label-Nested+resource README - Nested Resource
Public Class Methods
@raise [ArgumentError] if the given resource_class is not a Resource
# File lib/tiny_client/nested_support.rb, line 15 def self.included(resource_class) raise ArgumentError, 'Works only for TinyClient::Resource' unless resource_class <= Resource resource_class.extend(ClassMethods) end
Public Instance Methods
@see PaginationSupport::ClassMethods.get_all
@raise [ArgumentError] if the given resource_class is not a Resource
@raise [ResponseError] if the server respond with an error status (i.e 404, 500..)
# File lib/tiny_client/nested_support.rb, line 64 def nested_all(resource_class, params = {}) raise ArgumentError, 'Works only for TinyClient::Resource' unless resource_class <= Resource self.class.get_all(params, @id, resource_class.path, resource_class) end
@raise [ResponseError] if the server respond with an error status (i.e 404, 500..)
# File lib/tiny_client/nested_support.rb, line 55 def nested_create(resource) raise ArgumentError, 'resource must be an TinyClient::Resource' unless resource.is_a? Resource data = resource.changes.to_a.each_with_object({}) { |fld, h| h[fld] = resource.send(fld) } self.class.post({ resource.class.low_name => data }, @id, resource.class.path, resource.class) end
@raise [ArgumentError] if the given resource does not have an id or is not a Resource
instance @raise [ResponseError] if the server respond with an error status (i.e 404, 500..)
# File lib/tiny_client/nested_support.rb, line 47 def nested_delete(resource) raise ArgumentError, 'resource must be an TinyClient::Resource' unless resource.is_a? Resource raise ArgumentError, 'resource must have id set' if resource.id.nil? path = UrlBuilder.url(resource.class.path).path(resource.id).build! self.class.delete(@id, path, resource.class) end
@raise [ArgumentError] if the given resource_class is not a Resource
@raise [ResponseError] if the server respond with an error status (i.e 404, 500..)
# File lib/tiny_client/nested_support.rb, line 30 def nested_index(resource_class, params = {}) raise ArgumentError, 'Works only for TinyClient::Resource' unless resource_class <= Resource self.class.get(params, @id, resource_class.path, resource_class) end
@raise [ArgumentError] if the given resource_class is not a Resource
@raise [ResponseError] if the server respond with an error status (i.e 404, 500..)
# File lib/tiny_client/nested_support.rb, line 22 def nested_show(resource_class, id, params = {}) raise ArgumentError, 'Works only for TinyClient::Resource' unless resource_class <= Resource path = UrlBuilder.url(resource_class.path).path(id).build! self.class.get(params, @id, path, resource_class) end
@raise [ArgumentError] if the given resource does not have an id or is not Resource
instance @raise [ResponseError] if the server respond with an error status (i.e 404, 500..)
# File lib/tiny_client/nested_support.rb, line 37 def nested_update(resource) raise ArgumentError, 'resource must be an TinyClient::Resource' unless resource.is_a? Resource raise ArgumentError, 'resource must have id set' if resource.id.nil? path = UrlBuilder.url(resource.class.path).path(resource.id).build! data = resource.changes.to_a.each_with_object({}) { |fld, h| h[fld] = resource.send(fld) } self.class.put({ resource.class.low_name => data }, @id, path, resource.class) end