Sha256: f024136b60d75b3b563bbddadfde3294c1514314f5f5cda83c360d37d0285bc2

Contents?: true

Size: 728 Bytes

Versions: 2

Compression:

Stored size: 728 Bytes

Contents

# frozen_string_literal: true
module Schneiderlein
  class FlyCatcher < Struct.new(:app)

    PARSE_ERROR_CONSTANT =
      if Rails.version.to_f < 5.1
        ActionDispatch::ParamsParser::ParseError
      else
        ActionDispatch::Http::Parameters::ParseError
      end

    def call(env)
      app.call(env)
    rescue PARSE_ERROR_CONSTANT => e
      env['rack.schneiderlein.parse_errors'] ||= []
      env['rack.schneiderlein.parse_errors'] << e
      app.call(remove_errors_from(env))
    end

    private

    def remove_errors_from(env)
      env['rack.input']     = StringIO.new
      env['rack.errors']    = StringIO.new
      env['RAW_POST_DATA']  = ''
      env['CONTENT_LENGTH'] = '0'
      env
    end

  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
schneiderlein-3.0.0 lib/schneiderlein/fly_catcher.rb
schneiderlein-2.0.0 lib/schneiderlein/fly_catcher.rb