rollbar 2.12.0 → 2.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +33 -6
- data/README.md +58 -8
- data/docs/configuration.md +12 -0
- data/gemfiles/rails30.gemfile +1 -0
- data/gemfiles/rails31.gemfile +1 -0
- data/gemfiles/rails32.gemfile +1 -0
- data/gemfiles/rails40.gemfile +3 -0
- data/gemfiles/rails41.gemfile +1 -0
- data/gemfiles/rails42.gemfile +7 -1
- data/gemfiles/rails50.gemfile +2 -1
- data/gemfiles/ruby_1_8_and_1_9_2.gemfile +3 -1
- data/lib/rollbar.rb +70 -654
- data/lib/rollbar/configuration.rb +32 -0
- data/lib/rollbar/item.rb +16 -6
- data/lib/rollbar/item/backtrace.rb +26 -17
- data/lib/rollbar/item/frame.rb +112 -0
- data/lib/rollbar/middleware/js.rb +39 -35
- data/lib/rollbar/middleware/rails/rollbar.rb +3 -3
- data/lib/rollbar/notifier.rb +645 -0
- data/lib/rollbar/plugins/delayed_job/job_data.rb +40 -21
- data/lib/rollbar/plugins/rails.rb +2 -2
- data/lib/rollbar/plugins/rake.rb +32 -6
- data/lib/rollbar/plugins/resque.rb +11 -0
- data/lib/rollbar/plugins/resque/failure.rb +39 -0
- data/lib/rollbar/plugins/validations.rb +10 -0
- data/lib/rollbar/request_data_extractor.rb +36 -18
- data/lib/rollbar/scrubbers/params.rb +2 -1
- data/lib/rollbar/truncation.rb +1 -1
- data/lib/rollbar/truncation/frames_strategy.rb +2 -1
- data/lib/rollbar/truncation/min_body_strategy.rb +2 -1
- data/lib/rollbar/truncation/strings_strategy.rb +1 -1
- data/lib/rollbar/version.rb +1 -1
- data/spec/controllers/home_controller_spec.rb +13 -24
- data/spec/delayed/backend/test.rb +1 -0
- data/spec/requests/home_spec.rb +1 -1
- data/spec/rollbar/configuration_spec.rb +22 -0
- data/spec/rollbar/item/backtrace_spec.rb +26 -0
- data/spec/rollbar/item/frame_spec.rb +267 -0
- data/spec/rollbar/item_spec.rb +27 -2
- data/spec/rollbar/middleware/js_spec.rb +23 -0
- data/spec/rollbar/middleware/sinatra_spec.rb +7 -7
- data/spec/rollbar/notifier_spec.rb +43 -0
- data/spec/rollbar/plugins/delayed_job/{job_data.rb → job_data_spec.rb} +15 -2
- data/spec/rollbar/plugins/rack_spec.rb +7 -7
- data/spec/rollbar/plugins/rake_spec.rb +1 -2
- data/spec/rollbar/plugins/resque/failure_spec.rb +36 -0
- data/spec/rollbar/request_data_extractor_spec.rb +103 -1
- data/spec/rollbar/truncation/min_body_strategy_spec.rb +1 -1
- data/spec/rollbar/truncation/strings_strategy_spec.rb +2 -2
- data/spec/rollbar_bc_spec.rb +4 -4
- data/spec/rollbar_spec.rb +99 -37
- data/spec/spec_helper.rb +2 -2
- data/spec/support/notifier_helpers.rb +2 -0
- metadata +16 -4
| @@ -1,29 +1,48 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
               | 
| 1 | 
            +
            module Rollbar
         | 
| 2 | 
            +
              module Delayed
         | 
| 3 | 
            +
                class JobData
         | 
| 4 | 
            +
                  attr_reader :job
         | 
| 3 5 |  | 
| 4 | 
            -
             | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 6 | 
            +
                  def initialize(job)
         | 
| 7 | 
            +
                    @job = job
         | 
| 8 | 
            +
                  end
         | 
| 7 9 |  | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
                handler_parent = job_data['job'] ? job_data['job'] : job_data
         | 
| 11 | 
            -
                handler_parent['handler'] = handler_data
         | 
| 10 | 
            +
                  def to_hash
         | 
| 11 | 
            +
                    job_data = extract_job_data
         | 
