squash_ruby 1.2.0 → 1.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 87f4cbb3b66773b1ed436e622e14dde686c9ba6c
4
+ data.tar.gz: e779e8860e2449dd71239ce600b158b94320e5aa
5
+ SHA512:
6
+ metadata.gz: 9d627d981014d0126e070170a407ce42af3cbd225f19ad14df3c56d4b3868568a67f5f087135cf7ae4ea20646e005635d623a529d957e4656bd6b49f1104f31e
7
+ data.tar.gz: 0fd69893426c96de1ac4941914b108108b9beea703cb4a1ba190b10f351b7ca83bd155037fa40a0f629720d80cc12448ff2b614c6daa3073c9bfac09540bf211
@@ -1,4 +1,4 @@
1
- # Copyright 2012 Square Inc.
1
+ # Copyright 2013 Square Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
data/lib/squash/ruby.rb CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright 2012 Square Inc.
1
+ # Copyright 2013 Square Inc.
2
2
  #
3
3
  # Licensed under the Apache License, Version 2.0 (the "License");
4
4
  # you may not use this file except in compliance with the License.
@@ -63,29 +63,15 @@ module Squash
63
63
  # {.configure}).
64
64
 
65
65
  def self.notify(exception, user_data={})
66
- occurred = Time.now
67
-
68
- return false if configuration(:disabled)
69
- unless exception.respond_to?(:backtrace)
70
- failsafe_log 'notify', "Tried to pass notify something other than an exception: #{exception.inspect}"
71
- return false
72
- end
73
- unless exception.backtrace
74
- failsafe_log 'notify', "Tried to pass notify an exception with no backtrace: #{exception}"
75
- return false
76
- end
77
-
78
66
  raise "The :api_key configuration is required" unless configuration(:api_key)
79
67
  raise "The :api_host configuration is required" unless configuration(:api_host)
80
68
  raise "The :environment configuration is required" unless configuration(:environment)
81
69
 
82
70
  begin
83
- exception, parents = unroll(exception)
84
- return false if ignored?(exception, user_data)
85
- check_user_data user_data
71
+ blob = self.generate_exception(exception, user_data)
72
+ return false if blob.nil?
86
73
 
87
- hsh = exception_info_hash(exception, occurred, user_data, parents)
88
- http_transmit configuration(:api_host) + configuration(:notify_path), {}, hsh.inject({}) { |h, (k, v)| h[k.to_s] = v; h }.to_json
74
+ self.transmit_exception(blob)
89
75
  return true
90
76
  rescue Object => nested_error
91
77
  raise if configuration(:disable_failsafe)
@@ -249,6 +235,49 @@ module Squash
249
235
 
250
236
  protected
251
237
 
238
+ # Generates an exception JSON blob for use with {.transmit_exception}. These
239
+ # methods are separated so that the JSON blobs can be generated separately
240
+ # from the actual transmission of exceptions, allowing each task to be
241
+ # optimized separately.
242
+ #
243
+ # @param [Object] exception The exception. Must at least duck-type an
244
+ # `Exception` subclass.
245
+ # @param [Hash] user_data Any additional context-specific information about
246
+ # the exception.
247
+ # @return [String, nil] The JSON data to transmit to Squash. If `nil`,
248
+ # no request should be made to Squash.
249
+
250
+ def self.generate_exception(exception, user_data={})
251
+ occurred = Time.now
252
+
253
+ return nil if configuration(:disabled)
254
+ unless exception.respond_to?(:backtrace)
255
+ failsafe_log 'notify', "Tried to pass notify something other than an exception: #{exception.inspect}"
256
+ return nil
257
+ end
258
+ unless exception.backtrace
259
+ failsafe_log 'notify', "Tried to pass notify an exception with no backtrace: #{exception}"
260
+ return nil
261
+ end
262
+
263
+ exception, parents = unroll(exception)
264
+ return nil if ignored?(exception, user_data)
265
+ check_user_data user_data
266
+
267
+ hsh = exception_info_hash(exception, occurred, user_data, parents)
268
+ hsh.inject({}) { |h, (k, v)| h[k.to_s] = v; h }.to_json
269
+ end
270
+
271
+ # Transmits to Squash exception data generated by {.generate_exception}.
272
+ #
273
+ # @param [String] blob Exception data.
274
+ # @return [true, false] Whether or not the response was successful.
275
+ # @see .generate_exception
276
+
277
+ def self.transmit_exception(blob)
278
+ http_transmit configuration(:api_host) + configuration(:notify_path), {}, blob
279
+ end
280
+
252
281
  # Posts an exception or deploy notification to the API endpoint. Only POST
