rails_exception_handler 1.0.0

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.
Files changed (53) hide show
  1. data/.travis.yml +11 -0
  2. data/Gemfile +9 -0
  3. data/Gemfile.lock +91 -0
  4. data/LICENCE +20 -0
  5. data/README.markdown +192 -0
  6. data/Rakefile +31 -0
  7. data/VERSION +1 -0
  8. data/app/controllers/error_response_controller.rb +6 -0
  9. data/app/models/error_message.rb +3 -0
  10. data/lib/patch/show_exceptions.rb +14 -0
  11. data/lib/rails_exception_handler/configuration.rb +13 -0
  12. data/lib/rails_exception_handler/handler.rb +69 -0
  13. data/lib/rails_exception_handler/parser.rb +73 -0
  14. data/lib/rails_exception_handler.rb +37 -0
  15. data/rails_exception_handler.gemspec +87 -0
  16. data/spec/integration/configuration_spec.rb +161 -0
  17. data/spec/integration/rails_exception_handler_spec.rb +67 -0
  18. data/spec/spec_helper.rb +25 -0
  19. data/spec/test_macros.rb +61 -0
  20. data/spec/testapp_30/.gitignore +4 -0
  21. data/spec/testapp_30/Gemfile +31 -0
  22. data/spec/testapp_30/Gemfile.lock +75 -0
  23. data/spec/testapp_30/Rakefile +7 -0
  24. data/spec/testapp_30/app/controllers/application_controller.rb +12 -0
  25. data/spec/testapp_30/app/controllers/home_controller.rb +22 -0
  26. data/spec/testapp_30/app/helpers/application_helper.rb +2 -0
  27. data/spec/testapp_30/app/models/stored_exception.rb +9 -0
  28. data/spec/testapp_30/app/views/home/view_error.html.erb +2 -0
  29. data/spec/testapp_30/app/views/layouts/fallback.html.erb +15 -0
  30. data/spec/testapp_30/app/views/layouts/home.html.erb +15 -0
  31. data/spec/testapp_30/config/application.rb +44 -0
  32. data/spec/testapp_30/config/boot.rb +6 -0
  33. data/spec/testapp_30/config/database.yml +12 -0
  34. data/spec/testapp_30/config/environment.rb +5 -0
  35. data/spec/testapp_30/config/environments/development.rb +26 -0
  36. data/spec/testapp_30/config/environments/production.rb +49 -0
  37. data/spec/testapp_30/config/environments/test.rb +35 -0
  38. data/spec/testapp_30/config/examples/database.yml +13 -0
  39. data/spec/testapp_30/config/locales/en.yml +5 -0
  40. data/spec/testapp_30/config/routes.rb +6 -0
  41. data/spec/testapp_30/config.ru +4 -0
  42. data/spec/testapp_30/db/migrate/20110630174538_create_error_messages.rb +22 -0
  43. data/spec/testapp_30/db/migrate/20110702131654_add_sessions_table.rb +16 -0
  44. data/spec/testapp_30/db/schema.rb +39 -0
  45. data/spec/testapp_30/db/seeds.rb +7 -0
  46. data/spec/testapp_30/lib/tasks/.gitkeep +0 -0
  47. data/spec/testapp_30/script/rails +6 -0
  48. data/spec/testapp_30/script/setup +19 -0
  49. data/spec/testapp_30/vendor/plugins/.gitkeep +0 -0
  50. data/spec/unit/configuration_spec.rb +37 -0
  51. data/spec/unit/handler_spec.rb +136 -0
  52. data/spec/unit/parser_spec.rb +112 -0
  53. metadata +107 -0
@@ -0,0 +1,35 @@
1
+ ExceptionHandlerTestApp::Application.configure do
2
+ # Settings specified here will take precedence over those in config/application.rb
3
+
4
+ # The test environment is used exclusively to run your application's
5
+ # test suite. You never need to work with it otherwise. Remember that
6
+ # your test database is "scratch space" for the test suite and is wiped
7
+ # and recreated between test runs. Don't rely on the data there!
8
+ config.cache_classes = true
9
+
10
+ # Log error messages when you accidentally call methods on nil.
11
+ config.whiny_nils = true
12
+
13
+ # Show full error reports and disable caching
14
+ config.consider_all_requests_local = true
15
+ config.action_controller.perform_caching = false
16
+
17
+ # Raise exceptions instead of rendering exception templates
18
+ config.action_dispatch.show_exceptions = false
19
+
20
+ # Disable request forgery protection in test environment
21
+ config.action_controller.allow_forgery_protection = false
22
+
23
+ # Tell Action Mailer not to deliver emails to the real world.
24
+ # The :test delivery method accumulates sent emails in the
25
+ # ActionMailer::Base.deliveries array.
26
+ config.action_mailer.delivery_method = :test
27
+
28
+ # Use SQL instead of Active Record's schema dumper when creating the test database.
29
+ # This is necessary if your schema can't be completely dumped by the schema dumper,
30
+ # like if you have constraints or database-specific column types
31
+ # config.active_record.schema_format = :sql
32
+
33
+ # Print deprecation notices to the stderr
34
+ config.active_support.deprecation = :stderr
35
+ end
@@ -0,0 +1,13 @@
1
+
2
+ test: &test
3
+ adapter: mysql2
4
+ encoding: utf8
5
+ reconnect: false
6
+ database: exception_handler_test_app_test
7
+ pool: 5
8
+ username: root
9
+ password:
10
+ host: localhost
11
+
12
+ exception_database:
13
+ <<: *test
@@ -0,0 +1,5 @@
1
+ # Sample localization file for English. Add more files in this directory for other locales.
2
+ # See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
3
+
4
+ en:
5
+ hello: "Hello world"
@@ -0,0 +1,6 @@
1
+ ExceptionHandlerTestApp::Application.routes.draw do
2
+ match 'home/controller_error' => 'home#controller_error'
3
+ match 'home/model_error' => 'home#model_error'
4
+ match 'home/view_error' => 'home#view_error'
5
+ match 'home/syntax_error' => 'home#syntax_error'
6
+ end
@@ -0,0 +1,4 @@
1
+ # This file is used by Rack-based servers to start the application.
2
+
3
+ require ::File.expand_path('../config/environment', __FILE__)
4
+ run ExceptionHandlerTestApp::Application
@@ -0,0 +1,22 @@
1
+ class CreateErrorMessages < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :error_messages do |t|
4
+ t.text :class_name
5
+ t.text :message
6
+ t.text :trace
7
+ t.text :params
8
+ t.text :target_url
9
+ t.text :referer_url
10
+ t.text :user_agent
11
+ t.string :user_info
12
+ t.string :app_name
13
+ t.datetime :created_at
14
+
15
+ t.timestamps
16
+ end
17
+ end
18
+
19
+ def self.down
20
+ drop_table :error_messages
21
+ end
22
+ end
@@ -0,0 +1,16 @@
1
+ class AddSessionsTable < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :sessions do |t|
4
+ t.string :session_id, :null => false
5
+ t.text :data
6
+ t.timestamps
7
+ end
8
+
9
+ add_index :sessions, :session_id
10
+ add_index :sessions, :updated_at
11
+ end
12
+
13
+ def self.down
14
+ drop_table :sessions
15
+ end
16
+ end
@@ -0,0 +1,39 @@
1
+ # This file is auto-generated from the current state of the database. Instead
2
+ # of editing this file, please use the migrations feature of Active Record to
3
+ # incrementally modify your database, and then regenerate this schema definition.
4
+ #
5
+ # Note that this schema.rb definition is the authoritative source for your
6
+ # database schema. If you need to create the application database on another
7
+ # system, you should be using db:schema:load, not running all the migrations
8
+ # from scratch. The latter is a flawed and unsustainable approach (the more migrations
9
+ # you'll amass, the slower it'll run and the greater likelihood for issues).
10
+ #
11
+ # It's strongly recommended to check this file into your version control system.
12
+
13
+ ActiveRecord::Schema.define(:version => 20110702131654) do
14
+
15
+ create_table "error_messages", :force => true do |t|
16
+ t.text "class_name"
17
+ t.text "message"
18
+ t.text "trace"
19
+ t.text "params"
20
+ t.text "target_url"
21
+ t.text "referer_url"
22
+ t.text "user_agent"
23
+ t.string "user_info"
24
+ t.string "app_name"
25
+ t.datetime "created_at"
26
+ t.datetime "updated_at"
27
+ end
28
+
29
+ create_table "sessions", :force => true do |t|
30
+ t.string "session_id", :null => false
31
+ t.text "data"
32
+ t.datetime "created_at"
33
+ t.datetime "updated_at"
34
+ end
35
+
36
+ add_index "sessions", ["session_id"], :name => "index_sessions_on_session_id"
37
+ add_index "sessions", ["updated_at"], :name => "index_sessions_on_updated_at"
38
+
39
+ end
@@ -0,0 +1,7 @@
1
+ # This file should contain all the record creation needed to seed the database with its default values.
2
+ # The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
3
+ #
4
+ # Examples:
5
+ #
6
+ # cities = City.create([{ :name => 'Chicago' }, { :name => 'Copenhagen' }])
7
+ # Mayor.create(:name => 'Daley', :city => cities.first)
File without changes
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+ # This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
3
+
4
+ APP_PATH = File.expand_path('../../config/application', __FILE__)
5
+ require File.expand_path('../../config/boot', __FILE__)
6
+ require 'rails/commands'
@@ -0,0 +1,19 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'fileutils'
4
+
5
+ Dir.chdir(File.expand_path(File.dirname(__FILE__)) + "/../")
6
+
7
+ source = "config/examples/database.yml"
8
+ target = "config/database.yml"
9
+
10
+ if File.exist?(target)
11
+ puts "#{target} already exists"
12
+ else
13
+ FileUtils.cp(source, target)
14
+ puts "#{target} copied"
15
+ end
16
+
17
+ system "bundle"
18
+ system "bundle exec rake db:create --trace RAILS_ENV=test"
19
+ system "bundle exec rake db:migrate --trace RAILS_ENV=test"
File without changes
@@ -0,0 +1,37 @@
1
+
2
+
3
+ describe RailsExceptionHandler::Configuration do
4
+ describe ".initialize" do
5
+ before(:each) do
6
+ @configuration = RailsExceptionHandler::Configuration.new
7
+ end
8
+
9
+ it "should add :production to environments" do
10
+ @configuration.environments.should == [:production]
11
+ end
12
+
13
+ it "should set storage_strategies to []" do
14
+ @configuration.storage_strategies.should == []
15
+ end
16
+
17
+ it "should set store_user_info to false" do
18
+ @configuration.store_user_info = false
19
+ end
20
+
21
+ it "should set filters to [] " do
22
+ @configuration.filters.should == []
23
+ end
24
+
25
+ it "should set the 404 response" do
26
+ @configuration.responses['404'].should match(/Page not found/)
27
+ end
28
+
29
+ it "should set the 500 response" do
30
+ @configuration.responses['500'].should match(/Internal server error/)
31
+ end
32
+
33
+ it "should set the fallback layout to 'application'" do
34
+ @configuration.fallback_layout.should == 'application'
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,136 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../spec_helper.rb'
2
+
3
+ describe RailsExceptionHandler::Handler do
4
+ before(:each) do
5
+ @handler = RailsExceptionHandler::Handler.new(create_env, create_exception)
6
+ end
7
+
8
+ describe ".handle_exception" do
9
+ it "should parse error" do
10
+ @handler.handle_exception
11
+ @handler.instance_variable_get(:@parsed_error).should_not == nil
12
+ end
13
+
14
+ it "should store error" do
15
+ @handler.should_receive(:store_error)
16
+ @handler.handle_exception
17
+ end
18
+
19
+ it "should return a rack tripple" do
20
+ response = @handler.handle_exception
21
+ response.length.should == 3
22
+ response[0].should == 200 # response code
23
+ response[1].class.should == Hash # headers
24
+ response[2].class.should == ActionDispatch::Response # body
25
+ end
26
+ end
27
+
28
+ describe ".store_error" do
29
+ it "should store an error message in the database when storage_strategies includes :active_record" do
30
+ RailsExceptionHandler.configure { |config| config.storage_strategies = [:active_record] }
31
+ @handler.handle_exception
32
+ ErrorMessage.count.should == 1
33
+ msg = ErrorMessage.first
34
+ msg.app_name.should == 'ExceptionHandlerTestApp'
35
+ msg.class_name.should == 'NoMethodError'
36
+ msg.message.should == "undefined method `foo' for nil:NilClass"
37
+ msg.trace.should match /active_support\/whiny_nil/
38
+ msg.params.should match /\"foo\"=>\"bar\"/
39
+ msg.user_agent.should == 'Mozilla/4.0 (compatible; MSIE 8.0)'
40
+ msg.target_url.should == 'http://example.org/home?foo=bar'
41
+ msg.referer_url.should == 'http://google.com/'
42
+ msg.created_at.should be > 5.seconds.ago
43
+ msg.created_at.should be < Time.now
44
+ end
45
+
46
+ it "should not store an error message in the database when storage_strategies does not include :active_record" do
47
+ RailsExceptionHandler.configure { |config| config.storage_strategies = [] }
48
+ ErrorMessage.count.should == 0
49
+ end
50
+
51
+ it "it should log an error to the rails log when storage_strategies includes :rails_log" do
52
+ RailsExceptionHandler.configure { |config| config.storage_strategies = [:rails_log] }
53
+ read_test_log.should == ''
54
+ @handler.handle_exception
55
+ read_test_log.should match /NoMethodError \(undefined method `foo' for nil:NilClass\)/
56
+ read_test_log.should match /lib\/active_support\/whiny_nil\.rb:48/
57
+ read_test_log.should match /PARAMS:\s+{\"foo\"=>\"bar\"}/
58
+ read_test_log.should match /USER_AGENT:\s+Mozilla\/4.0 \(compatible; MSIE 8\.0\)/
59
+ read_test_log.should match /TARGET:\s+http:\/\/example\.org\/home\?foo=bar/
60
+ read_test_log.should match /REFERER:\s+http:\/\/google\.com\//
61
+ end
62
+
63
+ it "should not log an error to the rails log when storage_strategies does not include :rails_log" do
64
+ RailsExceptionHandler.configure { |config| config.storage_strategies = [] }
65
+ read_test_log.should == ''
66
+ @handler.handle_exception
67
+ read_test_log.should == ''
68
+ end
69
+
70
+ it "should send the error_message as an HTTP POST request when :remote_url is included" do
71
+ Time.stub!(:now => Time.now) # Otherwise the timestamps will be different, and comparison fail
72
+ @handler.handle_exception
73
+ parser = @handler.instance_variable_get(:@parsed_error)
74
+ RailsExceptionHandler.configure { |config| config.storage_strategies = [:remote_url => {:target => 'http://example.com/error_messages'}] }
75
+ uri = URI.parse('http://example.com/error_messages')
76
+ params = {}
77
+ parser.relevant_info.each do |key,value|
78
+ params["error_message[#{key}]"] = value
79
+ end
80
+ Net::HTTP.should_receive(:post_form).with(uri, params)
81
+ @handler.handle_exception
82
+ end
83
+
84
+ it "should not send the error_message as an HTTP POST request when :remote_url is not included" do
85
+ RailsExceptionHandler.configure { |config| config.storage_strategies = [] }
86
+ Net::HTTP.should_not_receive(:post_form)
87
+ @handler.handle_exception
88
+ end
89
+
90
+ it "should be able to use multiple storage strategies" do
91
+ RailsExceptionHandler.configure { |config| config.storage_strategies = [:active_record, :rails_log] }
92
+ read_test_log.should == ''
93
+ @handler.handle_exception
94
+ read_test_log.should match /NoMethodError \(undefined method `foo' for nil:NilClass\)/
95
+ ErrorMessage.count.should == 1
96
+ end
97
+ end
98
+
99
+ describe '.response' do
100
+ it "should call index action on ErrorResponseController" do
101
+ ErrorResponseController.should_receive(:action).with(:index).and_return(mock(Object, :call => true))
102
+ @handler.handle_exception
103
+ end
104
+
105
+ it "should set response_code to '404' on routing errors" do
106
+ exception = create_exception
107
+ env = create_env
108
+ exception.stub!(:class => ActiveRecord::RecordNotFound)
109
+ handler = RailsExceptionHandler::Handler.new(env, exception)
110
+ handler.handle_exception
111
+ env['exception_handler.response_code'].should == '404'
112
+ end
113
+
114
+ it "should set response_code to '500' on all other errors" do
115
+ env = create_env
116
+ handler = RailsExceptionHandler::Handler.new(env, create_exception)
117
+ handler.handle_exception
118
+ env['exception_handler.response_code'].should == '500'
119
+ end
120
+
121
+ it "should save the layout in env" do
122
+ env = create_env
123
+ handler = RailsExceptionHandler::Handler.new(env, create_exception)
124
+ handler.instance_variable_set("@controller",mock(Object, :_default_layout => 'home'))
125
+ handler.handle_exception
126
+ env['exception_handler.layout'].should == 'home'
127
+ end
128
+
129
+ it "should use the fallback layout when no layout is defined" do
130
+ env = create_env
131
+ handler = RailsExceptionHandler::Handler.new(env, create_exception)
132
+ handler.handle_exception
133
+ env['exception_handler.layout'].should == 'fallback'
134
+ end
135
+ end
136
+ end
@@ -0,0 +1,112 @@
1
+ require File.expand_path(File.dirname(__FILE__)) + '/../spec_helper.rb'
2
+
3
+ describe RailsExceptionHandler::Parser do
4
+ before(:each) do
5
+ env = create_env
6
+ controller = mock(ApplicationController, :current_user => mock(Object, :login => 'matz'))
7
+ request = ActionDispatch::Request.new(env)
8
+ @parser = RailsExceptionHandler::Parser.new(create_exception, request, controller)
9
+ end
10
+
11
+ describe ".relevant_info" do
12
+ it("should return app_name") { @parser.relevant_info[:app_name].should == 'ExceptionHandlerTestApp' }
13
+ it("should return class_name") { @parser.relevant_info[:class_name].should == 'NoMethodError' }
14
+ it("should return message") { @parser.relevant_info[:message].should == "undefined method `foo' for nil:NilClass" }
15
+ it("should return trace") { @parser.relevant_info[:trace].should match /active_support\/whiny_nil/ }
16
+ it("should return target_url") { @parser.relevant_info[:target_url].should == 'http://example.org/home?foo=bar' }
17
+ it("should return referer_url") { @parser.relevant_info[:referer_url].should == 'http://google.com/' }
18
+ it("should return params") { @parser.relevant_info[:params].should match(/\"foo\"=>\"bar\"/) }
19
+ it("should return user_agent") { @parser.relevant_info[:user_agent].should == "Mozilla/4.0 (compatible; MSIE 8.0)" }
20
+ it("should return user_info") { @parser.relevant_info[:user_info].should == nil }
21
+ it("should return created_at") { @parser.relevant_info[:created_at].should be > 5.seconds.ago }
22
+ it("should return created_at") { @parser.relevant_info[:created_at].should be < Time.now }
23
+ end
24
+
25
+ describe ".ignore?" do
26
+ context "routing errors" do
27
+ it "should return true on routing errors when the filter contains :all_404s" do
28
+ RailsExceptionHandler.configure { |config| config.filters = [:all_404s] }
29
+ exception = create_exception
30
+ exception.stub!(:class => ActionController::RoutingError)
31
+ parser = create_parser(exception, nil, nil)
32
+ parser.ignore?.should == true
33
+ end
34
+
35
+ it "should return true on routing errors without referer when the filter contains :no_referer_404s" do
36
+ RailsExceptionHandler.configure { |config| config.filters = [:no_referer_404s] }
37
+ exception = create_exception
38
+ exception.stub!(:class => ActionController::RoutingError)
39
+ request = ActionDispatch::Request.new(create_env(:referer => '/'))
40
+ parser = create_parser(exception, request, nil)
41
+ parser.ignore?.should == true
42
+ end
43
+
44
+ it "should return true when the user agent matches against the filters :user_agent_regxp" do
45
+ RailsExceptionHandler.configure { |config| config.filters = [{:user_agent_regxp => /\b(Mozilla)\b/}] }
46
+ parser = create_parser(nil, nil, nil)
47
+ parser.ignore?.should == true
48
+ end
49
+
50
+ it "should return true when the url matches against the filters :target_url_regxp" do
51
+ RailsExceptionHandler.configure { |config| config.filters = [{:target_url_regxp => /\b(home)\b/}] }
52
+ parser = create_parser(nil, nil, nil)
53
+ parser.ignore?.should == true
54
+ end
55
+
56
+ it "should return false when the request is not caught by a filter" do
57
+ RailsExceptionHandler.configure { |config| config.filters = [] }
58
+ parser = create_parser(nil, nil, nil)
59
+ parser.ignore?.should == false
60
+ end
61
+ end
62
+ end
63
+
64
+ describe "routing_error?" do
65
+ it "should return true on ActionController::RoutingError" do
66
+ exception = create_exception
67
+ exception.stub!(:class => ActionController::RoutingError)
68
+ parser = create_parser(exception, nil, nil)
69
+ parser.routing_error?.should == true
70
+ end
71
+
72
+ it "should return true on AbstractController::ActionNotFound" do
73
+ exception = create_exception
74
+ exception.stub!(:class => AbstractController::ActionNotFound)
75
+ parser = create_parser(exception, nil, nil)
76
+ parser.routing_error?.should == true
77
+ end
78
+
79
+ it "should return true on ActiveRecord::RecordNotFound" do
80
+ exception = create_exception
81
+ exception.stub!(:class => ActiveRecord::RecordNotFound)
82
+ parser = create_parser(exception, nil, nil)
83
+ parser.routing_error?.should == true
84
+ end
85
+
86
+ it "should return false on all other errors" do
87
+ @parser.routing_error?.should == false
88
+ end
89
+ end
90
+
91
+ describe "user_info" do
92
+ it "should store user info based on the method and field provided" do
93
+ RailsExceptionHandler.configure {|config| config.store_user_info = {:method => :current_user, :field => :login}}
94
+ controller = mock(ApplicationController, :current_user => mock(Object, :login => 'matz'))
95
+ parser = create_parser(nil, nil, controller)
96
+ parser.relevant_info[:user_info].should == 'matz'
97
+ end
98
+ it "should store 'Anonymous' when store_user_info is enabled and no user is logged in" do
99
+ RailsExceptionHandler.configure {|config| config.store_user_info = {:method => :current_user, :field => :login}}
100
+ controller = mock(ApplicationController, :current_user => nil)
101
+ parser = create_parser(nil, nil, controller)
102
+ parser.relevant_info[:user_info].should == 'Anonymous'
103
+ end
104
+
105
+ it "should not store any info when configured store_user_info is false" do
106
+ RailsExceptionHandler.configure {|config| config.store_user_info = false}
107
+ controller = mock(ApplicationController, :current_user => mock(Object, :login => 'matz'))
108
+ parser = create_parser(nil, nil, controller)
109
+ parser.relevant_info[:user_info].should == nil
110
+ end
111
+ end
112
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rails_exception_handler
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.0.0
6
+ platform: ruby
7
+ authors:
8
+ - Sharagoz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-07-17 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: ""
18
+ email: contact@sharagoz.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files:
24
+ - README.markdown
25
+ files:
26
+ - .travis.yml
27
+ - Gemfile
28
+ - Gemfile.lock
29
+ - LICENCE
30
+ - README.markdown
31
+ - Rakefile
32
+ - VERSION
33
+ - app/controllers/error_response_controller.rb
34
+ - app/models/error_message.rb
35
+ - lib/patch/show_exceptions.rb
36
+ - lib/rails_exception_handler.rb
37
+ - lib/rails_exception_handler/configuration.rb
38
+ - lib/rails_exception_handler/handler.rb
39
+ - lib/rails_exception_handler/parser.rb
40
+ - rails_exception_handler.gemspec
41
+ - spec/integration/configuration_spec.rb
42
+ - spec/integration/rails_exception_handler_spec.rb
43
+ - spec/spec_helper.rb
44
+ - spec/test_macros.rb
45
+ - spec/testapp_30/.gitignore
46
+ - spec/testapp_30/Gemfile
47
+ - spec/testapp_30/Gemfile.lock
48
+ - spec/testapp_30/Rakefile
49
+ - spec/testapp_30/app/controllers/application_controller.rb
50
+ - spec/testapp_30/app/controllers/home_controller.rb
51
+ - spec/testapp_30/app/helpers/application_helper.rb
52
+ - spec/testapp_30/app/models/stored_exception.rb
53
+ - spec/testapp_30/app/views/home/view_error.html.erb
54
+ - spec/testapp_30/app/views/layouts/fallback.html.erb
55
+ - spec/testapp_30/app/views/layouts/home.html.erb
56
+ - spec/testapp_30/config.ru
57
+ - spec/testapp_30/config/application.rb
58
+ - spec/testapp_30/config/boot.rb
59
+ - spec/testapp_30/config/database.yml
60
+ - spec/testapp_30/config/environment.rb
61
+ - spec/testapp_30/config/environments/development.rb
62
+ - spec/testapp_30/config/environments/production.rb
63
+ - spec/testapp_30/config/environments/test.rb
64
+ - spec/testapp_30/config/examples/database.yml
65
+ - spec/testapp_30/config/locales/en.yml
66
+ - spec/testapp_30/config/routes.rb
67
+ - spec/testapp_30/db/migrate/20110630174538_create_error_messages.rb
68
+ - spec/testapp_30/db/migrate/20110702131654_add_sessions_table.rb
69
+ - spec/testapp_30/db/schema.rb
70
+ - spec/testapp_30/db/seeds.rb
71
+ - spec/testapp_30/lib/tasks/.gitkeep
72
+ - spec/testapp_30/script/rails
73
+ - spec/testapp_30/script/setup
74
+ - spec/testapp_30/vendor/plugins/.gitkeep
75
+ - spec/unit/configuration_spec.rb
76
+ - spec/unit/handler_spec.rb
77
+ - spec/unit/parser_spec.rb
78
+ has_rdoc: true
79
+ homepage: http://github.com/Sharagoz/rails_exception_handler
80
+ licenses:
81
+ - MIT
82
+ post_install_message:
83
+ rdoc_options: []
84
+
85
+ require_paths:
86
+ - lib
87
+ required_ruby_version: !ruby/object:Gem::Requirement
88
+ none: false
89
+ requirements:
90
+ - - ">="
91
+ - !ruby/object:Gem::Version
92
+ version: "0"
93
+ required_rubygems_version: !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: "0"
99
+ requirements: []
100
+
101
+ rubyforge_project:
102
+ rubygems_version: 1.6.2
103
+ signing_key:
104
+ specification_version: 3
105
+ summary: Exception Handling for Rails 3
106
+ test_files: []
107
+