squash_ruby 1.4.0 → 2.0.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 +15 -7
- data/README.md +17 -9
- data/lib/squash/ruby.rb +47 -22
- data/lib/squash/ruby/exception_additions.rb +1 -1
- metadata +95 -66
checksums.yaml
CHANGED
@@ -1,7 +1,15 @@
|
|
1
|
-
---
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
OGRjNTdhNGQxYzI0YzYwNTFhMGRlMmRjOWIxN2FlMTViMjRlOWFkNw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YzMwOTczZmM3ZWRlZDA0OWI1OTAyZWZkZDBmM2I4OGRlMzljYTI2Zg==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
MWQwNjkxZDBiMzdhZWJjYzU3Nzk3NjQ2N2VlNGFlYWNmMjllNGZiZGVjMWFk
|
10
|
+
NTdmNmIyMTQ3Mzg5OTdjNTFiMjAyYmM4ZDk4NmE5MTZmMGYxZDg5OTZjYTgz
|
11
|
+
ZjRmMjEyMjE4ZmZlMTgxMWViYTRhNzQ2YjgzMjFjOTNkM2QyZGU=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZDgyZWE0OGYyZWU3OGY3YTFiYjhjNzQyMDE4MmJjOWJlNTQ3YjViNzlmM2Iy
|
14
|
+
M2ViNmFiMTc4M2NhZjllYWY4MWU4MzZjZWQ2ZWI4NTFkYmJlZjhmMTllNGUx
|
15
|
+
YWExMzUyM2JhNWRmYTY2ZjY0MGZhOTYzNmE0MTBiMGI3NWQ5Zjk=
|
data/README.md
CHANGED
@@ -19,8 +19,7 @@ documentation at https://github.com/SquareSquash/web.
|
|
19
19
|
Compatibility
|
20
20
|
-------------
|
21
21
|
|
22
|
-
This library is compatible with Ruby 1.
|
23
|
-
Edition.
|
22
|
+
This library is compatible with Ruby 1.9.2 and later, including JRuby.
|
24
23
|
|
25
24
|
Requirements
|
26
25
|
------------
|
@@ -38,9 +37,9 @@ Add the Squash client to your Gemfile with
|
|
38
37
|
project you are recording exceptions for:
|
39
38
|
|
40
39
|
```` ruby
|
41
|
-
Squash::Ruby.configure :
|
42
|
-
:
|
43
|
-
:
|
40
|
+
Squash::Ruby.configure api_key: 'YOUR_API_KEY',
|
41
|
+
api_host: 'https://your.squash.host',
|
42
|
+
environment: 'production'
|
44
43
|
````
|
45
44
|
|
46
45
|
To use Squash to manage your exceptions, place a `begin::rescue` statement at
|
@@ -86,7 +85,7 @@ You can also add user data using the {Squash::Ruby.add_user_data} method:
|
|
86
85
|
|
87
86
|
```` ruby
|
88
87
|
input = gets
|
89
|
-
Squash::Ruby.add_user_data(:
|
88
|
+
Squash::Ruby.add_user_data(input: input) do
|
90
89
|
process_input # may raise an exception
|
91
90
|
end
|
92
91
|
````
|
@@ -98,7 +97,7 @@ data directly in the exception constructor:
|
|
98
97
|
require 'squash/ruby/exception_additions'
|
99
98
|
|
100
99
|
def process_value(value)
|
101
|
-
raise ArgumentError.new("value must be a number", :
|
100
|
+
raise ArgumentError.new("value must be a number", value: value) unless value.kind_of?(Fixnum)
|
102
101
|
# [...]
|
103
102
|
end
|
104
103
|
````
|
@@ -112,7 +111,7 @@ require 'squash/ruby/exception_additions'
|
|
112
111
|
begin
|
113
112
|
do_something_with_input(input)
|
114
113
|
rescue ArgumentError => err
|
115
|
-
err.user_data :
|
114
|
+
err.user_data input: input
|
116
115
|
raise # assumed that Squash::Ruby.notify is called somewhere further up in the stack
|
117
116
|
end
|
118
117
|
````
|
@@ -156,6 +155,11 @@ keys:
|
|
156
155
|
stripped from backtrace lines. By default it's set to the working directory.
|
157
156
|
* `mirrored_repository`: Set this option to be true if your repository root is a
|
158
157
|
mirrored Git repository.
|
158
|
+
* `exception_behavior_when_disabled`: Set this option to customize Squash's
|
159
|
+
behavior when an exception is raised in an environment where Squash is
|
160
|
+
disabled (typically development and test). Values are `ignore` (default):
|
161
|
+
exception is ignored; `raise`: exception is raised; and `log`: exception is
|
162
|
+
logged at the error level to the failsafe log.
|
159
163
|
|
160
164
|
### Revision Information
|
161
165
|
|
@@ -182,6 +186,10 @@ options override `repository_root`.
|
|
182
186
|
* `max_variable_size`: The maximum size (in bytes) of a serialized
|
183
187
|
representation of a value that will be transmitted over the network. Values
|
184
188
|
that serialize to larger than this size will be replaced with a placeholder.
|
189
|
+
* `timeout_protection`: a `proc { |timeout, &block| ... }` that runs the given
|
190
|
+
block, and times out after `timeout` seconds. By default this will use
|
191
|
+
`SystemTimer` if present, or else the built in `Timeout` class, but can be
|
192
|
+
overridden to provide more fine grain logic around timeouts.
|
185
193
|
|
186
194
|
### Ignored Exceptions
|
187
195
|
|
@@ -197,7 +205,7 @@ options override `repository_root`.
|
|
197
205
|
client libraries (e.g., Squash Rails client); an example:
|
198
206
|
|
199
207
|
```` ruby
|
200
|
-
Squash::Ruby.configure :
|
208
|
+
Squash::Ruby.configure ignored_exception_procs: lambda do |exception, user_data|
|
201
209
|
exception.kind_of?(ActiveRecord::RecordNotFound) && user_data[:headers]['X-Testing'].blank?
|
202
210
|
end
|
203
211
|
````
|
data/lib/squash/ruby.rb
CHANGED
@@ -31,16 +31,19 @@ module Squash
|
|
31
31
|
EXCEPTION_RESERVED_IVARS = %W( mesg bt )
|
32
32
|
# Default values for different configuration variables.
|
33
33
|
CONFIGURATION_DEFAULTS = {
|
34
|
-
:
|
35
|
-
:
|
36
|
-
:
|
37
|
-
:
|
38
|
-
:
|
39
|
-
:
|
40
|
-
:
|
41
|
-
:
|
42
|
-
:
|
43
|
-
:
|
34
|
+
notify_path: "/api/1.0/notify",
|
35
|
+
deploy_path: "/api/1.0/deploy",
|
36
|
+
open_timeout: 15,
|
37
|
+
transmit_timeout: 15,
|
38
|
+
ignored_exception_classes: [],
|
39
|
+
ignored_exception_messages: {},
|
40
|
+
ignored_exception_procs: [],
|
41
|
+
failsafe_log: "squash.failsafe.log",
|
42
|
+
repository_root: Dir.getwd,
|
43
|
+
project_root: Dir.getwd,
|
44
|
+
timeout_protection: proc { |timeout, &block|
|
45
|
+
timeout_protection(timeout, &block)
|
46
|
+
},
|
44
47
|
}
|
45
48
|
# Types that are serialized directly to JSON, rather than to a hash of
|
46
49
|
# object information. Subclasses are not considered members of this array.
|
@@ -51,7 +54,9 @@ module Squash
|
|
51
54
|
# constant to include Rails-specific fields, for example.
|
52
55
|
TOP_LEVEL_USER_DATA = []
|
53
56
|
|
54
|
-
# Notifies Squash of an exception.
|
57
|
+
# Notifies Squash of an exception. The behavior of this method when Squash
|
58
|
+
# is disabled is dependent on the `exception_behavior_when_disabled`
|
59
|
+
# configuration option.
|
55
60
|
#
|
56
61
|
# @param [Object] exception The exception. Must at least duck-type an
|
57
62
|
# `Exception` subclass.
|
@@ -63,7 +68,18 @@ module Squash
|
|
63
68
|
# {.configure}).
|
64
69
|
|
65
70
|
def self.notify(exception, user_data={})
|
66
|
-
|
71
|
+
if configuration(:disabled)
|
72
|
+
case configuration(:exception_behavior_when_disabled)
|
73
|
+
when 'log', :log
|
74
|
+
failsafe_log '[Squash::Ruby.notify]', "Exception raised: #{exception.to_s}\n" +
|
75
|
+
exception.backtrace.map { |l| " #{l}" }.join("\n")
|
76
|
+
when 'raise', :raise
|
77
|
+
raise exception
|
78
|
+
else
|
79
|
+
# ignore
|
80
|
+
end
|
81
|
+
return false
|
82
|
+
else
|
67
83
|
raise "The :api_key configuration is required" unless configuration(:api_key)
|
68
84
|
raise "The :api_host configuration is required" unless configuration(:api_host)
|
69
85
|
raise "The :environment configuration is required" unless configuration(:environment)
|
@@ -179,6 +195,10 @@ module Squash
|
|
179
195
|
# Squash. This allows you to ensure that a non-critical block of code
|
180
196
|
# does not halt your application while still receiving exception
|
181
197
|
# notifications in Squash.
|
198
|
+
#
|
199
|
+
# The behavior of this method when Squash is disabled is dependent on the
|
200
|
+
# `exception_behavior_when_disabled` configuration option.
|
201
|
+
#
|
182
202
|
# @param [Array<Class>] exception_classes A list of exception classes to
|
183
203
|
# report silently. Exceptions _not_ of these classes (or their
|
184
204
|
# subclasses) will raise (and presumably be handled by Squash elsewhere
|
@@ -323,7 +343,8 @@ module Squash
|
|
323
343
|
|
324
344
|
http_options(uri).each { |k, v| http.send :"#{k}=", v }
|
325
345
|
|
326
|
-
|
346
|
+
timeout = configuration(:open_timeout) + configuration(:transmit_timeout)
|
347
|
+
configuration(:timeout_protection).call(timeout) do
|
327
348
|
http.start do |http|
|
328
349
|
request = Net::HTTP::Post.new(uri.request_uri)
|
329
350
|
request.add_field 'Content-Type', 'application/json'
|
@@ -338,12 +359,6 @@ module Squash
|
|
338
359
|
end
|
339
360
|
end
|
340
361
|
end
|
341
|
-
|
342
|
-
if defined?(SystemTimer)
|
343
|
-
SystemTimer.timeout_after((configuration(:open_timeout) + configuration(:transmit_timeout)), &block)
|
344
|
-
else
|
345
|
-
Timeout.timeout((configuration(:open_timeout) + configuration(:transmit_timeout)), &block)
|
346
|
-
end
|
347
362
|
end
|
348
363
|
|
349
364
|
# Notifies Squash of a new deploy. Squash will then determine which bug
|
@@ -400,9 +415,9 @@ module Squash
|
|
400
415
|
private
|
401
416
|
|
402
417
|
def self.http_options(uri)
|
403
|
-
options = {:
|
404
|
-
:
|
405
|
-
:
|
418
|
+
options = {use_ssl: uri.scheme == 'https',
|
419
|
+
open_timeout: configuration(:transmit_timeout),
|
420
|
+
read_timeout: configuration(:transmit_timeout)}
|
406
421
|
options[:verify_mode] = OpenSSL::SSL::VERIFY_NONE if configuration(:skip_ssl_verification)
|
407
422
|
options
|
408
423
|
end
|
@@ -721,5 +736,15 @@ module Squash
|
|
721
736
|
|
722
737
|
# @private
|
723
738
|
def self.client_name() 'ruby' end
|
739
|
+
|
740
|
+
# @private
|
741
|
+
def self.timeout_protection(timeout, &block)
|
742
|
+
if defined?(SystemTimer)
|
743
|
+
SystemTimer.timeout_after(timeout, &block)
|
744
|
+
else
|
745
|
+
Timeout.timeout(timeout, &block)
|
746
|
+
end
|
747
|
+
end
|
748
|
+
|
724
749
|
end
|
725
750
|
end
|
@@ -16,7 +16,7 @@
|
|
16
16
|
# to an exception at the time of the raise.
|
17
17
|
#
|
18
18
|
# @example
|
19
|
-
# raise ArgumentError.new("value must be a number", :
|
19
|
+
# raise ArgumentError.new("value must be a number", value: value) unless value.kind_of?(Fixnum)
|
20
20
|
|
21
21
|
class Exception
|
22
22
|
|
metadata
CHANGED
@@ -1,106 +1,135 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: squash_ruby
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: !binary |-
|
5
|
+
Mi4wLjA=
|
5
6
|
platform: ruby
|
6
|
-
authors:
|
7
|
+
authors:
|
7
8
|
- Tim Morgan
|
8
9
|
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- &id002
|
18
|
-
- ">="
|
19
|
-
- !ruby/object:Gem::Version
|
20
|
-
version: "0"
|
21
|
-
version_requirements: *id001
|
22
|
-
prerelease: false
|
23
|
-
type: :runtime
|
12
|
+
date: 2014-11-11 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
24
15
|
name: json
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ! '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '0'
|
21
|
+
type: :runtime
|
30
22
|
prerelease: false
|
31
|
-
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ! '>='
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '0'
|
28
|
+
- !ruby/object:Gem::Dependency
|
32
29
|
name: rspec
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
prerelease: false
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - ! '>='
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '0'
|
39
35
|
type: :development
|
40
|
-
name: fakefs
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
requirement: &id005 !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- *id002
|
45
|
-
version_requirements: *id005
|
46
36
|
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: fakefs
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - ! '>='
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '0'
|
47
49
|
type: :development
|
48
|
-
name: yard
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
requirement: &id006 !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - <
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: "3.0"
|
55
|
-
version_requirements: *id006
|
56
50
|
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ! '>='
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: yard
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - ! '>='
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0'
|
57
63
|
type: :development
|
58
|
-
name: redcarpet
|
59
|
-
- !ruby/object:Gem::Dependency
|
60
|
-
requirement: &id007 !ruby/object:Gem::Requirement
|
61
|
-
requirements:
|
62
|
-
- *id002
|
63
|
-
version_requirements: *id007
|
64
64
|
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: redcarpet
|
72
|
+
requirement: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
65
77
|
type: :development
|
78
|
+
prerelease: false
|
79
|
+
version_requirements: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ! '>='
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: '0'
|
84
|
+
- !ruby/object:Gem::Dependency
|
66
85
|
name: jeweler
|
86
|
+
requirement: !ruby/object:Gem::Requirement
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
|
+
type: :development
|
92
|
+
prerelease: false
|
93
|
+
version_requirements: !ruby/object:Gem::Requirement
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
67
98
|
description: This client library records Ruby exceptions to Squash.
|
68
99
|
email: tim@squareup.com
|
69
100
|
executables: []
|
70
|
-
|
71
101
|
extensions: []
|
72
|
-
|
73
|
-
extra_rdoc_files:
|
102
|
+
extra_rdoc_files:
|
74
103
|
- LICENSE.txt
|
75
104
|
- README.md
|
76
|
-
files:
|
105
|
+
files:
|
77
106
|
- LICENSE.txt
|
78
107
|
- README.md
|
79
108
|
- lib/squash/ruby.rb
|
80
109
|
- lib/squash/ruby/exception_additions.rb
|
81
110
|
- lib/squash_ruby.rb
|
82
111
|
homepage: http://github.com/SquareSquash/ruby
|
83
|
-
licenses:
|
112
|
+
licenses:
|
84
113
|
- Apache 2.0
|
85
114
|
metadata: {}
|
86
|
-
|
87
115
|
post_install_message:
|
88
116
|
rdoc_options: []
|
89
|
-
|
90
|
-
require_paths:
|
117
|
+
require_paths:
|
91
118
|
- lib
|
92
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
-
|
95
|
-
|
96
|
-
|
97
|
-
|
119
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - ! '>='
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '0'
|
124
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
125
|
+
requirements:
|
126
|
+
- - ! '>='
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: '0'
|
98
129
|
requirements: []
|
99
|
-
|
100
130
|
rubyforge_project:
|
101
|
-
rubygems_version: 2.
|
131
|
+
rubygems_version: 2.4.2
|
102
132
|
signing_key:
|
103
133
|
specification_version: 4
|
104
134
|
summary: Squash client for Ruby projects
|
105
135
|
test_files: []
|
106
|
-
|