Files
openfoodnetwork/app/forms/schedule_form.rb
David Rodríguez 4c6d894bc0 Bump RuboCop to 1.86.6
There were a few changes needed:

* Plugins are now specified through `plugin:` config keyword.
* All plugin gems need to be specified explicitly in Gemfile since they
  are no longer dependencies of plugins already specified explicitly.
* All plugin gems need to be updated in other to use the new APIs.
* One cop was renamed.
* New offenses safe to correct were corrected directly with `bundle exec
  rubocop -a`.
* New offenses unsafe to correct were added to the TODO configuration
  with `bundle exec rubocop --auto-gen-config --auto-gen-only-exclude
  --exclude-limit 1400 --no-auto-gen-timestamp`.
2025-10-27 11:30:33 +01:00

77 lines
1.9 KiB
Ruby

# frozen_string_literal: true
class ScheduleForm
include ActiveModel::Model
attr_reader :errors, :flash_success
def initialize(params, user, schedule = nil)
@errors = ActiveModel::Errors.new self
# Not strong
@params = params
@current_user = user
@schedule = schedule
end
def save
editable_order_cycle_ids_for_create
return false if @params[:order_cycle_ids].blank?
@schedule.attributes = permitted_resource_params
if @schedule.save
@schedule.order_cycle_ids = @params[:order_cycle_ids]
@schedule.save!
end
true
end
def update(_params)
editable_order_cycle_ids_for_update
false unless @schedule.update(permitted_resource_params)
end
delegate :order_cycle_ids, to: :@schedule
private
def editable_order_cycle_ids_for_create
return unless @params[:order_cycle_ids]
@existing_order_cycle_ids = []
result = editable_order_cycles(@params[:order_cycle_ids])
@params[:order_cycle_ids] = result
end
def editable_order_cycle_ids_for_update
return unless @params[:schedule][:order_cycle_ids]
@existing_order_cycle_ids = @schedule.order_cycle_ids
result = editable_order_cycles(@params[:schedule][:order_cycle_ids])
@params[:schedule][:order_cycle_ids] = result
@schedule.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(@current_user))
.pluck(:id)
result = @existing_order_cycle_ids
result |= (requested & permitted) # add any requested & permitted ids
# remove any existing and permitted ids that were not specifically requested
result -= ((result & permitted) - requested)
result
end
def permitted_resource_params
@params.require(:schedule).permit(:id, :name, order_cycle_ids: [])
end
end