| 12 12 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 13 | 
            +
                    handler_parent = job_data['job'] ? job_data['job'] : job_data
         | 
| 14 | 
            +
                    handler_parent['handler'] = handler_data
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    job_data
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  private
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  def extract_job_data
         | 
| 22 | 
            +
                    if job.respond_to?(:as_json)
         | 
| 23 | 
            +
                      job.as_json
         | 
| 24 | 
            +
                    else
         | 
| 25 | 
            +
                      Hash[job.to_hash.map { |k, v| [k.to_s, v] }]
         | 
| 26 | 
            +
                    end
         | 
| 27 | 
            +
                  end
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                  def handler_data
         | 
| 30 | 
            +
                    payload_object = job.payload_object
         | 
| 15 31 |  | 
| 16 | 
            -
             | 
| 32 | 
            +
                    return payload_object unless payload_object.respond_to?(:object)
         | 
| 17 33 |  | 
| 18 | 
            -
             | 
| 19 | 
            -
             | 
| 34 | 
            +
                    object_data(payload_object.object)
         | 
| 35 | 
            +
                  end
         | 
| 20 36 |  | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
             | 
| 24 | 
            -
             | 
| 25 | 
            -
             | 
| 26 | 
            -
             | 
| 27 | 
            -
             | 
| 37 | 
            +
                  def object_data(object)
         | 
| 38 | 
            +
                    {
         | 
| 39 | 
            +
                      :method_name => job.payload_object.method_name,
         | 
| 40 | 
            +
                      :args => job.payload_object.args,
         | 
| 41 | 
            +
                      :object => object.is_a?(Class) ? object.name : object.to_s
         | 
| 42 | 
            +
                    }
         | 
| 43 | 
            +
                  rescue
         | 
| 44 | 
            +
                    {}
         | 
| 45 | 
            +
                  end
         | 
| 46 | 
            +
                end
         | 
| 28 47 | 
             
              end
         | 
| 29 48 | 
             
            end
         | 
| @@ -31,7 +31,7 @@ Rollbar.plugins.define('rails-rollbar.js') do | |
| 31 31 | 
             
                      # customer is using SecureHeaders > 3.0
         | 
| 32 32 | 
             
                      class Rails
         | 
| 33 33 | 
             
                        def load(plugin)
         | 
| 34 | 
            -
                          plugin_execute =  | 
| 34 | 
            +
                          plugin_execute = plugin_execute_proc_body(plugin)
         | 
| 35 35 |  | 
| 36 36 | 
             
                          return after_secure_headers(&plugin_execute) if secure_headers_middleware?
         | 
| 37 37 |  | 
| @@ -42,7 +42,7 @@ Rollbar.plugins.define('rails-rollbar.js') do | |
| 42 42 | 
             
                          Rollbar::Railtie.initializer('rollbar.js.frameworks.rails', :after => 'secure_headers.middleware', &block)
         | 
| 43 43 | 
             
                        end
         | 
| 44 44 |  | 
| 45 | 
            -
                        def  | 
| 45 | 
            +
                        def plugin_execute_proc_body(plugin)
         | 
| 46 46 | 
             
                          proc do
         | 
| 47 47 | 
             
                            plugin.execute do
         | 
| 48 48 | 
             
                              if Rollbar.configuration.js_enabled
         | 
    
        data/lib/rollbar/plugins/rake.rb
    CHANGED
    
    | @@ -5,17 +5,38 @@ Rollbar.plugins.define('rake') do | |
| 5 5 |  | 
| 6 6 | 
             
              module Rollbar
         | 
| 7 7 | 
             
                module Rake
         | 
| 8 | 
            +
                  class << self
         | 
| 9 | 
            +
                    attr_accessor :patched
         | 
| 10 | 
            +
                  end
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                  module Handler
         | 
| 13 | 
            +
                    def self.included(base)
         | 
| 14 | 
            +
                      base.class_eval do
         | 
| 15 | 
            +
                        alias_method :orig_display_error_message, :display_error_message
         | 
| 16 | 
            +
                        alias_method :display_error_message, :display_error_message_with_rollbar
         | 
| 17 | 
            +
                      end
         | 
| 18 | 
            +
                    end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                    def display_error_message_with_rollbar(ex)
         | 
