base_factory.rb 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. module Import
  2. module BaseFactory
  3. # rubocop:disable Style/ModuleFunction
  4. extend self
  5. def import_action(records, *args)
  6. pre_import_hook(records, *args)
  7. import_loop(records, *args) do |record|
  8. next if skip?(record, *args)
  9. backend_instance = create_instance(record, *args)
  10. post_import_hook(record, backend_instance, *args)
  11. end
  12. end
  13. def import(_records, *_args)
  14. raise 'Missing import method implementation for this factory'
  15. end
  16. def pre_import_hook(_records, *args)
  17. end
  18. def post_import_hook(_record, _backend_instance, *args)
  19. end
  20. def backend_class(_record, *_args)
  21. "Import::#{module_name}".constantize
  22. end
  23. def skip?(_record, *_args)
  24. false
  25. end
  26. private
  27. def create_instance(record, *args)
  28. backend_class(record, *args).new(record, *args)
  29. end
  30. def import_loop(records, *_args, &import_block)
  31. records.each(&import_block)
  32. end
  33. def module_name
  34. name.to_s.sub(/Import::/, '').sub(/Factory/, '')
  35. end
  36. end
  37. end