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

included(resource_class) click to toggle source

@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

nested_all(resource_class, params = {}) click to toggle source

@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
nested_create(resource) click to toggle source

@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
nested_delete(resource) click to toggle source

@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
nested_index(resource_class, params = {}) click to toggle source

@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
nested_show(resource_class, id, params = {}) click to toggle source

@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
nested_update(resource) click to toggle source

@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