escalate 0.1.0.pre.1 → 0.1.0.pre.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bb743da8ea57e11a7bfa80d653548239e0b760ab
4
- data.tar.gz: 36555a0ba6f8bca3f821c5b0044739e26762cc23
3
+ metadata.gz: a3e33eb654953f4c511b2207a89df47f6db4865c
4
+ data.tar.gz: 4b245b1e402c24a933eae6ba6ac6eb9be362e5f1
5
5
  SHA512:
6
- metadata.gz: 7c735aa3214359068d14e0fd981c64c62e14896d73965d467d5b28ebaa3d2bf300ae9037164d3a4a7e5a6b4a77439a8a5137dd5d3b7b51eda27cef0ec7a57a60
7
- data.tar.gz: a3899dc985f47f6e87d609b5fdf85443b9278ca100b40e5e41e4be641c8aa6116850dc80a4426f779c34e741b5b0893c9032e3c2b59974a9b802da0bcc8629bd
6
+ metadata.gz: 28a1ecb9c22129c0b68c62ac6c5bd00eb5b41580bae1763dfdc9e0d9e732dfd22b7acc37ec84f353d4a3f7f35c18334ae92a78a5677c5e9e6453c4ccfb074767
7
+ data.tar.gz: dc2271ab38903b2c8f874adc0b21f26c3851a759f5ed1db34482d447573d3d8f13d8b8d1b5565b9106b73bde766dee65260aeb6c645d402b9326371536d3dce0
data/Gemfile CHANGED
@@ -5,6 +5,8 @@ source "https://rubygems.org"
5
5
  # Specify your gem's dependencies in escalate.gemspec
6
6
  gemspec
7
7
 
8
+ gem "contextual_logger"
9
+
8
10
  gem "pry"
9
11
  gem "pry-byebug"
10
12
 
data/Gemfile.lock CHANGED
@@ -1,9 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- escalate (0.1.0.pre.1)
4
+ escalate (0.1.0.pre.2)
5
5
  activesupport
6
- contextual_logger
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
@@ -53,6 +52,7 @@ PLATFORMS
53
52
  x86_64-darwin-19
54
53
 
55
54
  DEPENDENCIES
55
+ contextual_logger
56
56
  escalate!
57
57
  pry
58
58
  pry-byebug
data/README.md CHANGED
@@ -1,6 +1,10 @@
1
1
  # Escalate
2
2
 
3
- A simple and lightweight gem to help with escalating errors
3
+ A simple and lightweight gem to escalate rescued exceptions. This implementation
4
+ is an abstract interface that can be used on it's own, or attached to more concrete
5
+ implementations like Honeybadger, Airbrake, or Sentry in order to not just log
6
+ exceptions in an easy to parse way, but also escalate the appropriate information
7
+ to third party systems.
4
8
 
5
9
  ## Installation
6
10
 
@@ -30,7 +34,7 @@ module SomeGem
30
34
  end
31
35
  ```
32
36
 
33
- This will expose the `Escalate#ex_escalate` method within your gem to be used instead
37
+ This will expose the `Escalate#escalate` method within your gem to be used instead
34
38
  of using `logger.error`.
35
39
 
