mirror of
https://github.com/openfoodfoundation/openfoodnetwork
synced 2026-01-11 18:26:50 +00:00
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`.
77 lines
1.9 KiB
Ruby
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
|