airbrake 3.0.4 → 3.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +75 -38
- data/INSTALL +8 -8
- data/README.md +12 -10
- data/Rakefile +1 -1
- data/SUPPORTED_RAILS_VERSIONS +2 -6
- data/TESTING.md +1 -1
- data/airbrake.gemspec +2 -2
- data/features/rails_with_js_notifier.feature +1 -1
- data/features/rake.feature +4 -0
- data/features/step_definitions/airbrake_shim.rb.template +2 -2
- data/features/step_definitions/rails_application_steps.rb +3 -3
- data/features/support/airbrake_shim.rb.template +2 -2
- data/features/support/rake/Rakefile +11 -0
- data/lib/airbrake.rb +2 -5
- data/lib/airbrake/capistrano.rb +14 -3
- data/lib/airbrake/configuration.rb +3 -3
- data/lib/airbrake/notice.rb +1 -1
- data/lib/airbrake/rails/javascript_notifier.rb +7 -1
- data/lib/airbrake/railtie.rb +4 -4
- data/lib/airbrake/rake_handler.rb +3 -2
- data/lib/airbrake/sender.rb +13 -1
- data/lib/airbrake/shared_tasks.rb +1 -1
- data/lib/airbrake/user_informer.rb +4 -2
- data/lib/airbrake/version.rb +1 -1
- data/lib/airbrake_tasks.rb +9 -3
- data/lib/templates/rescue.erb +2 -2
- data/resources/README.md +34 -0
- data/resources/ca-bundle.crt +3376 -0
- data/script/integration_test.rb +1 -1
- data/test/airbrake_tasks_test.rb +35 -25
- data/test/capistrano_test.rb +2 -1
- data/test/configuration_test.rb +2 -2
- data/test/notice_test.rb +7 -0
- data/test/notifier_test.rb +13 -0
- data/test/sender_test.rb +9 -9
- metadata +112 -183
data/script/integration_test.rb
CHANGED
data/test/airbrake_tasks_test.rb
CHANGED
@@ -39,15 +39,19 @@ class AirbrakeTasksTest < Test::Unit::TestCase
|
|
39
39
|
|
40
40
|
context "given an optional HTTP proxy and valid options" do
|
41
41
|
setup do
|
42
|
-
@response
|
43
|
-
@http_proxy
|
42
|
+
@response = stub("response", :body => "stub body")
|
43
|
+
@http_proxy = stub("proxy", :request => @response)
|
44
|
+
@http_proxy_class = stub("proxy_class", :new => @http_proxy)
|
45
|
+
@post = stub("post", :set_form_data => nil)
|
44
46
|
|
47
|
+
@http_proxy.expects(:use_ssl=).with(Airbrake.configuration.secure)
|
45
48
|
Net::HTTP.expects(:Proxy).
|
46
49
|
with(Airbrake.configuration.proxy_host,
|
47
50
|
Airbrake.configuration.proxy_port,
|
48
51
|
Airbrake.configuration.proxy_user,
|
49
52
|
Airbrake.configuration.proxy_pass).
|
50
|
-
returns(@
|
53
|
+
returns(@http_proxy_class)
|
54
|
+
Net::HTTP::Post.expects(:new).with("/deploys.txt").returns(@post)
|
51
55
|
|
52
56
|
@options = { :rails_env => "staging", :dry_run => false }
|
53
57
|
end
|
@@ -57,7 +61,7 @@ class AirbrakeTasksTest < Test::Unit::TestCase
|
|
57
61
|
|
58
62
|
should "return true without performing any actual request" do
|
59
63
|
assert_equal true, @output
|
60
|
-
assert_received(@http_proxy, :
|
64
|
+
assert_received(@http_proxy, :request) do|expects|
|
61
65
|
expects.never
|
62
66
|
end
|
63
67
|
end
|
@@ -68,57 +72,54 @@ class AirbrakeTasksTest < Test::Unit::TestCase
|
|
68
72
|
@output = AirbrakeTasks.deploy(@options)
|
69
73
|
end
|
70
74
|
|
71
|
-
before_should "post to http://
|
72
|
-
|
73
|
-
@
|
75
|
+
before_should "post to http://airbrake.io:80/deploys.txt" do
|
76
|
+
@http_proxy_class.expects(:new).with("airbrake.io", 80).returns(@http_proxy)
|
77
|
+
@post.expects(:set_form_data).with(kind_of(Hash))
|
78
|
+
@http_proxy.expects(:request).with(any_parameters).returns(successful_response)
|
74
79
|
end
|
75
80
|
|
76
81
|
before_should "use the project api key" do
|
77
|
-
@
|
78
|
-
with(
|
79
|
-
returns(successful_response)
|
82
|
+
@post.expects(:set_form_data).
|
83
|
+
with(has_entries('api_key' => "1234123412341234"))
|
80
84
|
end
|
81
85
|
|
82
86
|
before_should "use send the rails_env param" do
|
83
|
-
@
|
84
|
-
with(
|
85
|
-
returns(successful_response)
|
87
|
+
@post.expects(:set_form_data).
|
88
|
+
with(has_entries("deploy[rails_env]" => "staging"))
|
86
89
|
end
|
87
90
|
|
88
91
|
[:local_username, :scm_repository, :scm_revision].each do |key|
|
89
92
|
before_should "use send the #{key} param if it's passed in." do
|
90
93
|
@options[key] = "value"
|
91
|
-
@
|
92
|
-
with(
|
93
|
-
returns(successful_response)
|
94
|
+
@post.expects(:set_form_data).
|
95
|
+
with(has_entries("deploy[#{key}]" => "value"))
|
94
96
|
end
|
95
97
|
end
|
96
98
|
|
97
99
|
before_should "use the :api_key param if it's passed in." do
|
98
100
|
@options[:api_key] = "value"
|
99
|
-
@
|
100
|
-
with(
|
101
|
-
returns(successful_response)
|
101
|
+
@post.expects(:set_form_data).
|
102
|
+
with(has_entries("api_key" => "value"))
|
102
103
|
end
|
103
104
|
|
104
105
|
before_should "puts the response body on success" do
|
105
106
|
AirbrakeTasks.expects(:puts).with("body")
|
106
|
-
@http_proxy.expects(:
|
107
|
+
@http_proxy.expects(:request).with(any_parameters).returns(successful_response('body'))
|
107
108
|
end
|
108
109
|
|
109
110
|
before_should "puts the response body on failure" do
|
110
111
|
AirbrakeTasks.expects(:puts).with("body")
|
111
|
-
@http_proxy.expects(:
|
112
|
+
@http_proxy.expects(:request).with(any_parameters).returns(unsuccessful_response('body'))
|
112
113
|
end
|
113
114
|
|
114
115
|
should "return false on failure", :before => lambda {
|
115
|
-
@http_proxy.expects(:
|
116
|
+
@http_proxy.expects(:request).with(any_parameters).returns(unsuccessful_response('body'))
|
116
117
|
} do
|
117
118
|
assert !@output
|
118
119
|
end
|
119
120
|
|
120
121
|
should "return true on success", :before => lambda {
|
121
|
-
@http_proxy.expects(:
|
122
|
+
@http_proxy.expects(:request).with(any_parameters).returns(successful_response('body'))
|
122
123
|
} do
|
123
124
|
assert @output
|
124
125
|
end
|
@@ -138,8 +139,17 @@ class AirbrakeTasksTest < Test::Unit::TestCase
|
|
138
139
|
setup { @output = AirbrakeTasks.deploy(:rails_env => "staging") }
|
139
140
|
|
140
141
|
before_should "post to the custom host" do
|
141
|
-
|
142
|
-
|
142
|
+
@post = stub("post", :set_form_data => nil)
|
143
|
+
@http_proxy = stub("proxy", :request => @response)
|
144
|
+
@http_proxy.expects(:use_ssl=).with(Airbrake.configuration.secure)
|
145
|
+
@http_proxy_class = stub("proxy_class", :new => @http_proxy)
|
146
|
+
@http_proxy_class.expects(:new).with("custom.host", 80).returns(@http_proxy)
|
147
|
+
Net::HTTP.expects(:Proxy).with(any_parameters).returns(@http_proxy_class)
|
148
|
+
Net::HTTP::Post.expects(:new).with("/deploys.txt").returns(@post)
|
149
|
+
# URI.stubs(:parse).with('http://custom.host/deploys.txt').returns(:uri)
|
150
|
+
# Net::HTTP.expects(:post_form).with(:uri, kind_of(Hash)).returns(successful_response)
|
151
|
+
@post.expects(:set_form_data).with(kind_of(Hash))
|
152
|
+
@http_proxy.expects(:request).with(any_parameters).returns(successful_response)
|
143
153
|
end
|
144
154
|
end
|
145
155
|
end
|
data/test/capistrano_test.rb
CHANGED
@@ -20,6 +20,7 @@ class CapistranoTest < Test::Unit::TestCase
|
|
20
20
|
should "log when calling airbrake:deploy task" do
|
21
21
|
@configuration.set(:current_revision, '084505b1c0e0bcf1526e673bb6ac99fbcb18aecc')
|
22
22
|
@configuration.set(:repository, 'repository')
|
23
|
+
@configuration.set(:current_release, '/home/deploy/rails_app/hoptoad')
|
23
24
|
io = StringIO.new
|
24
25
|
logger = Capistrano::Logger.new(:output => io)
|
25
26
|
logger.level = Capistrano::Logger::MAX_LEVEL
|
@@ -30,4 +31,4 @@ class CapistranoTest < Test::Unit::TestCase
|
|
30
31
|
assert io.string.include?('** Notifying Airbrake of Deploy')
|
31
32
|
assert io.string.include?('** Airbrake Notification Complete')
|
32
33
|
end
|
33
|
-
end
|
34
|
+
end
|
data/test/configuration_test.rb
CHANGED
@@ -14,9 +14,9 @@ class ConfigurationTest < Test::Unit::TestCase
|
|
14
14
|
assert_config_default :logger, nil
|
15
15
|
assert_config_default :notifier_version, Airbrake::VERSION
|
16
16
|
assert_config_default :notifier_name, 'Airbrake Notifier'
|
17
|
-
assert_config_default :notifier_url, 'http://
|
17
|
+
assert_config_default :notifier_url, 'http://airbrake.io'
|
18
18
|
assert_config_default :secure, false
|
19
|
-
assert_config_default :host, '
|
19
|
+
assert_config_default :host, 'airbrake.io'
|
20
20
|
assert_config_default :http_open_timeout, 2
|
21
21
|
assert_config_default :http_read_timeout, 5
|
22
22
|
assert_config_default :ignore_by_filters, []
|
data/test/notice_test.rb
CHANGED
@@ -349,6 +349,13 @@ class NoticeTest < Test::Unit::TestCase
|
|
349
349
|
end
|
350
350
|
end
|
351
351
|
|
352
|
+
|
353
|
+
should "ensure #to_ary is called on objects that support it" do
|
354
|
+
assert_nothing_raised do
|
355
|
+
build_notice(:session => { :object => stub(:to_ary => {}) })
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
352
359
|
should "extract data from a rack environment hash" do
|
353
360
|
url = "https://subdomain.happylane.com:100/test/file.rb?var=value&var2=value2"
|
354
361
|
parameters = { 'var' => 'value', 'var2' => 'value2' }
|
data/test/notifier_test.rb
CHANGED
@@ -82,6 +82,19 @@ class NotifierTest < Test::Unit::TestCase
|
|
82
82
|
assert_sent(notice, notice_args)
|
83
83
|
end
|
84
84
|
|
85
|
+
should "create and send a notice for an exception that responds to to_hash" do
|
86
|
+
set_public_env
|
87
|
+
exception = build_exception
|
88
|
+
notice = stub_notice!
|
89
|
+
notice_args = { :error_message => 'uh oh' }
|
90
|
+
exception.stubs(:to_hash).returns(notice_args)
|
91
|
+
stub_sender!
|
92
|
+
|
93
|
+
Airbrake.notify(exception)
|
94
|
+
|
95
|
+
assert_sent(notice, notice_args.merge(:exception => exception))
|
96
|
+
end
|
97
|
+
|
85
98
|
should "create and sent a notice for an exception and hash" do
|
86
99
|
set_public_env
|
87
100
|
exception = build_exception
|
data/test/sender_test.rb
CHANGED
@@ -39,7 +39,7 @@ class SenderTest < Test::Unit::TestCase
|
|
39
39
|
proxy = stub(:new => http)
|
40
40
|
Net::HTTP.stubs(:Proxy => proxy)
|
41
41
|
|
42
|
-
url = "http://
|
42
|
+
url = "http://airbrake.io:80#{Airbrake::Sender::NOTICES_URI}"
|
43
43
|
uri = URI.parse(url)
|
44
44
|
|
45
45
|
proxy_host = 'some.host'
|
@@ -98,7 +98,7 @@ class SenderTest < Test::Unit::TestCase
|
|
98
98
|
|
99
99
|
should "post to the right url for non-ssl" do
|
100
100
|
http = stub_http
|
101
|
-
url = "http://
|
101
|
+
url = "http://airbrake.io:80#{Airbrake::Sender::NOTICES_URI}"
|
102
102
|
uri = URI.parse(url)
|
103
103
|
send_exception(:secure => false)
|
104
104
|
assert_received(http, :post) {|expect| expect.with(uri.path, anything, Airbrake::HEADERS) }
|
@@ -111,7 +111,7 @@ class SenderTest < Test::Unit::TestCase
|
|
111
111
|
end
|
112
112
|
|
113
113
|
should "verify the SSL peer when the use_ssl option is set to true" do
|
114
|
-
url = "https://
|
114
|
+
url = "https://airbrake.io#{Airbrake::Sender::NOTICES_URI}"
|
115
115
|
uri = URI.parse(url)
|
116
116
|
|
117
117
|
real_http = Net::HTTP.new(uri.host, uri.port)
|
@@ -121,13 +121,13 @@ class SenderTest < Test::Unit::TestCase
|
|
121
121
|
File.stubs(:exist?).with(OpenSSL::X509::DEFAULT_CERT_FILE).returns(false)
|
122
122
|
|
123
123
|
send_exception(:secure => true)
|
124
|
-
assert(real_http.use_ssl)
|
124
|
+
assert(real_http.use_ssl?)
|
125
125
|
assert_equal(OpenSSL::SSL::VERIFY_PEER, real_http.verify_mode)
|
126
|
-
|
126
|
+
assert_equal(Airbrake::Sender.local_cert_path, real_http.ca_file)
|
127
127
|
end
|
128
128
|
|
129
129
|
should "verify the SSL peer when the use_ssl option is set to true and the default cert exists" do
|
130
|
-
url = "https://
|
130
|
+
url = "https://airbrake.io#{Airbrake::Sender::NOTICES_URI}"
|
131
131
|
uri = URI.parse(url)
|
132
132
|
|
133
133
|
real_http = Net::HTTP.new(uri.host, uri.port)
|
@@ -137,7 +137,7 @@ class SenderTest < Test::Unit::TestCase
|
|
137
137
|
File.stubs(:exist?).with(OpenSSL::X509::DEFAULT_CERT_FILE).returns(true)
|
138
138
|
|
139
139
|
send_exception(:secure => true)
|
140
|
-
assert(real_http.use_ssl)
|
140
|
+
assert(real_http.use_ssl?)
|
141
141
|
assert_equal(OpenSSL::SSL::VERIFY_PEER, real_http.verify_mode)
|
142
142
|
assert_equal(OpenSSL::X509::DEFAULT_CERT_FILE, real_http.ca_file)
|
143
143
|
end
|
@@ -169,13 +169,13 @@ class SenderTest < Test::Unit::TestCase
|
|
169
169
|
should "connect to the right port for ssl" do
|
170
170
|
stub_http
|
171
171
|
send_exception(:secure => true)
|
172
|
-
assert_received(Net::HTTP, :new) {|expect| expect.with("
|
172
|
+
assert_received(Net::HTTP, :new) {|expect| expect.with("airbrake.io", 443) }
|
173
173
|
end
|
174
174
|
|
175
175
|
should "connect to the right port for non-ssl" do
|
176
176
|
stub_http
|
177
177
|
send_exception(:secure => false)
|
178
|
-
assert_received(Net::HTTP, :new) {|expect| expect.with("
|
178
|
+
assert_received(Net::HTTP, :new) {|expect| expect.with("airbrake.io", 80) }
|
179
179
|
end
|
180
180
|
|
181
181
|
should "use ssl if secure" do
|
metadata
CHANGED
@@ -1,235 +1,165 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: airbrake
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 3.0.5
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 3
|
8
|
-
- 0
|
9
|
-
- 4
|
10
|
-
version: 3.0.4
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- thoughtbot, inc
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-11-09 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: builder
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70183356319840 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :runtime
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: activesupport
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: *70183356319840
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: activesupport
|
27
|
+
requirement: &70183356319180 !ruby/object:Gem::Requirement
|
38
28
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
version: "0"
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
46
33
|
type: :runtime
|
47
|
-
version_requirements: *id002
|
48
|
-
- !ruby/object:Gem::Dependency
|
49
|
-
name: actionpack
|
50
34
|
prerelease: false
|
51
|
-
|
35
|
+
version_requirements: *70183356319180
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: actionpack
|
38
|
+
requirement: &70183356318180 !ruby/object:Gem::Requirement
|
52
39
|
none: false
|
53
|
-
requirements:
|
40
|
+
requirements:
|
54
41
|
- - ~>
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
hash: 19
|
57
|
-
segments:
|
58
|
-
- 2
|
59
|
-
- 3
|
60
|
-
- 8
|
42
|
+
- !ruby/object:Gem::Version
|
61
43
|
version: 2.3.8
|
62
44
|
type: :development
|
63
|
-
version_requirements: *id003
|
64
|
-
- !ruby/object:Gem::Dependency
|
65
|
-
name: activerecord
|
66
45
|
prerelease: false
|
67
|
-
|
46
|
+
version_requirements: *70183356318180
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: activerecord
|
49
|
+
requirement: &70183356317420 !ruby/object:Gem::Requirement
|
68
50
|
none: false
|
69
|
-
requirements:
|
51
|
+
requirements:
|
70
52
|
- - ~>
|
71
|
-
- !ruby/object:Gem::Version
|
72
|
-
hash: 19
|
73
|
-
segments:
|
74
|
-
- 2
|
75
|
-
- 3
|
76
|
-
- 8
|
53
|
+
- !ruby/object:Gem::Version
|
77
54
|
version: 2.3.8
|
78
55
|
type: :development
|
79
|
-
version_requirements: *id004
|
80
|
-
- !ruby/object:Gem::Dependency
|
81
|
-
name: activesupport
|
82
56
|
prerelease: false
|
83
|
-
|
57
|
+
version_requirements: *70183356317420
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: activesupport
|
60
|
+
requirement: &70183356316420 !ruby/object:Gem::Requirement
|
84
61
|
none: false
|
85
|
-
requirements:
|
62
|
+
requirements:
|
86
63
|
- - ~>
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
hash: 19
|
89
|
-
segments:
|
90
|
-
- 2
|
91
|
-
- 3
|
92
|
-
- 8
|
64
|
+
- !ruby/object:Gem::Version
|
93
65
|
version: 2.3.8
|
94
66
|
type: :development
|
95
|
-
version_requirements: *id005
|
96
|
-
- !ruby/object:Gem::Dependency
|
97
|
-
name: bourne
|
98
67
|
prerelease: false
|
99
|
-
|
68
|
+
version_requirements: *70183356316420
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: bourne
|
71
|
+
requirement: &70183356312020 !ruby/object:Gem::Requirement
|
100
72
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
segments:
|
106
|
-
- 1
|
107
|
-
- 0
|
108
|
-
version: "1.0"
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '1.0'
|
109
77
|
type: :development
|
110
|
-
version_requirements: *id006
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: cucumber
|
113
78
|
prerelease: false
|
114
|
-
|
79
|
+
version_requirements: *70183356312020
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: cucumber
|
82
|
+
requirement: &70183356311240 !ruby/object:Gem::Requirement
|
115
83
|
none: false
|
116
|
-
requirements:
|
84
|
+
requirements:
|
117
85
|
- - ~>
|
118
|
-
- !ruby/object:Gem::Version
|
119
|
-
hash: 59
|
120
|
-
segments:
|
121
|
-
- 0
|
122
|
-
- 10
|
123
|
-
- 6
|
86
|
+
- !ruby/object:Gem::Version
|
124
87
|
version: 0.10.6
|
125
88
|
type: :development
|
126
|
-
version_requirements: *id007
|
127
|
-
- !ruby/object:Gem::Dependency
|
128
|
-
name: fakeweb
|
129
89
|
prerelease: false
|
130
|
-
|
90
|
+
version_requirements: *70183356311240
|
91
|
+
- !ruby/object:Gem::Dependency
|
92
|
+
name: fakeweb
|
93
|
+
requirement: &70183356310280 !ruby/object:Gem::Requirement
|
131
94
|
none: false
|
132
|
-
requirements:
|
95
|
+
requirements:
|
133
96
|
- - ~>
|
134
|
-
- !ruby/object:Gem::Version
|
135
|
-
hash: 27
|
136
|
-
segments:
|
137
|
-
- 1
|
138
|
-
- 3
|
139
|
-
- 0
|
97
|
+
- !ruby/object:Gem::Version
|
140
98
|
version: 1.3.0
|
141
99
|
type: :development
|
142
|
-
version_requirements: *id008
|
143
|
-
- !ruby/object:Gem::Dependency
|
144
|
-
name: nokogiri
|
145
100
|
prerelease: false
|
146
|
-
|
101
|
+
version_requirements: *70183356310280
|
102
|
+
- !ruby/object:Gem::Dependency
|
103
|
+
name: nokogiri
|
104
|
+
requirement: &70183356309460 !ruby/object:Gem::Requirement
|
147
105
|
none: false
|
148
|
-
requirements:
|
106
|
+
requirements:
|
149
107
|
- - ~>
|
150
|
-
- !ruby/object:Gem::Version
|
151
|
-
hash: 113
|
152
|
-
segments:
|
153
|
-
- 1
|
154
|
-
- 4
|
155
|
-
- 3
|
156
|
-
- 1
|
108
|
+
- !ruby/object:Gem::Version
|
157
109
|
version: 1.4.3.1
|
158
110
|
type: :development
|
159
|
-
version_requirements: *id009
|
160
|
-
- !ruby/object:Gem::Dependency
|
161
|
-
name: rspec
|
162
111
|
prerelease: false
|
163
|
-
|
112
|
+
version_requirements: *70183356309460
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: rspec
|
115
|
+
requirement: &70183356308000 !ruby/object:Gem::Requirement
|
164
116
|
none: false
|
165
|
-
requirements:
|
117
|
+
requirements:
|
166
118
|
- - ~>
|
167
|
-
- !ruby/object:Gem::Version
|
168
|
-
hash: 23
|
169
|
-
segments:
|
170
|
-
- 2
|
171
|
-
- 6
|
172
|
-
- 0
|
119
|
+
- !ruby/object:Gem::Version
|
173
120
|
version: 2.6.0
|
174
121
|
type: :development
|
175
|
-
version_requirements: *id010
|
176
|
-
- !ruby/object:Gem::Dependency
|
177
|
-
name: sham_rack
|
178
122
|
prerelease: false
|
179
|
-
|
123
|
+
version_requirements: *70183356308000
|
124
|
+
- !ruby/object:Gem::Dependency
|
125
|
+
name: sham_rack
|
126
|
+
requirement: &70183356307040 !ruby/object:Gem::Requirement
|
180
127
|
none: false
|
181
|
-
requirements:
|
128
|
+
requirements:
|
182
129
|
- - ~>
|
183
|
-
- !ruby/object:Gem::Version
|
184
|
-
hash: 27
|
185
|
-
segments:
|
186
|
-
- 1
|
187
|
-
- 3
|
188
|
-
- 0
|
130
|
+
- !ruby/object:Gem::Version
|
189
131
|
version: 1.3.0
|
190
132
|
type: :development
|
191
|
-
version_requirements: *id011
|
192
|
-
- !ruby/object:Gem::Dependency
|
193
|
-
name: shoulda
|
194
133
|
prerelease: false
|
195
|
-
|
134
|
+
version_requirements: *70183356307040
|
135
|
+
- !ruby/object:Gem::Dependency
|
136
|
+
name: shoulda
|
137
|
+
requirement: &70183356306320 !ruby/object:Gem::Requirement
|
196
138
|
none: false
|
197
|
-
requirements:
|
139
|
+
requirements:
|
198
140
|
- - ~>
|
199
|
-
- !ruby/object:Gem::Version
|
200
|
-
hash: 37
|
201
|
-
segments:
|
202
|
-
- 2
|
203
|
-
- 11
|
204
|
-
- 3
|
141
|
+
- !ruby/object:Gem::Version
|
205
142
|
version: 2.11.3
|
206
143
|
type: :development
|
207
|
-
version_requirements: *id012
|
208
|
-
- !ruby/object:Gem::Dependency
|
209
|
-
name: capistrano
|
210
144
|
prerelease: false
|
211
|
-
|
145
|
+
version_requirements: *70183356306320
|
146
|
+
- !ruby/object:Gem::Dependency
|
147
|
+
name: capistrano
|
148
|
+
requirement: &70183356305220 !ruby/object:Gem::Requirement
|
212
149
|
none: false
|
213
|
-
requirements:
|
150
|
+
requirements:
|
214
151
|
- - ~>
|
215
|
-
- !ruby/object:Gem::Version
|
216
|
-
hash: 47
|
217
|
-
segments:
|
218
|
-
- 2
|
219
|
-
- 8
|
220
|
-
- 0
|
152
|
+
- !ruby/object:Gem::Version
|
221
153
|
version: 2.8.0
|
222
154
|
type: :development
|
223
|
-
|
155
|
+
prerelease: false
|
156
|
+
version_requirements: *70183356305220
|
224
157
|
description:
|
225
|
-
email: support@
|
158
|
+
email: support@airbrake.io
|
226
159
|
executables: []
|
227
|
-
|
228
160
|
extensions: []
|
229
|
-
|
230
161
|
extra_rdoc_files: []
|
231
|
-
|
232
|
-
files:
|
162
|
+
files:
|
233
163
|
- .gitignore
|
234
164
|
- .yardopts
|
235
165
|
- CHANGELOG
|
@@ -292,6 +222,8 @@ files:
|
|
292
222
|
- lib/templates/javascript_notifier.erb
|
293
223
|
- lib/templates/rescue.erb
|
294
224
|
- rails/init.rb
|
225
|
+
- resources/README.md
|
226
|
+
- resources/ca-bundle.crt
|
295
227
|
- script/integration_test.rb
|
296
228
|
- test/airbrake_2_2.xsd
|
297
229
|
- test/airbrake_tasks_test.rb
|
@@ -309,40 +241,37 @@ files:
|
|
309
241
|
- test/recursion_test.rb
|
310
242
|
- test/sender_test.rb
|
311
243
|
- test/user_informer_test.rb
|
312
|
-
homepage: http://www.
|
244
|
+
homepage: http://www.airbrake.io
|
313
245
|
licenses: []
|
314
|
-
|
315
246
|
post_install_message:
|
316
247
|
rdoc_options: []
|
317
|
-
|
318
|
-
require_paths:
|
248
|
+
require_paths:
|
319
249
|
- lib
|
320
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
250
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
321
251
|
none: false
|
322
|
-
requirements:
|
323
|
-
- -
|
324
|
-
- !ruby/object:Gem::Version
|
325
|
-
|
326
|
-
segments:
|
252
|
+
requirements:
|
253
|
+
- - ! '>='
|
254
|
+
- !ruby/object:Gem::Version
|
255
|
+
version: '0'
|
256
|
+
segments:
|
327
257
|
- 0
|
328
|
-
|
329
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
258
|
+
hash: 3313650858108623652
|
259
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
330
260
|
none: false
|
331
|
-
requirements:
|
332
|
-
- -
|
333
|
-
- !ruby/object:Gem::Version
|
334
|
-
|
335
|
-
segments:
|
261
|
+
requirements:
|
262
|
+
- - ! '>='
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
265
|
+
segments:
|
336
266
|
- 0
|
337
|
-
|
267
|
+
hash: 3313650858108623652
|
338
268
|
requirements: []
|
339
|
-
|
340
269
|
rubyforge_project:
|
341
|
-
rubygems_version: 1.8.
|
270
|
+
rubygems_version: 1.8.11
|
342
271
|
signing_key:
|
343
272
|
specification_version: 3
|
344
273
|
summary: Send your application errors to our hosted service and reclaim your inbox.
|
345
|
-
test_files:
|
274
|
+
test_files:
|
346
275
|
- features/metal.feature
|
347
276
|
- features/rack.feature
|
348
277
|
- features/rails.feature
|