mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-26 20:56:48 +00:00
50 lines
1.5 KiB
Ruby
50 lines
1.5 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module PermittedAttributes
|
|
class OrderCycle
|
|
def initialize(params)
|
|
@params = params
|
|
end
|
|
|
|
def call
|
|
return @params[:order_cycle] if @params[:order_cycle].blank?
|
|
|
|
@params.require(:order_cycle).permit(
|
|
:name, :orders_open_at, :orders_close_at, :coordinator_id,
|
|
incoming_exchanges: permitted_exchange_attributes,
|
|
outgoing_exchanges: permitted_exchange_attributes,
|
|
schedule_ids: [], coordinator_fee_ids: []
|
|
)
|
|
end
|
|
|
|
private
|
|
|
|
def permitted_exchange_attributes
|
|
[
|
|
:id, :sender_id, :receiver_id, :enterprise_id, :incoming, :active,
|
|
:select_all_variants, :receival_instructions,
|
|
:pickup_time, :pickup_instructions,
|
|
:tag_list,
|
|
tags: [:text],
|
|
enterprise_fee_ids: [],
|
|
variants: permitted_variant_ids
|
|
]
|
|
end
|
|
|
|
# In rails 5 we will be able to permit random hash keys simply with :variants => {}
|
|
# See https://github.com/rails/rails/commit/e86524c0c5a26ceec92895c830d1355ae47a7034
|
|
#
|
|
# Until then, we need to create an array of variant IDs in order to permit them
|
|
def permitted_variant_ids
|
|
variant_ids(@params[:order_cycle][:incoming_exchanges]) +
|
|
variant_ids(@params[:order_cycle][:outgoing_exchanges])
|
|
end
|
|
|
|
def variant_ids(exchange_params)
|
|
return [] unless exchange_params
|
|
|
|
exchange_params.map { |exchange| exchange[:variants].map { |key, _value| key } }.flatten
|
|
end
|
|
end
|
|
end
|