| 21 | 
            +
                      Rollbar.error(ex, :use_exception_level_filters => true)
         | 
| 22 | 
            +
                      orig_display_error_message(ex)
         | 
| 23 | 
            +
                    end
         | 
| 24 | 
            +
                  end
         | 
| 25 | 
            +
             | 
| 8 26 | 
             
                  def self.patch!
         | 
| 9 | 
            -
                     | 
| 27 | 
            +
                    unless patch?
         | 
| 28 | 
            +
                      skip_patch
         | 
| 10 29 |  | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 30 | 
            +
                      return
         | 
| 31 | 
            +
                    end
         | 
| 13 32 |  | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
                         | 
| 33 | 
            +
                    ::Rake.application.instance_eval do
         | 
| 34 | 
            +
                      class << self
         | 
| 35 | 
            +
                        include ::Rollbar::Rake::Handler
         | 
| 17 36 | 
             
                      end
         | 
| 18 37 | 
             
                    end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                    self.patched = true
         | 
| 19 40 | 
             
                  end
         | 
| 20 41 |  | 
| 21 42 | 
             
                  def self.skip_patch
         | 
| @@ -23,6 +44,7 @@ Rollbar.plugins.define('rake') do | |
| 23 44 | 
             
                  end
         | 
| 24 45 |  | 
| 25 46 | 
             
                  def self.patch?
         | 
| 47 | 
            +
                    return false if patched?
         | 
| 26 48 | 
             
                    return false unless rake_version
         | 
| 27 49 |  | 
| 28 50 | 
             
                    major, minor, = rake_version.split('.').map(&:to_i)
         | 
| @@ -30,6 +52,10 @@ Rollbar.plugins.define('rake') do | |
| 30 52 | 
             
                    major > 0 || major == 0 && minor > 8
         | 
| 31 53 | 
             
                  end
         | 
| 32 54 |  | 
| 55 | 
            +
                  def self.patched?
         | 
| 56 | 
            +
                    patched
         | 
| 57 | 
            +
                  end
         | 
| 58 | 
            +
             | 
| 33 59 | 
             
                  def self.rake_version
         | 
| 34 60 | 
             
                    if Object.const_defined?('RAKEVERSION')
         | 
| 35 61 | 
             
                      return RAKEVERSION
         | 
| @@ -0,0 +1,11 @@ | |
| 1 | 
            +
            Rollbar.plugins.define('resque') do
         | 
| 2 | 
            +
              require_dependency('resque')
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              # We want to have Resque::Failure::Rollbar loaded before
         | 
| 5 | 
            +
              # possible initializers, so the users can use the class
         | 
| 6 | 
            +
              # when configuring Rollbar::Failure.backend or
         | 
| 7 | 
            +
              # Rollbar::Failure::Multiple.classes
         | 
| 8 | 
            +
              execute! do
         | 
| 9 | 
            +
                require 'rollbar/plugins/resque/failure'
         | 
| 10 | 
            +
              end
         | 
| 11 | 
            +
            end
         | 
| @@ -0,0 +1,39 @@ | |
| 1 | 
            +
            require 'rollbar'
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Resque
         | 
| 4 | 
            +
              module Failure
         | 
| 5 | 
            +
                # Falure class to use in Resque in order to send
         | 
| 6 | 
            +
                # Resque errors to the Rollbar API
         | 
| 7 | 
            +
                class Rollbar < Base
         | 
| 8 | 
            +
                  def save
         | 
| 9 | 
            +
                    payload_with_options =
         | 
| 10 | 
            +
                      if use_exception_level_filters?
         | 
| 11 | 
            +
                        payload.merge(:use_exception_level_filters => true)
         | 
| 12 | 
            +
                      else
         | 
| 13 | 
            +
                        payload
         | 
| 14 | 
            +
                      end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                    rollbar.error(exception, payload_with_options)
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                  private
         | 
| 20 | 
            +
             | 
| 21 | 
            +
                  # We want to disable async reporting since original
         | 
| 22 | 
            +
                  # resque-rollbar implementation disabled it.
         | 
| 23 | 
            +
                  def rollbar
         | 
| 24 | 
            +
                    notifier = ::Rollbar.notifier.scope
         | 
| 25 | 
            +
                    notifier.configuration.use_async = false
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    notifier
         | 
