base_factory.rb 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. module Import
  3. module BaseFactory
  4. extend self
  5. def import_action(records, *)
  6. pre_import_hook(records, *)
  7. import_loop(records, *) do |record|
  8. next if skip?(record, *)
  9. backend_instance = create_instance(record, *)
  10. post_import_hook(record, backend_instance, *)
  11. end
  12. ensure
  13. post_all_import_hook
  14. end
  15. def import(_records, *)
  16. raise 'Missing import method implementation for this factory'
  17. end
  18. def pre_import_hook(_records, *); end
  19. def post_import_hook(_record, _backend_instance, *); end
  20. def post_all_import_hook; end
  21. def backend_class(_record, *)
  22. "Import::#{module_name}".constantize
  23. end
  24. def skip?(_record, *)
  25. false
  26. end
  27. private
  28. def create_instance(record, *)
  29. backend_class(record, *).new(record, *)
  30. end
  31. def import_loop(records, *, &)
  32. records.each(&)
  33. end
  34. def module_name
  35. name.to_s.sub(%r{Import::}, '').sub(%r{Factory}, '')
  36. end
  37. end
  38. end