36
40
  ```ruby
data/escalate.gemspec CHANGED
@@ -8,8 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["Invoca Development", "Octothorp"]
9
9
  spec.email = ["development@invoca.com", "octothorp@invoca.com"]
10
10
 
11
- spec.summary = "Simple gem for abstracting log escalations"
12
- spec.description = "Simple gem for abstracting log escalations"
11
+ spec.summary = "A simple and lightweight gem to escalate rescued exceptions."
12
+ spec.description = "A simple and lightweight gem to escalate rescued exceptions."
13
13
  spec.homepage = "https://github.com/invoca/escalate"
14
14
  spec.required_ruby_version = Gem::Requirement.new(">= 2.4.0")
15
15
 
@@ -28,5 +28,4 @@ Gem::Specification.new do |spec|
28
28
  spec.require_paths = ["lib"]
29
29
 
30
30
  spec.add_dependency "activesupport"
31
- spec.add_dependency "contextual_logger"
32
31
  end
data/lib/escalate.rb CHANGED
@@ -2,7 +2,6 @@
2
2
 
3
3
  require "active_support"
4
4
  require "active_support/core_ext"
5
- require "contextual_logger"
6
5
 
7
6
  require_relative "escalate/version"
8
7
  require_relative "escalate/mixin"
@@ -25,28 +24,29 @@ module Escalate
25
24
  # @param [Hash] context
26
25
  # Any additional context to be tied to the escalation
27
26
  def escalate(exception, message, logger, **context)
28
- error_message = <<~EOS
29
- [Escalate] #{message} (#{context.inspect})
30
- #{exception.class.name}: #{exception.message}
31
- #{exception.backtrace.join("\n")}
32
- EOS
27
+ ensure_failsafe("Exception rescued while escalating #{exception.inspect}") do
28
+ error_message = <<~EOS
29
+ [Escalate] #{message} (#{context.inspect})
30
+ #{exception.class.name}: #{exception.message}
31
+ #{exception.backtrace.join("\n")}
32
+ EOS
33
33
 
34
- if logger.is_a?(ContextualLogger::LoggerMixin)
35
- logger.error(error_message, **context)
36
- else
37
- logger.error(error_message)
38
- end
34
+ if logger_allows_added_context?(logger)
35
+ logger.error(error_message, **context)
36
+ else
37
+ logger.error(error_message)
38
+ end
39
39
 
40
- on_escalate_blocks.each do |block|
41
- block.call(exception, message, **context)
40
+ on_escalate_blocks.each do |block|
41
+ ensure_failsafe("Exception rescued while escalating #{exception.inspect} to #{block.inspect}") do
42
+ block.call(exception, message, **context)
43
+ end
44
+ end
42
45
  end
43
- rescue Exception => ex
44
- STDERR.puts("[ExEscalator] Exception rescued while escalating #{exception.inspect}:" \
45
- "#{ex.class.name}: #{ex.message}")
46
46
  end
47
47
 
48
48
  # Returns a module to be mixed into a class or module exposing
49
- # the ex_escalate method to be used for escalating and logging
49
+ # the escalate method to be used for escalating and logging
50
50
  # exceptions.
51
51
  #
52
52
  # @param [Proc] logger_block
@@ -63,7 +63,7 @@ module Escalate
63
63
  end
64
64
  end
65
65
 
66
- # Registers an escalation callback to be executed when `ex_escalate`
66
+ # Registers an escalation callback to be executed when `escalate`
67
67
  # is invoked.
68
68
  def on_escalate(&block)
69
69
  on_escalate_blocks.add(block)
@@ -71,6 +71,17 @@ module Escalate
71
71
 
72
72
  private
73
73
 
74
+ def ensure_failsafe(message)
75
+ yield
76
+ rescue Exception => ex
77
+ STDERR.puts("[Escalator] #{message}: #{ex.class.name}: #{ex.message}")
78
+ end
79
+
80
+ def logger_allows_added_context?(logger)
81
+ defined?(ContextualLogger::LoggerMixin) &&
82
+ logger.is_a?(ContextualLogger::LoggerMixin)
83
+ end
84
+
74
85
  def on_escalate_blocks
75
86
  @on_escalate_blocks ||= Set.new
76
87
  end
@@ -4,13 +4,13 @@ module Escalate
4
4
  module Mixin
5
5
  class << self
6
6
  def included(base)
7
- raise 'instead of `include ExEscalator::Mixin`, you should `include ExEscalator.mixin`'
7
+ raise 'instead of `include Escalator::Mixin`, you should `include Escalator.mixin`'
8
8
  end
9
9
  end
10
10
 
11
11
  attr_accessor :escalate_logger_block
12
12
 
13
- def ex_escalate(exception, message, **context)
13
+ def escalate(exception, message, **context)
14
14
  Escalate.escalate(exception, message, escalate_logger, **context)
15
15
  end
16
16
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Escalate
4
- VERSION = "0.1.0.pre.1"
4
+ VERSION = "0.1.0.pre.2"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: escalate
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.pre.1
4
+ version: 0.1.0.pre.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Invoca Development
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-02-01 00:00:00.000000000 Z
12
+ date: 2021-02-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -25,21 +25,7 @@ dependencies:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
27
  version: '0'
28
- - !ruby/object:Gem::Dependency
29
- name: contextual_logger
30
- requirement: !ruby/object:Gem::Requirement
31
- requirements:
32
- - - ">="
33
- - !ruby/object:Gem::Version
34
- version: '0'
35
- type: :runtime
36
- prerelease: false
37
- version_requirements: !ruby/object:Gem::Requirement
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- version: '0'
42
- description: Simple gem for abstracting log escalations
28
+ description: A simple and lightweight gem to escalate rescued exceptions.
43
29
  email:
44
30
  - development@invoca.com
45
31
  - octothorp@invoca.com
@@ -89,5 +75,5 @@ rubyforge_project:
89
75
  rubygems_version: 2.6.13
90
76
  signing_key:
91
77
  specification_version: 4
92
- summary: Simple gem for abstracting log escalations
78
+ summary: A simple and lightweight gem to escalate rescued exceptions.
93
79
  test_files: []