diff --git a/lib/external_service_new/zendesk_dispatcher.rb b/lib/external_service_new/zendesk_dispatcher.rb index 6ac636d..f8ebea0 100644 --- a/lib/external_service_new/zendesk_dispatcher.rb +++ b/lib/external_service_new/zendesk_dispatcher.rb @@ -21,7 +21,7 @@ def initialize(account_identifiers: nil, credential_details:, sleep_time_seconds def dispatch(method, path) super() do - @client.search(method => path).fetch() + @client.search(method => path) end end end diff --git a/lib/external_service_new/zendesk_downloader.rb b/lib/external_service_new/zendesk_downloader.rb index 62d9af2..8308fa8 100644 --- a/lib/external_service_new/zendesk_downloader.rb +++ b/lib/external_service_new/zendesk_downloader.rb @@ -27,6 +27,8 @@ def each_email(id: nil, &block) end class ZendeskInternalDownloader + # maximum of 100 records per page + PER_PAGE = 100 def initialize(dispatcher:, filters: nil, logger:nil) raise "dispatcher must not be nil, found #{dispatcher.inspect}" unless dispatcher @@ -36,17 +38,26 @@ def initialize(dispatcher:, filters: nil, logger:nil) end def each_email(&block) + page = 1 return to_enum(:each_email) unless block logger && logger.info("Downloading Zendesk Customer List with #{filters ? filters.inspect : "no filters"}") - response = dispatcher.dispatch(:query, "type:user role:end-user") - response.each {|contact| yield(contact["email"])} + loop do + response = dispatcher.dispatch(:query, each_email_path).per_page(PER_PAGE).page(page).fetch + break if response.empty? + response.each{|contact| yield(contact["email"])} + + page +=1 + end logger && logger.info("Downloaded Zendesk )Customer List") end private + def each_email_path + "type:user role:end-user" + end attr_reader :dispatcher, :filters, :logger end end diff --git a/lib/wafflehouse/version.rb b/lib/wafflehouse/version.rb index 707aefc..1063191 100644 --- a/lib/wafflehouse/version.rb +++ b/lib/wafflehouse/version.rb @@ -1,3 +1,3 @@ module Wafflehouse - VERSION = "1.2.2" + VERSION = "1.2.3" end