jones-gem 2.7.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.rspec +1 -0
- data/.rubocop.yml +74 -0
- data/.travis.yml +47 -0
- data/Gemfile +38 -0
- data/LICENSE +201 -0
- data/README.md +132 -0
- data/Rakefile +29 -0
- data/changelog.md +442 -0
- data/docs/Makefile +130 -0
- data/docs/breadcrumbs.rst +51 -0
- data/docs/conf.py +228 -0
- data/docs/config.rst +260 -0
- data/docs/context.rst +141 -0
- data/docs/index.rst +113 -0
- data/docs/install.rst +40 -0
- data/docs/integrations/heroku.rst +11 -0
- data/docs/integrations/index.rst +59 -0
- data/docs/integrations/puma.rst +30 -0
- data/docs/integrations/rack.rst +27 -0
- data/docs/integrations/rails.rst +84 -0
- data/docs/make.bat +155 -0
- data/docs/processors.rst +124 -0
- data/docs/sentry-doc-config.json +31 -0
- data/docs/usage.rst +176 -0
- data/exe/raven +32 -0
- data/jones-gem.gemspec +22 -0
- data/lib/raven.rb +3 -0
- data/lib/raven/backtrace.rb +137 -0
- data/lib/raven/base.rb +106 -0
- data/lib/raven/breadcrumbs.rb +76 -0
- data/lib/raven/breadcrumbs/activesupport.rb +19 -0
- data/lib/raven/breadcrumbs/logger.rb +93 -0
- data/lib/raven/cli.rb +59 -0
- data/lib/raven/client.rb +142 -0
- data/lib/raven/configuration.rb +434 -0
- data/lib/raven/context.rb +43 -0
- data/lib/raven/event.rb +259 -0
- data/lib/raven/instance.rb +221 -0
- data/lib/raven/integrations/delayed_job.rb +58 -0
- data/lib/raven/integrations/rack-timeout.rb +19 -0
- data/lib/raven/integrations/rack.rb +139 -0
- data/lib/raven/integrations/rails.rb +79 -0
- data/lib/raven/integrations/rails/active_job.rb +55 -0
- data/lib/raven/integrations/rails/controller_methods.rb +13 -0
- data/lib/raven/integrations/rails/controller_transaction.rb +13 -0
- data/lib/raven/integrations/rails/overrides/debug_exceptions_catcher.rb +31 -0
- data/lib/raven/integrations/rails/overrides/streaming_reporter.rb +23 -0
- data/lib/raven/integrations/railties.rb +1 -0
- data/lib/raven/integrations/rake.rb +18 -0
- data/lib/raven/integrations/sidekiq.rb +87 -0
- data/lib/raven/integrations/tasks.rb +11 -0
- data/lib/raven/interface.rb +25 -0
- data/lib/raven/interfaces/exception.rb +15 -0
- data/lib/raven/interfaces/http.rb +16 -0
- data/lib/raven/interfaces/message.rb +20 -0
- data/lib/raven/interfaces/single_exception.rb +14 -0
- data/lib/raven/interfaces/stack_trace.rb +69 -0
- data/lib/raven/linecache.rb +41 -0
- data/lib/raven/logger.rb +19 -0
- data/lib/raven/processor.rb +15 -0
- data/lib/raven/processor/cookies.rb +26 -0
- data/lib/raven/processor/http_headers.rb +55 -0
- data/lib/raven/processor/post_data.rb +22 -0
- data/lib/raven/processor/removecircularreferences.rb +17 -0
- data/lib/raven/processor/removestacktrace.rb +24 -0
- data/lib/raven/processor/sanitizedata.rb +88 -0
- data/lib/raven/processor/utf8conversion.rb +52 -0
- data/lib/raven/transports.rb +15 -0
- data/lib/raven/transports/dummy.rb +16 -0
- data/lib/raven/transports/http.rb +66 -0
- data/lib/raven/utils/deep_merge.rb +22 -0
- data/lib/raven/utils/real_ip.rb +62 -0
- data/lib/raven/version.rb +5 -0
- data/lib/sentry-raven-without-integrations.rb +1 -0
- data/lib/sentry-raven.rb +1 -0
- metadata +141 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
module Raven
|
2
|
+
class Processor::PostData < Processor
|
3
|
+
def process(data)
|
4
|
+
process_if_symbol_keys(data) if data[:request]
|
5
|
+
process_if_string_keys(data) if data["request"]
|
6
|
+
|
7
|
+
data
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def process_if_symbol_keys(data)
|
13
|
+
return unless data[:request][:method] == "POST"
|
14
|
+
data[:request][:data] = STRING_MASK
|
15
|
+
end
|
16
|
+
|
17
|
+
def process_if_string_keys(data)
|
18
|
+
return unless data["request"]["method"] == "POST"
|
19
|
+
data["request"]["data"] = STRING_MASK
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Raven
|
2
|
+
class Processor::RemoveCircularReferences < Processor
|
3
|
+
def process(value, visited = [])
|
4
|
+
return "(...)" if visited.include?(value.__id__)
|
5
|
+
visited << value.__id__ if value.is_a?(Array) || value.is_a?(Hash)
|
6
|
+
|
7
|
+
case value
|
8
|
+
when Hash
|
9
|
+
!value.frozen? ? value.merge!(value) { |_, v| process v, visited } : value.merge(value) { |_, v| process v, visited }
|
10
|
+
when Array
|
11
|
+
!value.frozen? ? value.map! { |v| process v, visited } : value.map { |v| process v, visited }
|
12
|
+
else
|
13
|
+
value
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Raven
|
2
|
+
class Processor::RemoveStacktrace < Processor
|
3
|
+
def process(data)
|
4
|
+
process_if_symbol_keys(data) if data[:exception]
|
5
|
+
process_if_string_keys(data) if data["exception"]
|
6
|
+
|
7
|
+
data
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def process_if_symbol_keys(data)
|
13
|
+
data[:exception][:values].map do |single_exception|
|
14
|
+
single_exception.delete(:stacktrace) if single_exception[:stacktrace]
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def process_if_string_keys(data)
|
19
|
+
data["exception"]["values"].map do |single_exception|
|
20
|
+
single_exception.delete("stacktrace") if single_exception["stacktrace"]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'json'
|
3
|
+
|
4
|
+
module Raven
|
5
|
+
class Processor::SanitizeData < Processor
|
6
|
+
DEFAULT_FIELDS = %w(authorization password passwd secret ssn social(.*)?sec).freeze
|
7
|
+
CREDIT_CARD_RE = /\b(?:3[47]\d|(?:4\d|5[1-5]|65)\d{2}|6011)\d{12}\b/
|
8
|
+
QUERY_STRING = ['query_string', :query_string].freeze
|
9
|
+
JSON_STARTS_WITH = ["[", "{"].freeze
|
10
|
+
|
11
|
+
attr_accessor :sanitize_fields, :sanitize_credit_cards, :sanitize_fields_excluded
|
12
|
+
|
13
|
+
def initialize(client)
|
14
|
+
super
|
15
|
+
self.sanitize_fields = client.configuration.sanitize_fields
|
16
|
+
self.sanitize_credit_cards = client.configuration.sanitize_credit_cards
|
17
|
+
self.sanitize_fields_excluded = client.configuration.sanitize_fields_excluded
|
18
|
+
end
|
19
|
+
|
20
|
+
def process(value, key = nil)
|
21
|
+
case value
|
22
|
+
when Hash
|
23
|
+
!value.frozen? ? value.merge!(value) { |k, v| process v, k } : value.merge(value) { |k, v| process v, k }
|
24
|
+
when Array
|
25
|
+
!value.frozen? ? value.map! { |v| process v, key } : value.map { |v| process v, key }
|
26
|
+
when Integer
|
27
|
+
matches_regexes?(key, value.to_s) ? INT_MASK : value
|
28
|
+
when String
|
29
|
+
if value =~ fields_re && (json = parse_json_or_nil(value))
|
30
|
+
# if this string is actually a json obj, convert and sanitize
|
31
|
+
process(json).to_json
|
32
|
+
elsif matches_regexes?(key, value)
|
33
|
+
STRING_MASK
|
34
|
+
elsif QUERY_STRING.include?(key)
|
35
|
+
sanitize_query_string(value)
|
36
|
+
else
|
37
|
+
value
|
38
|
+
end
|
39
|
+
else
|
40
|
+
value
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
|
46
|
+
# CGI.parse takes our nice UTF-8 strings and converts them back to ASCII,
|
47
|
+
# so we have to convert them back, again.
|
48
|
+
def utf8_processor
|
49
|
+
@utf8_processor ||= Processor::UTF8Conversion.new
|
50
|
+
end
|
51
|
+
|
52
|
+
def sanitize_query_string(query_string)
|
53
|
+
query_hash = CGI.parse(query_string)
|
54
|
+
sanitized = utf8_processor.process(query_hash)
|
55
|
+
processed_query_hash = process(sanitized)
|
56
|
+
URI.encode_www_form(processed_query_hash)
|
57
|
+
end
|
58
|
+
|
59
|
+
def matches_regexes?(k, v)
|
60
|
+
(sanitize_credit_cards && v =~ CREDIT_CARD_RE) ||
|
61
|
+
k =~ fields_re
|
62
|
+
end
|
63
|
+
|
64
|
+
def fields_re
|
65
|
+
return @fields_re if instance_variable_defined?(:@fields_re)
|
66
|
+
fields = DEFAULT_FIELDS | sanitize_fields
|
67
|
+
fields -= sanitize_fields_excluded
|
68
|
+
@fields_re = /#{fields.map do |f|
|
69
|
+
use_boundary?(f) ? "\\b#{f}\\b" : f
|
70
|
+
end.join("|")}/i
|
71
|
+
end
|
72
|
+
|
73
|
+
def use_boundary?(string)
|
74
|
+
!DEFAULT_FIELDS.include?(string) && !special_characters?(string)
|
75
|
+
end
|
76
|
+
|
77
|
+
def special_characters?(string)
|
78
|
+
REGEX_SPECIAL_CHARACTERS.select { |r| string.include?(r) }.any?
|
79
|
+
end
|
80
|
+
|
81
|
+
def parse_json_or_nil(string)
|
82
|
+
return unless string.start_with?(*JSON_STARTS_WITH)
|
83
|
+
JSON.parse(string)
|
84
|
+
rescue JSON::ParserError, NoMethodError
|
85
|
+
nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
module Raven
|
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
|
+
|
9
|
+
def process(value)
|
10
|
+
case value
|
11
|
+
when Hash
|
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 }
|
15
|
+
when Exception
|
16
|
+
return value if value.message.valid_encoding?
|
17
|
+
clean_exc = value.class.new(remove_invalid_bytes(value.message))
|
18
|
+
clean_exc.set_backtrace(value.backtrace)
|
19
|
+
clean_exc
|
20
|
+
when String
|
21
|
+
# Encoding::BINARY / Encoding::ASCII_8BIT is a special binary encoding.
|
22
|
+
# valid_encoding? will always return true because it contains all codepoints,
|
23
|
+
# so instead we check if it only contains actual ASCII codepoints, and if
|
24
|
+
# not we assume it's actually just UTF8 and scrub accordingly.
|
25
|
+
if value.encoding == Encoding::BINARY && !value.ascii_only?
|
26
|
+
value = value.dup
|
27
|
+
value.force_encoding(Encoding::UTF_8)
|
28
|
+
end
|
29
|
+
return value if value.valid_encoding?
|
30
|
+
remove_invalid_bytes(value)
|
31
|
+
else
|
32
|
+
value
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Stolen from RSpec
|
39
|
+
# https://github.com/rspec/rspec-support/blob/f0af3fd74a94ff7bb700f6ba06dbdc67bba17fbf/lib/rspec/support/encoded_string.rb#L120-L139
|
40
|
+
if String.method_defined?(:scrub) # 2.1+
|
41
|
+
def remove_invalid_bytes(string)
|
42
|
+
string.scrub!(REPLACE)
|
43
|
+
end
|
44
|
+
else
|
45
|
+
def remove_invalid_bytes(string)
|
46
|
+
string.chars.map do |char|
|
47
|
+
char.valid_encoding? ? char : REPLACE
|
48
|
+
end.join
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Raven
|
2
|
+
module Transports
|
3
|
+
class Transport
|
4
|
+
attr_accessor :configuration
|
5
|
+
|
6
|
+
def initialize(configuration)
|
7
|
+
@configuration = configuration
|
8
|
+
end
|
9
|
+
|
10
|
+
def send_event # (auth_header, data, options = {})
|
11
|
+
raise NotImplementedError, 'Abstract method not implemented'
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Raven
|
2
|
+
module Transports
|
3
|
+
class Dummy < Transport
|
4
|
+
attr_accessor :events
|
5
|
+
|
6
|
+
def initialize(*)
|
7
|
+
super
|
8
|
+
@events = []
|
9
|
+
end
|
10
|
+
|
11
|
+
def send_event(auth_header, data, options = {})
|
12
|
+
@events << [auth_header, data, options]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
|
3
|
+
require 'raven/transports'
|
4
|
+
|
5
|
+
module Raven
|
6
|
+
module Transports
|
7
|
+
class HTTP < Transport
|
8
|
+
attr_accessor :conn, :adapter
|
9
|
+
|
10
|
+
def initialize(*args)
|
11
|
+
super
|
12
|
+
self.adapter = configuration.http_adapter || Faraday.default_adapter
|
13
|
+
self.conn = set_conn
|
14
|
+
end
|
15
|
+
|
16
|
+
def send_event(auth_header, data, options = {})
|
17
|
+
unless configuration.sending_allowed?
|
18
|
+
logger.debug("Event not sent: #{configuration.error_messages}")
|
19
|
+
end
|
20
|
+
|
21
|
+
project_id = configuration[:project_id]
|
22
|
+
path = configuration[:path] + "/"
|
23
|
+
|
24
|
+
conn.post "#{path}api/#{project_id}/store/" do |req|
|
25
|
+
req.headers['Content-Type'] = options[:content_type]
|
26
|
+
req.headers['X-Sentry-Auth'] = auth_header
|
27
|
+
req.body = data
|
28
|
+
end
|
29
|
+
rescue Faraday::Error => ex
|
30
|
+
error_info = ex.message
|
31
|
+
if ex.response && ex.response[:headers]['x-sentry-error']
|
32
|
+
error_info += " Error in headers is: #{ex.response[:headers]['x-sentry-error']}"
|
33
|
+
end
|
34
|
+
raise Raven::Error, error_info
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def set_conn
|
40
|
+
configuration.logger.debug "Raven HTTP Transport connecting to #{configuration.server}"
|
41
|
+
|
42
|
+
Faraday.new(configuration.server, :ssl => ssl_configuration) do |builder|
|
43
|
+
configuration.faraday_builder.call(builder) if configuration.faraday_builder
|
44
|
+
builder.response :raise_error
|
45
|
+
builder.options.merge! faraday_opts
|
46
|
+
builder.headers[:user_agent] = "sentry-ruby/#{Raven::VERSION}"
|
47
|
+
builder.adapter(*adapter)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# TODO: deprecate and replace where possible w/Faraday Builder
|
52
|
+
def faraday_opts
|
53
|
+
[:proxy, :timeout, :open_timeout].each_with_object({}) do |opt, memo|
|
54
|
+
memo[opt] = configuration.public_send(opt) if configuration.public_send(opt)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def ssl_configuration
|
59
|
+
(configuration.ssl || {}).merge(
|
60
|
+
:verify => configuration.ssl_verification,
|
61
|
+
:ca_file => configuration.ssl_ca_file
|
62
|
+
)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Raven
|
2
|
+
module Utils
|
3
|
+
# ported from ActiveSupport
|
4
|
+
module DeepMergeHash
|
5
|
+
def self.deep_merge(hash, other_hash, &block)
|
6
|
+
deep_merge!(hash, other_hash, &block)
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.deep_merge!(hash, other_hash, &block)
|
10
|
+
hash.merge!(other_hash) do |key, this_val, other_val|
|
11
|
+
if this_val.is_a?(Hash) && other_val.is_a?(Hash)
|
12
|
+
deep_merge(this_val, other_val, &block)
|
13
|
+
elsif block_given?
|
14
|
+
block.call(key, this_val, other_val)
|
15
|
+
else
|
16
|
+
other_val
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'ipaddr'
|
2
|
+
|
3
|
+
# Based on ActionDispatch::RemoteIp. All security-related precautions from that
|
4
|
+
# middleware have been removed, because the Event IP just needs to be accurate,
|
5
|
+
# and spoofing an IP here only makes data inaccurate, not insecure. Don't re-use
|
6
|
+
# this module if you have to *trust* the IP address.
|
7
|
+
module Raven
|
8
|
+
module Utils
|
9
|
+
class RealIp
|
10
|
+
LOCAL_ADDRESSES = [
|
11
|
+
"127.0.0.1", # localhost IPv4
|
12
|
+
"::1", # localhost IPv6
|
13
|
+
"fc00::/7", # private IPv6 range fc00::/7
|
14
|
+
"10.0.0.0/8", # private IPv4 range 10.x.x.x
|
15
|
+
"172.16.0.0/12", # private IPv4 range 172.16.0.0 .. 172.31.255.255
|
16
|
+
"192.168.0.0/16", # private IPv4 range 192.168.x.x
|
17
|
+
].map { |proxy| IPAddr.new(proxy) }
|
18
|
+
|
19
|
+
attr_accessor :ip, :ip_addresses
|
20
|
+
|
21
|
+
def initialize(ip_addresses)
|
22
|
+
self.ip_addresses = ip_addresses
|
23
|
+
end
|
24
|
+
|
25
|
+
def calculate_ip
|
26
|
+
# CGI environment variable set by Rack
|
27
|
+
remote_addr = ips_from(ip_addresses[:remote_addr]).last
|
28
|
+
|
29
|
+
# Could be a CSV list and/or repeated headers that were concatenated.
|
30
|
+
client_ips = ips_from(ip_addresses[:client_ip])
|
31
|
+
real_ips = ips_from(ip_addresses[:real_ip])
|
32
|
+
forwarded_ips = ips_from(ip_addresses[:forwarded_for])
|
33
|
+
|
34
|
+
ips = [client_ips, real_ips, forwarded_ips, remote_addr].flatten.compact
|
35
|
+
|
36
|
+
# If every single IP option is in the trusted list, just return REMOTE_ADDR
|
37
|
+
self.ip = filter_local_addresses(ips).first || remote_addr
|
38
|
+
end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
def ips_from(header)
|
43
|
+
# Split the comma-separated list into an array of strings
|
44
|
+
ips = header ? header.strip.split(/[,\s]+/) : []
|
45
|
+
ips.select do |ip|
|
46
|
+
begin
|
47
|
+
# Only return IPs that are valid according to the IPAddr#new method
|
48
|
+
range = IPAddr.new(ip).to_range
|
49
|
+
# we want to make sure nobody is sneaking a netmask in
|
50
|
+
range.begin == range.end
|
51
|
+
rescue ArgumentError
|
52
|
+
nil
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def filter_local_addresses(ips)
|
58
|
+
ips.reject { |ip| LOCAL_ADDRESSES.any? { |proxy| proxy === ip } }
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
require 'raven/base'
|
data/lib/sentry-raven.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "raven"
|
metadata
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jones-gem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 2.7.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alec Jones
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.7.6
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: '1.0'
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 0.7.6
|
30
|
+
- - "<"
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '1.0'
|
33
|
+
description: A gem that provides a client interface for the Jones error logger
|
34
|
+
email: alecaej2002@gmail.com
|
35
|
+
executables:
|
36
|
+
- raven
|
37
|
+
extensions: []
|
38
|
+
extra_rdoc_files:
|
39
|
+
- README.md
|
40
|
+
- LICENSE
|
41
|
+
files:
|
42
|
+
- ".rspec"
|
43
|
+
- ".rubocop.yml"
|
44
|
+
- ".travis.yml"
|
45
|
+
- Gemfile
|
46
|
+
- LICENSE
|
47
|
+
- README.md
|
48
|
+
- Rakefile
|
49
|
+
- changelog.md
|
50
|
+
- docs/Makefile
|
51
|
+
- docs/breadcrumbs.rst
|
52
|
+
- docs/conf.py
|
53
|
+
- docs/config.rst
|
54
|
+
- docs/context.rst
|
55
|
+
- docs/index.rst
|
56
|
+
- docs/install.rst
|
57
|
+
- docs/integrations/heroku.rst
|
58
|
+
- docs/integrations/index.rst
|
59
|
+
- docs/integrations/puma.rst
|
60
|
+
- docs/integrations/rack.rst
|
61
|
+
- docs/integrations/rails.rst
|
62
|
+
- docs/make.bat
|
63
|
+
- docs/processors.rst
|
64
|
+
- docs/sentry-doc-config.json
|
65
|
+
- docs/usage.rst
|
66
|
+
- exe/raven
|
67
|
+
- jones-gem.gemspec
|
68
|
+
- lib/raven.rb
|
69
|
+
- lib/raven/backtrace.rb
|
70
|
+
- lib/raven/base.rb
|
71
|
+
- lib/raven/breadcrumbs.rb
|
72
|
+
- lib/raven/breadcrumbs/activesupport.rb
|
73
|
+
- lib/raven/breadcrumbs/logger.rb
|
74
|
+
- lib/raven/cli.rb
|
75
|
+
- lib/raven/client.rb
|
76
|
+
- lib/raven/configuration.rb
|
77
|
+
- lib/raven/context.rb
|
78
|
+
- lib/raven/event.rb
|
79
|
+
- lib/raven/instance.rb
|
80
|
+
- lib/raven/integrations/delayed_job.rb
|
81
|
+
- lib/raven/integrations/rack-timeout.rb
|
82
|
+
- lib/raven/integrations/rack.rb
|
83
|
+
- lib/raven/integrations/rails.rb
|
84
|
+
- lib/raven/integrations/rails/active_job.rb
|
85
|
+
- lib/raven/integrations/rails/controller_methods.rb
|
86
|
+
- lib/raven/integrations/rails/controller_transaction.rb
|
87
|
+
- lib/raven/integrations/rails/overrides/debug_exceptions_catcher.rb
|
88
|
+
- lib/raven/integrations/rails/overrides/streaming_reporter.rb
|
89
|
+
- lib/raven/integrations/railties.rb
|
90
|
+
- lib/raven/integrations/rake.rb
|
91
|
+
- lib/raven/integrations/sidekiq.rb
|
92
|
+
- lib/raven/integrations/tasks.rb
|
93
|
+
- lib/raven/interface.rb
|
94
|
+
- lib/raven/interfaces/exception.rb
|
95
|
+
- lib/raven/interfaces/http.rb
|
96
|
+
- lib/raven/interfaces/message.rb
|
97
|
+
- lib/raven/interfaces/single_exception.rb
|
98
|
+
- lib/raven/interfaces/stack_trace.rb
|
99
|
+
- lib/raven/linecache.rb
|
100
|
+
- lib/raven/logger.rb
|
101
|
+
- lib/raven/processor.rb
|
102
|
+
- lib/raven/processor/cookies.rb
|
103
|
+
- lib/raven/processor/http_headers.rb
|
104
|
+
- lib/raven/processor/post_data.rb
|
105
|
+
- lib/raven/processor/removecircularreferences.rb
|
106
|
+
- lib/raven/processor/removestacktrace.rb
|
107
|
+
- lib/raven/processor/sanitizedata.rb
|
108
|
+
- lib/raven/processor/utf8conversion.rb
|
109
|
+
- lib/raven/transports.rb
|
110
|
+
- lib/raven/transports/dummy.rb
|
111
|
+
- lib/raven/transports/http.rb
|
112
|
+
- lib/raven/utils/deep_merge.rb
|
113
|
+
- lib/raven/utils/real_ip.rb
|
114
|
+
- lib/raven/version.rb
|
115
|
+
- lib/sentry-raven-without-integrations.rb
|
116
|
+
- lib/sentry-raven.rb
|
117
|
+
homepage: https://github.com/alecj1240/jones-gem
|
118
|
+
licenses:
|
119
|
+
- Apache-2.0
|
120
|
+
metadata: {}
|
121
|
+
post_install_message:
|
122
|
+
rdoc_options: []
|
123
|
+
require_paths:
|
124
|
+
- lib
|
125
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - ">="
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: 1.9.0
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: '0'
|
135
|
+
requirements: []
|
136
|
+
rubyforge_project:
|
137
|
+
rubygems_version: 2.6.12
|
138
|
+
signing_key:
|
139
|
+
specification_version: 4
|
140
|
+
summary: A gem that provides a client interface for the Jones error logger
|
141
|
+
test_files: []
|