| 28 | 
            +
                  end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                  def use_exception_level_filters?
         | 
| 31 | 
            +
                    Gem::Version.new(rollbar_version) > Gem::Version.new('1.3.0')
         | 
| 32 | 
            +
                  end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  def rollbar_version
         | 
| 35 | 
            +
                    ::Rollbar::VERSION
         | 
| 36 | 
            +
                  end
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
              end
         | 
| 39 | 
            +
            end
         | 
| @@ -29,5 +29,15 @@ Rollbar.plugins.define('active_model') do | |
| 29 29 | 
             
                ActiveModel::Validations.module_eval do
         | 
| 30 30 | 
             
                  include Rollbar::ActiveRecordExtension
         | 
| 31 31 | 
             
                end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                # If ActiveRecord::Base has been already loaded,
         | 
| 34 | 
            +
                # it's including a not updated version of ActiveModel::Validations
         | 
| 35 | 
            +
                # We then want to include Rollbar::ActiveRecordExtension
         | 
| 36 | 
            +
                # in ActiveRecord::Base
         | 
| 37 | 
            +
                if defined?(ActiveRecord::Base)
         | 
| 38 | 
            +
                  ActiveRecord::Base.class_eval do
         | 
| 39 | 
            +
                    include Rollbar::ActiveRecordExtension
         | 
| 40 | 
            +
                  end
         | 
| 41 | 
            +
                end
         | 
| 32 42 | 
             
              end
         | 
| 33 43 | 
             
            end
         | 
| @@ -5,9 +5,12 @@ require 'rollbar/scrubbers' | |
| 5 5 | 
             
            require 'rollbar/scrubbers/url'
         | 
| 6 6 | 
             
            require 'rollbar/scrubbers/params'
         | 
| 7 7 | 
             
            require 'rollbar/util/ip_obfuscator'
         | 
| 8 | 
            +
            require 'rollbar/json'
         | 
| 8 9 |  | 
| 9 10 | 
             
            module Rollbar
         | 
| 10 11 | 
             
              module RequestDataExtractor
         | 
| 12 | 
            +
                ALLOWED_HEADERS_REGEX = /^HTTP_|^CONTENT_TYPE$|^CONTENT_LENGTH$/
         | 
| 13 | 
            +
             | 
| 11 14 | 
             
                def extract_person_data_from_controller(env)
         | 
| 12 15 | 
             
                  if env.has_key?('rollbar.person_data')
         | 
| 13 16 | 
             
                    person_data = env['rollbar.person_data'] || {}
         | 
| @@ -21,9 +24,8 @@ module Rollbar | |
| 21 24 |  | 
| 22 25 | 
             
                def extract_request_data_from_rack(env)
         | 
| 23 26 | 
             
                  rack_req = ::Rack::Request.new(env)
         | 
| 24 | 
            -
             | 
| 25 27 | 
             
                  sensitive_params = sensitive_params_list(env)
         | 
| 26 | 
            -
             | 
| 28 | 
            +
             | 
| 27 29 | 
             
                  get_params = scrub_params(rollbar_get_params(rack_req), sensitive_params)
         | 
| 28 30 | 
             
                  post_params = scrub_params(rollbar_post_params(rack_req), sensitive_params)
         | 
| 29 31 | 
             
                  raw_body_params = scrub_params(mergeable_raw_body_params(rack_req), sensitive_params)
         | 
| @@ -32,17 +34,18 @@ module Rollbar | |
| 32 34 | 
             
                  route_params = scrub_params(rollbar_route_params(env), sensitive_params)
         | 
| 33 35 |  | 
| 34 36 | 
             
                  url = scrub_url(rollbar_url(env), sensitive_params)
         | 
| 35 | 
            -
                  params = request_params.merge(get_params).merge(post_params).merge(raw_body_params)
         | 
| 36 37 |  | 
| 37 38 | 
             
                  data = {
         | 
| 38 | 
            -
                    :params => params,
         | 
| 39 39 | 
             
                    :url => url,
         | 
| 40 | 
            +
                    :params => route_params,
         | 
| 41 | 
            +
                    :GET => get_params,
         | 
| 42 | 
            +
                    :POST => post_params,
         | 
| 43 | 
            +
                    :body => Rollbar::JSON.dump(raw_body_params),
         | 
| 40 44 | 
             
                    :user_ip => rollbar_user_ip(env),
         | 
| 41 45 | 
             
                    :headers => rollbar_headers(env),
         | 
| 42 46 | 
             
                    :cookies => cookies,
         | 
| 43 47 | 
             
                    :session => session,
         | 
| 44 | 
            -
                    :method => rollbar_request_method(env) | 
| 45 | 
            -
                    :route => route_params
         | 
| 48 | 
            +
                    :method => rollbar_request_method(env)
         | 
| 46 49 | 
             
                  }
         | 
| 47 50 |  | 
| 48 51 | 
             
                  if env['action_dispatch.request_id']
         | 
| @@ -92,7 +95,7 @@ module Rollbar | |
| 92 95 | 
             
                end
         | 
| 93 96 |  | 
| 94 97 | 
             
                def rollbar_headers(env)
         | 
| 95 | 
            -
                  env.keys.grep( | 
| 98 | 
            +
                  env.keys.grep(ALLOWED_HEADERS_REGEX).map do |header|
         | 
| 96 99 | 
             
                    name = header.gsub(/^HTTP_/, '').split('_').map(&:capitalize).join('-')
         | 
| 97 100 | 
             
                    if name == 'Cookie'
         | 
| 98 101 | 
             
                      {}
         | 
| @@ -125,13 +128,33 @@ module Rollbar | |
| 125 128 | 
             
                end
         | 
| 126 129 |  | 
| 127 130 | 
             
                def rollbar_user_ip(env)
         | 
| 128 | 
            -
                  user_ip_string = (env['action_dispatch.remote_ip'] || env['HTTP_X_REAL_IP'] || env['HTTP_X_FORWARDED_FOR'] || env['REMOTE_ADDR']).to_s
         | 
| 131 | 
            +
                  user_ip_string = (env['action_dispatch.remote_ip'] || env['HTTP_X_REAL_IP'] || x_forwarded_for_client(env['HTTP_X_FORWARDED_FOR']) || env['REMOTE_ADDR']).to_s
         | 
| 129 132 |  | 
| 130 133 | 
             
                  Rollbar::Util::IPObfuscator.obfuscate_ip(user_ip_string)
         | 
| 131 134 | 
             
                rescue
         | 
| 132 135 | 
             
                  nil
         | 
| 133 136 | 
             
                end
         | 
| 134 137 |  | 
| 138 | 
            +
                def x_forwarded_for_client(header_value)
         | 
| 139 | 
            +
                  return nil unless header_value
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                  ips = header_value.split(',').map(&:strip)
         | 
| 142 | 
            +
             | 
| 143 | 
            +
                  find_not_private_ip(ips)
         | 
| 144 | 
            +
                end
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                def find_not_private_ip(ips)
         | 
| 147 | 
            +
                  ips.detect do |ip|
         | 
| 148 | 
            +
                    octets = ip.match(/^(\d{1,3}).(\d{1,3}).(\d{1,3}).(\d{1,3})$/)[1, 4].map(&:to_i)
         | 
| 149 | 
            +
             | 
| 150 | 
            +
                    is_private = (octets[0] == 10) ||
         | 
| 151 | 
            +
                                 ((octets[0] == 172) && (octets[1] >= 16) && (octets[1] <= 31)) ||
         | 
| 152 | 
            +
                                 ((octets[0] == 192) && (octets[1] == 168))
         | 
| 153 | 
            +
             | 
| 154 | 
            +
                    !is_private
         | 
| 155 | 
            +
                  end
         | 
| 156 | 
            +
                end
         | 
| 157 | 
            +
             | 
| 135 158 | 
             
                def rollbar_get_params(rack_req)
         | 
| 136 159 | 
             
                  rack_req.GET
         | 
| 137 160 | 
             
                rescue
         | 
| @@ -162,21 +185,16 @@ module Rollbar | |
| 162 185 | 
             
                     rack_req.env['ACCEPT'] =~ /\bjson\b/)
         | 
| 163 186 | 
             
                end
         | 
| 164 187 |  | 
| 165 | 
            -
                def rollbar_request_params(env)
         | 
| 166 | 
            -
                  env['action_dispatch.request.parameters'] || {}
         | 
| 167 | 
            -
                end
         | 
| 168 | 
            -
             | 
| 169 188 | 
             
                def rollbar_route_params(env)
         | 
| 170 189 | 
             
                  return {} unless defined?(Rails)
         | 
| 171 190 |  | 
| 172 191 | 
             
                  begin
         | 
| 173 | 
            -
                     | 
| 192 | 
            +
                    environment = { :method => rollbar_request_method(env) }
         | 
| 174 193 |  | 
| 175 | 
            -
                     | 
| 176 | 
            -
             | 
| 177 | 
            -
             | 
| 178 | 
            -
             | 
| 179 | 
            -
                    }
         | 
| 194 | 
            +
                    # recognize_path() will return the controller, action
         | 
| 195 | 
            +
                    # route params (if any)and format (if defined)
         | 
| 196 | 
            +
                    ::Rails.application.routes.recognize_path(env['PATH_INFO'],
         | 
| 197 | 
            +
                                                              environment)
         | 
| 180 198 | 
             
                  rescue
         | 
| 181 199 | 
             
                    {}
         | 
| 182 200 | 
             
                  end
         | 
| @@ -1,3 +1,4 @@ | |
| 1 | 
            +
            require 'tempfile'
         | 
| 1 2 | 
             
            require 'rollbar/scrubbers'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Rollbar
         | 
| @@ -7,7 +8,7 @@ module Rollbar | |
| 7 8 | 
             
                # Also, if that configuration option is se to :scrub_all, it will scrub all
         | 
| 8 9 | 
             
                # received parameters
         | 
| 9 10 | 
             
                class Params
         | 
| 10 | 
            -
                  SKIPPED_CLASSES = [Tempfile]
         | 
| 11 | 
            +
                  SKIPPED_CLASSES = [::Tempfile]
         | 
| 11 12 | 
             
                  ATTACHMENT_CLASSES = %w(ActionDispatch::Http::UploadedFile Rack::Multipart::UploadedFile).freeze
         | 
| 12 13 | 
             
                  SCRUB_ALL = :scrub_all
         | 
| 13 14 |  | 
    
        data/lib/rollbar/truncation.rb
    CHANGED
    
    
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require 'rollbar/truncation/mixin'
         | 
| 2 | 
            +
            require 'rollbar/util'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Rollbar
         | 
| 4 5 | 
             
              module Truncation
         | 
| @@ -10,7 +11,7 @@ module Rollbar | |
| 10 11 | 
             
                  end
         | 
| 11 12 |  | 
| 12 13 | 
             
                  def call(payload)
         | 
| 13 | 
            -
                    new_payload = payload | 
| 14 | 
            +
                    new_payload = Rollbar::Util.deep_copy(payload)
         | 
| 14 15 | 
             
                    body = new_payload['data']['body']
         | 
| 15 16 |  | 
| 16 17 | 
             
                    if body['trace_chain']
         | 
| @@ -1,4 +1,5 @@ | |
| 1 1 | 
             
            require 'rollbar/truncation/mixin'
         | 
| 2 | 
            +
            require 'rollbar/util'
         | 
| 2 3 |  | 
| 3 4 | 
             
            module Rollbar
         | 
| 4 5 | 
             
              module Truncation
         | 
| @@ -10,7 +11,7 @@ module Rollbar | |
| 10 11 | 
             
                  end
         | 
| 11 12 |  | 
| 12 13 | 
             
                  def call(payload)
         | 
| 13 | 
            -
                    new_payload = payload | 
| 14 | 
            +
                    new_payload = Rollbar::Util.deep_copy(payload)
         | 
| 14 15 | 
             
                    body = new_payload['data']['body']
         | 
| 15 16 |  | 
| 16 17 | 
             
                    if body['trace_chain']
         | 
    
        data/lib/rollbar/version.rb
    CHANGED
    
    
| @@ -6,6 +6,7 @@ describe HomeController do | |
| 6 6 | 
             
              let(:notifier) { Rollbar.notifier }
         | 
| 7 7 |  | 
| 8 8 | 
             
              before do
         | 
| 9 | 
            +
                Rollbar.clear_notifier!
         | 
| 9 10 | 
             
                reset_configuration
         | 
| 10 11 | 
             
                preconfigure_rails_notifier
         | 
| 11 12 |  | 
| @@ -53,7 +54,6 @@ describe HomeController do | |
| 53 54 | 
             
                  data.should have_key(:headers)
         | 
| 54 55 | 
             
                  data.should have_key(:session)
         | 
| 55 56 | 
             
                  data.should have_key(:method)
         | 
| 56 | 
            -
                  data.should have_key(:route)
         | 
| 57 57 | 
             
                end
         | 
| 58 58 |  | 
| 59 59 | 
             
                it "should build empty person data when no one is logged-in" do
         | 
| @@ -169,21 +169,10 @@ describe HomeController do | |
| 169 169 | 
             
                end
         | 
| 170 170 |  | 
| 171 171 | 
             
                context "rollbar_route_params", :type => 'request' do
         | 
| 172 | 
            -
                  it "should save route params in request[:route]" do
         | 
| 173 | 
            -
                    route = controller.send(:rollbar_request_data)[:route]
         | 
| 174 | 
            -
             | 
| 175 | 
            -
                    route.should have_key(:controller)
         | 
| 176 | 
            -
                    route.should have_key(:action)
         | 
| 177 | 
            -
                    route.should have_key(:format)
         | 
| 178 | 
            -
             | 
| 179 | 
            -
                    route[:controller].should == 'home'
         | 
| 180 | 
            -
                    route[:action].should == 'index'
         | 
| 181 | 
            -
                  end
         | 
| 182 | 
            -
             | 
| 183 172 | 
             
                  it "should save controller and action in the payload body" do
         | 
| 184 173 | 
             
                    post '/report_exception'
         | 
| 185 174 |  | 
| 186 | 
            -
                    route = controller.send(:rollbar_request_data)[: | 
| 175 | 
            +
                    route = controller.send(:rollbar_request_data)[:params]
         | 
| 187 176 |  | 
| 188 177 | 
             
                    route[:controller].should == 'home'
         | 
| 189 178 | 
             
                    route[:action].should == 'report_exception'
         | 
| @@ -206,7 +195,7 @@ describe HomeController do | |
| 206 195 |  | 
| 207 196 | 
             
                  post '/report_exception', params
         | 
| 208 197 |  | 
| 209 | 
            -
                  filtered = Rollbar.last_report[:request][: | 
| 198 | 
            +
                  filtered = Rollbar.last_report[:request][:POST]
         | 
| 210 199 |  | 
| 211 200 | 
             
                  expect(filtered["passwd"]).to match(/\**/)
         | 
| 212 201 | 
             
                  expect(filtered["password"]).to match(/\**/)
         | 
| @@ -229,7 +218,7 @@ describe HomeController do | |
| 229 218 |  | 
| 230 219 | 
             
                  post '/report_exception', params
         | 
| 231 220 |  | 
| 232 | 
            -
                  filtered = Rollbar.last_report[:request][: | 
| 221 | 
            +
                  filtered = Rollbar.last_report[:request][:POST]
         | 
| 233 222 |  | 
| 234 223 | 
             
                  filtered["passwd"].should == "visible"
         | 
| 235 224 | 
             
                  # config.filter_parameters is set to [:password] in
         | 
| @@ -262,7 +251,7 @@ describe HomeController do | |
| 262 251 | 
             
                  put '/report_exception', { :putparam => "putval" }
         | 
| 263 252 |  | 
| 264 253 | 
             
                  Rollbar.last_report.should_not be_nil
         | 
| 265 | 
            -
                  Rollbar.last_report[:request][: | 
| 254 | 
            +
                  Rollbar.last_report[:request][:POST]["putparam"].should == "putval"
         | 
| 266 255 | 
             
                end
         | 
| 267 256 |  | 
| 268 257 | 
             
                context 'using deprecated report_exception' do
         | 
| @@ -272,7 +261,7 @@ describe HomeController do | |
| 272 261 | 
             
                    put '/deprecated_report_exception', { :putparam => "putval" }
         | 
| 273 262 |  | 
| 274 263 | 
             
                    Rollbar.last_report.should_not be_nil
         | 
| 275 | 
            -
                    Rollbar.last_report[:request][: | 
| 264 | 
            +
                    Rollbar.last_report[:request][:POST]["putparam"].should == "putval"
         | 
| 276 265 | 
             
                  end
         | 
| 277 266 | 
             
                end
         | 
| 278 267 |  | 
| @@ -284,7 +273,7 @@ describe HomeController do | |
| 284 273 | 
             
                  post '/report_exception', params, { 'CONTENT_TYPE' => 'application/json' }
         | 
| 285 274 |  | 
| 286 275 | 
             
                  Rollbar.last_report.should_not be_nil
         | 
| 287 | 
            -
                  Rollbar.last_report[:request][: | 
| 276 | 
            +
                  expect(Rollbar.last_report[:request][:body]).to be_eql(params)
         | 
| 288 277 | 
             
                end
         | 
| 289 278 | 
             
              end
         | 
| 290 279 |  | 
| @@ -306,7 +295,7 @@ describe HomeController do | |
| 306 295 | 
             
                    config['action_dispatch.show_exceptions'] = true
         | 
| 307 296 | 
             
                  end
         | 
| 308 297 |  | 
| 309 | 
            -
                  after | 
| 298 | 
            +
                  after do
         | 
| 310 299 | 
             
                    if Dummy::Application.respond_to? :env_config
         | 
| 311 300 | 
             
                      config = Dummy::Application.env_config
         | 
| 312 301 | 
             
                    else
         | 
| @@ -356,7 +345,7 @@ describe HomeController do | |
| 356 345 | 
             
                  expect { get '/foo/bar', { :foo => :bar } }.to raise_exception(ActionController::RoutingError)
         | 
| 357 346 |  | 
| 358 347 | 
             
                  report = Rollbar.last_report
         | 
| 359 | 
            -
                  expect(report[:request][: | 
| 348 | 
            +
                  expect(report[:request][:GET]['foo']).to be_eql('bar')
         | 
| 360 349 | 
             
                end
         | 
| 361 350 | 
             
              end
         | 
| 362 351 |  | 
| @@ -378,7 +367,7 @@ describe HomeController do | |
| 378 367 | 
             
                  it "saves attachment data" do
         | 
| 379 368 | 
             
                    expect { post '/file_upload', { :upload => file1 } }.to raise_exception(NameError)
         | 
| 380 369 |  | 
| 381 | 
            -
                    upload_param = Rollbar.last_report[:request][: | 
| 370 | 
            +
                    upload_param = Rollbar.last_report[:request][:POST]['upload']
         | 
| 382 371 |  | 
| 383 372 | 
             
                    expect(upload_param).to have_key(:filename)
         | 
| 384 373 | 
             
                    expect(upload_param).to have_key(:type)
         | 
| @@ -392,7 +381,7 @@ describe HomeController do | |
| 392 381 | 
             
                context 'with multiple uploads', :type => :request do
         | 
| 393 382 | 
             
                  it "saves attachment data for all uploads" do
         | 
| 394 383 | 
             
                    expect { post '/file_upload', { :upload => [file1, file2] } }.to raise_exception(NameError)
         | 
| 395 | 
            -
                    sent_params = Rollbar.last_report[:request][: | 
| 384 | 
            +
                    sent_params = Rollbar.last_report[:request][:POST]['upload']
         | 
| 396 385 |  | 
| 397 386 | 
             
                    expect(sent_params).to be_kind_of(Array)
         | 
| 398 387 | 
             
                    expect(sent_params.size).to be(2)
         | 
| @@ -420,7 +409,7 @@ describe HomeController do | |
| 420 409 | 
             
                    post '/cause_exception', params, { 'ACCEPT' => 'application/vnd.github.v3+json' }
         | 
| 421 410 | 
             
                  end.to raise_exception(NameError)
         | 
| 422 411 |  | 
| 423 | 
            -
                  expect(Rollbar.last_report[:request][: | 
| 412 | 
            +
                  expect(Rollbar.last_report[:request][:POST]['foo']).to be_eql('bar')
         | 
| 424 413 | 
             
                end
         | 
| 425 414 | 
             
              end
         | 
| 426 415 |  | 
| @@ -448,7 +437,7 @@ describe HomeController do | |
| 448 437 | 
             
                end
         | 
| 449 438 | 
             
              end
         | 
| 450 439 |  | 
| 451 | 
            -
              after | 
| 440 | 
            +
              after do
         | 
| 452 441 | 
             
                Rollbar.configure do |config|
         | 
| 453 442 | 
             
                  config.logger = ::Rails.logger
         | 
| 454 443 | 
             
                end
         |