trabajo-afectivo/lib/sequencer/unit/import/zendesk/tickets.rb

78 lines
2.3 KiB
Ruby
Raw Normal View History

class Sequencer
class Unit
module Import
module Zendesk
class Tickets < Sequencer::Unit::Import::Zendesk::SubSequence::Object
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
previous_page = 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