rails_exception_handler 2.3.4 → 2.4.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-version +1 -0
  3. data/.travis.yml +6 -8
  4. data/Gemfile +34 -11
  5. data/Gemfile.lock +192 -126
  6. data/HISTORY +10 -1
  7. data/README.markdown +20 -7
  8. data/Rakefile +1 -1
  9. data/VERSION +1 -1
  10. data/app/controllers/error_response_controller.rb +18 -2
  11. data/app/mailers/rails_exception_handler/error_mailer.rb +15 -0
  12. data/app/models/rails_exception_handler/active_record/error_message.rb +1 -1
  13. data/app/models/rails_exception_handler/mongoid/error_message.rb +1 -0
  14. data/app/views/rails_exception_handler/error_mailer/send_error_mail_to_admin.html.erb +15 -0
  15. data/app/views/rails_exception_handler/error_mailer/send_error_mail_to_admin.text.erb +8 -0
  16. data/gemfiles/rails32.gemfile +1 -1
  17. data/gemfiles/rails40.gemfile +2 -1
  18. data/gemfiles/rails42.gemfile +14 -0
  19. data/gemfiles/rails51.gemfile +14 -0
  20. data/lib/generators/rails_exception_handler/templates/rails_exception_handler.rb +10 -10
  21. data/lib/patch/show_exceptions.rb +3 -1
  22. data/lib/rails_exception_handler/configuration.rb +4 -0
  23. data/lib/rails_exception_handler/handler.rb +25 -3
  24. data/lib/rails_exception_handler/storage.rb +11 -0
  25. data/rails_exception_handler.gemspec +75 -40
  26. data/spec/{dummy_40/app/controllers/concerns/.keep → dummy_30/public/.gitkeep} +0 -0
  27. data/spec/{dummy_40/app/models/concerns/.keep → dummy_32/public/.gitkeep} +0 -0
  28. data/spec/dummy_40/public/.gitkeep +0 -0
  29. data/spec/dummy_42/.gitignore +17 -0
  30. data/spec/dummy_42/app/assets/images/.keep +0 -0
  31. data/spec/dummy_42/app/mailers/.keep +0 -0
  32. data/spec/dummy_42/app/models/.keep +0 -0
  33. data/spec/dummy_42/lib/assets/.keep +0 -0
  34. data/spec/dummy_42/lib/tasks/.keep +0 -0
  35. data/spec/dummy_42/log/.keep +0 -0
  36. data/spec/dummy_42/public/.gitkeep +0 -0
  37. data/spec/dummy_51/.gitignore +23 -0
  38. data/spec/dummy_51/.ruby-version +1 -0
  39. data/spec/dummy_51/app/assets/images/.keep +0 -0
  40. data/spec/dummy_51/app/assets/javascripts/channels/.keep +0 -0
  41. data/spec/dummy_51/app/controllers/concerns/.keep +0 -0
  42. data/spec/dummy_51/app/models/concerns/.keep +0 -0
  43. data/spec/dummy_51/lib/assets/.keep +0 -0
  44. data/spec/dummy_51/lib/tasks/.keep +0 -0
  45. data/spec/dummy_51/log/.keep +0 -0
  46. data/spec/dummy_51/tmp/.keep +0 -0
  47. data/spec/dummy_60/.gitignore +28 -0
  48. data/spec/dummy_60/.ruby-version +1 -0
  49. data/spec/dummy_60/app/assets/images/.keep +0 -0
  50. data/spec/dummy_60/app/controllers/concerns/.keep +0 -0
  51. data/spec/dummy_60/app/models/concerns/.keep +0 -0
  52. data/spec/dummy_60/lib/assets/.keep +0 -0
  53. data/spec/dummy_60/lib/tasks/.keep +0 -0
  54. data/spec/dummy_60/log/.keep +0 -0
  55. data/spec/dummy_60/tmp/.keep +0 -0
  56. metadata +67 -55