253
282
  # requests are supported. This method is used internally only. It is
254
283
  # documented so that, in the event you wish to use an alternative HTTP
@@ -258,6 +287,9 @@ module Squash
258
287
  # contain the given headers and body. It should not eat any exceptions
259
288
  # relating to HTTP connectivity issues.
260
289
  #
290
+ # There is support for the Linux idiom of configuring a proxy server by
291
+ # setting the environment variables `http_proxy` and `https_proxy`.
292
+ #
261
293
  # Your implementation should also respect the value of the
262
294
  # `transmit_timeout` configuration, which is accessible using
263
295
  # `configuration(:transmit_timeout)`.
@@ -269,11 +301,27 @@ module Squash
269
301
  # @return [true, false] Whether or not the response was successful.
270
302
 
271
303
  def self.http_transmit(url, headers, body)
272
- uri = URI.parse(url)
273
- http = Net::HTTP.new(uri.host, uri.port)
304
+ uri = URI.parse(url)
305
+
306
+ no_proxy = if ENV['no_proxy']
307
+ ENV['no_proxy'].split(',').any? { |ext| uri.host[-ext.length, ext.length] == ext }
308
+ else
309
+ false
310
+ end
311
+
312
+ http = if uri.scheme == 'https' && ENV['https_proxy'] && !no_proxy
313
+ proxy = URI.parse("https://#{ENV['https_proxy']}")
314
+ Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).new(uri.host, uri.port)
315
+ elsif uri.scheme == 'http' && ENV['http_proxy'] && !no_proxy
316
+ proxy = URI.parse("http://#{ENV['http_proxy']}")
317
+ Net::HTTP::Proxy(proxy.host, proxy.port, proxy.user, proxy.password).new(uri.host, uri.port)
318
+ else
319
+ Net::HTTP.new(uri.host, uri.port)
320
+ end
321
+
274
322
  http_options(uri).each { |k, v| http.send :"#{k}=", v }
275
323
 
276
- block = lambda do
324
+ block = proc do
277
325
  http.start do |http|
278
326
  request = Net::HTTP::Post.new(uri.request_uri)
279
327
  request.add_field 'Content-Type', 'application/json'
@@ -290,9 +338,9 @@ module Squash
290
338
  end
291
339
 
292
340
  if defined?(SystemTimer)
293
- SystemTimer.timeout_after configuration(:open_timeout), &block
341
+ SystemTimer.timeout_after((configuration(:open_timeout) + configuration(:transmit_timeout)), &block)
294
342
  else
295
- block.call
343
+ Timeout.timeout((configuration(:open_timeout) + configuration(:transmit_timeout)), &block)
296
344
  end
297
345
  end
298
346
 
metadata CHANGED
@@ -1,152 +1,133 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: squash_ruby
3
- version: !ruby/object:Gem::Version
4
- hash: 31
5
- prerelease:
6
- segments:
7
- - 1
8
- - 2
9
- - 0
10
- version: 1.2.0
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.1
11
5
  platform: ruby
12
- authors:
6
+ authors:
13
7
  - Tim Morgan
14
8
  autorequire:
15
9
  bindir: bin
16
10
  cert_chain: []
