airbrake 3.0.4 → 3.0.5
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.
- 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
|