bugsnag 6.20.0 → 6.21.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 +16 -0
- data/VERSION +1 -1
- data/lib/bugsnag.rb +13 -3
- data/lib/bugsnag/configuration.rb +3 -3
- data/lib/bugsnag/integrations/railtie.rb +34 -35
- data/lib/bugsnag/middleware_stack.rb +6 -6
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d25c44a654cbfc8684f28ea8ae1853f3aa482abc2741574662afb8368ab8c5b2
         | 
| 4 | 
            +
              data.tar.gz: a5c2462967da4d5995a7e07715a310bf5290019943395feef4a782290f2e34c2
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 97c2d1764646f0e7fa90fd7c6d9fd4f3811acde1da0cd110a5f186cd164d52fb61fe2a13add1d75f3fd492ccc4c034e63167a4f1c7f06e8586363b95a58788db
         | 
| 7 | 
            +
              data.tar.gz: 64c6671f0cddbcdcc71e34ceb4719132f9e503a9e5be9ec73692348b3d023c3b68f572bba05489220dda5eea9f4a4fb89a3559f16d416eb19e6150bf86482640
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,6 +1,22 @@ | |
| 1 1 | 
             
            Changelog
         | 
| 2 2 | 
             
            =========
         | 
| 3 3 |  | 
| 4 | 
            +
            ## v6.21.0 (23 June 2021)
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            ### Enhancements
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            * Allow a `Method` or any object responding to `#call` to be used as an `on_error` callback or middleware
         | 
