From f25ee8c99841fde47aa3acf8014dedb4413175ff Mon Sep 17 00:00:00 2001 From: Pau Perez Date: Fri, 29 May 2020 10:16:03 +0200 Subject: [PATCH] Extract `#editable_order_cycles` This makes it far easier to spot what's the difference between create and update regarding the editable order cycles. I stop here before a slightly deeper refactor which would make the PR quite hard to review. This will come an upcoming one. --- app/controllers/admin/schedules_controller.rb | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/app/controllers/admin/schedules_controller.rb b/app/controllers/admin/schedules_controller.rb index 59fedaf839..a16cc673a9 100644 --- a/app/controllers/admin/schedules_controller.rb +++ b/app/controllers/admin/schedules_controller.rb @@ -5,7 +5,7 @@ module Admin class SchedulesController < ResourceController before_filter :adapt_params, only: [:update] before_filter :check_editable_order_cycle_ids_create, only: [:create] - before_filter :check_editable_order_cycle_ids, only: [:update] + before_filter :check_editable_order_cycle_ids_update, only: [:update] before_filter :check_dependent_subscriptions, only: [:destroy] update.after :sync_subscriptions @@ -87,29 +87,34 @@ module Admin return unless params[:order_cycle_ids] requested = params[:order_cycle_ids] + @existing_order_cycle_ids = [] - @existing_order_cycle_ids = @schedule.persisted? ? @schedule.order_cycle_ids : [] - - permitted = OrderCycle.where(id: params[:order_cycle_ids] | @existing_order_cycle_ids).merge(OrderCycle.managed_by(spree_current_user)).pluck(:id) - - result = @existing_order_cycle_ids - result |= (requested & permitted) # add any requested & permitted ids - result -= ((result & permitted) - requested) # remove any existing and permitted ids that were not specifically requested + result = editable_order_cycles(requested) params[:order_cycle_ids] = result end - def check_editable_order_cycle_ids - return unless params[:schedule][:order_cycle_ids] || params[:order_cycle_ids] + def check_editable_order_cycle_ids_update + return unless params[:schedule][:order_cycle_ids] requested = params[:schedule][:order_cycle_ids] - @existing_order_cycle_ids = @schedule.persisted? ? @schedule.order_cycle_ids : [] - permitted = OrderCycle.where(id: params[:schedule][:order_cycle_ids] | @existing_order_cycle_ids).merge(OrderCycle.managed_by(spree_current_user)).pluck(:id) + @existing_order_cycle_ids = @schedule.order_cycle_ids + + result = editable_order_cycles(requested) + + params[:schedule][:order_cycle_ids] = result + @object.order_cycle_ids = result + end + + def editable_order_cycles(requested) + permitted = OrderCycle + .where(id: params[:order_cycle_ids] | @existing_order_cycle_ids) + .merge(OrderCycle.managed_by(spree_current_user)) + .pluck(:id) result = @existing_order_cycle_ids result |= (requested & permitted) # add any requested & permitted ids result -= ((result & permitted) - requested) # remove any existing and permitted ids that were not specifically requested - params[:schedule][:order_cycle_ids] = result - @object.order_cycle_ids = result + result end def check_dependent_subscriptions