lib/clever-ruby/api_resource.rb in clever-ruby-0.6.0 vs lib/clever-ruby/api_resource.rb in clever-ruby-0.6.1

- old
+ new

@@ -1,48 +1,82 @@ module Clever # Superclass of API resources in the Clever API class APIResource < CleverObject + # Get URL for a resource + # @api private + # @return [String] url to query for a resource def self.url if self == APIResource fail NotImplementedError, 'APIResource is an abstract class. You should perform actions '\ 'on its subclasses (School, Student, etc.)' end shortname = name.split('::')[-1] "v1.1/#{CGI.escape shortname.downcase}s" end + # Get URL for an instance of a resource + # @api private + # @return [String] url to query for an instance of a resource def url id = self['id'] unless id fail InvalidRequestError.new( "Could not determine which URL to request: #{self.class} instance has " \ "invalid ID: #{id.inspect}", 'id') end "#{self.class.url}/#{CGI.escape id}" end + # Request the current resource data and update this object + # @api private + # @return [APIResource] The updated resource instance def refresh response = Clever.request :get, url refresh_from response[:data] self end + # Get hypermedia links for this resource instance + # @api private + # @return [Array] list of links for this resource instance def links response = Clever.request :get, url response[:links] end + # Get an instance of a resource + # @api public + # @param id [String] ID of the instance to find + # @return [APIResource] resource instance + # @example + # id = '...' + # district = Clever::District.retrieve id def self.retrieve(id) instance = new id instance.refresh instance end + # Request resource instances by following hypermedia links + # @api private + # @return [Array] List of resources found def get_linked_resources(resource_type, filters = {}) Util.convert_to_clever_object Clever.request(:get, get_uri(resource_type), filters)[:data] end - class << self; attr_reader :linked_resources; end + class << self + # Get a list of nested resources in the Clever API for this resource + # @api private + # @return [Array] List of resources nested under this resource + attr_reader :linked_resources + end + + # Create an instance of APIResource, defining links to nested resources + # @api public + # @param [String] id of object to instantiate + # @return [APIResoruce] resource instance + # @example + # Clever::District.new '531fabe082d522cds8e22' def initialize(id) super id resources = self.class.linked_resources || [] resources.each do |resource|