lib/honeybadger/backend/base.rb in honeybadger-5.2.0 vs lib/honeybadger/backend/base.rb in honeybadger-5.2.1
- old
+ new
@@ -1,116 +1,116 @@
-require 'forwardable'
-require 'net/http'
-require 'json'
-
-require 'honeybadger/logging'
-
-module Honeybadger
- module Backend
- class Response
- NOT_BLANK = /\S/
-
- attr_reader :code, :body, :message, :error
-
- FRIENDLY_ERRORS = {
- 429 => "Your project is currently sending too many errors.\nThis issue should resolve itself once error traffic is reduced.".freeze,
- 503 => "Your project is currently sending too many errors.\nThis issue should resolve itself once error traffic is reduced.".freeze,
- 402 => "The project owner's billing information has expired (or the trial has ended).\nPlease check your payment details or email support@honeybadger.io for help.".freeze,
- 403 => "The API key is invalid. Please check your API key and try again.".freeze
- }.freeze
-
- # Initializes the Response instance.
- #
- # @overload initialize(response)
- # Creates an instance from a +Net::HTTPResponse+.
- # @param [Net::HTTPResponse] response With 1 argument, the code, body,
- # and message will be determined automatically.
- #
- # @overload initialize(code, body, message)
- # Creates an instance from parameters.
- # @param [Integer] code The status code. May also be :error for requests
- # which failed to reach the server.
- # @param [String] body The String body of the response.
- # @param [String] message The String message returned by the server (or
- # set by the backend in the case of an :error code).
- def initialize(*args)
- if (response = args.first).kind_of?(Net::HTTPResponse)
- @code, @body, @message = response.code.to_i, response.body.to_s, response.message
- else
- @code, @body, @message = args
- end
-
- @success = (200..299).cover?(@code)
- @error = parse_error(body) unless @success
- end
-
- def success?
- @success
- end
-
- def error_message
- return message if code == :error
- return FRIENDLY_ERRORS[code] if FRIENDLY_ERRORS[code]
- return error if error =~ NOT_BLANK
- msg = "The server responded with #{code}"
- msg << ": #{message}" if message =~ NOT_BLANK
- msg
- end
-
- private
-
- def parse_error(body)
- return unless body =~ NOT_BLANK
- obj = JSON.parse(body)
- return obj['error'] if obj.kind_of?(Hash)
- rescue JSON::ParserError
- nil
- end
- end
-
- class Base
- extend Forwardable
-
- include Honeybadger::Logging::Helper
-
- def initialize(config)
- @config = config
- end
-
- # Process payload for feature.
- #
- # @example
- # backend.notify(:notices, Notice.new(...))
- #
- # @param [Symbol] feature The feature name (corresponds to HTTP
- # endpoint). Current options are: `:notices`, `:deploys`, `:ping`.
- # @param [#to_json] payload The JSON payload to send.
- #
- # @raise NotImplementedError
- def notify(feature, payload)
- raise NotImplementedError, 'must define #notify on subclass.'
- end
-
- # Does a check in using the input id.
- #
- # @param [String] id The unique check_in id.
- #
- # @raise NotImplementedError
- def check_in(id)
- raise NotImplementedError, 'must define #check_in on subclass.'
- end
-
- # Track a deployment
- # @example
- # backend.track_deployment({ revision: 'be2ceb6' })
- #
- # @param [#to_json] payload The JSON payload containing all deployment data.
- def track_deployment(payload)
- notify(:deploys, payload)
- end
-
- private
-
- attr_reader :config
- end
- end
-end
+require 'forwardable'
+require 'net/http'
+require 'json'
+
+require 'honeybadger/logging'
+
+module Honeybadger
+ module Backend
+ class Response
+ NOT_BLANK = /\S/
+
+ attr_reader :code, :body, :message, :error
+
+ FRIENDLY_ERRORS = {
+ 429 => "Your project is currently sending too many errors.\nThis issue should resolve itself once error traffic is reduced.".freeze,
+ 503 => "Your project is currently sending too many errors.\nThis issue should resolve itself once error traffic is reduced.".freeze,
+ 402 => "The project owner's billing information has expired (or the trial has ended).\nPlease check your payment details or email support@honeybadger.io for help.".freeze,
+ 403 => "The API key is invalid. Please check your API key and try again.".freeze
+ }.freeze
+
+ # Initializes the Response instance.
+ #
+ # @overload initialize(response)
+ # Creates an instance from a +Net::HTTPResponse+.
+ # @param [Net::HTTPResponse] response With 1 argument, the code, body,
+ # and message will be determined automatically.
+ #
+ # @overload initialize(code, body, message)
+ # Creates an instance from parameters.
+ # @param [Integer] code The status code. May also be :error for requests
+ # which failed to reach the server.
+ # @param [String] body The String body of the response.
+ # @param [String] message The String message returned by the server (or
+ # set by the backend in the case of an :error code).
+ def initialize(*args)
+ if (response = args.first).kind_of?(Net::HTTPResponse)
+ @code, @body, @message = response.code.to_i, response.body.to_s, response.message
+ else
+ @code, @body, @message = args
+ end
+
+ @success = (200..299).cover?(@code)
+ @error = parse_error(body) unless @success
+ end
+
+ def success?
+ @success
+ end
+
+ def error_message
+ return message if code == :error
+ return FRIENDLY_ERRORS[code] if FRIENDLY_ERRORS[code]
+ return error if error =~ NOT_BLANK
+ msg = "The server responded with #{code}"
+ msg << ": #{message}" if message =~ NOT_BLANK
+ msg
+ end
+
+ private
+
+ def parse_error(body)
+ return unless body =~ NOT_BLANK
+ obj = JSON.parse(body)
+ return obj['error'] if obj.kind_of?(Hash)
+ rescue JSON::ParserError
+ nil
+ end
+ end
+
+ class Base
+ extend Forwardable
+
+ include Honeybadger::Logging::Helper
+
+ def initialize(config)
+ @config = config
+ end
+
+ # Process payload for feature.
+ #
+ # @example
+ # backend.notify(:notices, Notice.new(...))
+ #
+ # @param [Symbol] feature The feature name (corresponds to HTTP
+ # endpoint). Current options are: `:notices`, `:deploys`, `:ping`.
+ # @param [#to_json] payload The JSON payload to send.
+ #
+ # @raise NotImplementedError
+ def notify(feature, payload)
+ raise NotImplementedError, 'must define #notify on subclass.'
+ end
+
+ # Does a check in using the input id.
+ #
+ # @param [String] id The unique check_in id.
+ #
+ # @raise NotImplementedError
+ def check_in(id)
+ raise NotImplementedError, 'must define #check_in on subclass.'
+ end
+
+ # Track a deployment
+ # @example
+ # backend.track_deployment({ revision: 'be2ceb6' })
+ #
+ # @param [#to_json] payload The JSON payload containing all deployment data.
+ def track_deployment(payload)
+ notify(:deploys, payload)
+ end
+
+ private
+
+ attr_reader :config
+ end
+ end
+end