class RailsHush::HushTwo

Public Class Methods

new(app, renderer=nil) click to toggle source
# File lib/rails_hush/middleware/hush_two.rb, line 5
def initialize(app, renderer=nil)
  @app = app
  @renderer ||= Rails.application.config.rails_hush.renderer || method(:default_renderer)
end

Public Instance Methods

call(env) click to toggle source
# File lib/rails_hush/middleware/hush_two.rb, line 10
def call(env)
  request = ActionDispatch::Request.new env
  if request.show_exceptions? && !request.get_header("action_dispatch.show_detailed_exceptions")
    begin
      _, headers, body = response = @app.call(env)
      if headers['X-Cascade'] == 'pass'
        body.close if body.respond_to?(:close)
        raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}"
      end
      response

    rescue ActionController::BadRequest => x
      if x.message =~ /(Invalid encoding for parameter|invalid %-encoding)/
        log_request 400, request
        render 400, request, 'Invalid string or encoding'
      else
        raise x
      end
    rescue ActionDispatch::Http::Parameters::ParseError
      log_request 400, request
      render 400, request, 'Unable to parse request body'
    rescue ActionController::RoutingError => x
      log_request 404, request
      render 404, request
    rescue ActionController::UnknownHttpMethod
      log_request 405, request
      render 405, request, 'Unrecognized HTTP method'
    rescue ActionController::UnknownFormat
      render 406, request, 'Invalid format'
    rescue Mime::Type::InvalidMimeType
      log_request 406, request
      render 406, request, 'Invalid media type'
    rescue ActionController::ParameterMissing => x
      render 422, request, "Required parameter missing or empty: #{x.param}"
    end
  else
    @app.call(env)
  end
end