airbrake 3.1.8 → 3.1.9

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,38 @@
1
+ Version 3.1.9 - 2013-03-25 20:06:10 +0100
2
+ ===============================================================================
3
+
4
+ Bartosz Knapik (2):
5
+ .rbenv-version should be in gitignore
6
+ replace current_release with release_path
7
+
8
+ Chas Lemley (1):
9
+ correctly use config.user_attributes=
10
+
11
+ Hrvoje Šimić (6):
12
+ Update year in README
13
+ thread safety fix
14
+ add the secure option to the generator
15
+ fix the broken generator method call
16
+ be more careful with @template in javascript notifier
17
+ update tested rails versions
18
+
19
+ Marko Šiftar (2):
20
+ just collect id by default
21
+ update test suite (user details)
22
+
23
+ Robert Glaser (1):
24
+ log failed certicate verifications
25
+
26
+ Thilo-Alexander Ginkel (1):
27
+ Partial thread-safety fix
28
+
29
+ Thom Mahoney (1):
30
+ Airbake::Backtrace::Line#method => #method_name
31
+
32
+ jokerswanted (1):
33
+ Update README.md
34
+
35
+
1
36
  Version 3.1.8 - 2013-02-05 16:29:43 +0100
2
37
  ===============================================================================
3
38
 
@@ -1070,3 +1105,4 @@ Nick Quaranto (3):
1070
1105
 
1071
1106
 
1072
1107
 
1108
+
data/README.md CHANGED
@@ -20,7 +20,7 @@ Rails Installation
20
20
 
21
21
  Add the airbrake gem to your Gemfile. In Gemfile:
22
22
 
23
- gem "airbrake"
23
+ gem 'airbrake'
24
24
 
25
25
  Then from your project's RAILS_ROOT, and in your development environment, run:
26
26
 
@@ -103,4 +103,4 @@ The names and logos for Airbrake, thoughtbot are trademarks of their respective
103
103
  License
104
104
  -------
105
105
 
106
- Airbrake is Copyright © 2008-2012 Airbrake.
106
+ Airbrake is Copyright © 2008-2013 Airbrake.
data/TESTED_AGAINST CHANGED
@@ -1,6 +1,6 @@
1
- Rails 3.0.19
2
- Rails 3.1.10
3
- Rails 3.2.11
1
+ Rails 3.0.20
2
+ Rails 3.1.12
3
+ Rails 3.2.13
4
4
  Sinatra 1.3.3
5
5
  Rack 1.4.3
6
6
  Rake 10.0.3
@@ -34,9 +34,16 @@ Feature: Install the Gem in a Rails application
34
34
  Then I should receive a Airbrake notification
35
35
 
36
36
  Scenario: Try to install without an api key
37
- And I run `rails generate airbrake`
37
+ When I run `rails generate airbrake`
38
38
  Then I should see "Must pass --api-key or --heroku or create config/initializers/airbrake.rb"
39
39
 
40
+ Scenario: Generator should support the --secure option
41
+ When I run `rails generate airbrake -k myapikey --secure`
42
+ Then my Airbrake configuration should contain the following line:
43
+ """
44
+ config.secure = true
45
+ """
46
+
40
47
  Scenario: Configure and deploy using only installed gem
41
48
  When I run `capify .`
42
49
  And I configure the Airbrake shim
@@ -218,6 +225,24 @@ Feature: Install the Gem in a Rails application
218
225
  Then I should receive a Airbrake notification
219
226
  And the Airbrake notification should contain user details
220
227
 
