airbrake 3.1.8 → 3.1.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/CHANGELOG 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