class FallbackController < ApplicationController

private

def handle_with(klass, params: {}, **context)
  klass.new.call(params, context) do |monad|
    case monad
    in Dry::Monads::Failure(errors)
      respond_to do |format|
        format.html do
          raise ActionController::RoutingError.new(errors)
        end

        format.json do
          render json: errors
        end
      end

    in Dry::Monads::Success(resource)
      respond_to do |format|
        format.html { @data = resource }

        format.json do
          render json: resource.to_json
        end
      end

    in Dry::Monads::Success(*list)
      respond_to do |format|
        format.html { @data = list }

        format.json do
          render json: list.to_json
        end
      end
    end
  end
end

end