lib/middleware/json_parse_errors.rb



module ZuoraConnect
  class JsonParseErrors
    def initialize(app)
      @app = app
    end

    def call(env)
      begin
        @app.call(env)
      rescue DynamicRailsError => error
        if env['HTTP_ACCEPT'] =~ /application\/json/ || env['CONTENT_TYPE'] =~ /application\/json/
          return [
            400, { "Content-Type" => "application/json" },
            [{"success": false, "reasons": [{"code": 50000090, "message": "Malformed json was submitted." }]}.to_json ]
          ]
        else
          raise error
        end
      end
    end

    # Note(hartley): remove once the minimum supported version of Rails is 5.2
    class DynamicRailsError < StandardError
      def self.===(exception)
        if Rails.version >= "5.2"
          exception.is_a?(ActionDispatch::Http::Parameters::ParseError)
        else
          exception.is_a?(ActionDispatch::ParamsParser::ParseError)
        end
      end
    end
  end
end