228
+ Scenario: It should also send custom user attributes
229
+ When I configure the Airbrake shim
230
+ And I configure the notifier to use the following configuration lines:
231
+ """
232
+ config.api_key = "myapikey"
233
+ config.logger = Logger.new STDOUT
234
+ config.user_attributes = [:id, :name, :email, :username, :class_name]
235
+ """
236
+ And I define a response for "TestController#index":
237
+ """
238
+ raise RuntimeError, "some message"
239
+ """
240
+ And I route "/test/index" to "test#index"
241
+ And I have set up authentication system in my app that uses "current_user"
242
+ And I perform a request to "http://example.com:123/test/index" in the "production" environment
243
+ Then I should receive a Airbrake notification
244
+ And the Airbrake notification should contain the custom user details
245
+
221
246
  Scenario: It should log the notice when failure happens
222
247
  When Airbrake server is not responding
223
248
  And I configure the notifier to use the following configuration lines:
@@ -83,3 +83,22 @@ Feature: Install the Gem in a Rails application and enable the JavaScript notifi
83
83
  Then I should see the notifier JavaScript for the following:
84
84
  | api_key | environment | host |
85
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 |
@@ -227,18 +227,22 @@ When /^I have set up authentication system in my app that uses "([^\"]*)"$/ do |
227
227
 
228
228
  # this is the ultimate authentication system, devise is history
229
229
  def #{current_user}
230
- Struct.new(:id, :name, :email, :username).new(1, 'Bender', 'bender@beer.com', 'b3nd0r')
230
+ Struct.new(:id, :name, :email, :username, :class_name).new(1, 'Bender', 'bender@beer.com', 'b3nd0r', 'User')
231
231
  end
232
232
  end
233
233
  """
234
234
  File.open(application_controller, "w") {|file| file.puts definition }
235
235
  end
236
236
 
237
+ Then /^the Airbrake notification should contain the custom user details$/ do
238
+ step %{I should see "<name>Bender</name>"}
239
+ step %{I should see "<email>bender@beer.com</email>"}
240
+ step %{I should see "<username>b3nd0r</username>"}
241
+ step %{I should see "<class_name>User</class_name>"}
242
+ end
243
+
237
244
  Then /^the Airbrake notification should contain user details$/ do
238
- step %{I should see "Bender"}
239
- step %{I should see "bender@beer.com"}
240
245
  step %{I should see "<id>1</id>"}
241
- step %{I should see "b3nd0r"}
242
246
  end
243
247
 
244
248
  Then /^the Airbrake notification should contain the framework information$/ do
@@ -1,6 +1,4 @@
1
1
  <% if Rails::VERSION::MAJOR < 3 && Rails::VERSION::MINOR < 2 -%>
2
2
  require 'airbrake/rails'
3
3
  <% end -%>
4
- Airbrake.configure do |config|
5
- config.api_key = <%= api_key_expression %>
6
- end
4
+ <%= configuration_output %>
@@ -14,26 +14,26 @@ module Airbrake
14
14
  # The line number portion of the line
15
15
  attr_reader :number
16
16
 
17
- # The method of the line (such as index)
18
- attr_reader :method
17
+ # The method_name of the line (such as index)
18
+ attr_reader :method_name
19
19
 
20
20
  # Parses a single line of a given backtrace
21
21
  # @param [String] unparsed_line The raw line from +caller+ or some backtrace
22
22
  # @return [Line] The parsed backtrace line
23
23
  def self.parse(unparsed_line)
24
- _, file, number, method = unparsed_line.match(INPUT_FORMAT).to_a
25
- new(file, number, method)
24
+ _, file, number, method_name = unparsed_line.match(INPUT_FORMAT).to_a
25
+ new(file, number, method_name)
26
26
  end
27
27
 
28
- def initialize(file, number, method)
28
+ def initialize(file, number, method_name)
29
29
  self.file = file
30
30
  self.number = number
31
- self.method = method
31
+ self.method_name = method_name
32
32
  end
33
33
 
34
34
  # Reconstructs the line in a readable fashion
35
35
  def to_s
36
- "#{file}:#{number}:in `#{method}'"
36
+ "#{file}:#{number}:in `#{method_name}'"
37
37
  end
38
38
 
39
39
  def ==(other)
@@ -46,7 +46,7 @@ module Airbrake
46
46
 
47
47
  private
48
48
 
49
- attr_writer :file, :number, :method
49
+ attr_writer :file, :number, :method_name
50
50
  end
51
51
 
52
52
  # holder for an Array of Backtrace::Line instances
@@ -19,7 +19,7 @@ module Airbrake
19
19
  airbrake_env = fetch(:airbrake_env, fetch(:rails_env, "production"))
20
20
  local_user = ENV['USER'] || ENV['USERNAME']
21
21
  executable = RUBY_PLATFORM.downcase.include?('mswin') ? fetch(:rake, 'rake.bat') : fetch(:rake, 'rake')
22
- directory = configuration.current_release
22
+ directory = configuration.release_path
23
23
  notify_command = "cd #{directory}; #{executable} RAILS_ENV=#{rails_env} airbrake:deploy TO=#{airbrake_env} REVISION=#{current_revision} REPO=#{repository} USER=#{local_user}"
24
24
  notify_command << " DRY_RUN=true" if dry_run
25
25
  notify_command << " API_KEY=#{ENV['API_KEY']}" if ENV['API_KEY']
@@ -113,7 +113,7 @@ module Airbrake
113
113
 
114
114
  DEFAULT_PARAMS_FILTERS = %w(password password_confirmation).freeze
115
115
 
116
- DEFAULT_USER_ATTRIBUTES = %w(id name username email).freeze
116
+ DEFAULT_USER_ATTRIBUTES = %w(id).freeze
117
117
 
118
118
  DEFAULT_BACKTRACE_FILTERS = [
119
119
  lambda { |line|
@@ -156,9 +156,11 @@ module Airbrake
156
156
  error.message(error_message)
157
157
  error.backtrace do |backtrace|
158
158
  self.backtrace.lines.each do |line|
159
- backtrace.line(:number => line.number,
160
- :file => line.file,
161
- :method => line.method)
159
+ backtrace.line(
160
+ :number => line.number,
161
+ :file => line.file,
162
+ :method_name => line.method_name
163
+ )
162
164
  end
163
165
  end
164
166
  end
@@ -196,10 +198,9 @@ module Airbrake
196
198
  end
197
199
  unless user.blank?
198
200
  notice.tag!("current-user") do |u|
199
- u.tag!("id",user[:id])
200
- u.tag!("name",user[:name])
201
- u.tag!("email",user[:email])
202
- u.tag!("username",user[:username])
201
+ user.each do |attr, value|
202
+ u.tag!(attr.to_s, value)
203
+ end
203
204
  end
204
205
  end
205
206
  unless framework.blank?
@@ -223,7 +224,7 @@ module Airbrake
223
224
  {
224
225
  'file' => line.file,
225
226
  'line' => line.number.to_i,
226
- 'function' => line.method
227
+ 'function' => line.method_name
227
228
  }
228
229
  end
229
230
  }],
data/lib/airbrake/rack.rb CHANGED
@@ -40,23 +40,22 @@ module Airbrake
40
40
  end
41
41
 
42
42
  def call(env)
43
- @env = env
44
43
  begin
45
- response = @app.call(@env)
44
+ response = @app.call(env)
46
45
  rescue Exception => raised
47
- @env['airbrake.error_id'] = notify_airbrake(raised, @env)
46
+ env['airbrake.error_id'] = notify_airbrake(raised, env)
48
47
  raise raised
49
48
  end
50
49
 
51
- if framework_exception
52
- @env['airbrake.error_id'] = notify_airbrake(framework_exception, @env)
50
+ if framework_exception(env)
51
+ env['airbrake.error_id'] = notify_airbrake(framework_exception(env), env)
53
52
  end
54
53
 
55
54
  response
56
55
  end
57
56
 
58
- def framework_exception
59
- @env['rack.exception']
57
+ def framework_exception(env)
58
+ env['rack.exception']
60
59
  end
61
60
 
62
61
  end
@@ -33,18 +33,22 @@ module Airbrake
33
33
 
34
34
  options = airbrake_javascript_notifier_options
35
35
 
36
- res = if @template
37
- @template.render(options)
36
+ result = airbrake_compile_template
37
+
38
+ if result.respond_to?(:html_safe)
39
+ result.html_safe
38
40
  else
39
- render_to_string(options)
41
+ result
40
42
  end
43
+ end
41
44
 
42
- if res.respond_to?(:html_safe)
43
- res.html_safe
45
+ def airbrake_compile_template
46
+ case @template
47
+ when ActionView::Template
48
+ @template.render airbrake_javascript_notifier_options
44
49
  else
45
- res
50
+ render_to_string airbrake_javascript_notifier_options
46
51
  end
47
-
48
52
  end
49
53
  end
50
54
  end
@@ -9,17 +9,15 @@ module Airbrake
9
9
  end
10
10
 
11
11
  def call(env)
12
- @env = env
13
-
14
12
  begin
15
- response = @app.call(@env)
13
+ response = @app.call(env)
16
14
  rescue Exception => exception
17
- @env['airbrake.error_id'] = notify_airbrake(exception)
15
+ env['airbrake.error_id'] = notify_airbrake(env, exception)
18
16
  raise exception
19
17
  end
20
18
 
21
- if framework_exception
22
- @env["airbrake.error_id"] = notify_airbrake(framework_exception)
19
+ if framework_exception = env["action_dispatch.exception"]
20
+ env["airbrake.error_id"] = notify_airbrake(env, framework_exception)
23
21
  end
24
22
 
25
23
  response
@@ -27,38 +25,34 @@ module Airbrake
27
25
 
28
26
  private
29
27
 
30
- def controller
31
- @env["action_controller.instance"]
32
- end
28
+ def after_airbrake_handler(env, exception)
29
+ if defined? env["action_controller.instance"].
30
+ rescue_action_in_public_without_airbrake
33
31
 
34
- def after_airbrake_handler(exception)
35
- if defined?(controller.rescue_action_in_public_without_airbrake)
36
- controller.rescue_action_in_public_without_airbrake(exception)
32
+ env["action_controller.instance"].
33
+ rescue_action_in_public_without_airbrake(exception)
37
34
  end
38
35
  end
39
36
 
40
- def notify_airbrake(exception)
41
- unless ignored_user_agent?
42
- error_id = Airbrake.notify_or_ignore(exception, request_data)
43
- after_airbrake_handler(exception)
37
+ def notify_airbrake(env, exception)
38
+ unless ignored_user_agent? env
39
+ error_id = Airbrake.notify_or_ignore(exception, request_data(env))
40
+ after_airbrake_handler(env, exception)
44
41
  error_id
45
42
  end
46
43
  end
47
44
 
48
- def request_data
49
- controller.try(:airbrake_request_data) || {:rack_env => @env}
45
+ def request_data(env)
46
+ env["action_controller.instance"].try(:airbrake_request_data) ||
47
+ {:rack_env => @env}
50
48
  end
51
49
 
52
- def ignored_user_agent?
50
+ def ignored_user_agent?(env)
53
51
  true if Airbrake.
54
52
  configuration.
55
53
  ignore_user_agent.
56
54
  flatten.
57
- any? { |ua| ua === @env['HTTP_USER_AGENT'] }
58
- end
59
-
60
- def framework_exception
61
- @env["action_dispatch.exception"]
55
+ any? { |ua| ua === env['HTTP_USER_AGENT'] }
62
56
  end
63
57
  end
64
58
  end
@@ -88,6 +88,6 @@ namespace :airbrake do
88
88
 
89
89
  Rails.application.call(env)
90
90
 
91
- wait_for_threads
91
+ wait_for_threads if defined? GirlFriday
92
92
  end
93
93
  end
@@ -20,7 +20,8 @@ module Airbrake
20
20
  Net::HTTPBadResponse,
21
21
  Net::HTTPHeaderSyntaxError,
22
22
  Net::ProtocolError,
23
- Errno::ECONNREFUSED].freeze
23
+ Errno::ECONNREFUSED,
24
+ OpenSSL::SSL::SSLError].freeze
24
25
 
25
26
  def initialize(options = {})
26
27
  [ :proxy_host,
@@ -24,11 +24,10 @@ module Airbrake
24
24
  super
25
25
  Airbrake.configuration.environment_name = "#{app.settings.environment}"
26
26
  Airbrake.configuration.framework = "Sinatra: #{::Sinatra::VERSION}"
27
- end
28
-
29
- def framework_exception
30
- @env['sinatra.error']
31
27
  end
32
28
 
29
+ def framework_exception(env)
30
+ env['sinatra.error']
31
+ end
33
32
  end
34
33
  end
@@ -1,3 +1,3 @@
1
1
  module Airbrake
2
- VERSION = "3.1.8"
2
+ VERSION = "3.1.9"
3
3
  end
@@ -1,10 +1,19 @@
1
1
  require 'rails/generators'
2
2
 
3
3
  class AirbrakeGenerator < Rails::Generators::Base
4
+ desc "Creates the Airbrake initializer file at config/initializers/airbrake.rb"
4
5
 
5
- class_option :api_key, :aliases => "-k", :type => :string, :desc => "Your Airbrake API key"
6
- class_option :heroku, :type => :boolean, :desc => "Use the Heroku addon to provide your Airbrake API key"
7
- class_option :app, :aliases => "-a", :type => :string, :desc => "Your Heroku app name (only required if deploying to >1 Heroku app)"
6
+ class_option :api_key, :aliases => "-k", :type => :string,
7
+ :desc => "Your Airbrake API key"
8
+
9
+ class_option :heroku, :type => :boolean,
10
+ :desc => "Use the Heroku addon to provide your Airbrake API key"
11
+
12
+ class_option :app, :aliases => "-a", :type => :string,
13
+ :desc => "Your Heroku app name (only required if deploying to >1 Heroku app)"
14
+
15
+ class_option :secure, :type => :boolean,
16
+ :desc => "Use SSL connection"
8
17
 
9
18
  def self.source_root
10
19
  @_airbrake_source_root ||= File.expand_path("../../../../../generators/airbrake/templates", __FILE__)
@@ -80,6 +89,10 @@ class AirbrakeGenerator < Rails::Generators::Base
80
89
  heroku_var("AIRBRAKE_API_KEY",options[:app]).split.find {|x| x unless x.blank?}
81
90
  end
82
91
 
92
+ def secure?
93
+ options[:secure]
94
+ end
95
+
83
96
  def heroku?
84
97
  options[:heroku] ||
85
98
  system("grep AIRBRAKE_API_KEY config/initializers/airbrake.rb") ||
@@ -97,4 +110,14 @@ class AirbrakeGenerator < Rails::Generators::Base
97
110
  def plugin_is_present?
98
111
  File.exists?('vendor/plugins/airbrake')
99
112
  end
113
+
114
+ def configuration_output
115
+ output = <<-eos
116
+ Airbrake.configure do |config|
117
+ config.api_key = #{api_key_expression}
118
+ eos
119
+
120
+ output << " config.secure = true" if secure?
121
+ output << "\nend"
122
+ end
100
123
  end
@@ -38,7 +38,7 @@
38
38
  <xs:complexType>
39
39
  <xs:attribute name="file" type="xs:string" use="required"/>
40
40
  <xs:attribute name="number" type="xs:string" use="required"/>
41
- <xs:attribute name="method" type="xs:string" use="optional"/>
41
+ <xs:attribute name="method_name" type="xs:string" use="optional"/>
42
42
  </xs:complexType>
43
43
  </xs:element>
44
44
  </xs:sequence>
@@ -13,12 +13,12 @@ class BacktraceTest < Test::Unit::TestCase
13
13
  line = backtrace.lines.first
14
14
  assert_equal '13', line.number
15
15
  assert_equal 'app/models/user.rb', line.file
16
- assert_equal 'magic', line.method
16
+ assert_equal 'magic', line.method_name
17
17
 
18
18
  line = backtrace.lines.last
19
19
  assert_equal '8', line.number
20
20
  assert_equal 'app/controllers/users_controller.rb', line.file
21
- assert_equal 'index', line.method
21
+ assert_equal 'index', line.method_name
22
22
  end
23
23
 
24
24
  should "parse a windows backtrace into lines" do
@@ -32,12 +32,12 @@ class BacktraceTest < Test::Unit::TestCase
32
32
  line = backtrace.lines.first
33
33
  assert_equal '13', line.number
34
34
  assert_equal 'C:/Program Files/Server/app/models/user.rb', line.file
35
- assert_equal 'magic', line.method
35
+ assert_equal 'magic', line.method_name
36
36
 
37
37
  line = backtrace.lines.last
38
38
  assert_equal '8', line.number
39
39
  assert_equal 'C:/Program Files/Server/app/controllers/users_controller.rb', line.file
40
- assert_equal 'index', line.method
40
+ assert_equal 'index', line.method_name
41
41
  end
42
42
 
43
43
  should "be equal with equal lines" do
@@ -20,7 +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
+ @configuration.set(:release_path, '/home/deploy/rails_app/hoptoad')
24
24
  io = StringIO.new
25
25
  logger = Capistrano::Logger.new(:output => io)
26
26
  logger.level = Capistrano::Logger::MAX_LEVEL
data/test/notice_test.rb CHANGED
@@ -351,7 +351,7 @@ class NoticeTest < Test::Unit::TestCase
351
351
 
352
352
  assert_valid_node(@document, "//error/backtrace/line/@number", @notice.backtrace.lines.first.number)
353
353
  assert_valid_node(@document, "//error/backtrace/line/@file", @notice.backtrace.lines.first.file)
354
- assert_valid_node(@document, "//error/backtrace/line/@method", @notice.backtrace.lines.first.method)
354
+ assert_valid_node(@document, "//error/backtrace/line/@method_name", @notice.backtrace.lines.first.method_name)
355
355
 
356
356
  assert_valid_node(@document, "//request/url", @notice.url)
357
357
  assert_valid_node(@document, "//request/component", @notice.controller)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrake
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.1.8
4
+ version: 3.1.9
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-05 00:00:00.000000000 Z
12
+ date: 2013-03-25 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: builder
@@ -274,49 +274,49 @@ executables:
274
274
  extensions: []
275
275
  extra_rdoc_files: []
276
276
  files:
277
- - generators/airbrake/templates/capistrano_hook.rb
278
- - generators/airbrake/templates/initializer.rb
277
+ - generators/airbrake/airbrake_generator.rb
279
278
  - generators/airbrake/templates/airbrake_tasks.rake
280
- - generators/airbrake/lib/insert_commands.rb
279
+ - generators/airbrake/templates/initializer.rb
280
+ - generators/airbrake/templates/capistrano_hook.rb
281
281
  - generators/airbrake/lib/rake_commands.rb
282
- - generators/airbrake/airbrake_generator.rb
283
- - lib/airbrake/capistrano.rb
282
+ - generators/airbrake/lib/insert_commands.rb
283
+ - lib/airbrake.rb
284
+ - lib/airbrake/railtie.rb
284
285
  - lib/airbrake/shared_tasks.rb
285
- - lib/airbrake/sender.rb
286
- - lib/airbrake/rails/action_controller_catcher.rb
287
- - lib/airbrake/rails/middleware.rb
288
- - lib/airbrake/rails/controller_methods.rb
289
- - lib/airbrake/rails/error_lookup.rb
290
- - lib/airbrake/rails/javascript_notifier.rb
286
+ - lib/airbrake/backtrace.rb
291
287
  - lib/airbrake/rails.rb
292
- - lib/airbrake/rack.rb
293
- - lib/airbrake/cli/printer.rb
288
+ - lib/airbrake/version.rb
289
+ - lib/airbrake/rails3_tasks.rb
290
+ - lib/airbrake/user_informer.rb
294
291
  - lib/airbrake/cli/project_factory.rb
292
+ - lib/airbrake/cli/printer.rb
295
293
  - lib/airbrake/cli/project.rb
296
294
  - lib/airbrake/cli/client.rb
297
295
  - lib/airbrake/cli/options.rb
298
- - lib/airbrake/cli/validator.rb
299
296
  - lib/airbrake/cli/runner.rb
297
+ - lib/airbrake/cli/validator.rb
298
+ - lib/airbrake/notice.rb
299
+ - lib/airbrake/rack.rb
300
300
  - lib/airbrake/tasks.rb
301
- - lib/airbrake/rails3_tasks.rb
302
301
  - lib/airbrake/configuration.rb
303
- - lib/airbrake/railtie.rb
304
- - lib/airbrake/sinatra.rb
302
+ - lib/airbrake/rails/controller_methods.rb
303
+ - lib/airbrake/rails/error_lookup.rb
304
+ - lib/airbrake/rails/javascript_notifier.rb
305
+ - lib/airbrake/rails/middleware.rb
306
+ - lib/airbrake/rails/action_controller_catcher.rb
307
+ - lib/airbrake/sender.rb
308
+ - lib/airbrake/capistrano.rb
305
309
  - lib/airbrake/rake_handler.rb
306
- - lib/airbrake/version.rb
307
- - lib/airbrake/backtrace.rb
308
- - lib/airbrake/notice.rb
309
- - lib/airbrake/user_informer.rb
310
- - lib/airbrake.rb
310
+ - lib/airbrake/sinatra.rb
311
311
  - lib/rails/generators/airbrake/airbrake_generator.rb
312
312
  - lib/templates/javascript_notifier.erb
313
313
  - lib/templates/rescue.erb
314
314
  - lib/airbrake_tasks.rb
315
315
  - rails/init.rb
316
+ - resources/ca-bundle.crt
316
317
  - resources/airbrake_2_4.xsd
317
- - resources/airbrake_3_0.json
318
318
  - resources/README.md
319
- - resources/ca-bundle.crt
319
+ - resources/airbrake_3_0.json
320
320
  - script/integration_test.rb
321
321
  - airbrake.gemspec
322
322
  - CHANGELOG
@@ -329,39 +329,39 @@ files:
329
329
  - README.md
330
330
  - TESTED_AGAINST
331
331
  - install.rb
332
- - test/controller_methods_test.rb
332
+ - test/recursion_test.rb
333
+ - test/sender_test.rb
334
+ - test/notifier_test.rb
333
335
  - test/configuration_test.rb
334
336
  - test/airbrake_tasks_test.rb
335
- - test/catcher_test.rb
336
- - test/notifier_test.rb
337
- - test/capistrano_test.rb
338
- - test/user_informer_test.rb
339
- - test/javascript_notifier_test.rb
340
- - test/backtrace_test.rb
337
+ - test/controller_methods_test.rb
341
338
  - test/rack_test.rb
342
- - test/recursion_test.rb
343
339
  - test/notice_test.rb
344
- - test/rails_initializer_test.rb
345
- - test/sender_test.rb
346
340
  - test/helper.rb
341
+ - test/javascript_notifier_test.rb
342
+ - test/backtrace_test.rb
343
+ - test/catcher_test.rb
344
+ - test/rails_initializer_test.rb
345
+ - test/capistrano_test.rb
346
+ - test/user_informer_test.rb
347
347
  - test/logger_test.rb
348
- - features/rack.feature
348
+ - features/rails.feature
349
+ - features/step_definitions/rails_application_steps.rb
350
+ - features/step_definitions/rake_steps.rb
351
+ - features/step_definitions/rack_steps.rb
352
+ - features/step_definitions/file_steps.rb
349
353
  - features/metal.feature
350
- - features/support/airbrake_shim.rb.template
351
- - features/support/rake/Rakefile
352
- - features/support/rails.rb
353
- - features/support/aruba.rb
354
+ - features/rack.feature
354
355
  - features/support/matchers.rb
355
356
  - features/support/env.rb
356
- - features/rails.feature
357
+ - features/support/aruba.rb
358
+ - features/support/rails.rb
359
+ - features/support/rake/Rakefile
360
+ - features/support/airbrake_shim.rb.template
357
361
  - features/user_informer.feature
358
- - features/step_definitions/rack_steps.rb
359
- - features/step_definitions/file_steps.rb
360
- - features/step_definitions/rake_steps.rb
361
- - features/step_definitions/rails_application_steps.rb
362
362
  - features/rake.feature
363
- - features/sinatra.feature
364
363
  - features/rails_with_js_notifier.feature
364
+ - features/sinatra.feature
365
365
  - bin/airbrake
366
366
  homepage: http://www.airbrake.io
367
367
  licenses: []
@@ -383,41 +383,41 @@ required_rubygems_version: !ruby/object:Gem::Requirement
383
383
  version: '0'
384
384
  requirements: []
385
385
  rubyforge_project:
386
- rubygems_version: 1.8.24
386
+ rubygems_version: 1.8.25
387
387
  signing_key:
388
388
  specification_version: 3
389
389
  summary: Send your application errors to our hosted service and reclaim your inbox.
390
390
  test_files:
391
- - test/controller_methods_test.rb
391
+ - test/recursion_test.rb
392
+ - test/sender_test.rb
393
+ - test/notifier_test.rb
392
394
  - test/configuration_test.rb
393
395
  - test/airbrake_tasks_test.rb
394
- - test/catcher_test.rb
395
- - test/notifier_test.rb
396
- - test/capistrano_test.rb
397
- - test/user_informer_test.rb
398
- - test/javascript_notifier_test.rb
399
- - test/backtrace_test.rb
396
+ - test/controller_methods_test.rb
400
397
  - test/rack_test.rb
401
- - test/recursion_test.rb
402
398
  - test/notice_test.rb
403
- - test/rails_initializer_test.rb
404
- - test/sender_test.rb
405
399
  - test/helper.rb
400
+ - test/javascript_notifier_test.rb
401
+ - test/backtrace_test.rb
402
+ - test/catcher_test.rb
403
+ - test/rails_initializer_test.rb
404
+ - test/capistrano_test.rb
405
+ - test/user_informer_test.rb
406
406
  - test/logger_test.rb
407
- - features/rack.feature
407
+ - features/rails.feature
408
+ - features/step_definitions/rails_application_steps.rb
409
+ - features/step_definitions/rake_steps.rb
410
+ - features/step_definitions/rack_steps.rb
411
+ - features/step_definitions/file_steps.rb
408
412
  - features/metal.feature
409
- - features/support/airbrake_shim.rb.template
410
- - features/support/rake/Rakefile
411
- - features/support/rails.rb
412
- - features/support/aruba.rb
413
+ - features/rack.feature
413
414
  - features/support/matchers.rb
414
415
  - features/support/env.rb
415
- - features/rails.feature
416
+ - features/support/aruba.rb
417
+ - features/support/rails.rb
418
+ - features/support/rake/Rakefile
419
+ - features/support/airbrake_shim.rb.template
416
420
  - features/user_informer.feature
417
- - features/step_definitions/rack_steps.rb
418
- - features/step_definitions/file_steps.rb
419
- - features/step_definitions/rake_steps.rb
420
- - features/step_definitions/rails_application_steps.rb
421
421
  - features/rake.feature
422
- - features/sinatra.feature
423
422
  - features/rails_with_js_notifier.feature
423
+ - features/sinatra.feature