Class: FreshdeskAPI::Collection
- Inherits:
-
Object
- Object
- FreshdeskAPI::Collection
- Defined in:
- lib/freshdesk_api/collection.rb
Overview
Represents a collection of resources
Instance Attribute Summary collapse
-
#resource_class ⇒ Object
readonly
Returns the value of attribute resource_class.
-
#resources ⇒ Object
readonly
Returns the value of attribute resources.
Instance Method Summary collapse
-
#all!(options = {}) ⇒ Object
Execute actual GET from API and load resources into proper class.
- #get_response(path) ⇒ Object
- #handle_response(response_body) ⇒ Object
-
#initialize(client, resource, options = {}) ⇒ Collection
constructor
Creates a new Collection instance.
-
#path ⇒ Object
The API path to this collection.
- #to_s ⇒ Object (also: #inspect)
- #wrap_resource(res) ⇒ Object
Constructor Details
#initialize(client, resource, options = {}) ⇒ Collection
Creates a new Collection instance. Does not fetch resources.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/freshdesk_api/collection.rb', line 11 def initialize(client, resource, = {}) @client = client @resource_class = resource @resource = resource.resource_name = methods = %w{ create find update destroy } methods += methods.map { |method| method + '!' } methods.each do |deferrable| # Passes arguments and the proper path to the resource class method. # @param [Hash] options Options or attributes to pass define_singleton_method deferrable do |*args| unless @resource_class.respond_to?(deferrable) raise NoMethodError.new("undefined method \"#{deferrable}\" for #{@resource_class}", deferrable, args) end opts = args.last.is_a?(Hash) ? args.pop : {} @resource_class.send(deferrable, @client, opts) end end end |
Instance Attribute Details
#resource_class ⇒ Object (readonly)
Returns the value of attribute resource_class.
5 6 7 |
# File 'lib/freshdesk_api/collection.rb', line 5 def resource_class @resource_class end |
#resources ⇒ Object (readonly)
Returns the value of attribute resources.
4 5 6 |
# File 'lib/freshdesk_api/collection.rb', line 4 def resources @resources end |
Instance Method Details
#all!(options = {}) ⇒ Object
Execute actual GET from API and load resources into proper class. # @return [Array] All resource
41 42 43 44 45 46 47 48 |
# File 'lib/freshdesk_api/collection.rb', line 41 def all!( = {}) .merge!() response = get_response(path) handle_response(response.body) @resources end |
#get_response(path) ⇒ Object
50 51 52 |
# File 'lib/freshdesk_api/collection.rb', line 50 def get_response(path) @client.connection[path].send(:get, ) end |
#handle_response(response_body) ⇒ Object
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/freshdesk_api/collection.rb', line 54 def handle_response(response_body) results = MultiJson.load(response_body, symbolize_keys: true) if results.is_a?(Hash) results = FreshdeskAPI::Helpers.deep_hash_access(results, @resource_class.collection_namespace) elsif results.is_a?(Array) results = results.map { |r| r[@resource_class.collection_namespace.to_sym] } else raise "Expected a Hash or Array for response body, got #{result.inspect}" end @resources = results.map do |res| wrap_resource(res) end end |
#path ⇒ Object
The API path to this collection
35 36 37 |
# File 'lib/freshdesk_api/collection.rb', line 35 def path @resource_class.api_url() end |
#to_s ⇒ Object Also known as: inspect
75 76 77 78 79 80 81 82 83 84 |
# File 'lib/freshdesk_api/collection.rb', line 75 def to_s if @resources @resources.inspect else inspect = [] inspect << "options=#{@options.inspect}" if .any? "#{@resource.singularize} collection [#{inspect.join(',')}]" end end |
#wrap_resource(res) ⇒ Object
70 71 72 |
# File 'lib/freshdesk_api/collection.rb', line 70 def wrap_resource(res) @resource_class.new(@client, res) end |