projectlocker_errata 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +908 -0
- data/Gemfile +3 -0
- data/Guardfile +6 -0
- data/INSTALL +20 -0
- data/MIT-LICENSE +23 -0
- data/README.md +460 -0
- data/README_FOR_HEROKU_ADDON.md +94 -0
- data/Rakefile +223 -0
- data/SUPPORTED_RAILS_VERSIONS +38 -0
- data/TESTING.md +41 -0
- data/features/metal.feature +18 -0
- data/features/rack.feature +60 -0
- data/features/rails.feature +272 -0
- data/features/rails_with_js_notifier.feature +97 -0
- data/features/rake.feature +27 -0
- data/features/sinatra.feature +29 -0
- data/features/step_definitions/file_steps.rb +10 -0
- data/features/step_definitions/metal_steps.rb +23 -0
- data/features/step_definitions/rack_steps.rb +23 -0
- data/features/step_definitions/rails_application_steps.rb +478 -0
- data/features/step_definitions/rake_steps.rb +17 -0
- data/features/support/env.rb +18 -0
- data/features/support/matchers.rb +35 -0
- data/features/support/projectlocker_errata_shim.rb.template +16 -0
- data/features/support/rails.rb +201 -0
- data/features/support/rake/Rakefile +68 -0
- data/features/support/terminal.rb +107 -0
- data/features/user_informer.feature +63 -0
- data/generators/projectlocker_errata/lib/insert_commands.rb +34 -0
- data/generators/projectlocker_errata/lib/rake_commands.rb +24 -0
- data/generators/projectlocker_errata/projectlocker_errata_generator.rb +94 -0
- data/generators/projectlocker_errata/templates/capistrano_hook.rb +6 -0
- data/generators/projectlocker_errata/templates/initializer.rb +6 -0
- data/generators/projectlocker_errata/templates/projectlocker_errata_tasks.rake +25 -0
- data/install.rb +1 -0
- data/lib/projectlocker_errata/backtrace.rb +108 -0
- data/lib/projectlocker_errata/capistrano.rb +43 -0
- data/lib/projectlocker_errata/configuration.rb +305 -0
- data/lib/projectlocker_errata/notice.rb +390 -0
- data/lib/projectlocker_errata/rack.rb +54 -0
- data/lib/projectlocker_errata/rails/action_controller_catcher.rb +30 -0
- data/lib/projectlocker_errata/rails/controller_methods.rb +85 -0
- data/lib/projectlocker_errata/rails/error_lookup.rb +33 -0
- data/lib/projectlocker_errata/rails/javascript_notifier.rb +47 -0
- data/lib/projectlocker_errata/rails/middleware/exceptions_catcher.rb +33 -0
- data/lib/projectlocker_errata/rails.rb +40 -0
- data/lib/projectlocker_errata/rails3_tasks.rb +98 -0
- data/lib/projectlocker_errata/railtie.rb +48 -0
- data/lib/projectlocker_errata/rake_handler.rb +65 -0
- data/lib/projectlocker_errata/sender.rb +128 -0
- data/lib/projectlocker_errata/shared_tasks.rb +47 -0
- data/lib/projectlocker_errata/tasks.rb +83 -0
- data/lib/projectlocker_errata/user_informer.rb +27 -0
- data/lib/projectlocker_errata/utils/blank.rb +53 -0
- data/lib/projectlocker_errata/version.rb +3 -0
- data/lib/projectlocker_errata.rb +159 -0
- data/lib/projectlocker_errata_tasks.rb +64 -0
- data/lib/rails/generators/projectlocker_errata/projectlocker_errata_generator.rb +100 -0
- data/lib/templates/javascript_notifier.erb +15 -0
- data/lib/templates/rescue.erb +91 -0
- data/projectlocker_errata.gemspec +39 -0
- data/rails/init.rb +1 -0
- data/resources/README.md +34 -0
- data/resources/ca-bundle.crt +3376 -0
- data/script/integration_test.rb +38 -0
- data/test/airbrake_2_3.xsd +88 -0
- data/test/backtrace_test.rb +162 -0
- data/test/capistrano_test.rb +34 -0
- data/test/catcher_test.rb +333 -0
- data/test/configuration_test.rb +236 -0
- data/test/helper.rb +263 -0
- data/test/javascript_notifier_test.rb +51 -0
- data/test/logger_test.rb +79 -0
- data/test/notice_test.rb +490 -0
- data/test/notifier_test.rb +276 -0
- data/test/projectlocker_errata_tasks_test.rb +170 -0
- data/test/rack_test.rb +58 -0
- data/test/rails_initializer_test.rb +36 -0
- data/test/recursion_test.rb +10 -0
- data/test/sender_test.rb +288 -0
- data/test/user_informer_test.rb +29 -0
- metadata +440 -0
@@ -0,0 +1,97 @@
|
|
1
|
+
Feature: Install the Gem in a Rails application and enable the JavaScript notifier
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I have built and installed the "projectlocker_errata" gem
|
5
|
+
|
6
|
+
Scenario: Include the Javascript notifier when enabled
|
7
|
+
When I generate a new Rails application
|
8
|
+
And I configure the ProjectlockerErrata shim
|
9
|
+
And I configure my application to require the "projectlocker_errata" gem
|
10
|
+
When I configure the notifier to use the following configuration lines:
|
11
|
+
"""
|
12
|
+
config.api_key = "myapikey"
|
13
|
+
"""
|
14
|
+
And I define a response for "TestController#index":
|
15
|
+
"""
|
16
|
+
render :inline => '<html><head profile="http://example.com"><%= projectlocker_errata_javascript_notifier %></head><body></body></html>'
|
17
|
+
"""
|
18
|
+
And I route "/test/index" to "test#index"
|
19
|
+
And I perform a request to "http://example.com:123/test/index"
|
20
|
+
Then I should see the notifier JavaScript for the following:
|
21
|
+
| api_key | environment | host |
|
22
|
+
| myapikey | production | api.projectlocker_errata.io |
|
23
|
+
And the notifier JavaScript should provide the following errorDefaults:
|
24
|
+
| url | component | action |
|
25
|
+
| http://example.com:123/test/index | test | index |
|
26
|
+
|
27
|
+
Scenario: Include the Javascript notifier when enabled using custom configuration settings
|
28
|
+
When I generate a new Rails application
|
29
|
+
And I configure the ProjectlockerErrata shim
|
30
|
+
And I configure my application to require the "projectlocker_errata" gem
|
31
|
+
When I configure the notifier to use the following configuration lines:
|
32
|
+
"""
|
33
|
+
config.api_key = "myapikey!"
|
34
|
+
config.host = "myprojectlocker_errata.com"
|
35
|
+
config.port = 3001
|
36
|
+
"""
|
37
|
+
And I define a response for "TestController#index":
|
38
|
+
"""
|
39
|
+
render :inline => '<html><head><%= projectlocker_errata_javascript_notifier %></head><body></body></html>'
|
40
|
+
"""
|
41
|
+
And I route "/test/index" to "test#index"
|
42
|
+
And I perform a request to "http://example.com:123/test/index"
|
43
|
+
Then I should see the notifier JavaScript for the following:
|
44
|
+
| api_key | environment | host |
|
45
|
+
| myapikey! | production | myprojectlocker_errata.com:3001 |
|
46
|
+
|
47
|
+
Scenario: Don't include the Javascript notifier by default
|
48
|
+
When I generate a new Rails application
|
49
|
+
And I configure the ProjectlockerErrata shim
|
50
|
+
And I configure my application to require the "projectlocker_errata" gem
|
51
|
+
When I configure the notifier to use the following configuration lines:
|
52
|
+
"""
|
53
|
+
config.api_key = "myapikey!"
|
54
|
+
"""
|
55
|
+
And I define a response for "TestController#index":
|
56
|
+
"""
|
57
|
+
render :inline => "<html><head></head><body></body></html>"
|
58
|
+
"""
|
59
|
+
And I route "/test/index" to "test#index"
|
60
|
+
And I perform a request to "http://example.com:123/test/index"
|
61
|
+
Then I should not see notifier JavaScript
|
62
|
+
|
63
|
+
Scenario: Don't include the Javascript notifier when enabled in non-public environments
|
64
|
+
When I generate a new Rails application
|
65
|
+
And I configure the ProjectlockerErrata shim
|
66
|
+
And I configure my application to require the "projectlocker_errata" gem
|
67
|
+
When I configure the notifier to use the following configuration lines:
|
68
|
+
"""
|
69
|
+
config.api_key = "myapikey!"
|
70
|
+
config.environment_name = 'test'
|
71
|
+
"""
|
72
|
+
And I define a response for "TestController#index":
|
73
|
+
"""
|
74
|
+
render :inline => '<html><head><%= projectlocker_errata_javascript_notifier %></head><body></body></html>'
|
75
|
+
"""
|
76
|
+
And I route "/test/index" to "test#index"
|
77
|
+
And I perform a request to "http://example.com:123/test/index" in the "test" environment
|
78
|
+
Then I should not see notifier JavaScript
|
79
|
+
|
80
|
+
Scenario: Include the Javascript notifier with a custom api key
|
81
|
+
When I generate a new Rails application
|
82
|
+
And I configure the ProjectlockerErrata shim
|
83
|
+
And I configure my application to require the "projectlocker_errata" gem
|
84
|
+
When I configure the notifier to use the following configuration lines:
|
85
|
+
"""
|
86
|
+
config.api_key = "myapikey!"
|
87
|
+
config.js_api_key = "myjsapikey!"
|
88
|
+
"""
|
89
|
+
And I define a response for "TestController#index":
|
90
|
+
"""
|
91
|
+
render :inline => '<html><head><%= projectlocker_errata_javascript_notifier %></head><body></body></html>'
|
92
|
+
"""
|
93
|
+
And I route "/test/index" to "test#index"
|
94
|
+
And I perform a request to "http://example.com:123/test/index"
|
95
|
+
Then I should see the notifier JavaScript for the following:
|
96
|
+
| api_key | environment | host |
|
97
|
+
| myjsapikey! | production | api.projectlocker_errata.io |
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Feature: Use the Gem to catch errors in a Rake application
|
2
|
+
Background:
|
3
|
+
Given I have built and installed the "projectlocker_errata" gem
|
4
|
+
|
5
|
+
Scenario: Catching exceptions in Rake
|
6
|
+
When I run rake with projectlocker_errata
|
7
|
+
Then ProjectlockerErrata should catch the exception
|
8
|
+
|
9
|
+
Scenario: Falling back to default handler before ProjectlockerErrata is configured
|
10
|
+
When I run rake with projectlocker_errata not yet configured
|
11
|
+
Then ProjectlockerErrata should not catch the exception
|
12
|
+
|
13
|
+
Scenario: Disabling Rake exception catcher
|
14
|
+
When I run rake with projectlocker_errata disabled
|
15
|
+
Then ProjectlockerErrata should not catch the exception
|
16
|
+
|
17
|
+
Scenario: Autodetect, running from terminal
|
18
|
+
When I run rake with projectlocker_errata autodetect from terminal
|
19
|
+
Then ProjectlockerErrata should not catch the exception
|
20
|
+
|
21
|
+
Scenario: Autodetect, not running from terminal
|
22
|
+
When I run rake with projectlocker_errata autodetect not from terminal
|
23
|
+
Then ProjectlockerErrata should catch the exception
|
24
|
+
|
25
|
+
Scenario: Sending the correct component name
|
26
|
+
When I run rake with projectlocker_errata
|
27
|
+
Then ProjectlockerErrata should send the rake command line as the component name
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Feature: Use the notifier in a Sinatra app
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I have built and installed the "projectlocker_errata" gem
|
5
|
+
|
6
|
+
Scenario: Rescue an exception in a Sinatra app
|
7
|
+
Given the following Rack app:
|
8
|
+
"""
|
9
|
+
require 'sinatra/base'
|
10
|
+
require 'projectlocker_errata'
|
11
|
+
|
12
|
+
ProjectlockerErrata.configure do |config|
|
13
|
+
config.api_key = 'my_api_key'
|
14
|
+
end
|
15
|
+
|
16
|
+
class FontaneApp < Sinatra::Base
|
17
|
+
use ProjectlockerErrata::Rack
|
18
|
+
enable :raise_errors
|
19
|
+
|
20
|
+
get "/test/index" do
|
21
|
+
raise "Sinatra has left the building"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
app = FontaneApp
|
26
|
+
"""
|
27
|
+
When I perform a Rack request to "http://example.com:123/test/index?param=value"
|
28
|
+
Then I should receive a ProjectlockerErrata notification
|
29
|
+
|
@@ -0,0 +1,10 @@
|
|
1
|
+
Then /^"([^\"]*)" should not contain text of "([^\"]*)"$/ do |target_file, contents_file|
|
2
|
+
notifier_root = File.join(File.dirname(__FILE__), '..', '..')
|
3
|
+
full_path_contents = File.join(notifier_root, contents_file)
|
4
|
+
contents_text = File.open(full_path_contents).read
|
5
|
+
|
6
|
+
full_path_target = File.join(rails_root, target_file)
|
7
|
+
target_text = File.open(full_path_target).read
|
8
|
+
|
9
|
+
target_text.should_not include(contents_text)
|
10
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
When /^I define a Metal endpoint called "([^\"]*)":$/ do |class_name, definition|
|
2
|
+
FileUtils.mkdir_p(File.join(rails_root, 'app', 'metal'))
|
3
|
+
file_name = File.join(rails_root, 'app', 'metal', "#{class_name.underscore}.rb")
|
4
|
+
File.open(file_name, "w") do |file|
|
5
|
+
file.puts "class #{class_name}"
|
6
|
+
file.puts definition
|
7
|
+
file.puts "end"
|
8
|
+
end
|
9
|
+
When %{the metal endpoint "#{class_name}" is mounted in the Rails 3 routes.rb} if rails3?
|
10
|
+
end
|
11
|
+
|
12
|
+
When /^the metal endpoint "([^\"]*)" is mounted in the Rails 3 routes.rb$/ do |class_name|
|
13
|
+
routesrb = File.join(rails_root, "config", "routes.rb")
|
14
|
+
routes = IO.readlines(routesrb)
|
15
|
+
rack_route = "match '/metal(/*other)' => #{class_name}"
|
16
|
+
routes = routes[0..-2] + [rack_route, routes[-1]]
|
17
|
+
File.open(routesrb, "w") do |f|
|
18
|
+
f.puts "require 'app/metal/#{class_name.underscore}'"
|
19
|
+
routes.each do |route_line|
|
20
|
+
f.puts route_line
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
Given /^the following Rack app:$/ do |definition|
|
2
|
+
File.open(RACK_FILE, 'w') { |file| file.write(definition) }
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I perform a Rack request to "([^\"]*)"$/ do |url|
|
6
|
+
shim_file = File.join(PROJECT_ROOT, 'features', 'support', 'airbrake_shim.rb.template')
|
7
|
+
request_file = File.join(TEMP_DIR, 'rack_request.rb')
|
8
|
+
File.open(request_file, 'w') do |file|
|
9
|
+
file.puts "require 'rubygems'"
|
10
|
+
file.puts IO.read(shim_file)
|
11
|
+
file.puts IO.read(RACK_FILE)
|
12
|
+
file.puts "env = Rack::MockRequest.env_for(#{url.inspect})"
|
13
|
+
file.puts "status, headers, body = app.call(env)"
|
14
|
+
file.puts %{puts "HTTP \#{status}"}
|
15
|
+
file.puts %{headers.each { |key, value| puts "\#{key}: \#{value}"}}
|
16
|
+
file.puts "body.each { |part| print part }"
|
17
|
+
end
|
18
|
+
@terminal.run("ruby #{request_file}")
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^I should receive a Airbrake notification for rack$/ do
|
22
|
+
Then %{I should see "You have accessed a deleted account."}
|
23
|
+
end
|