lib/clever-ruby/api_resource.rb in clever-ruby-0.3.1 vs lib/clever-ruby/api_resource.rb in clever-ruby-0.4.0
- old
+ new
@@ -1,35 +1,56 @@
module Clever
+ # Superclass of API resources in the Clever API
class APIResource < CleverObject
def self.url
if self == APIResource
- raise NotImplementedError.new('APIResource is an abstract class. You should perform actions on its subclasses (School, Student, etc.)')
+ fail NotImplementedError, 'APIResource is an abstract class. You should perform actions '\
+ 'on its subclasses (School, Student, etc.)'
end
- shortname = self.name.split('::')[-1]
- "v1.1/#{CGI.escape(shortname.downcase)}s"
+ shortname = name.split('::')[-1]
+ "v1.1/#{CGI.escape shortname.downcase}s"
end
def url
- unless id = self['id']
- raise InvalidRequestError.new("Could not determine which URL to request: #{self.class} instance has invalid ID: #{id.inspect}", 'id')
+ 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)}"
+ "#{self.class.url}/#{CGI.escape id}"
end
def refresh
- response = Clever.request(:get, url)
- refresh_from(response[:data])
+ response = Clever.request :get, url
+ refresh_from response[:data]
self
end
def links
- response = Clever.request(:get, url)
+ response = Clever.request :get, url
response[:links]
end
def self.retrieve(id)
- instance = self.new(id)
+ instance = new id
instance.refresh
instance
+ end
+
+ 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
+ def initialize(id)
+ super id
+
+ resources = self.class.linked_resources || []
+ resources.each do |resource|
+ self.class.send :define_method, resource do |filters = {}|
+ get_linked_resources resource.to_s, filters
+ end
+ end
end
end
end