1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- class Sequencer
- class Unit
- module Import
- module Zendesk
- class Tickets < Sequencer::Unit::Import::Zendesk::SubSequence::Object
- include ::Sequencer::Unit::Import::Zendesk::Mixin::IncrementalExport
- uses :user_map, :organization_map, :group_map, :ticket_field_map
- private
- def default_params
- super.merge(
- user_map: user_map,
- group_map: group_map,
- organization_map: organization_map,
- ticket_field_map: ticket_field_map,
- )
- end
- def resource_iteration
- super do |record|
- # call passed/originally intended block
- yield(record)
- # add hook to check if ticket count
- # update is needed because the request
- # might have changed
- update_ticket_count
- end
- end
- # The source if this is the limitation of not knowing
- # how much tickets there are in total before requesting the endpoint
- # This is caused by the Zendesk API which only returns max. 1000
- # per request
- def update_ticket_count
- update_import_job
- next_page
- end
- attr_accessor :previous_page
- def update_import_job
- return if !update_required?
- state.provide(import_job, updated_import_job)
- end
- def updated_import_job
- import_job.result[:Tickets].merge(
- total: import_job.result[:Tickets][:total] + current_request_count
- )
- end
- def update_required?
- return false if previous_page.blank?
- return false if previous_page == next_page
- current_request_count.present?
- end
- def current_request_count
- # access the internal instance method of the
- # Zendesk collection request to get the current
- # count of the endpoint (max. 1000)
- resource_collection_attribute.instance_variable_get(:@count)
- end
- def next_page
- # access the internal instance method of the
- # Zendesk collection request to get the next
- # page number of the endpoint
- resource_collection_attribute.instance_variable_get(:@next_page)
- end
- end
- end
- end
- end
- end
|