safely_block 0.1.1 → 0.2.0

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: 9ba20f765b3e7d5a3a42de0c5376d06f2fa1a123
4
- data.tar.gz: 100cf5b7ab1a8fba676b64e7914908d7d23f8276
3
+ metadata.gz: ff610f8bed6b2446fd70d85987ec4e622e5f5021
4
+ data.tar.gz: 56a9d89bee3fd0aa4804623e29639b3aeb39e8a2
5
5
  SHA512:
6
- metadata.gz: c781fdff6e44069440281ba046b853e97a187c0ef59110231c4571113abd6451f15ecbb94484b7c53afcd0c2d07e24f8ddd28a3cd1ed843611dfcb2d97b73ee2
7
- data.tar.gz: 1d261002fdf45d8fe088a75203ce55e61467aefb41547abbbad2ae617384f3f9bb3579b3ea961e24369daa21666dcd91803fde2eb8c9accd9a41521f1625d765
6
+ metadata.gz: 06cf78fcab0ee8e6a743f27b5ca9b95f45049a47c78700013da0298f7c7967616df9c6f6f082e1a013f5e06fa12e6636d2e7fc811747fa0aa7a362328754ecba
7
+ data.tar.gz: 1dcf67c2f094f854f358986240c14fe5e5afcfe6514d58a1f1cc95e8f670e5caa96462180a538f3e93427b9ef419bf1be66902c913d811adc0f889cd92dcc577
@@ -1,3 +1,10 @@
1
+ ## 0.2.0
2
+
3
+ - Added `tag` option to `safely` method
4
+ - Switched to keyword arguments
5
+ - Fixed frozen string error
6
+ - Fixed tagging with custom error handler
7
+
1
8
  ## 0.1.1
2
9
 
3
10
  - Added `Safely.safely` to not pollute when included in gems
data/README.md CHANGED
@@ -57,7 +57,9 @@ end
57
57
  Silence exceptions
58
58
 
59
59
  ```ruby
60
- safely(silence: ActiveRecord::RecordNotUnique) { code }
60
+ safely silence: ActiveRecord::RecordNotUnique do
61
+ # code
62
+ end
61
63
  ```
62
64
 
63
65
  Throttle reporting with:
@@ -74,20 +76,20 @@ end
74
76
 
