Files
fizzy/app/controllers/cards/drops_controller.rb
T
Jorge Manrubia 97fecc2bbe Extract method
2025-06-12 12:10:17 +02:00

50 lines
1.4 KiB
Ruby

class Cards::DropsController < ApplicationController
before_action :set_filter, :set_card, :set_drop_target
def create
perform_drop_action
render_column_replacement
end
private
VALID_DROP_TARGETS = %w[ considering doing ]
def set_filter
@filter = Current.user.filters.from_params params.reverse_merge(**FilterScoped::DEFAULT_PARAMS).permit(*Filter::PERMITTED_PARAMS)
end
def set_card
@card = Current.user.accessible_cards.find(params[:dropped_item_id])
end
def set_drop_target
if params[:drop_target].in?(VALID_DROP_TARGETS)
@drop_target = params[:drop_target].to_sym
else
head :bad_request
end
end
def perform_drop_action
case @drop_target
when :considering
@card.reconsider
when :doing
@card.engage
end
end
def render_column_replacement
page_and_filter = page_and_filter_for @filter.with(engagement_status: @drop_target.to_s), per_page: CardsController::PAGE_SIZE
render turbo_stream: turbo_stream.replace("#{@drop_target}-cards", method: :morph, partial: "cards/index/engagement/#{@drop_target}", locals: page_and_filter.to_h)
end
def page_and_filter_for(filter, per_page: nil)
cards = block_given? ? yield(filter.cards) : filter.cards
OpenStruct.new \
page: GearedPagination::Recordset.new(cards, per_page:).page(1),
filter: filter
end
end