store_value.rb 1013 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
  2. class FormUpdater::StoreValue
  3. include Mixin::RequiredSubPaths
  4. class OmitFieldError < StandardError; end
  5. FIELD_RENAMING_MAP = {
  6. 'articleSenderType' => 'formSenderType',
  7. }.freeze
  8. def perform(field:, value:)
  9. field = FIELD_RENAMING_MAP[field] || field
  10. result = {}
  11. begin
  12. # Handle complex fields via their handler.
  13. result[field] = if (handler = find_handler(field:, value:))
  14. handler.store_value(field:, value:)
  15. # Return the passed value for simple fields.
  16. else
  17. value
  18. end
  19. rescue FormUpdater::StoreValue::Base::OmitFieldError
  20. # Skip omitted fields.
  21. end
  22. result
  23. end
  24. private
  25. def find_handler(field:, value:)
  26. FormUpdater::StoreValue::Base
  27. .descendants
  28. .lazy
  29. .map(&:new)
  30. .find { |elem| elem.can_handle_field?(field:, value:) }
  31. end
  32. end