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