Sha256: b121118119436a8baa2fe3bfa5774748a36e14570cb7464b15b53c529d0126fb

Contents?: true

Size: 1.36 KB

Versions: 5

Compression:

Stored size: 1.36 KB

Contents

require 'raven/interfaces'

module Raven
  class HttpInterface < Interface

    name 'request'
    attr_accessor :url
    attr_accessor :method
    attr_accessor :data
    attr_accessor :query_string
    attr_accessor :cookies
    attr_accessor :headers
    attr_accessor :env

    def initialize(*arguments)
      self.headers = {}
      self.env = {}
      super(*arguments)
    end

    def from_rack(env)
      require 'rack'
      req = ::Rack::Request.new(env)
      self.url = req.url.split('?').first
      self.method = req.request_method
      self.query_string = req.query_string
      env.each_pair do |key, value|
        next unless key.upcase == key # Non-upper case stuff isn't either
        if key.start_with?('HTTP_')
          # Header
          http_key = key[5..key.length - 1].split('_').map { |s| s.capitalize }.join('-')
          self.headers[http_key] = value.to_s
        elsif ['CONTENT_TYPE', 'CONTENT_LENGTH'].include? key
          self.headers[key.capitalize] = value.to_s
        elsif ['REMOTE_ADDR', 'SERVER_NAME', 'SERVER_PORT'].include? key
          # Environment
          self.env[key] = value.to_s
        end
      end

      self.data =
        if req.form_data?
          req.POST
        elsif req.body
          data = req.body.read
          req.body.rewind
          data
        end
    end
  end

  register_interface :http => HttpInterface
end

Version data entries

5 entries across 5 versions & 2 rubygems

Version Path
sentry-raven-0.12.0 lib/raven/interfaces/http.rb
mustwin-sentry-raven-0.11.2 lib/raven/interfaces/http.rb
sentry-raven-0.11.2 lib/raven/interfaces/http.rb
sentry-raven-0.11.1 lib/raven/interfaces/http.rb
sentry-raven-0.10.1 lib/raven/interfaces/http.rb