| 9 | 
            +
              | [#662](https://github.com/bugsnag/bugsnag-ruby/pull/662)
         | 
| 10 | 
            +
              | [odlp](https://github.com/odlp)
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            ### Fixes
         | 
| 13 | 
            +
             | 
| 14 | 
            +
            * Deliver when an error is raised in the block argument to `notify`
         | 
| 15 | 
            +
              | [#660](https://github.com/bugsnag/bugsnag-ruby/pull/660)
         | 
| 16 | 
            +
              | [aki77](https://github.com/aki77)
         | 
| 17 | 
            +
            * Fix potential `NoMethodError` in `Bugsnag::Railtie` when using `require: false` in a Gemfile
         | 
| 18 | 
            +
              | [#666](https://github.com/bugsnag/bugsnag-ruby/pull/666)
         | 
| 19 | 
            +
             | 
| 4 20 | 
             
            ## v6.20.0 (29 March 2021)
         | 
| 5 21 |  | 
| 6 22 | 
             
            ### Enhancements
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            6. | 
| 1 | 
            +
            6.21.0
         | 
    
        data/lib/bugsnag.rb
    CHANGED
    
    | @@ -79,7 +79,12 @@ module Bugsnag | |
| 79 79 | 
             
                  report = Report.new(exception, configuration, auto_notify)
         | 
| 80 80 |  | 
| 81 81 | 
             
                  # If this is an auto_notify we yield the block before the any middleware is run
         | 
| 82 | 
            -
                   | 
| 82 | 
            +
                  begin
         | 
| 83 | 
            +
                    yield(report) if block_given? && auto_notify
         | 
| 84 | 
            +
                  rescue StandardError => e
         | 
| 85 | 
            +
                    configuration.warn("Error in internal notify block: #{e}")
         | 
| 86 | 
            +
                    configuration.warn("Error in internal notify block stacktrace: #{e.backtrace.inspect}")
         | 
| 87 | 
            +
                  end
         | 
| 83 88 |  | 
| 84 89 | 
             
                  if report.ignore?
         | 
| 85 90 | 
             
                    configuration.debug("Not notifying #{report.exceptions.last[:errorClass]} due to ignore being signified in auto_notify block")
         | 
| @@ -106,7 +111,12 @@ module Bugsnag | |
| 106 111 |  | 
| 107 112 | 
             
                    # If this is not an auto_notify then the block was provided by the user. This should be the last
         | 
| 108 113 | 
             
                    # block that is run as it is the users "most specific" block.
         | 
| 109 | 
            -
                     | 
| 114 | 
            +
                    begin
         | 
| 115 | 
            +
                      yield(report) if block_given? && !auto_notify
         | 
| 116 | 
            +
                    rescue StandardError => e
         | 
| 117 | 
            +
                      configuration.warn("Error in notify block: #{e}")
         | 
| 118 | 
            +
                      configuration.warn("Error in notify block stacktrace: #{e.backtrace.inspect}")
         | 
| 119 | 
            +
                    end
         | 
| 110 120 |  | 
| 111 121 | 
             
                    if report.ignore?
         | 
| 112 122 | 
             
                      configuration.debug("Not notifying #{report.exceptions.last[:errorClass]} due to ignore being signified in user provided block")
         | 
| @@ -265,7 +275,7 @@ module Bugsnag | |
| 265 275 | 
             
                # Returning false from an on_error callback will cause the error to be ignored
         | 
| 266 276 | 
             
                # and will prevent any remaining callbacks from being called
         | 
| 267 277 | 
             
                #
         | 
| 268 | 
            -
                # @param callback [Proc]
         | 
| 278 | 
            +
                # @param callback [Proc, Method, #call]
         | 
| 269 279 | 
             
                # @return [void]
         | 
| 270 280 | 
             
                def add_on_error(callback)
         | 
| 271 281 | 
             
                  configuration.add_on_error(callback)
         | 
| @@ -485,7 +485,7 @@ module Bugsnag | |
| 485 485 | 
             
                # Returning false from an on_error callback will cause the error to be ignored
         | 
| 486 486 | 
             
                # and will prevent any remaining callbacks from being called
         | 
| 487 487 | 
             
                #
         | 
| 488 | 
            -
                # @param callback [Proc]
         | 
| 488 | 
            +
                # @param callback [Proc, Method, #call]
         | 
| 489 489 | 
             
                # @return [void]
         | 
| 490 490 | 
             
                def add_on_error(callback)
         | 
| 491 491 | 
             
                  middleware.use(callback)
         | 
| @@ -494,10 +494,10 @@ module Bugsnag | |
| 494 494 | 
             
                ##
         | 
| 495 495 | 
             
                # Remove the given callback from the list of on_error callbacks
         | 
| 496 496 | 
             
                #
         | 
| 497 | 
            -
                # Note that this must be the same  | 
| 497 | 
            +
                # Note that this must be the same instance that was passed to
         | 
| 498 498 | 
             
                # {#add_on_error}, otherwise it will not be removed
         | 
| 499 499 | 
             
                #
         | 
| 500 | 
            -
                # @param callback [Proc]
         | 
| 500 | 
            +
                # @param callback [Proc, Method, #call]
         | 
| 501 501 | 
             
                # @return [void]
         | 
| 502 502 | 
             
                def remove_on_error(callback)
         | 
| 503 503 | 
             
                  middleware.remove(callback)
         | 
| @@ -9,11 +9,44 @@ require "bugsnag/integrations/rails/rails_breadcrumbs" | |
| 9 9 |  | 
| 10 10 | 
             
            module Bugsnag
         | 
| 11 11 | 
             
              class Railtie < ::Rails::Railtie
         | 
| 12 | 
            -
             | 
| 13 12 | 
             
                FRAMEWORK_ATTRIBUTES = {
         | 
| 14 13 | 
             
                  :framework => "Rails"
         | 
| 15 14 | 
             
                }
         | 
| 16 15 |  | 
| 16 | 
            +
                ##
         | 
| 17 | 
            +
                # Subscribes to an ActiveSupport event, leaving a breadcrumb when it triggers
         | 
| 18 | 
            +
                #
         | 
| 19 | 
            +
                # @api private
         | 
| 20 | 
            +
                # @param event [Hash] details of the event to subscribe to
         | 
| 21 | 
            +
                def event_subscription(event)
         | 
| 22 | 
            +
                  ActiveSupport::Notifications.subscribe(event[:id]) do |*, event_id, data|
         | 
| 23 | 
            +
                    filtered_data = data.slice(*event[:allowed_data])
         | 
| 24 | 
            +
                    filtered_data[:event_name] = event[:id]
         | 
| 25 | 
            +
                    filtered_data[:event_id] = event_id
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                    if event[:id] == "sql.active_record"
         | 
| 28 | 
            +
                      if data.key?(:binds)
         | 
| 29 | 
            +
                        binds = data[:binds].each_with_object({}) { |bind, output| output[bind.name] = '?' if defined?(bind.name) }
         | 
| 30 | 
            +
                        filtered_data[:binds] = JSON.dump(binds) unless binds.empty?
         | 
| 31 | 
            +
                      end
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                      # Rails < 6.1 included connection_id in the event data, but now
         | 
| 34 | 
            +
                      # includes the connection object instead
         | 
| 35 | 
            +
                      if data.key?(:connection) && !data.key?(:connection_id)
         | 
| 36 | 
            +
                        # the connection ID is the object_id of the connection object
         | 
| 37 | 
            +
                        filtered_data[:connection_id] = data[:connection].object_id
         | 
| 38 | 
            +
                      end
         | 
| 39 | 
            +
                    end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                    Bugsnag.leave_breadcrumb(
         | 
| 42 | 
            +
                      event[:message],
         | 
| 43 | 
            +
                      filtered_data,
         | 
| 44 | 
            +
                      event[:type],
         | 
| 45 | 
            +
                      :auto
         | 
| 46 | 
            +
                    )
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
             | 
| 17 50 | 
             
                rake_tasks do
         | 
| 18 51 | 
             
                  require "bugsnag/integrations/rake"
         | 
| 19 52 | 
             
                  load "bugsnag/tasks/bugsnag.rake"
         | 
| @@ -80,39 +113,5 @@ module Bugsnag | |
| 80 113 | 
             
                    Bugsnag.configuration.warn("Unable to add Bugsnag::Rack middleware as the middleware stack is frozen")
         | 
| 81 114 | 
             
                  end
         | 
| 82 115 | 
             
                end
         | 
| 83 | 
            -
             | 
| 84 | 
            -
                ##
         | 
| 85 | 
            -
                # Subscribes to an ActiveSupport event, leaving a breadcrumb when it triggers
         | 
| 86 | 
            -
                #
         | 
| 87 | 
            -
                # @api private
         | 
| 88 | 
            -
                # @param event [Hash] details of the event to subscribe to
         | 
| 89 | 
            -
                def event_subscription(event)
         | 
| 90 | 
            -
                  ActiveSupport::Notifications.subscribe(event[:id]) do |*, event_id, data|
         | 
| 91 | 
            -
                    filtered_data = data.slice(*event[:allowed_data])
         | 
| 92 | 
            -
                    filtered_data[:event_name] = event[:id]
         | 
| 93 | 
            -
                    filtered_data[:event_id] = event_id
         | 
| 94 | 
            -
             | 
| 95 | 
            -
                    if event[:id] == "sql.active_record"
         | 
| 96 | 
            -
                      if data.key?(:binds)
         | 
| 97 | 
            -
                        binds = data[:binds].each_with_object({}) { |bind, output| output[bind.name] = '?' if defined?(bind.name) }
         | 
| 98 | 
            -
                        filtered_data[:binds] = JSON.dump(binds) unless binds.empty?
         | 
| 99 | 
            -
                      end
         | 
| 100 | 
            -
             | 
| 101 | 
            -
                      # Rails < 6.1 included connection_id in the event data, but now
         | 
| 102 | 
            -
                      # includes the connection object instead
         | 
| 103 | 
            -
                      if data.key?(:connection) && !data.key?(:connection_id)
         | 
| 104 | 
            -
                        # the connection ID is the object_id of the connection object
         | 
| 105 | 
            -
                        filtered_data[:connection_id] = data[:connection].object_id
         | 
| 106 | 
            -
                      end
         | 
| 107 | 
            -
                    end
         | 
| 108 | 
            -
             | 
| 109 | 
            -
                    Bugsnag.leave_breadcrumb(
         | 
| 110 | 
            -
                      event[:message],
         | 
| 111 | 
            -
                      filtered_data,
         | 
| 112 | 
            -
                      event[:type],
         | 
| 113 | 
            -
                      :auto
         | 
| 114 | 
            -
                    )
         | 
| 115 | 
            -
                  end
         | 
| 116 | 
            -
                end
         | 
| 117 116 | 
             
              end
         | 
| 118 117 | 
             
            end
         | 
| @@ -131,8 +131,8 @@ module Bugsnag | |
| 131 131 | 
             
                #
         | 
| 132 132 | 
             
                # @return [Array<Proc>]
         | 
| 133 133 | 
             
                def middleware_procs
         | 
| 134 | 
            -
                  # Split the middleware into separate lists of  | 
| 135 | 
            -
                   | 
| 134 | 
            +
                  # Split the middleware into separate lists of callables (e.g. Proc, Lambda, Method) and Classes
         | 
| 135 | 
            +
                  callables, classes = @middlewares.partition {|middleware| middleware.respond_to?(:call) }
         | 
| 136 136 |  | 
| 137 137 | 
             
                  # Wrap the classes in a proc that, when called, news up the middleware and
         | 
| 138 138 | 
             
                  # passes the next middleware in the queue
         | 
| @@ -140,12 +140,12 @@ module Bugsnag | |
| 140 140 | 
             
                    proc {|next_middleware| middleware.new(next_middleware) }
         | 
| 141 141 | 
             
                  end
         | 
| 142 142 |  | 
| 143 | 
            -
                  # Wrap the list of  | 
| 143 | 
            +
                  # Wrap the list of callables in a proc that, when called, wraps them in an
         | 
| 144 144 | 
             
                  # 'OnErrorCallbacks' instance that also has a reference to the next middleware
         | 
| 145 | 
            -
                   | 
| 145 | 
            +
                  wrapped_callables = proc {|next_middleware| OnErrorCallbacks.new(next_middleware, callables) }
         | 
| 146 146 |  | 
| 147 | 
            -
                  # Return the combined middleware and wrapped  | 
| 148 | 
            -
                  middleware_instances.push( | 
| 147 | 
            +
                  # Return the combined middleware and wrapped callables
         | 
| 148 | 
            +
                  middleware_instances.push(wrapped_callables)
         | 
| 149 149 | 
             
                end
         | 
| 150 150 | 
             
              end
         | 
| 151 151 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: bugsnag
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 6. | 
| 4 | 
            +
              version: 6.21.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - James Smith
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-06-23 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: concurrent-ruby
         |