sentry-raven 2.5.0 → 2.5.1

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: fb8e99d6cd40b4a9bcebae0aa4c2b6a9ae92c65f
4
- data.tar.gz: f0b34e2f0061b92c0b94dbfce8409b415850a756
3
+ metadata.gz: 591ad299f0dbdc5e0c5e980fd0406733a90c6ffa
4
+ data.tar.gz: bdbcf9a5152af5c5bfd459f302be3439080dbca1
5
5
  SHA512:
6
- metadata.gz: 89cd1bda236dfc17bde728a9b69ddcc0d2f4bbffdd2a8697969662c977addf14f180285132987b20cfa53f9398cf3b80309bc781bd502700ce6a4b20a663ccde
7
- data.tar.gz: 11d7601a11bd66e3881f457f60c9db1bb253a4a93fa35b32bb61447d938f74019b7fa219a3f4cf8d797cac48835e8d795a2417f5b9b4d793a97596203516286c
6
+ metadata.gz: dc97bc821db8541a18dc10cf031c6c8684cc6aa1b2200bad974e1e8d11460dabe59e59d144651e27cc8117965452b1ff2ef3a031f14736f801ec7ac1836e1609
7
+ data.tar.gz: 9e6c6de2b3eda11d19514736823f487fd5a66cddde4bbdbc81a1a4e6382ea2fd4a42d3d5ed0eae5208245f1c10c98b612a6479c4331b3eda70a0090d128e1aba
data/README.md CHANGED
@@ -7,7 +7,7 @@ A client and integration layer for the [Sentry](https://github.com/getsentry/sen
7
7
 
8
8
  ## Requirements
9
9
 
10
- We test on Ruby 1.9, 2.2 and 2.3 at the latest patchlevel/teeny version. We also support JRuby 1.7 and 9.0. Our Rails integration works with Rails 4.2+.
10
+ We test on Ruby 1.9, 2.2, 2.3, and 2.4 at the latest patchlevel/teeny version. We also support JRuby 1.7 and 9.0. Our Rails integration works with Rails 4.2+ (including Rails 5).
11
11
 
12
12
  ## Getting Started
13
13
 
@@ -1,5 +1,5 @@
1
1
  # We need to do this because of the way integration loading works
2
- require "rack/timeout/base"
2
+ require "rack/timeout/base" unless defined?(Rack::Timeout)
3
3
 
4
4
  # This integration is a good example of how to change how exceptions
5
5
  # get grouped by Sentry's UI. Simply override #raven_context in
@@ -38,6 +38,7 @@ module Raven
38
38
 
39
39
  def filename
40
40
  return if abs_path.nil?
41
+ return @filename if @filename
41
42
 
42
43
  prefix =
43
44
  if under_project_root? && in_app
@@ -48,9 +49,21 @@ module Raven
48
49
  longest_load_path
49
50
  end
50
51
 
51
- prefix ? abs_path[prefix.to_s.chomp(File::SEPARATOR).length + 1..-1] : abs_path
52
+ @filename = prefix ? abs_path[prefix.to_s.chomp(File::SEPARATOR).length + 1..-1] : abs_path
52
53
  end
53
54
 
55
+ def to_hash(*args)
56
+ data = super(*args)
57
+ data[:filename] = filename
58
+ data.delete(:vars) unless vars && !vars.empty?
59
+ data.delete(:pre_context) unless pre_context && !pre_context.empty?
60
+ data.delete(:post_context) unless post_context && !post_context.empty?
61
+ data.delete(:context_line) unless context_line && !context_line.empty?
62
+ data
63
+ end
64
+
65
+ private
66
+
54
67
  def under_project_root?
55
68
  project_root && abs_path.start_with?(project_root)
56
69
  end
@@ -60,17 +73,7 @@ module Raven
60
73
  end
61
74
 
62
75
  def longest_load_path
63
- $LOAD_PATH.select { |s| abs_path.start_with?(s) }.max_by(&:length)
64
- end
65
-
66
- def to_hash(*args)
67
- data = super(*args)
68
- data[:filename] = filename
69
- data.delete(:vars) unless vars && !vars.empty?
70
- data.delete(:pre_context) unless pre_context && !pre_context.empty?
71
- data.delete(:post_context) unless post_context && !post_context.empty?
72
- data.delete(:context_line) unless context_line && !context_line.empty?
73
- data
76
+ $LOAD_PATH.select { |path| abs_path.start_with?(path.to_s) }.max_by(&:size)
74
77
  end
75
78
  end
76
79
  end
@@ -4,7 +4,7 @@ module Raven
4
4
  INT_MASK = 0
5
5
  REGEX_SPECIAL_CHARACTERS = %w(. $ ^ { [ ( | ) * + ?).freeze
6
6
 
7
- def initialize(client)
7
+ def initialize(client = nil)
8
8
  @client = client
9
9
  end
10
10
 
@@ -40,9 +40,16 @@ module Raven
40
40
 
41
41
  private
42
42
 
43
+ # CGI.parse takes our nice UTF-8 strings and converts them back to ASCII,
44
+ # so we have to convert them back, again.
45
+ def utf8_processor
46
+ @utf8_processor ||= Processor::UTF8Conversion.new
47
+ end
48
+
43
49
  def sanitize_query_string(query_string)
44
50
  query_hash = CGI.parse(query_string)
45
- processed_query_hash = process(query_hash)
51
+ sanitized = utf8_processor.process(query_hash)
52
+ processed_query_hash = process(sanitized)
46
53
  URI.encode_www_form(processed_query_hash)
47
54
  end
48
55
 
@@ -1,19 +1,25 @@
1
1
  module Raven
2
2
  class Processor::UTF8Conversion < Processor
3
+ # Slightly misnamed - actually just removes any bytes with invalid encoding
4
+ # Previously, our JSON backend required UTF-8. Since we now use the built-in
5
+ # JSON, we can use any encoding, but it must be valid anyway so we can do
6
+ # things like call #match and #slice on strings
7
+ REPLACE = "".freeze
8
+
3
9
  def process(value)
4
10
  case value
5
- when Array
6
- !value.frozen? ? value.map! { |v| process v } : value.map { |v| process v }
7
11
  when Hash
8
12
  !value.frozen? ? value.merge!(value) { |_, v| process v } : value.merge(value) { |_, v| process v }
13
+ when Array
14
+ !value.frozen? ? value.map! { |v| process v } : value.map { |v| process v }
9
15
  when Exception
10
16
  return value if value.message.valid_encoding?
11
- clean_exc = value.class.new(clean_invalid_utf8_bytes(value.message))
17
+ clean_exc = value.class.new(remove_invalid_bytes(value.message))
12
18
  clean_exc.set_backtrace(value.backtrace)
13
19
  clean_exc
14
20
  when String
15
21
  return value if value.valid_encoding?
16
- clean_invalid_utf8_bytes(value)
22
+ remove_invalid_bytes(value)
17
23
  else
18
24
  value
19
25
  end
@@ -21,8 +27,18 @@ module Raven
21
27
 
22
28
  private
23
29
 
24
- def clean_invalid_utf8_bytes(obj)
25
- obj.encode('UTF-16', :invalid => :replace, :undef => :replace, :replace => '').encode('UTF-8')
30
+ # Stolen from RSpec
31
+ # https://github.com/rspec/rspec-support/blob/f0af3fd74a94ff7bb700f6ba06dbdc67bba17fbf/lib/rspec/support/encoded_string.rb#L120-L139
32
+ if String.method_defined?(:scrub) # 2.1+
33
+ def remove_invalid_bytes(string)
34
+ string.scrub!(REPLACE)
35
+ end
36
+ else
37
+ def remove_invalid_bytes(string)
38
+ string.chars.map do |char|
39
+ char.valid_encoding? ? char : REPLACE
40
+ end.join
41
+ end
26
42
  end
27
43
  end
28
44
  end
data/lib/raven/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
  module Raven
3
3
  # Freezing this constant breaks in 1.9.x
4
- VERSION = "2.5.0" # rubocop:disable Style/MutableConstant
4
+ VERSION = "2.5.1" # rubocop:disable Style/MutableConstant
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sentry-raven
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.5.0
4
+ version: 2.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sentry Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-05-22 00:00:00.000000000 Z
11
+ date: 2017-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday