Sha256: afada921de219d61216f3ae4bdf89873e6329b8f1e1baf365958dd10b7b22796

Contents?: true

Size: 1.39 KB

Versions: 5

Compression:

Stored size: 1.39 KB

Contents

module Honeybadger
  module Rack
    # Internal: Constructs a request hash from a Rack::Request matching the
    # /v1/notices API specification.
    class RequestHash < ::Hash
      def initialize(request)
        self[:url] = extract_url(request)
        self[:params] = extract_params(request)
        self[:component] = self[:params]['controller']
        self[:action] = self[:params]['action']
        self[:session] = extract_session(request)
        self[:cgi_data] = extract_cgi_data(request)
      end

      private

      def extract_url(request)
        request.env['honeybadger.request.url'] || request.url
      rescue => e
        # TODO: Log these errors
        "Error: #{e.message}"
      end

      def extract_params(request)
        (request.env['action_dispatch.request.parameters'] || request.params).to_hash || {}
      rescue => e
        { error: "Failed to access params -- #{e.message}" }
      end

      def extract_session(request)
        request.session.to_hash
      rescue => e
        # Rails raises ArgumentError when `config.secret_token` is missing, and
        # ActionDispatch::Session::SessionRestoreError when the session can't be
        # restored.
        { error: "Failed to access session data -- #{e.message}" }
      end

      def extract_cgi_data(request)
        request.env.reject {|k,_| k == 'QUERY_STRING' || !k.match(/\A[A-Z_]+\Z/) }
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
honeybadger-mubi-2.1.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.1.0 lib/honeybadger/rack/request_hash.rb
honeybadger-2.1.0.beta.1 lib/honeybadger/rack/request_hash.rb
honeybadger-2.0.12 lib/honeybadger/rack/request_hash.rb
honeybadger-2.0.11 lib/honeybadger/rack/request_hash.rb