data/HISTORY CHANGED
@@ -1,6 +1,15 @@
1
1
  CHANGELOG
2
2
 
3
- v2.3.3 - April 24th 2014
3
+ v2.4.1
4
+ - Fix issue with missing ApplicationMailer
5
+
6
+ v2.4.0
7
+ - Email storage strategy, by https://github.com/lethunder
8
+
9
+ v2.3.5 - June 19th 2017
10
+ - Fix compatibility with Ruby 2.4 and Rails 5
11
+
12
+ v2.3.4 - April 24th 2014
4
13
  - Make database name/table configurable for the Active Record storage strategy
5
14
 
6
15
  v2.3.2 - January 7th 2014
data/README.markdown CHANGED
@@ -6,7 +6,7 @@ This is a flexible exception handler for Rails intended for those who wish to cr
6
6
 
7
7
  The exception handler enables you to save the key information from the error message in a database somewhere, via ActiveRecord or HTTP POST, and display a customized error message to the user within the applications layout file. You can hook this exception handler into all your rails apps and gather the exception reports in one place. The exception handler just contains the back end, you will have to create your own front end to view and manage the error reports. A Rails Engine admin interface, [rails_exception_handler_admin](https://github.com/mgwidmann/rails_exception_handler_admin), is a simple drop in interface or to use as an example for building your own.
8
8
 
9
- Does your app have an authorization mechanism? [See wiki](https://github.com/Sharagoz/rails_exception_handler/wiki/Interaction-with-authorization-mechanisms)
9
+ Does your app have an authorization mechanism like Pundit, CanCan or Delarative authorization? [See wiki](https://github.com/Sharagoz/rails_exception_handler/wiki/Interaction-with-authorization-mechanisms)
10
10
 
11
11
  Do you need to catch ruby errors [outside of Rack](https://github.com/Sharagoz/rails_exception_handler/wiki/Manual-exception-handling-outside-of-rack)?
12
12
  ```ruby
@@ -17,7 +17,7 @@ end
17
17
 
18
18
  ## Compatiblity
19
19
 
20
- The gem should work with all versions of Rails 3 and 4. It does not work with Rails 2.
20
+ The gem should work with all versions of Rails 3, 4, 5 and 6.
21
21
 
22
22
  See Travis-CI for info on which rubies it is tested against:
23
23
  http://travis-ci.org/#!/Sharagoz/rails_exception_handler
@@ -50,6 +50,8 @@ Default value: [:production]
50
50
 
51
51
  ### fallback_layout
52
52
 
53
+ WARNING: This feature is currently broken in Rails v4.2 and above. Make sure your app has the default layout file (layouts/application).
54
+
53
55
  ```ruby
54
56
  config.fallback_layout = 'home'
55
57
  ```
@@ -233,6 +235,21 @@ config.storage_strategies = [:remote_url => {:target => 'http://example.com/erro
233
235
  This option is meant for those who want to store the exception in a database table, but does not have direct access to the database itself, making active record store unsuitable. You need a web app on a server that has access to the database. An HTTP POST request will be sent to the specified URL with the error message as data.
234
236
  If you use a Rails app at the other end you should simply be able to do `RailsExceptionHandler::ActiveRecord::ErrorMessage.create(params[:error_message])` or `RailsExceptionHandler::Mongoid::ErrorMessage.create(params[:error_message])` to save the report depending upon your database choice.
235
237
 
238
+ ### Sending the error report as an email
239
+
240
+ ```ruby
241
+ config.storage_strategies = [:email => {:recipients => "test1@example.com,test2@example.com"}]
242
+ ```
243
+
244
+ Exceptions will be notified by email. Make sure the application got an
245
+ `ApplicationMailer` with default from specified:
246
+
247
+ ```ruby
248
+ class ApplicationMailer < ActionMailer::Base
249
+ default from: 'from@example.com'
250
+ end
251
+ ```
252
+
236
253
  # Exception filters
237
254
 
238
255
  Sometimes it is necessary to filter errors. All filters are disabled by default and I recommend you deploy your application this way initially, and then add filters as they become necessary.
@@ -296,10 +313,6 @@ config.filters = [:referer_url_regxp => /\problematicreferer/i]
296
313
 
297
314
  https://github.com/Sharagoz/rails_exception_handler/graphs/contributors
298
315
 
299
- Would you like to contribute? Here are some things on the todo list:
300
-
301
- * An email storage strategy for those that wish to be notified of the exceptions through email
302
-
303
316
  # Licence
304
317
 
305
- Copyright © 2014 Bjørn Trondsen, released under the MIT license
318
+ Copyright © 2017 Bjørn Trondsen, released under the MIT license
data/Rakefile CHANGED
@@ -21,7 +21,7 @@ Jeweler::Tasks.new do |gem|
21
21
  gem.name = "rails_exception_handler"
22
22
  gem.homepage = "http://github.com/Sharagoz/rails_exception_handler"
23
23
  gem.license = "MIT"
24
- gem.summary = %Q{Exception Handling for Rails 3}
24
+ gem.summary = %Q{Highly customizable exception handling for Ruby on Rails}
25
25
  gem.description = %Q{}
26
26
  gem.email = "contact@sharagoz.com"
27
27
  gem.authors = ["Sharagoz"]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.4
1
+ 2.4.5
@@ -1,11 +1,27 @@
1
1
  if(RailsExceptionHandler.configuration.activate?)
2
2
  class ErrorResponseController < ApplicationController
3
+
4
+ if Rails::VERSION::MAJOR > 3
5
+ skip_before_action :verify_authenticity_token
6
+ else
7
+ skip_before_filter :verify_authenticity_token
8
+ end
9
+
10
+
3
11
  def index
4
- render(:text => @_env['exception_handler.response'], :layout => @_env['exception_handler.layout'])
12
+ if Rails::VERSION::MAJOR > 4
13
+ render(:html => request.env['exception_handler.response'].html_safe, :layout => request.env['exception_handler.layout'])
14
+ else
15
+ render(:text => @_env['exception_handler.response'], :layout => @_env['exception_handler.layout'])
16
+ end
5
17
  end
6
18
 
7
19
  def dummy_action
8
- render :nothing => true
20
+ if Rails::VERSION::MAJOR > 4
21
+ render :body => nil
22
+ else
23
+ render :nothing => true
24
+ end
9
25
  end
10
26
  end
11
27
  end
@@ -0,0 +1,15 @@
1
+ class RailsExceptionHandler::ErrorMailer < ApplicationMailer
2
+ if RailsExceptionHandler.configuration.activate? && RailsExceptionHandler.configuration.email?
3
+
4
+ # Subject can be set in your I18n file at config/locales/en.yml
5
+ # with the following lookup:
6
+ #
7
+ # en.error_mailer.send_error_mail_to_admin.subject
8
+ #
9
+ def send_error_mail_to_admin(info,email)
10
+ @info = JSON.parse(info)
11
+ mail(to: email, subject: 'An error occured on your application')
12
+ end
13
+
14
+ end
15
+ end
@@ -2,7 +2,7 @@ class RailsExceptionHandler::ActiveRecord
2
2
 
3
3
  class ErrorMessage < defined?(ActiveRecord) ? ActiveRecord::Base : Object
4
4
  if (defined?(ActiveRecord) && RailsExceptionHandler.configuration.activate? && RailsExceptionHandler.configuration.active_record?)
5
- establish_connection(RailsExceptionHandler.configuration.active_record_store_in[:database])
5
+ establish_connection(RailsExceptionHandler.configuration.active_record_store_in[:database].to_sym)
6
6
  self.table_name = RailsExceptionHandler.configuration.active_record_store_in[:record_table]
7
7
  end
8
8
  end
@@ -4,6 +4,7 @@ class RailsExceptionHandler::Mongoid
4
4
  if defined?(Mongoid)
5
5
  include Mongoid::Document
6
6
  include Mongoid::Timestamps
7
+ include Mongoid::Attributes::Dynamic if defined?(Mongoid::Attributes::Dynamic)
7
8
 
8
9
  store_in({:database => :exception_database, :collection => :error_message}.merge(RailsExceptionHandler.configuration.mongoid_store_in || {}))
9
10
 
@@ -0,0 +1,15 @@
1
+ <p>
2
+ Hi boss,
3
+ </p>
4
+ <p>
5
+ an error occured at <%= @info["created_at"] %>
6
+ </p>
7
+
8
+ <% @info.each do |key, value| %>
9
+ <% next if value.blank? %>
10
+ <p>
11
+ <%= key.upcase %><br/>
12
+ <%= value %>
13
+ </p>
14
+
15
+ <% end %>
@@ -0,0 +1,8 @@
1
+ Hi boss,
2
+ an error occured at <%= @info["created_at"] %>
3
+
4
+ <% @info.each do |key, value| %>
5
+ <% next if value.blank? %>
6
+ <%= key.upcase %>
7
+ <%= value %>
8
+ <% end %>
@@ -2,7 +2,7 @@
2
2
  source "https://rubygems.org"
3
3
 
4
4
  group :test, :development do
5
- gem "rails", '3.2.13'
5
+ gem "rails", '3.2.22.5'
6
6
  gem "rack-test", '0.6.2'
7
7
  gem 'rake' # Needed by tavis
8
8
  gem 'sqlite3'
@@ -2,10 +2,11 @@
2
2
  source "https://rubygems.org"
3
3
 
4
4
  group :test, :development do
5
- gem "rails", '4.0.0'
5
+ gem "rails", '4.0.13'
6
6
  gem "rack-test", '0.6.2'
7
7
  gem 'rake' # Needed by tavis
8
8
  gem 'sqlite3'
9
+ gem 'mongoid'
9
10
  gem 'pry'
10
11
  gem "rspec-rails"
11
12
  gem "jeweler"
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+ source "https://rubygems.org"
3
+
4
+ group :test, :development do
5
+ gem "rails", '4.2.8'
6
+ gem "rack-test", '0.6.2'
7
+ gem 'rake' # Needed by tavis
8
+ gem 'sqlite3'
9
+ gem 'mongoid'
10
+ gem 'pry'
11
+ gem "rspec-rails"
12
+ gem "jeweler"
13
+ gem "rails_exception_handler"
14
+ end
@@ -0,0 +1,14 @@
1
+ # encoding: utf-8
2
+ source "https://rubygems.org"
3
+
4
+ group :test, :development do
5
+ gem "rails", '5.1.1'
6
+ gem "rack-test", '0.6.2'
7
+ gem 'rake' # Needed by tavis
8
+ gem 'sqlite3'
9
+ gem 'mongoid'
10
+ gem 'pry'
11
+ gem "rspec-rails"
12
+ gem "jeweler"
13
+ gem "rails_exception_handler"
14
+ end
@@ -39,25 +39,25 @@ RailsExceptionHandler.configure do |config|
39
39
 
40
40
 
41
41
  config.store_request_info do |storage,request|
42
- storage[:target_url] = request.url
43
- storage[:referer_url] = request.referer
44
- storage[:params] = request.params.inspect
45
- storage[:user_agent] = request.user_agent
42
+ storage[:target_url] = request.url
43
+ storage[:referer_url] = request.referer
44
+ storage[:params] = request.params.inspect
45
+ storage[:user_agent] = request.user_agent
46
46
  end
47
47
 
48
48
  config.store_exception_info do |storage,exception|
49
- storage[:class_name] = exception.class.to_s
50
- storage[:message] = exception.to_s
51
- storage[:trace] = exception.backtrace.join("\n")
49
+ storage[:class_name] = exception.class.to_s
50
+ storage[:message] = exception.to_s
51
+ storage[:trace] = exception.backtrace.join("\n")
52
52
  end
53
53
 
54
54
  config.store_environment_info do |storage,env|
55
- storage[:doc_root] = env['DOCUMENT_ROOT']
55
+ storage[:doc_root] = env['DOCUMENT_ROOT']
56
56
  end
57
57
 
58
58
  config.store_global_info do |storage|
59
- storage[:app_name] = Rails.application.class.parent_name
60
- storage[:created_at] = Time.now
59
+ storage[:app_name] = Rails.application.class.parent_name
60
+ storage[:created_at] = Time.now
61
61
  end
62
62
  # config.store_user_info = {:method => :current_user, :field => :login} # Helper method for easier access to current_user
63
63
  end
@@ -3,12 +3,14 @@ module ActionDispatch
3
3
  class ShowExceptions
4
4
  private
5
5
  def render_exception_with_template(env, exception)
6
+ env = env.env if env.is_a?(ActionDispatch::Request) # Rails 5 passes in the whole request object
6
7
  if(RailsExceptionHandler.configuration.environments.include?(Rails.env.to_sym))
7
8
  RailsExceptionHandler::Handler.new(env, exception).handle_exception
8
9
  else
9
10
  raise "RailsExceptionHandler: This patch should not have been loaded"
10
11
  end
11
12
  end
12
- alias_method_chain :render_exception, :template
13
+ alias_method :render_exception, :render_exception_with_template
14
+ alias_method :template, :render_exception
13
15
  end
14
16
  end
@@ -23,6 +23,10 @@ class RailsExceptionHandler::Configuration
23
23
  @storage_strategies.include?(:mongoid)
24
24
  end
25
25
 
26
+ def email?
27
+ @storage_strategies.collect{|s| s.is_a?(Hash) ? s.keys : s}.flatten.include?(:email)
28
+ end
29
+
26
30
  def activate?
27
31
  environments.include?(Rails.env.to_sym)
28
32
  end
@@ -32,6 +32,8 @@ class RailsExceptionHandler::Handler
32
32
  RailsExceptionHandler::Storage.send(strategy, @parsed_error.external_info)
33
33
  elsif(strategy.class == Hash && strategy[:remote_url])
34
34
  RailsExceptionHandler::Storage.remote_url(strategy[:remote_url][:target],@parsed_error.external_info)
35
+ elsif(strategy.class == Hash && strategy[:email])
36
+ RailsExceptionHandler::Storage.email(strategy[:email][:recipients],@parsed_error.external_info)
35
37
  else
36
38
  raise "RailsExceptionHandler: Unknown storage strategy #{strategy.inspect}"
37
39
  end
@@ -42,14 +44,26 @@ class RailsExceptionHandler::Handler
42
44
  @env['exception_handler.layout'] = response_layout
43
45
  @env['exception_handler.response'] = response_text
44
46
  response = ErrorResponseController.action(:index).call(@env)
47
+
45
48
  if @parsed_error.routing_error?
46
49
  response[0] = 404
47
50
  file = "#{Rails.root}/public/404.html"
48
- response[2].body = File.read(file) if File.exists?(file)
51
+ response = override_body_with_file_if_exists(response, file)
49
52
  else
50
53
  response[0] = 500
51
54
  file = "#{Rails.root}/public/500.html"
52
- response[2].body = File.read(file) if File.exists?(file)
55
+ response = override_body_with_file_if_exists(response, file)
56
+ end
57
+ return response
58
+ end
59
+
60
+ def override_body_with_file_if_exists(response, file)
61
+ return response unless File.exists?(file)
62
+
63
+ if defined? response[2].body=()
64
+ response[2].body = File.read(file)
65
+ else # Rails >= 4.2.0
66
+ response[2] = [File.read(file)]
53
67
  end
54
68
  return response
55
69
  end
@@ -58,7 +72,15 @@ class RailsExceptionHandler::Handler
58
72
  if(@request.xhr?)
59
73
  false
60
74
  else
61
- default_layout = @controller.send(:_default_layout)
75
+ if Rails::VERSION::MAJOR > 5
76
+ paths = @controller.view_paths
77
+ lookup_context = ActionView::LookupContext.new(paths)
78
+ default_layout = @controller.send(:_default_layout, lookup_context, [:html])
79
+ elsif Rails::VERSION::MAJOR > 4
80
+ default_layout = @controller.send(:_default_layout, [:html])
81
+ else
82
+ default_layout = @controller.send(:_default_layout)
83
+ end
62
84
  if(default_layout.class.to_s == "ActionView::Template")
63
85
  layout = default_layout.virtual_path
64
86
  else
@@ -29,6 +29,17 @@ class RailsExceptionHandler::Storage
29
29
  Net::HTTP::post_form(uri, params)
30
30
  end
31
31
 
32
+ # Notify application admin that an error occured
33
+ def self.email(recipients,info)
34
+ return if recipients.blank?
35
+ if Rails::VERSION::MAJOR == 3 || (Rails::VERSION::MAJOR == 4 && Rails::VERSION::MINOR < 2)
36
+ delivery_method = :deliver
37
+ else
38
+ delivery_method = :deliver_now
39
+ end
40
+ RailsExceptionHandler::ErrorMailer.send_error_mail_to_admin(info.to_json,recipients).send(delivery_method)
41
+ end
42
+
32
43
  private
33
44
 
34
45
  # Credit: Hash flattening technique borrowed from Peter Marklund: http://marklunds.com/articles/one/314
@@ -2,20 +2,23 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
+ # stub: rails_exception_handler 2.4.5 ruby lib
5
6
 
6
7
  Gem::Specification.new do |s|
7
- s.name = "rails_exception_handler"
8
- s.version = "2.3.4"
8
+ s.name = "rails_exception_handler".freeze
9
+ s.version = "2.4.5"
9
10
 
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Sharagoz"]
12
- s.date = "2014-04-24"
13
- s.description = ""
14
- s.email = "contact@sharagoz.com"
11
+ s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
+ s.require_paths = ["lib".freeze]
13
+ s.authors = ["Sharagoz".freeze]
14
+ s.date = "2019-10-03"
15
+ s.description = "".freeze
16
+ s.email = "contact@sharagoz.com".freeze
15
17
  s.extra_rdoc_files = [
16
18
  "README.markdown"
17
19
  ]
18
20
  s.files = [
21
+ ".ruby-version",
19
22
  ".travis.yml",
20
23
  "Gemfile",
21
24
  "Gemfile.lock",
@@ -25,12 +28,17 @@ Gem::Specification.new do |s|
25
28
  "Rakefile",
26
29
  "VERSION",
27
30
  "app/controllers/error_response_controller.rb",
31
+ "app/mailers/rails_exception_handler/error_mailer.rb",
28
32
  "app/models/rails_exception_handler/active_record/error_message.rb",
29
33
  "app/models/rails_exception_handler/mongoid/error_message.rb",
34
+ "app/views/rails_exception_handler/error_mailer/send_error_mail_to_admin.html.erb",
35
+ "app/views/rails_exception_handler/error_mailer/send_error_mail_to_admin.text.erb",
30
36
  "gemfiles/rails30.gemfile",
31
37
  "gemfiles/rails32.187-ree.gemfile",
32
38
  "gemfiles/rails32.gemfile",
33
39
  "gemfiles/rails40.gemfile",
40
+ "gemfiles/rails42.gemfile",
41
+ "gemfiles/rails51.gemfile",
34
42
  "lib/generators/rails_exception_handler/install_generator.rb",
35
43
  "lib/generators/rails_exception_handler/templates/rails_exception_handler.rb",
36
44
  "lib/patch/show_exceptions.rb",
@@ -44,57 +52,84 @@ Gem::Specification.new do |s|
44
52
  "rails_exception_handler.gemspec",
45
53
  "spec/dummy_30/.gitignore",
46
54
  "spec/dummy_30/lib/tasks/.gitkeep",
55
+ "spec/dummy_30/public/.gitkeep",
47
56
  "spec/dummy_32/.gitignore",
48
57
  "spec/dummy_32/app/mailers/.gitkeep",
49
58
  "spec/dummy_32/app/models/.gitkeep",
50
59
  "spec/dummy_32/log/.gitkeep",
60
+ "spec/dummy_32/public/.gitkeep",
51
61
  "spec/dummy_40/.gitignore",
52
62
  "spec/dummy_40/app/assets/images/.keep",
53
- "spec/dummy_40/app/controllers/concerns/.keep",
54
63
  "spec/dummy_40/app/mailers/.keep",
55
64
  "spec/dummy_40/app/models/.keep",
56
- "spec/dummy_40/app/models/concerns/.keep",
57
65
  "spec/dummy_40/lib/assets/.keep",
58
66
  "spec/dummy_40/lib/tasks/.keep",
59
- "spec/dummy_40/log/.keep"
67
+ "spec/dummy_40/log/.keep",
68
+ "spec/dummy_40/public/.gitkeep",
69
+ "spec/dummy_42/.gitignore",
70
+ "spec/dummy_42/app/assets/images/.keep",
71
+ "spec/dummy_42/app/mailers/.keep",
72
+ "spec/dummy_42/app/models/.keep",
73
+ "spec/dummy_42/lib/assets/.keep",
74
+ "spec/dummy_42/lib/tasks/.keep",
75
+ "spec/dummy_42/log/.keep",
76
+ "spec/dummy_42/public/.gitkeep",
77
+ "spec/dummy_51/.gitignore",
78
+ "spec/dummy_51/.ruby-version",
79
+ "spec/dummy_51/app/assets/images/.keep",
80
+ "spec/dummy_51/app/assets/javascripts/channels/.keep",
81
+ "spec/dummy_51/app/controllers/concerns/.keep",
82
+ "spec/dummy_51/app/models/concerns/.keep",
83
+ "spec/dummy_51/lib/assets/.keep",
84
+ "spec/dummy_51/lib/tasks/.keep",
85
+ "spec/dummy_51/log/.keep",
86
+ "spec/dummy_51/tmp/.keep",
87
+ "spec/dummy_60/.gitignore",
88
+ "spec/dummy_60/.ruby-version",
89
+ "spec/dummy_60/app/assets/images/.keep",
90
+ "spec/dummy_60/app/controllers/concerns/.keep",
91
+ "spec/dummy_60/app/models/concerns/.keep",
92
+ "spec/dummy_60/lib/assets/.keep",
93
+ "spec/dummy_60/lib/tasks/.keep",
94
+ "spec/dummy_60/log/.keep",
95
+ "spec/dummy_60/tmp/.keep"
60
96
  ]
61
- s.homepage = "http://github.com/Sharagoz/rails_exception_handler"
62
- s.licenses = ["MIT"]
63
- s.require_paths = ["lib"]
64
- s.rubygems_version = "1.8.25"
65
- s.summary = "Exception Handling for Rails 3"
97
+ s.homepage = "http://github.com/Sharagoz/rails_exception_handler".freeze
98
+ s.licenses = ["MIT".freeze]
99
+ s.rubygems_version = "3.0.4".freeze
100
+ s.summary = "Highly customizable exception handling for Ruby on Rails".freeze
66
101
 
67
102
  if s.respond_to? :specification_version then
68
- s.specification_version = 3
103
+ s.specification_version = 4
69
104
 
70
105
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
71
- s.add_development_dependency(%q<rails>, ["= 4.0.2"])
72
- s.add_development_dependency(%q<rack-test>, ["= 0.6.2"])
73
- s.add_development_dependency(%q<rake>, [">= 0"])
74
- s.add_development_dependency(%q<sqlite3>, [">= 0"])
75
- s.add_development_dependency(%q<pry>, [">= 0"])
76
- s.add_development_dependency(%q<rspec-rails>, [">= 0"])
77
- s.add_development_dependency(%q<jeweler>, [">= 0"])
78
- s.add_development_dependency(%q<rails_exception_handler>, [">= 0"])
106
+ s.add_development_dependency(%q<rails>.freeze, ["= 6.0.0"])
107
+ s.add_development_dependency(%q<rack-test>.freeze, ["= 0.6.3"])
108
+ s.add_development_dependency(%q<sqlite3>.freeze, ["= 1.4.1"])
109
+ s.add_development_dependency(%q<rake>.freeze, [">= 0"])
110
+ s.add_development_dependency(%q<pry>.freeze, [">= 0"])
111
+ s.add_development_dependency(%q<rspec-rails>.freeze, ["= 3.6.0"])
112
+ s.add_development_dependency(%q<jeweler>.freeze, [">= 0"])
113
+ s.add_development_dependency(%q<rails_exception_handler>.freeze, [">= 0"])
79
114
  else
80
- s.add_dependency(%q<rails>, ["= 4.0.2"])
81
- s.add_dependency(%q<rack-test>, ["= 0.6.2"])
82
- s.add_dependency(%q<rake>, [">= 0"])
83
- s.add_dependency(%q<sqlite3>, [">= 0"])
84
- s.add_dependency(%q<pry>, [">= 0"])
85
- s.add_dependency(%q<rspec-rails>, [">= 0"])
86
- s.add_dependency(%q<jeweler>, [">= 0"])
87
- s.add_dependency(%q<rails_exception_handler>, [">= 0"])
115
+ s.add_dependency(%q<rails>.freeze, ["= 6.0.0"])
116
+ s.add_dependency(%q<rack-test>.freeze, ["= 0.6.3"])
117
+ s.add_dependency(%q<sqlite3>.freeze, ["= 1.4.1"])
118
+ s.add_dependency(%q<rake>.freeze, [">= 0"])
119
+ s.add_dependency(%q<pry>.freeze, [">= 0"])
120
+ s.add_dependency(%q<rspec-rails>.freeze, ["= 3.6.0"])
121
+ s.add_dependency(%q<jeweler>.freeze, [">= 0"])
122
+ s.add_dependency(%q<rails_exception_handler>.freeze, [">= 0"])
88
123
  end
89
124
  else
90
- s.add_dependency(%q<rails>, ["= 4.0.2"])
91
- s.add_dependency(%q<rack-test>, ["= 0.6.2"])
92
- s.add_dependency(%q<rake>, [">= 0"])
93
- s.add_dependency(%q<sqlite3>, [">= 0"])
94
- s.add_dependency(%q<pry>, [">= 0"])
95
- s.add_dependency(%q<rspec-rails>, [">= 0"])
96
- s.add_dependency(%q<jeweler>, [">= 0"])
97
- s.add_dependency(%q<rails_exception_handler>, [">= 0"])
125
+ s.add_dependency(%q<rails>.freeze, ["= 6.0.0"])
126
+ s.add_dependency(%q<rack-test>.freeze, ["= 0.6.3"])
127
+ s.add_dependency(%q<sqlite3>.freeze, ["= 1.4.1"])
128
+ s.add_dependency(%q<rake>.freeze, [">= 0"])
129
+ s.add_dependency(%q<pry>.freeze, [">= 0"])
130
+ s.add_dependency(%q<rspec-rails>.freeze, ["= 3.6.0"])
131
+ s.add_dependency(%q<jeweler>.freeze, [">= 0"])
132
+ s.add_dependency(%q<rails_exception_handler>.freeze, [">= 0"])
98
133
  end
99
134
  end
100
135