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.
@@ -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
@@ -0,0 +1,3 @@
1
+ module YogiBerra
2
+ VERSION = "0.0.1"
3
+ end
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
@@ -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