yogi_berra 0.0.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.
- data/Gemfile +6 -0
- data/Gemfile.lock +23 -0
- data/LICENSE +674 -0
- data/README.md +51 -0
- data/Rakefile +12 -0
- data/lib/yogi_berra/action_controller_catcher.rb +45 -0
- data/lib/yogi_berra/backtrace.rb +100 -0
- data/lib/yogi_berra/catcher.rb +45 -0
- data/lib/yogi_berra/data.rb +34 -0
- data/lib/yogi_berra/engine.rb +5 -0
- data/lib/yogi_berra/exception_middleware.rb +41 -0
- data/lib/yogi_berra/notice.rb +336 -0
- data/lib/yogi_berra/rails.rb +29 -0
- data/lib/yogi_berra/version.rb +3 -0
- data/lib/yogi_berra.rb +51 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/yogi_berra_spec.rb +52 -0
- metadata +112 -0
@@ -0,0 +1,29 @@
|
|
1
|
+
# Adapted from Airbrake code https://github.com/airbrake/airbrake/blob/master/lib/airbrake/rails.rb
|
2
|
+
require 'yogi_berra'
|
3
|
+
require 'yogi_berra/action_controller_catcher'
|
4
|
+
|
5
|
+
module YogiBerra
|
6
|
+
def self.initialize
|
7
|
+
if defined?(ActionController::Base)
|
8
|
+
ActionController::Base.send(:include, YogiBerra::ActionControllerCatcher)
|
9
|
+
# ActionController::Base.send(:include, YogiBerra::::ErrorLookup)
|
10
|
+
# ActionController::Base.send(:include, YogiBerra::ControllerMethods)
|
11
|
+
# ActionController::Base.send(:include, YogiBerra::JavascriptNotifier)
|
12
|
+
end
|
13
|
+
|
14
|
+
rails_logger = if defined?(::Rails.logger)
|
15
|
+
::Rails.logger
|
16
|
+
elsif defined?(RAILS_DEFAULT_LOGGER)
|
17
|
+
RAILS_DEFAULT_LOGGER
|
18
|
+
end
|
19
|
+
|
20
|
+
if defined?(::Rails.configuration) && ::Rails.configuration.respond_to?(:middleware)
|
21
|
+
::Rails.configuration.middleware.insert_after 'ActionController::Failsafe',
|
22
|
+
YogiBerra::ExceptionMiddleware
|
23
|
+
# ::Rails.configuration.middleware.insert_after 'Rack::Lock',
|
24
|
+
# YogiBerra::UserInformer
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
YogiBerra.initialize
|
data/lib/yogi_berra.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require "yogi_berra/catcher"
|
2
|
+
require "yogi_berra/backtrace"
|
3
|
+
require "yogi_berra/notice"
|
4
|
+
require "yogi_berra/exception_middleware"
|
5
|
+
require "yogi_berra/data"
|
6
|
+
|
7
|
+
if defined?(::Rails.version) && ::Rails.version.to_f >= 3.0
|
8
|
+
require "yogi_berra/engine"
|
9
|
+
else
|
10
|
+
require "yogi_berra/rails"
|
11
|
+
end
|
12
|
+
|
13
|
+
module YogiBerra
|
14
|
+
class << self
|
15
|
+
# Stores the notice exception
|
16
|
+
# @see YogiBerra.exceptionize
|
17
|
+
# @params exception
|
18
|
+
# @params environment
|
19
|
+
# @params database
|
20
|
+
def exceptionize(exception, environment, database, opts = {})
|
21
|
+
notice = build_notice_for(exception, opts)
|
22
|
+
if database
|
23
|
+
YogiBerra::Data.store!(notice, environment, database)
|
24
|
+
else
|
25
|
+
Rails.logger.error "[YogiBerra Error] No database connection!"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def build_notice_for(exception, opts = {})
|
32
|
+
exception = unwrap_exception(exception)
|
33
|
+
if exception.respond_to?(:to_hash)
|
34
|
+
opts = opts.merge(exception.to_hash)
|
35
|
+
else
|
36
|
+
opts = opts.merge(:exception => exception)
|
37
|
+
end
|
38
|
+
Notice.new(opts)
|
39
|
+
end
|
40
|
+
|
41
|
+
def unwrap_exception(exception)
|
42
|
+
if exception.respond_to?(:original_exception)
|
43
|
+
exception.original_exception
|
44
|
+
elsif exception.respond_to?(:continued_exception)
|
45
|
+
exception.continued_exception
|
46
|
+
else
|
47
|
+
exception
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# Configure Rails Envinronment
|
2
|
+
ENV["RAILS_ENV"] = "test"
|
3
|
+
|
4
|
+
require File.expand_path("../dummy/config/environment.rb", __FILE__)
|
5
|
+
|
6
|
+
ActionMailer::Base.delivery_method = :test
|
7
|
+
ActionMailer::Base.perform_deliveries = true
|
8
|
+
ActionMailer::Base.default_url_options[:host] = "test.com"
|
9
|
+
|
10
|
+
Rails.backtrace_cleaner.remove_silencers!
|
11
|
+
|
12
|
+
# Run any available migration
|
13
|
+
ActiveRecord::Migrator.migrate File.expand_path("../dummy/db/migrate/", __FILE__)
|
14
|
+
|
15
|
+
# Load support files
|
16
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
17
|
+
|
18
|
+
# Helper methods
|
19
|
+
class ActiveSupport::TestCase
|
20
|
+
setup { YogiBerra::Data.delete_all }
|
21
|
+
|
22
|
+
# Creates RunTimeError
|
23
|
+
def build_exception
|
24
|
+
raise
|
25
|
+
rescue => caught_exception
|
26
|
+
caught_exception
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe YogiBerra do
|
4
|
+
|
5
|
+
it "should call the upstream app with the environment" #do
|
6
|
+
# environment = { 'key' => 'value' }
|
7
|
+
# app = lambda { |env| ['response', {}, env] }
|
8
|
+
# stack = YogiBerra::ExceptionMiddleware.new(app)
|
9
|
+
|
10
|
+
# response = stack.call(environment)
|
11
|
+
|
12
|
+
# assert_equal ['response', {}, environment], response
|
13
|
+
#end
|
14
|
+
|
15
|
+
it "deliver an exception raised while calling an upstream app" #do
|
16
|
+
|
17
|
+
# exception = build_exception
|
18
|
+
# environment = { 'key' => 'value' }
|
19
|
+
# app = lambda do |env|
|
20
|
+
# raise exception
|
21
|
+
# end
|
22
|
+
|
23
|
+
# begin
|
24
|
+
# stack = YogiBerra::ExceptionMiddleware.new(app)
|
25
|
+
# stack.call(environment)
|
26
|
+
# rescue Exception => raised
|
27
|
+
# assert_equal exception, raised
|
28
|
+
# else
|
29
|
+
# flunk "Didn't raise an exception"
|
30
|
+
# end
|
31
|
+
|
32
|
+
#end
|
33
|
+
|
34
|
+
it "should deliver an exception in rack.exception" #do
|
35
|
+
|
36
|
+
# exception = build_exception
|
37
|
+
# environment = { 'key' => 'value' }
|
38
|
+
|
39
|
+
# response = [200, {}, ['okay']]
|
40
|
+
# app = lambda do |env|
|
41
|
+
# env['rack.exception'] = exception
|
42
|
+
# response
|
43
|
+
# end
|
44
|
+
# stack = YogiBerra::ExceptionMiddleware.new(app)
|
45
|
+
|
46
|
+
# actual_response = stack.call(environment)
|
47
|
+
|
48
|
+
# assert_equal response, actual_response
|
49
|
+
|
50
|
+
#end
|
51
|
+
|
52
|
+
end
|
metadata
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: yogi_berra
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Kevin Earl Krauss
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-24 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bson
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - '='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.8.3
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - '='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.8.3
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: bson_ext
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - '='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: 1.8.3
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - '='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: 1.8.3
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: mongo
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - '='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 1.8.3
|
54
|
+
type: :runtime
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - '='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.8.3
|
62
|
+
description: If the world were perfect, it wouldn't be. So you need the best error
|
63
|
+
catcher of all time!
|
64
|
+
email: earlkrauss@gmail.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- lib/yogi_berra/action_controller_catcher.rb
|
70
|
+
- lib/yogi_berra/backtrace.rb
|
71
|
+
- lib/yogi_berra/catcher.rb
|
72
|
+
- lib/yogi_berra/data.rb
|
73
|
+
- lib/yogi_berra/engine.rb
|
74
|
+
- lib/yogi_berra/exception_middleware.rb
|
75
|
+
- lib/yogi_berra/notice.rb
|
76
|
+
- lib/yogi_berra/rails.rb
|
77
|
+
- lib/yogi_berra/version.rb
|
78
|
+
- lib/yogi_berra.rb
|
79
|
+
- Gemfile
|
80
|
+
- Gemfile.lock
|
81
|
+
- LICENSE
|
82
|
+
- Rakefile
|
83
|
+
- README.md
|
84
|
+
- spec/spec_helper.rb
|
85
|
+
- spec/yogi_berra_spec.rb
|
86
|
+
homepage: http://github.com/earlonrails/yogi_berra
|
87
|
+
licenses: []
|
88
|
+
post_install_message:
|
89
|
+
rdoc_options: []
|
90
|
+
require_paths:
|
91
|
+
- lib
|
92
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
93
|
+
none: false
|
94
|
+
requirements:
|
95
|
+
- - ! '>='
|
96
|
+
- !ruby/object:Gem::Version
|
97
|
+
version: '0'
|
98
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
99
|
+
none: false
|
100
|
+
requirements:
|
101
|
+
- - ! '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
requirements: []
|
105
|
+
rubyforge_project:
|
106
|
+
rubygems_version: 1.8.24
|
107
|
+
signing_key:
|
108
|
+
specification_version: 3
|
109
|
+
summary: Catches errors in your rails app and doesn't get in the way.
|
110
|
+
test_files:
|
111
|
+
- spec/spec_helper.rb
|
112
|
+
- spec/yogi_berra_spec.rb
|