1234567891011121314151617181920212223242526272829303132333435363738394041 |
- # Copyright (C) 2012-2024 Zammad Foundation, https://zammad-foundation.org/
- class FormUpdater::StoreValue
- include Mixin::RequiredSubPaths
- class OmitFieldError < StandardError; end
- FIELD_RENAMING_MAP = {
- 'articleSenderType' => 'formSenderType',
- }.freeze
- def perform(field:, value:)
- field = FIELD_RENAMING_MAP[field] || field
- result = {}
- begin
- # Handle complex fields via their handler.
- result[field] = if (handler = find_handler(field:, value:))
- handler.store_value(field:, value:)
- # Return the passed value for simple fields.
- else
- value
- end
- rescue FormUpdater::StoreValue::Base::OmitFieldError
- # Skip omitted fields.
- end
- result
- end
- private
- def find_handler(field:, value:)
- FormUpdater::StoreValue::Base
- .descendants
- .lazy
- .map(&:new)
- .find { |elem| elem.can_handle_field?(field:, value:) }
- end
- end
|