17
-
18
- date: 2013-04-23 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
21
- type: :runtime
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
- requirements:
25
- - - ">="
26
- - !ruby/object:Gem::Version
27
- hash: 3
28
- segments:
29
- - 0
30
- version: "0"
31
- requirement: *id001
32
- prerelease: false
11
+ date: 2013-09-18 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
33
14
  name: json
34
- - !ruby/object:Gem::Dependency
35
- type: :development
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
37
- none: false
38
- requirements:
39
- - - ">="
40
- - !ruby/object:Gem::Version
41
- hash: 3
42
- segments:
43
- - 0
44
- version: "0"
45
- requirement: *id002
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
46
21
  prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
47
28
  name: rspec
48
- - !ruby/object:Gem::Dependency
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
49
34
  type: :development
50
- version_requirements: &id003 !ruby/object:Gem::Requirement
51
- none: false
52
- requirements:
53
- - - ">="
54
- - !ruby/object:Gem::Version
55
- hash: 3
56
- segments:
57
- - 0
58
- version: "0"
59
- requirement: *id003
60
35
  prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
61
42
  name: fakefs
62
- - !ruby/object:Gem::Dependency
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
63
48
  type: :development
64
- version_requirements: &id004 !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ">="
68
- - !ruby/object:Gem::Version
69
- hash: 3
70
- segments:
71
- - 0
72
- version: "0"
73
- requirement: *id004
74
49
  prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
75
56
  name: yard
76
- - !ruby/object:Gem::Dependency
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
77
62
  type: :development
78
- version_requirements: &id005 !ruby/object:Gem::Requirement
79
- none: false
80
- requirements:
81
- - - ">="
82
- - !ruby/object:Gem::Version
83
- hash: 3
84
- segments:
85
- - 0
86
- version: "0"
87
- requirement: *id005
88
63
  prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
89
70
  name: redcarpet
90
- - !ruby/object:Gem::Dependency
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - <
74
+ - !ruby/object:Gem::Version
75
+ version: '3.0'
91
76
  type: :development
92
- version_requirements: &id006 !ruby/object:Gem::Requirement
93
- none: false
94
- requirements:
95
- - - ">="
96
- - !ruby/object:Gem::Version
97
- hash: 3
98
- segments:
99
- - 0
100
- version: "0"
101
- requirement: *id006
102
77
  prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - <
81
+ - !ruby/object:Gem::Version
82
+ version: '3.0'
83
+ - !ruby/object:Gem::Dependency
103
84
  name: jeweler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - '>='
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
104
97
  description: This client library records Ruby exceptions to Squash.
105
98
  email: tim@squareup.com
106
99
  executables: []
107
-
108
100
  extensions: []
109
-
110
- extra_rdoc_files:
101
+ extra_rdoc_files:
111
102
  - LICENSE.txt
112
103
  - README.md
113
- files:
104
+ files:
114
105
  - LICENSE.txt
115
106
  - README.md
116
107
  - lib/squash/ruby.rb
117
108
  - lib/squash/ruby/exception_additions.rb
118
109
  homepage: http://github.com/SquareSquash/ruby
119
- licenses:
110
+ licenses:
120
111
  - Apache 2.0
112
+ metadata: {}
121
113
  post_install_message:
122
114
  rdoc_options: []
123
-
124
- require_paths:
115
+ require_paths:
125
116
  - lib
126
- required_ruby_version: !ruby/object:Gem::Requirement
127
- none: false
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- hash: 3
132
- segments:
133
- - 0
134
- version: "0"
135
- required_rubygems_version: !ruby/object:Gem::Requirement
136
- none: false
137
- requirements:
138
- - - ">="
139
- - !ruby/object:Gem::Version
140
- hash: 3
141
- segments:
142
- - 0
143
- version: "0"
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - '>='
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
144
127
  requirements: []
145
-
146
128
  rubyforge_project:
147
- rubygems_version: 1.8.25
129
+ rubygems_version: 2.0.6
148
130
  signing_key:
149
- specification_version: 3
131
+ specification_version: 4
150
132
  summary: Squash client for Ruby projects
151
133
  test_files: []
152
-