Class: FreshdeskAPI::Collection

Inherits:
Object
  • Object
show all
Defined in:
lib/freshdesk_api/collection.rb

Overview

Represents a collection of resources

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client, resource, options = {}) ⇒ Collection

Creates a new Collection instance. Does not fetch resources.

Parameters:

  • client (Client)

    The FreshdeskAPI::Client to use.

  • resource (String)

    The resource being collected.

  • options (Hash) (defaults to: {})

    Any additional options to be passed in.



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, options = {})
  @client = client
  @resource_class = resource
  @resource = resource.resource_name
  @options = options

  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_classObject (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

#resourcesObject (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!(options = {})
  @options.merge!(options)

  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, @options)
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

#pathObject

The API path to this collection



35
36
37
# File 'lib/freshdesk_api/collection.rb', line 35

def path
  @resource_class.api_url(@options)
end

#to_sObject 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 @options.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