From 1e397a41aeed380b044ab19b5a7db5cb04db16c5 Mon Sep 17 00:00:00 2001 From: Rohan Mitchell Date: Tue, 24 Nov 2015 14:38:07 +1100 Subject: [PATCH] Refactor to simplify outgoing_exchange_variant_ids --- .../order_cycle_form_applicator.rb | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/lib/open_food_network/order_cycle_form_applicator.rb b/lib/open_food_network/order_cycle_form_applicator.rb index 3d46bf4022..3e81d6c9f1 100644 --- a/lib/open_food_network/order_cycle_form_applicator.rb +++ b/lib/open_food_network/order_cycle_form_applicator.rb @@ -157,7 +157,7 @@ module OpenFoodNetwork variants[variant_id.to_i] = value if permitted.include?(variant_id.to_i) end - variants.select { |k, v| v }.keys.map { |k| k.to_i }.sort + variants_to_a variants end def outgoing_exchange_variant_ids(attrs) @@ -167,27 +167,36 @@ module OpenFoodNetwork sender = @order_cycle.coordinator receiver = exchange.andand.receiver || Enterprise.find(attrs[:enterprise_id]) permitted = editable_variant_ids_for_outgoing_exchange_between(sender, receiver) - incoming = incoming_variant_ids # Only change visibility for variants I have permission to edit attrs[:variants].each do |variant_id, value| variant_id = variant_id.to_i - if !incoming.include? variant_id - # When a variant has been removed from incoming but remains - # in outgoing, remove it from outgoing too - variants[variant_id] = false - - elsif permitted.include? variant_id - variants[variant_id] = value - end + variants = update_outgoing_variants(variants, permitted, variant_id, value) end - variants.select { |k, v| v }.keys.map(&:to_i).sort + variants_to_a variants + end + + def update_outgoing_variants(variants, permitted, variant_id, value) + if !incoming_variant_ids.include? variant_id + # When a variant has been removed from incoming but remains + # in outgoing, remove it from outgoing too + variants[variant_id] = false + + elsif permitted.include? variant_id + variants[variant_id] = value + end + + variants end def incoming_variant_ids @order_cycle.supplied_variants.map &:id end + + def variants_to_a(variants) + variants.select { |k, v| v }.keys.map(&:to_i).sort + end end end