lanej/zendesk2

View on GitHub
lib/zendesk2/tickets.rb

Summary

Maintainability
A
0 mins
Test Coverage
# frozen_string_literal: true
class Zendesk2::Tickets
  include Zendesk2::Collection

  include Zendesk2::PagedCollection
  include Zendesk2::Searchable
  extend Zendesk2::Attributes

  model Zendesk2::Ticket

  attribute :requester_id,    type: :integer
  attribute :collaborator_id, type: :integer
  attribute :view_id,         type: :integer

  assoc_accessor :requester
  assoc_accessor :collaborator

  self.collection_root = 'tickets'
  self.model_method    = :get_ticket
  self.model_root      = 'ticket'
  self.search_type     = 'ticket'

  def collection_page(params = {})
    collection_method = if requester_id
                          :get_requested_tickets
                        elsif collaborator_id
                          :get_ccd_tickets
                        elsif view_id
                          :get_view_tickets
                        else
                          :get_tickets
                        end

    body = cistern.send(collection_method, Cistern::Hash.stringify_keys(attributes.merge(params))).body

    load(body[collection_root]) # 'results' is the key for paged searches
    merge_attributes(Cistern::Hash.slice(body, 'count', 'next_page', 'previous_page'))
    self
  end

  scopes << :requester_id
  scopes << :collaborator_id
  scopes << :view_id
end