airbrake 3.2.0 → 3.2.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0cb7869b6211b8a5c7157ae331b8ef74a08a8517
4
+ data.tar.gz: d0ca30c369481d71ab97470a4f59936a5cd3ea98
5
+ SHA512:
6
+ metadata.gz: 5dd5a7333f1ac94524d0fdf3a11c913a64bc240a61342d6de1109231fb9fc57df82e406f886ca894f190a357a2dabc955390ed429fc5aa5811663cff8116433b
7
+ data.tar.gz: 1a032859b51b4b957989239f52b8be83272a1fa38ba566bc55ff5e9d797c03e1ec9199d3755e901f53339db89db070b7c92e660f28cb1a9222ab256a564b0e97
data/CHANGELOG CHANGED
@@ -1,3 +1,11 @@
1
+ Version 3.2.1 - 2014-05-27 15:58:24 -0700
2
+ ===============================================================================
3
+
4
+ Ali Faiz (3):
5
+ Revert "Merge pull request #297 from airbrake/remove-js-notifier"
6
+ Add deprecation warning when using .
7
+
8
+
1
9
  Version 3.2.0 - 2014-05-23 17:37:35 -0700
2
10
  ===============================================================================
3
11
 
@@ -1368,5 +1376,6 @@ Nick Quaranto (3):
1368
1376
 
1369
1377
 
1370
1378
 
1379
+
1371
1380
 
1372
1381
 
data/Rakefile CHANGED
@@ -158,7 +158,7 @@ def cucumber_opts
158
158
 
159
159
  case ENV["BUNDLE_GEMFILE"]
160
160
  when /rails/
161
- opts << "features/rails.feature features/metal.feature features/user_informer.feature"
161
+ opts << "features/rails.feature features/rails_with_js_notifier.feature features/metal.feature features/user_informer.feature"
162
162
  when /rack/
163
163
  opts << "features/rack.feature"
164
164
  when /sinatra/
@@ -0,0 +1,104 @@
1
+ Feature: Install the Gem in a Rails application and enable the JavaScript notifier
2
+
3
+ Background:
4
+ Given I successfully run `rails new rails_root -O --skip-gemfile`
5
+ And I cd to "rails_root"
6
+ And I configure the Airbrake shim
7
+
8
+ Scenario: Include the Javascript notifier when enabled
9
+ When I configure the notifier to use the following configuration lines:
10
+ """
11
+ config.api_key = "myapikey"
12
+ """
13
+ And I define a response for "TestController#index":
14
+ """
15
+ render :inline => '<html><head profile="http://example.com"><%= airbrake_javascript_notifier %></head><body></body></html>'
16
+ """
17
+ And I route "/test/index" to "test#index"
18
+ And I perform a request to "http://example.com:123/test/index" in the "production" environment
19
+ Then I should see the notifier JavaScript for the following:
20
+ | api_key | environment | host |
21
+ | myapikey | production | api.airbrake.io |
22
+ And the notifier JavaScript should provide the following errorDefaults:
23
+ | url | component | action |
24
+ | http://example.com:123/test/index | test | index |
25
+
26
+ Scenario: Include the Javascript notifier when enabled using custom configuration settings
27
+ When I configure the notifier to use the following configuration lines:
28
+ """
29
+ config.development_environments = []
30
+ config.api_key = "myapikey!"
31
+ config.host = "myairbrake.com"
32
+ config.port = 3001
33
+ """
34
+ And I define a response for "TestController#index":
35
+ """
36
+ render :inline => '<html><head><%= airbrake_javascript_notifier %></head><body></body></html>'
37
+ """
38
+ And I route "/test/index" to "test#index"
39
+ And I perform a request to "http://example.com:123/test/index"
40
+ Then I should see the notifier JavaScript for the following:
41
+ | api_key | environment | host |
42
+ | myapikey! | test | myairbrake.com:3001 |
43
+
44
+ Scenario: Don't include the Javascript notifier by default
45
+ When I configure the notifier to use the following configuration lines:
46
+ """
47
+ config.api_key = "myapikey!"
48
+ """
49
+ And I define a response for "TestController#index":
50
+ """
51
+ render :inline => "<html><head></head><body></body></html>"
52
+ """
53
+ And I route "/test/index" to "test#index"
54
+ And I perform a request to "http://example.com:123/test/index"
55
+ Then I should not see notifier JavaScript
56
+
57
+ Scenario: Don't include the Javascript notifier when enabled in non-public environments
58
+ When I configure the notifier to use the following configuration lines:
59
+ """
60
+ config.api_key = "myapikey!"
61
+ config.environment_name = 'test'
62
+ """
63
+ And I define a response for "TestController#index":
64
+ """
65
+ render :inline => '<html><head><%= airbrake_javascript_notifier %></head><body></body></html>'
66
+ """
67
+ And I route "/test/index" to "test#index"
68
+ And I perform a request to "http://example.com:123/test/index" in the "test" environment
69
+ Then I should not see notifier JavaScript
70
+
71
+ Scenario: Use the js_api_key if present
72
+ When I configure the notifier to use the following configuration lines:
73
+ """
74
+ config.api_key = "myapikey!"
75
+ config.js_api_key = "myjsapikey!"
76
+ """
77
+ And I define a response for "TestController#index":
78
+ """
79
+ render :inline => '<html><head><%= airbrake_javascript_notifier %></head><body></body></html>'
80
+ """
81
+ And I route "/test/index" to "test#index"
82
+ And I perform a request to "http://example.com:123/test/index" in the "production" environment
83
+ Then I should see the notifier JavaScript for the following:
84
+ | api_key | environment | host |
85
+ | myjsapikey! | production | api.airbrake.io |
86
+
87
+ Scenario: Being careful with user's instance variables
88
+ When I configure the notifier to use the following configuration lines:
89
+ """
90
+ config.api_key = "myapikey"
91
+ """
92
+ And I define a response for "TestController#index":
93
+ """
94
+ @template = "this is some random instance variable"
95
+ render :inline => '<html><head><%= airbrake_javascript_notifier %></head><body></body></html>'
96
+ """
97
+ And I route "/test/index" to "test#index"
98
+ And I perform a request to "http://example.com:123/test/index" in the "production" environment
99
+ Then I should see the notifier JavaScript for the following:
100
+ | api_key | environment | host |
101
+ | myapikey | production | api.airbrake.io |
102
+ And the notifier JavaScript should provide the following errorDefaults:
103
+ | url | component | action |
104
+ | http://example.com:123/test/index | test | index |
@@ -192,6 +192,32 @@ When /^I configure the application to filter parameter "([^\"]*)"$/ do |paramete
192
192
  end
193
193
  end
194
194
 
195
+ Then /^I should see the notifier JavaScript for the following:$/ do |table|
196
+ hash = table.hashes.first
197
+ host = hash['host'] || 'api.airbrake.io'
198
+ secure = hash['secure'] || false
199
+ api_key = hash['api_key']
200
+ environment = hash['environment'] || 'production'
201
+
202
+ steps %{
203
+ Then the output should contain "#{host}/javascripts/notifier.js"
204
+ And the output should contain "Airbrake.setKey('#{api_key}');"
205
+ And the output should contain "Airbrake.setHost('#{host}');"
206
+ And the output should contain "Airbrake.setEnvironment('#{environment}');"
207
+ }
208
+ end
209
+
210
+ Then /^the notifier JavaScript should provide the following errorDefaults:$/ do |table|
211
+ hash = table.hashes.first
212
+ hash.each do |key, value|
213
+ assert_matching_output("Airbrake\.setErrorDefaults.*#{key}: \"#{value}\"",all_output)
214
+ end
215
+ end
216
+
217
+ Then /^I should not see notifier JavaScript$/ do
218
+ step %{the output should not contain "script[type='text/javascript'][src$='/javascripts/notifier.js']"}
219
+ end
220
+
195
221
  When /^I have set up authentication system in my app that uses "([^\"]*)"$/ do |current_user|
196
222
  application_controller = File.join(rails_root, 'app', 'controllers', "application_controller.rb")
197
223
  definition =
@@ -2,7 +2,7 @@ module Airbrake
2
2
  # Used to set up and modify settings for the notifier.
3
3
  class Configuration
4
4
 
5
- OPTIONS = [:api_key, :backtrace_filters, :development_environments,
5
+ OPTIONS = [:api_key, :js_api_key, :backtrace_filters, :development_environments,
6
6
  :development_lookup, :environment_name, :host,
7
7
  :http_open_timeout, :http_read_timeout, :ignore, :ignore_by_filters,
8
8
  :ignore_user_agent, :notifier_name, :notifier_url, :notifier_version,
@@ -14,6 +14,12 @@ module Airbrake
14
14
  # The API key for your project, found on the project edit form.
15
15
  attr_accessor :api_key
16
16
 
17
+ # If you're using the Javascript notifier and would want to separate
18
+ # Javascript notifications into another Airbrake project, specify
19
+ # its APi key here.
20
+ # Defaults to #api_key (of the base project)
21
+ attr_writer :js_api_key
22
+
17
23
  # The host to connect to (defaults to airbrake.io).
18
24
  attr_accessor :host
19
25
 
@@ -152,6 +158,7 @@ module Airbrake
152
158
  alias_method :use_system_ssl_cert_chain?, :use_system_ssl_cert_chain
153
159
 
154
160
  def initialize
161
+ @js_api_key = nil
155
162
  @secure = false
156
163
  @use_system_ssl_cert_chain= false
157
164
  @host = 'api.airbrake.io'
@@ -304,6 +311,14 @@ module Airbrake
304
311
  @rescue_rake_exceptions = val
305
312
  end
306
313
 
314
+ def js_api_key
315
+ @js_api_key || self.api_key
316
+ end
317
+
318
+ def js_notifier=(*args)
319
+ warn '[AIRBRAKE] config.js_notifier has been deprecated and has no effect. You should use <%= airbrake_javascript_notifier %> directly at the top of your layouts. Be sure to place it before all other javascript.'
320
+ end
321
+
307
322
  def ca_bundle_path
308
323
  if use_system_ssl_cert_chain? && File.exist?(OpenSSL::X509::DEFAULT_CERT_FILE)
309
324
  OpenSSL::X509::DEFAULT_CERT_FILE
@@ -2,6 +2,7 @@ require 'airbrake'
2
2
  require 'airbrake/rails/controller_methods'
3
3
  require 'airbrake/rails/action_controller_catcher'
4
4
  require 'airbrake/rails/error_lookup'
5
+ require 'airbrake/rails/javascript_notifier'
5
6
 
6
7
  module Airbrake
7
8
  module Rails
@@ -10,6 +11,7 @@ module Airbrake
10
11
  ActionController::Base.send(:include, Airbrake::Rails::ActionControllerCatcher)
11
12
  ActionController::Base.send(:include, Airbrake::Rails::ErrorLookup)
12
13
  ActionController::Base.send(:include, Airbrake::Rails::ControllerMethods)
14
+ ActionController::Base.send(:include, Airbrake::Rails::JavascriptNotifier)
13
15
  end
14
16
 
15
17
  rails_logger = if defined?(::Rails.logger)
@@ -0,0 +1,85 @@
1
+ module Airbrake
2
+ module Rails
3
+ module JavascriptNotifier
4
+ def self.included(base) #:nodoc:
5
+ base.send :helper_method, :airbrake_javascript_notifier
6
+ base.send :helper_method, :airbrake_javascript_loader
7
+ base.send :helper_method, :airbrake_javascript_configuration
8
+ end
9
+
10
+ private
11
+
12
+ def airbrake_javascript_notifier
13
+ warn '[DEPRECATION] `airbrake_javascript_notifier` is deprecated and will no longer be supported in v4.0.0. /
14
+ Please use the official Airbrake JavaScript Notifier - https://github.com/airbrake/airbrake-js'
15
+ if Airbrake.configuration.public?
16
+ airbrake_javascript_loader + airbrake_javascript_configuration
17
+ end
18
+ end
19
+
20
+ def airbrake_javascript_loader
21
+ if Airbrake.configuration.public?
22
+ path = File.join File.dirname(__FILE__), '..', '..', 'templates', 'javascript_notifier_loader'
23
+
24
+ _airbrake_render_part path
25
+ end
26
+ end
27
+
28
+ def airbrake_javascript_configuration
29
+ if Airbrake.configuration.public?
30
+ path = File.join File.dirname(__FILE__), '..', '..', 'templates', 'javascript_notifier_configuration'
31
+
32
+ options = {
33
+ :api_key => Airbrake.configuration.js_api_key,
34
+ :environment => Airbrake.configuration.environment_name,
35
+ :action_name => action_name,
36
+ :controller_name => controller_name,
37
+ :url => request.url
38
+ }
39
+
40
+ _airbrake_render_part path, options
41
+ end
42
+ end
43
+
44
+ protected
45
+ attr_reader :template
46
+
47
+ def _airbrake_render_part(path, locals={})
48
+ locals[:host] = _airbrake_host
49
+
50
+ options = {
51
+ :file => path,
52
+ :layout => false,
53
+ :use_full_path => false,
54
+ :handlers => [:erb],
55
+ :locals => locals
56
+ }
57
+
58
+ result = _airbrake_render_template options
59
+
60
+ if result.respond_to?(:html_safe)
61
+ result.html_safe
62
+ else
63
+ result
64
+ end
65
+ end
66
+
67
+ def _airbrake_render_template(options)
68
+ case template
69
+ when ActionView::Template
70
+ template.render options
71
+ else
72
+ render_to_string options
73
+ end
74
+ end
75
+
76
+ def _airbrake_host
77
+ host = Airbrake.configuration.host.dup
78
+ port = Airbrake.configuration.port
79
+ host << ":#{port}" unless [80, 443].include?(port)
80
+
81
+ host
82
+ end
83
+ end
84
+ end
85
+ end
@@ -41,6 +41,12 @@ module Airbrake
41
41
 
42
42
  include Airbrake::Rails::ControllerMethods
43
43
  end
44
+
45
+ if defined?(::ActionController::Base)
46
+ require 'airbrake/rails/javascript_notifier'
47
+
48
+ ::ActionController::Base.send(:include, Airbrake::Rails::JavascriptNotifier)
49
+ end
44
50
  end
45
51
  end
46
52
  end
@@ -1,3 +1,3 @@
1
1
  module Airbrake
2
- VERSION = "3.2.0".freeze
2
+ VERSION = "3.2.1".freeze
3
3
  end
@@ -0,0 +1,12 @@
1
+ <%= javascript_tag %Q{
2
+ try {
3
+ window.Airbrake = (typeof(Airbrake) == 'undefined' && typeof(Hoptoad) != 'undefined') ? Hoptoad : Airbrake
4
+ Airbrake.setKey('#{api_key}');
5
+ Airbrake.setHost('#{host}');
6
+ Airbrake.setEnvironment('#{environment}');
7
+ Airbrake.setErrorDefaults({ url: "#{escape_javascript url}", component: "#{controller_name}", action: "#{action_name}" });
8
+ } catch (e) {
9
+ window.onerror = null;
10
+ }
11
+ }
12
+ %>
@@ -0,0 +1,6 @@
1
+ <%= javascript_tag %Q{
2
+ (function(){
3
+ var notifierJsScheme = (("https:" == document.location.protocol) ? "https://" : "http://");
4
+ document.write(unescape("%3Cscript src='" + notifierJsScheme + "#{host}/javascripts/notifier.js' type='text/javascript'%3E%3C/script%3E"));
5
+ })();
6
+ }%>
@@ -127,6 +127,14 @@ class ConfigurationTest < Test::Unit::TestCase
127
127
  assert_appends_value :rake_environment_filters
128
128
  end
129
129
 
130
+ should "warn when attempting to write js_notifier" do
131
+ config = Airbrake::Configuration.new
132
+ config.
133
+ expects(:warn).
134
+ with(regexp_matches(/deprecated/i))
135
+ config.js_notifier = true
136
+ end
137
+
130
138
  should "allow ignored user agents to be appended" do
131
139
  assert_appends_value :ignore_user_agent
132
140
  end
data/test/integration.rb CHANGED
@@ -11,4 +11,5 @@ silence_warnings do
11
11
  require "action_view"
12
12
  end
13
13
 
14
+ require File.expand_path "../integration/javascript_notifier_test", __FILE__
14
15
  require File.expand_path "../integration/catcher_test", __FILE__
@@ -0,0 +1,56 @@
1
+ require 'airbrake/rails/javascript_notifier'
2
+ require 'ostruct'
3
+
4
+ class JavascriptNotifierTest < Test::Unit::TestCase
5
+ module FakeRenderer
6
+ def javascript_tag(text)
7
+ "<script>#{text}</script>"
8
+ end
9
+ def escape_javascript(text)
10
+ "ESC#{text}ESC"
11
+ end
12
+ end
13
+
14
+ class FakeController
15
+ def self.helper_method(*args)
16
+ end
17
+
18
+ include Airbrake::Rails::JavascriptNotifier
19
+
20
+ def action_name
21
+ "action"
22
+ end
23
+
24
+ def controller_name
25
+ "controller"
26
+ end
27
+
28
+ def request
29
+ @request ||= OpenStruct.new
30
+ end
31
+
32
+ def render_to_string(options)
33
+ context = OpenStruct.new(options[:locals])
34
+ context.extend(FakeRenderer)
35
+ context.instance_eval do
36
+ erb = ERB.new(IO.read(options[:file]))
37
+ erb.result(binding)
38
+ end
39
+ end
40
+ end
41
+
42
+ should "make sure escape_javacript is called on the request.url" do
43
+ Airbrake.configure do
44
+ end
45
+ controller = FakeController.new
46
+ controller.request.url = "bad_javascript"
47
+ assert controller.send(:airbrake_javascript_notifier)['"ESCbad_javascriptESC"']
48
+ assert ! controller.send(:airbrake_javascript_notifier)['"bad_javascript"']
49
+ end
50
+
51
+ should "not raise exceptions for the non-public requests" do
52
+ Airbrake::Configuration.any_instance.stubs(:public? => false)
53
+ controller = FakeController.new
54
+ assert_nothing_raised { controller.send(:airbrake_javascript_notifier) }
55
+ end
56
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrake
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.2.0
5
- prerelease:
4
+ version: 3.2.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Airbrake
@@ -14,39 +13,34 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: builder
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - '>='
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - '>='
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: multi_json
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: bourne
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ~>
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ~>
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: cucumber-rails
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ~>
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ~>
76
67
  - !ruby/object:Gem::Version
@@ -78,7 +69,6 @@ dependencies:
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: fakeweb
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
73
  - - ~>
84
74
  - !ruby/object:Gem::Version
@@ -86,7 +76,6 @@ dependencies:
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
80
  - - ~>
92
81
  - !ruby/object:Gem::Version
@@ -94,7 +83,6 @@ dependencies:
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: nokogiri
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
87
  - - ~>
100
88
  - !ruby/object:Gem::Version
@@ -102,7 +90,6 @@ dependencies:
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
94
  - - ~>
108
95
  - !ruby/object:Gem::Version
@@ -110,7 +97,6 @@ dependencies:
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: rspec
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
101
  - - ~>
116
102
  - !ruby/object:Gem::Version
@@ -118,7 +104,6 @@ dependencies:
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
108
  - - ~>
124
109
  - !ruby/object:Gem::Version
@@ -126,7 +111,6 @@ dependencies:
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: sham_rack
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - ~>
132
116
  - !ruby/object:Gem::Version
@@ -134,7 +118,6 @@ dependencies:
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - ~>
140
123
  - !ruby/object:Gem::Version
@@ -142,7 +125,6 @@ dependencies:
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: json-schema
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
129
  - - ~>
148
130
  - !ruby/object:Gem::Version
@@ -150,7 +132,6 @@ dependencies:
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
136
  - - ~>
156
137
  - !ruby/object:Gem::Version
@@ -158,7 +139,6 @@ dependencies:
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: capistrano
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
143
  - - ~>
164
144
  - !ruby/object:Gem::Version
@@ -166,7 +146,6 @@ dependencies:
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
150
  - - ~>
172
151
  - !ruby/object:Gem::Version
@@ -174,71 +153,62 @@ dependencies:
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: aruba
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
- - - ! '>='
157
+ - - '>='
180
158
  - !ruby/object:Gem::Version
181
159
  version: '0'
182
160
  type: :development
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
- - - ! '>='
164
+ - - '>='
188
165
  - !ruby/object:Gem::Version
189
166
  version: '0'
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: appraisal
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
- - - ! '>='
171
+ - - '>='
196
172
  - !ruby/object:Gem::Version
197
173
  version: '0'
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
- - - ! '>='
178
+ - - '>='
204
179
  - !ruby/object:Gem::Version
205
180
  version: '0'
206
181
  - !ruby/object:Gem::Dependency
207
182
  name: rspec-rails
208
183
  requirement: !ruby/object:Gem::Requirement
209
- none: false
210
184
  requirements:
211
- - - ! '>='
185
+ - - '>='
212
186
  - !ruby/object:Gem::Version
213
187
  version: '0'
214
188
  type: :development
215
189
  prerelease: false
216
190
  version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
191
  requirements:
219
- - - ! '>='
192
+ - - '>='
220
193
  - !ruby/object:Gem::Version
221
194
  version: '0'
222
195
  - !ruby/object:Gem::Dependency
223
196
  name: girl_friday
224
197
  requirement: !ruby/object:Gem::Requirement
225
- none: false
226
198
  requirements:
227
- - - ! '>='
199
+ - - '>='
228
200
  - !ruby/object:Gem::Version
229
201
  version: '0'
230
202
  type: :development
231
203
  prerelease: false
232
204
  version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
205
  requirements:
235
- - - ! '>='
206
+ - - '>='
236
207
  - !ruby/object:Gem::Version
237
208
  version: '0'
238
209
  - !ruby/object:Gem::Dependency
239
210
  name: sucker_punch
240
211
  requirement: !ruby/object:Gem::Requirement
241
- none: false
242
212
  requirements:
243
213
  - - '='
244
214
  - !ruby/object:Gem::Version
@@ -246,7 +216,6 @@ dependencies:
246
216
  type: :development
247
217
  prerelease: false
248
218
  version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
219
  requirements:
251
220
  - - '='
252
221
  - !ruby/object:Gem::Version
@@ -254,71 +223,62 @@ dependencies:
254
223
  - !ruby/object:Gem::Dependency
255
224
  name: shoulda-matchers
256
225
  requirement: !ruby/object:Gem::Requirement
257
- none: false
258
226
  requirements:
259
- - - ! '>='
227
+ - - '>='
260
228
  - !ruby/object:Gem::Version
261
229
  version: '0'
262
230
  type: :development
263
231
  prerelease: false
264
232
  version_requirements: !ruby/object:Gem::Requirement
265
- none: false
266
233
  requirements:
267
- - - ! '>='
234
+ - - '>='
268
235
  - !ruby/object:Gem::Version
269
236
  version: '0'
270
237
  - !ruby/object:Gem::Dependency
271
238
  name: shoulda-context
272
239
  requirement: !ruby/object:Gem::Requirement
273
- none: false
274
240
  requirements:
275
- - - ! '>='
241
+ - - '>='
276
242
  - !ruby/object:Gem::Version
277
243
  version: '0'
278
244
  type: :development
279
245
  prerelease: false
280
246
  version_requirements: !ruby/object:Gem::Requirement
281
- none: false
282
247
  requirements:
283
- - - ! '>='
248
+ - - '>='
284
249
  - !ruby/object:Gem::Version
285
250
  version: '0'
286
251
  - !ruby/object:Gem::Dependency
287
252
  name: pry
288
253
  requirement: !ruby/object:Gem::Requirement
289
- none: false
290
254
  requirements:
291
- - - ! '>='
255
+ - - '>='
292
256
  - !ruby/object:Gem::Version
293
257
  version: '0'
294
258
  type: :development
295
259
  prerelease: false
296
260
  version_requirements: !ruby/object:Gem::Requirement
297
- none: false
298
261
  requirements:
299
- - - ! '>='
262
+ - - '>='
300
263
  - !ruby/object:Gem::Version
301
264
  version: '0'
302
265
  - !ruby/object:Gem::Dependency
303
266
  name: coveralls
304
267
  requirement: !ruby/object:Gem::Requirement
305
- none: false
306
268
  requirements:
307
- - - ! '>='
269
+ - - '>='
308
270
  - !ruby/object:Gem::Version
309
271
  version: '0'
310
272
  type: :development
311
273
  prerelease: false
312
274
  version_requirements: !ruby/object:Gem::Requirement
313
- none: false
314
275
  requirements:
315
- - - ! '>='
276
+ - - '>='
316
277
  - !ruby/object:Gem::Version
317
278
  version: '0'
318
279
  - !ruby/object:Gem::Dependency
319
280
  name: minitest
320
281
  requirement: !ruby/object:Gem::Requirement
321
- none: false
322
282
  requirements:
323
283
  - - ~>
324
284
  - !ruby/object:Gem::Version
@@ -326,7 +286,6 @@ dependencies:
326
286
  type: :development
327
287
  prerelease: false
328
288
  version_requirements: !ruby/object:Gem::Requirement
329
- none: false
330
289
  requirements:
331
290
  - - ~>
332
291
  - !ruby/object:Gem::Version
@@ -338,12 +297,42 @@ executables:
338
297
  extensions: []
339
298
  extra_rdoc_files: []
340
299
  files:
300
+ - CHANGELOG
301
+ - Gemfile
302
+ - Guardfile
303
+ - INSTALL
304
+ - LICENSE
305
+ - README.md
306
+ - README_FOR_HEROKU_ADDON.md
307
+ - Rakefile
308
+ - TESTED_AGAINST
309
+ - airbrake.gemspec
310
+ - bin/airbrake
311
+ - features/metal.feature
312
+ - features/rack.feature
313
+ - features/rails.feature
314
+ - features/rails_with_js_notifier.feature
315
+ - features/rake.feature
316
+ - features/sinatra.feature
317
+ - features/step_definitions/file_steps.rb
318
+ - features/step_definitions/rack_steps.rb
319
+ - features/step_definitions/rails_application_steps.rb
320
+ - features/step_definitions/rake_steps.rb
321
+ - features/support/airbrake_shim.rb.template
322
+ - features/support/aruba.rb
323
+ - features/support/env.rb
324
+ - features/support/matchers.rb
325
+ - features/support/rails.rb
326
+ - features/support/rake/Rakefile
327
+ - features/user_informer.feature
341
328
  - generators/airbrake/airbrake_generator.rb
342
329
  - generators/airbrake/lib/insert_commands.rb
343
330
  - generators/airbrake/lib/rake_commands.rb
344
331
  - generators/airbrake/templates/airbrake_tasks.rake
345
332
  - generators/airbrake/templates/capistrano_hook.rb
346
333
  - generators/airbrake/templates/initializer.rb
334
+ - install.rb
335
+ - lib/airbrake.rb
347
336
  - lib/airbrake/backtrace.rb
348
337
  - lib/airbrake/capistrano.rb
349
338
  - lib/airbrake/capistrano3.rb
@@ -358,11 +347,12 @@ files:
358
347
  - lib/airbrake/jobs/send_job.rb
359
348
  - lib/airbrake/notice.rb
360
349
  - lib/airbrake/rack.rb
350
+ - lib/airbrake/rails.rb
361
351
  - lib/airbrake/rails/action_controller_catcher.rb
362
352
  - lib/airbrake/rails/controller_methods.rb
363
353
  - lib/airbrake/rails/error_lookup.rb
354
+ - lib/airbrake/rails/javascript_notifier.rb
364
355
  - lib/airbrake/rails/middleware.rb
365
- - lib/airbrake/rails.rb
366
356
  - lib/airbrake/rails3_tasks.rb
367
357
  - lib/airbrake/railtie.rb
368
358
  - lib/airbrake/rake_handler.rb
@@ -370,41 +360,32 @@ files:
370
360
  - lib/airbrake/sender.rb
371
361
  - lib/airbrake/shared_tasks.rb
372
362
  - lib/airbrake/sinatra.rb
373
- - lib/airbrake/tasks/airbrake.cap
374
363
  - lib/airbrake/tasks.rb
364
+ - lib/airbrake/tasks/airbrake.cap
375
365
  - lib/airbrake/user_informer.rb
376
366
  - lib/airbrake/utils/params_cleaner.rb
377
367
  - lib/airbrake/utils/rack_filters.rb
378
368
  - lib/airbrake/version.rb
379
- - lib/airbrake.rb
380
369
  - lib/airbrake_tasks.rb
381
370
  - lib/rails/generators/airbrake/airbrake_generator.rb
371
+ - lib/templates/javascript_notifier_configuration
372
+ - lib/templates/javascript_notifier_loader
382
373
  - lib/templates/rescue.erb
383
374
  - rails/init.rb
375
+ - resources/README.md
384
376
  - resources/airbrake_3_0.json
385
377
  - resources/ca-bundle.crt
386
378
  - resources/notice.xml
387
- - resources/README.md
388
379
  - script/integration_test.rb
389
- - airbrake.gemspec
390
- - CHANGELOG
391
- - Gemfile
392
- - Guardfile
393
- - INSTALL
394
- - LICENSE
395
- - Rakefile
396
- - README_FOR_HEROKU_ADDON.md
397
- - README.md
398
- - TESTED_AGAINST
399
- - install.rb
400
380
  - test/airbrake_tasks_test.rb
401
381
  - test/backtrace_test.rb
402
382
  - test/capistrano_test.rb
403
383
  - test/configuration_test.rb
404
384
  - test/controller_methods_test.rb
405
385
  - test/helper.rb
406
- - test/integration/catcher_test.rb
407
386
  - test/integration.rb
387
+ - test/integration/catcher_test.rb
388
+ - test/integration/javascript_notifier_test.rb
408
389
  - test/logger_test.rb
409
390
  - test/notice_test.rb
410
391
  - test/notifier_test.rb
@@ -416,46 +397,28 @@ files:
416
397
  - test/sender_test.rb
417
398
  - test/support/response_shim.xml
418
399
  - test/user_informer_test.rb
419
- - features/metal.feature
420
- - features/rack.feature
421
- - features/rails.feature
422
- - features/rake.feature
423
- - features/sinatra.feature
424
- - features/step_definitions/file_steps.rb
425
- - features/step_definitions/rack_steps.rb
426
- - features/step_definitions/rails_application_steps.rb
427
- - features/step_definitions/rake_steps.rb
428
- - features/support/airbrake_shim.rb.template
429
- - features/support/aruba.rb
430
- - features/support/env.rb
431
- - features/support/matchers.rb
432
- - features/support/rails.rb
433
- - features/support/rake/Rakefile
434
- - features/user_informer.feature
435
- - bin/airbrake
436
400
  homepage: http://www.airbrake.io
437
401
  licenses: []
402
+ metadata: {}
438
403
  post_install_message:
439
404
  rdoc_options: []
440
405
  require_paths:
441
406
  - lib
442
407
  required_ruby_version: !ruby/object:Gem::Requirement
443
- none: false
444
408
  requirements:
445
- - - ! '>='
409
+ - - '>='
446
410
  - !ruby/object:Gem::Version
447
411
  version: '0'
448
412
  required_rubygems_version: !ruby/object:Gem::Requirement
449
- none: false
450
413
  requirements:
451
- - - ! '>='
414
+ - - '>='
452
415
  - !ruby/object:Gem::Version
453
416
  version: '0'
454
417
  requirements: []
455
418
  rubyforge_project:
456
- rubygems_version: 1.8.24
419
+ rubygems_version: 2.2.0
457
420
  signing_key:
458
- specification_version: 3
421
+ specification_version: 4
459
422
  summary: Send your application errors to our hosted service and reclaim your inbox.
460
423
  test_files:
461
424
  - test/airbrake_tasks_test.rb
@@ -465,6 +428,7 @@ test_files:
465
428
  - test/controller_methods_test.rb
466
429
  - test/helper.rb
467
430
  - test/integration/catcher_test.rb
431
+ - test/integration/javascript_notifier_test.rb
468
432
  - test/integration.rb
469
433
  - test/logger_test.rb
470
434
  - test/notice_test.rb
@@ -480,6 +444,7 @@ test_files:
480
444
  - features/metal.feature
481
445
  - features/rack.feature
482
446
  - features/rails.feature
447
+ - features/rails_with_js_notifier.feature
483
448
  - features/rake.feature
484
449
  - features/sinatra.feature
485
450
  - features/step_definitions/file_steps.rb
@@ -493,4 +458,3 @@ test_files:
493
458
  - features/support/rails.rb
494
459
  - features/support/rake/Rakefile
495
460
  - features/user_informer.feature
496
- has_rdoc: