airbrake 3.2.0 → 3.2.1

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 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: