generic.rb 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
  2. class Sequencer
  3. class Unit
  4. module Import
  5. module Freshdesk
  6. module SubSequence
  7. class Generic < Sequencer::Unit::Base
  8. uses :dry_run, :import_job, :field_map, :id_map, :time_entry_available
  9. attr_accessor :iteration, :result
  10. EXPECTING = %i[action response].freeze
  11. def process
  12. loop.each_with_index do |_, iteration|
  13. @iteration = iteration
  14. @result = ::Sequencer.process(sequence_name,
  15. parameters: {
  16. request_params: request_params,
  17. import_job: import_job,
  18. dry_run: dry_run,
  19. object: object,
  20. field_map: field_map,
  21. id_map: id_map,
  22. skipped_resource_id: skipped_resource_id,
  23. time_entry_available: time_entry_available,
  24. },
  25. expecting: self.class.const_get(:EXPECTING))
  26. break if iteration_should_stop?
  27. end
  28. end
  29. def request_params
  30. {
  31. page: page,
  32. }
  33. end
  34. def page
  35. iteration + 1
  36. end
  37. def object
  38. @object ||= self.class.name.demodulize.singularize
  39. end
  40. def sequence_name
  41. raise NotImplementedError
  42. end
  43. private
  44. def skipped_resource_id
  45. @skipped_resource_id ||= nil
  46. end
  47. def iteration_should_stop?
  48. return true if result[:action] == :failed || result[:action] == :skipped
  49. return true if result[:response].header['link'].blank?
  50. false
  51. end
  52. end
  53. end
  54. end
  55. end
  56. end
  57. end