75
77
  Reports exceptions to a variety of services out of the box thanks to [Errbase](https://github.com/ankane/errbase).
76
78
 
77
- - [Rollbar](https://rollbar.com/)
78
79
  - [Airbrake](https://airbrake.io/)
80
+ - [Appsignal](https://appsignal.com/)
81
+ - [Bugsnag](https://bugsnag.com/)
79
82
  - [Exceptional](http://www.exceptional.io/)
80
83
  - [Honeybadger](https://www.honeybadger.io/)
81
- - [Sentry](https://getsentry.com/)
82
- - [Raygun](https://raygun.io/)
83
- - [Bugsnag](https://bugsnag.com/)
84
- - [Appsignal](https://appsignal.com/)
85
84
  - [Opbeat](https://opbeat.com/)
85
+ - [Raygun](https://raygun.io/)
86
+ - [Rollbar](https://rollbar.com/)
87
+ - [Sentry](https://getsentry.com/)
86
88
 
87
89
  Customize reporting with:
88
90
 
89
91
  ```ruby
90
- Safely.report_exception_method = proc { |e| Rollbar.error(e) }
92
+ Safely.report_exception_method = -> (e) { Rollbar.error(e) }
91
93
  ```
92
94
 
93
95
  By default, exception messages are prefixed with `[safely]`. This makes it easier to spot rescued exceptions. Turn this off with:
@@ -24,8 +24,6 @@ module Safely
24
24
  end
25
25
 
26
26
  DEFAULT_EXCEPTION_METHOD = proc do |e|
27
- e = e.dup # leave original exception unmodified
28
- e.message.prepend("[safely] ") if e.message && Safely.tag
29
27
  Errbase.report(e)
30
28
  end
31
29
 
@@ -36,20 +34,29 @@ module Safely
36
34
  self.throttle_counter = Hash.new(0)
37
35
 
38
36
  module Methods
39
- def safely(options = {})
37
+ def safely(tag: nil, sample: nil, except: nil, only: nil, silence: nil, throttle: false, default: nil)
40
38
  yield
41
- rescue *Array(options[:only] || StandardError) => e
42
- raise e if Array(options[:except]).any? { |c| e.is_a?(c) }
39
+ rescue *Array(only || StandardError) => e
40
+ raise e if Array(except).any? { |c| e.is_a?(c) }
43
41
  raise e if Safely.raise_envs.include?(Safely.env)
44
- sample = options[:sample]
45
42
  if sample ? rand < 1.0 / sample : true
46
43
  begin
47
- Safely.report_exception(e) unless Array(options[:silence]).any? { |c| e.is_a?(c) } || Safely.throttled?(e, options[:throttle])
44
+ unless Array(silence).any? { |c| e.is_a?(c) } || Safely.throttled?(e, throttle)
45
+ tag = Safely.tag if tag.nil?
46
+ if tag && e.message
47
+ e = e.dup # leave original exception unmodified
48
+ message = e.message
49
+ e.define_singleton_method(:message) do
50
+ "[#{tag == true ? "safely" : tag}] #{message}"
51
+ end
52
+ end
53
+ Safely.report_exception(e)
54
+ end
48
55
  rescue => e2
49
56
  $stderr.puts "FAIL-SAFE #{e2.class.name}: #{e2.message}"
50
57
  end
51
58
  end
52
- options[:default]
59
+ default
53
60
  end
54
61
  alias_method :yolo, :safely
55
62
  end
@@ -1,3 +1,3 @@
1
1
  module Safely
2
- VERSION = "0.1.1"
2
+ VERSION = "0.2.0"
3
3
  end
@@ -3,6 +3,7 @@ require_relative "test_helper"
3
3
  class TestSafely < Minitest::Test
4
4
  def setup
5
5
  Safely.env = "production"
6
+ Safely.tag = true
6
7
  Safely.report_exception_method = Safely::DEFAULT_EXCEPTION_METHOD
7
8
  end
8
9
 
@@ -28,7 +29,7 @@ class TestSafely < Minitest::Test
28
29
  exception = Safely::TestError.new
29
30
  mock = MiniTest::Mock.new
30
31
  mock.expect :report_exception, nil, [exception]
31
- Safely.report_exception_method = proc { |e| mock.report_exception(e) }
32
+ Safely.report_exception_method = -> (e) { mock.report_exception(e) }
32
33
  safely do
33
34
  raise exception
34
35
  end
@@ -39,16 +40,38 @@ class TestSafely < Minitest::Test
39
40
  exception = Safely::TestError.new
40
41
  mock = MiniTest::Mock.new
41
42
  mock.expect :report_exception, nil, [exception]
42
- Safely.report_exception_method = proc { |e| mock.report_exception(e) }
43
+ Safely.report_exception_method = -> (e) { mock.report_exception(e) }
43
44
  yolo do
44
45
  raise exception
45
46
  end
46
47
  assert mock.verify
47
48
  end
48
49
 
50
+ def test_tagged
51
+ ex = nil
52
+ Safely.report_exception_method = -> (e) { ex = e }
53
+ safely { raise Safely::TestError, "Boom" }
54
+ assert_equal "[safely] Boom", ex.message
55
+ end
56
+
57
+ def test_not_tagged
58
+ Safely.tag = false
59
+ ex = nil
60
+ Safely.report_exception_method = -> (e) { ex = e }
61
+ safely { raise Safely::TestError, "Boom" }
62
+ assert_equal "Boom", ex.message
63
+ end
64
+
65
+ def test_local_tag
66
+ ex = nil
67
+ Safely.report_exception_method = -> (e) { ex = e }
68
+ safely(tag: "hi") { raise Safely::TestError, "Boom" }
69
+ assert_equal "[hi] Boom", ex.message
70
+ end
71
+
49
72
  def test_return_value
50
73
  assert_equal 1, safely { 1 }
51
- assert_equal nil, safely { raise Safely::TestError, "Boom" }
74
+ assert_nil safely { raise Safely::TestError, "Boom" }
52
75
  end
53
76
 
54
77
  def test_default
@@ -57,12 +80,12 @@ class TestSafely < Minitest::Test
57
80
  end
58
81
 
59
82
  def test_only
60
- assert_equal nil, safely(only: Safely::TestError) { raise Safely::TestError }
83
+ assert_nil safely(only: Safely::TestError) { raise Safely::TestError }
61
84
  assert_raises(RuntimeError, "Boom") { safely(only: Safely::TestError) { raise "Boom" } }
62
85
  end
63
86
 
64
87
  def test_only_array
65
- assert_equal nil, safely(only: [Safely::TestError]) { raise Safely::TestError }
88
+ assert_nil safely(only: [Safely::TestError]) { raise Safely::TestError }
66
89
  assert_raises(RuntimeError, "Boom") { safely(only: [Safely::TestError]) { raise "Boom" } }
67
90
  end
68
91
 
@@ -76,8 +99,8 @@ class TestSafely < Minitest::Test
76
99
  end
77
100
 
78
101
  def test_failsafe
79
- Safely.report_exception_method = proc { raise "oops" }
80
- out, err = capture_io do
102
+ Safely.report_exception_method = -> (_) { raise "oops" }
103
+ _, err = capture_io do
81
104
  safely { raise "boom" }
82
105
  end
83
106
  assert_equal "FAIL-SAFE RuntimeError: oops\n", err
@@ -85,7 +108,7 @@ class TestSafely < Minitest::Test
85
108
 
86
109
  def test_throttle
87
110
  count = 0
88
- Safely.report_exception_method = proc { |e| count += 1 }
111
+ Safely.report_exception_method = -> (_) { count += 1 }
89
112
  5.times do |n|
90
113
  safely throttle: {limit: 2, period: 3600} do
91
114
  raise Safely::TestError
@@ -96,7 +119,7 @@ class TestSafely < Minitest::Test
96
119
 
97
120
  def test_throttle_key
98
121
  count = 0
99
- Safely.report_exception_method = proc { |e| count += 1 }
122
+ Safely.report_exception_method = -> (_) { count += 1 }
100
123
  5.times do |n|
101
124
  safely throttle: {limit: 2, period: 3600, key: "boom#{n % 2}"} do
102
125
  raise Safely::TestError
@@ -104,4 +127,10 @@ class TestSafely < Minitest::Test
104
127
  end
105
128
  assert_equal 4, count
106
129
  end
130
+
131
+ def test_bad_argument
132
+ assert_raises(ArgumentError) do
133
+ safely(unknown: true) { }
134
+ end
135
+ end
107
136
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: safely_block
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-14 00:00:00.000000000 Z
11
+ date: 2017-02-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: errbase
@@ -105,11 +105,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  version: '0'
106
106
  requirements: []
107
107
  rubyforge_project:
108
- rubygems_version: 2.6.1
108
+ rubygems_version: 2.6.8
109
109
  signing_key:
110
110
  specification_version: 4
111
111
  summary: Awesome exception handling
112
112
  test_files:
113
113
  - test/safely_test.rb
114
114
  - test/test_helper.rb
115
- has_rdoc: