exception_handler 0.4.7 → 0.5.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.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +11 -0
  3. data/.rspec +3 -1
  4. data/Gemfile +1 -1
  5. data/README.md +241 -92
  6. data/app/controllers/exception_handler/exception_controller.rb +13 -44
  7. data/app/helpers/exception_handler/application_helper.rb +47 -23
  8. data/app/models/exception_handler/error.rb +10 -9
  9. data/app/services/exception_handler/exception.rb +34 -0
  10. data/app/views/exception_handler/exception/show.html.erb +9 -6
  11. data/app/views/layouts/exception.html.erb +3 -3
  12. data/config/locales/en.yml +9 -0
  13. data/exception_handler.gemspec +16 -6
  14. data/lib/exception_handler.rb +67 -32
  15. data/lib/exception_handler/config.rb +49 -46
  16. data/lib/exception_handler/parse.rb +17 -17
  17. data/lib/exception_handler/parser/data.rb +57 -51
  18. data/lib/exception_handler/parser/ignore.rb +23 -23
  19. data/lib/exception_handler/version.rb +1 -1
  20. data/lib/generators/exception_handler/migration_generator.rb +17 -17
  21. data/lib/generators/exception_handler/views_generator.rb +27 -27
  22. data/spec/database.yml +3 -0
  23. data/spec/dummy/Rakefile +6 -0
  24. data/spec/dummy/app/assets/config/manifest.js +4 -0
  25. data/spec/dummy/app/assets/images/.keep +0 -0
  26. data/spec/dummy/app/assets/javascripts/application.js +13 -0
  27. data/spec/dummy/app/assets/javascripts/cable.coffee +11 -0
  28. data/spec/dummy/app/assets/javascripts/channels/.keep +0 -0
  29. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  30. data/spec/dummy/app/channels/application_cable/channel.rb +5 -0
  31. data/spec/dummy/app/channels/application_cable/connection.rb +5 -0
  32. data/spec/dummy/app/controllers/application_controller.rb +5 -0
  33. data/spec/dummy/app/controllers/concerns/.keep +0 -0
  34. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  35. data/spec/dummy/app/jobs/application_job.rb +2 -0
  36. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  37. data/spec/dummy/app/models/application_record.rb +3 -0
  38. data/spec/dummy/app/models/concerns/.keep +0 -0
  39. data/spec/dummy/app/views/layouts/application.html.erb +15 -0
  40. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  41. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  42. data/spec/dummy/bin/bundle +3 -0
  43. data/spec/dummy/bin/rails +4 -0
  44. data/spec/dummy/bin/rake +4 -0
  45. data/spec/dummy/bin/setup +34 -0
  46. data/spec/dummy/bin/update +29 -0
  47. data/spec/dummy/config.ru +8 -0
  48. data/spec/dummy/config/application.rb +21 -0
  49. data/spec/dummy/config/boot.rb +5 -0
  50. data/spec/dummy/config/cable.yml +10 -0
  51. data/spec/dummy/config/database.yml +25 -0
  52. data/spec/dummy/config/environment.rb +5 -0
  53. data/spec/dummy/config/environments/development.rb +62 -0
  54. data/spec/dummy/config/environments/production.rb +87 -0
  55. data/spec/dummy/config/environments/test.rb +42 -0
  56. data/spec/dummy/config/initializers/active_record_belongs_to_required_by_default.rb +6 -0
  57. data/spec/dummy/config/initializers/application_controller_renderer.rb +6 -0
  58. data/spec/dummy/config/initializers/assets.rb +11 -0
  59. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  60. data/spec/dummy/config/initializers/callback_terminator.rb +6 -0
  61. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  62. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  63. data/spec/dummy/config/initializers/inflections.rb +16 -0
  64. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  65. data/spec/dummy/config/initializers/per_form_csrf_tokens.rb +4 -0
  66. data/spec/dummy/config/initializers/request_forgery_protection.rb +4 -0
  67. data/spec/dummy/config/initializers/session_store.rb +3 -0
  68. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  69. data/spec/dummy/config/locales/en.yml +23 -0
  70. data/spec/dummy/config/puma.rb +47 -0
  71. data/spec/dummy/config/routes.rb +6 -0
  72. data/spec/dummy/config/secrets.yml +22 -0
  73. data/spec/dummy/lib/assets/.keep +0 -0
  74. data/spec/dummy/log/.keep +0 -0
  75. data/spec/dummy/public/404.html +67 -0
  76. data/spec/dummy/public/422.html +67 -0
  77. data/spec/dummy/public/500.html +66 -0
  78. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  79. data/spec/dummy/public/apple-touch-icon.png +0 -0
  80. data/spec/dummy/public/favicon.ico +0 -0
  81. data/spec/exception_handler.rb +22 -0
  82. data/spec/helpers/exception_handler/application_helper_spec.rb +42 -0
  83. data/spec/spec_helper.rb +28 -9
  84. metadata +102 -39
  85. data/readme/400.jpg +0 -0
  86. data/readme/500.jpg +0 -0
  87. data/readme/application_controller.jpg +0 -0
  88. data/readme/config.jpg +0 -0
  89. data/readme/db.jpg +0 -0
  90. data/readme/db_edit.jpg +0 -0
  91. data/readme/dev.jpg +0 -0
  92. data/readme/exception_controller.jpg +0 -0
  93. data/readme/exceptions_app.png +0 -0
  94. data/readme/layout.jpg +0 -0
  95. data/readme/parser.jpg +0 -0
  96. data/readme/rubygems.jpg +0 -0
  97. data/readme/source/screen.psd +0 -0
  98. data/readme/source/subtitle.psd +0 -0
  99. data/readme/source/title.psd +0 -0
  100. data/readme/subtitle.jpg +0 -0
  101. data/readme/title.jpg +0 -0
  102. data/readme/titles/bugs.png +0 -0
  103. data/readme/titles/contents.png +0 -0
  104. data/readme/titles/contribution.png +0 -0
  105. data/readme/titles/custom_error_pages.png +0 -0
  106. data/readme/titles/support.png +0 -0
  107. data/readme/titles/testing.png +0 -0
  108. data/readme/titles/title.psd +0 -0
  109. data/readme/view.jpg +0 -0
@@ -7,59 +7,62 @@
7
7
  ###########################################
8
8
 
9
9
  module ExceptionHandler
10
- class Config
10
+ class Config
11
11
 
12
- #Instace Objects
13
- attr_accessor :db, :email, :social, :layouts
12
+ #Instace Objects
13
+ attr_accessor :dev, :db, :email, :social, :layouts
14
14
 
15
- ###########################################
15
+ ###########################################
16
16
 
17
- #Init
18
- def initialize values
19
- defaults = values.present? ? Config::DEFAULTS.deep_merge!(values) : Config::DEFAULTS
20
- defaults.each do |k,v|
21
- instance_variable_set("@#{k}",v) #-> http://apidock.com/ruby/Object/instance_variable_set
22
- end
23
- end
17
+ #Init
18
+ def initialize values=nil
19
+ defaults = values.present? ? Config::DEFAULTS.deep_merge!(values) : Config::DEFAULTS
20
+ defaults.each do |k,v|
21
+ instance_variable_set("@#{k}",v) #-> http://apidock.com/ruby/Object/instance_variable_set
22
+ end
23
+ end
24
24
 
25
- # INSTANCE METHODS #
25
+ # INSTANCE METHODS #
26
26
 
27
- #DB
28
- def db
29
- @db == true ? Config::TABLE_NAME : @db
30
- end
27
+ #DB
28
+ def db
29
+ @db == true ? Config::TABLE_NAME : @db
30
+ end
31
31
 
32
- ###########################################
32
+ ###########################################
33
33
 
34
- #Default Table Name
35
- # Has to be "errors" because "exceptions" is a reserved word
36
- TABLE_NAME = :errors
34
+ #Default Table Name
35
+ # Has to be "errors" because "exceptions" is a reserved word
36
+ TABLE_NAME = :errors
37
37
 
38
- # Defaults
39
- # http://stackoverflow.com/a/8917301/1143732
40
- DEFAULTS = {
41
- db: false, #-> defaults to :errors if true, else use :table_name
42
- email: false, #-> need to integrate
43
- social: {
44
- :facebook => 'frontline.utilities',
45
- :twitter => 'frontlineutils',
46
- :youtube => 'frontlineutils',
47
- :linkedin => 'frontline-utilities',
48
- :fusion => 'frontlineutils',
49
- :url => {
50
- :facebook => 'https://facebook.com',
51
- :twitter => 'http://twitter.com',
52
- :youtube => 'https://youtube.com/user',
53
- :linkedin => 'https://linkedin.com/company',
54
- :fusion => 'https://frontlinefusion.com',
55
- },
56
- },
57
- layouts: {
58
- '400' => nil,
59
- '404' => nil, #-> 404 Callback (needs improving big time) Use the following: '404' => <<-EOF redirect_to root_url, notice: "Hello" EOF
60
- '500' => 'exception'
61
- },
62
- }
38
+ # Defaults
39
+ # http://stackoverflow.com/a/8917301/1143732
40
+ DEFAULTS = {
41
+ dev: false, #-> defaults to "false" for dev mode
42
+ db: false, #-> defaults to :errors if true, else use "table_name" / :table_name
43
+ email: false, #-> need to integrate
44
+ social: {
45
+ :facebook => 'frontline.utilities',
46
+ :twitter => 'frontlineutils',
47
+ :youtube => 'frontlineutils',
48
+ :linkedin => 'frontline-utilities',
49
+ :fusion => 'frontlineutils',
50
+ :url => {
51
+ :facebook => 'https://facebook.com',
52
+ :twitter => 'http://twitter.com',
53
+ :youtube => 'https://youtube.com/user',
54
+ :linkedin => 'https://linkedin.com/company',
55
+ :fusion => 'https://frontlinefusion.com',
56
+ },
57
+ },
58
+ layouts: {
59
+ '404' => nil, #-> 404 Callback (needs improving big time) Use the following: '404' => <<-EOF redirect_to root_url, notice: "Hello" EOF
60
+ '400' => nil, #-> layout for 400 error code (404 should only be used as response)
61
+ '500' => 'exception'
62
+ },
63
+ }
63
64
 
64
- end
65
+ ###########################################
66
+
67
+ end
65
68
  end
@@ -1,23 +1,23 @@
1
1
  module ExceptionHandler
2
- class Parse
2
+ class Parse
3
3
 
4
- # Init
5
- def initialize(app)
6
- @app = app
7
- end
4
+ # Init
5
+ def initialize(app)
6
+ @app = app
7
+ end
8
8
 
9
- #Exception
10
- def call(env)
11
- @app.call(env)
9
+ #Exception
10
+ def call(env)
11
+ @app.call(env)
12
12
 
13
- rescue Exception => exception
14
- request = ActionDispatch::Request.new(env)
15
- controller = env['action_controller.instance']
16
- ignore = ExceptionHandler::Parser::Ignore.new(exception, request).match?
13
+ rescue Exception => exception
14
+ request = ActionDispatch::Request.new(env)
15
+ controller = request.env['action_controller.instance']
16
+ ignore = ExceptionHandler::Parser::Ignore.new(exception, request).match?
17
17
 
18
- ExceptionHandler::Parser::Data.new(exception, request, controller).save unless ignore
19
- raise exception
20
- end
18
+ ExceptionHandler::Parser::Data.create exception, request, controller unless ignore
19
+ raise exception
20
+ end
21
21
 
22
- end
23
- end
22
+ end
23
+ end
@@ -1,53 +1,59 @@
1
1
  module ExceptionHandler
2
- module Parser
3
- class Data
4
-
5
- #Init
6
- def initialize(exception, request, controller)
7
- @exception, @request, @controller, @user = exception, request, controller, user
8
- end
9
-
10
- #Save
11
- def save
12
- #http://blog.habanerohq.com/post/16800611137/selectively-silence-activerecord-logging
13
- message = ""
14
- ActiveRecord::Base.logger.silence do
15
- ExceptionHandler::Error.create info do |error|
16
- message += "\n======================\n"
17
- message += "#{error.class_name}:\n"
18
- message += "\n#{error.message}\n"
19
- message += Rails.backtrace_cleaner.clean(error.trace.split("\n")).join("\n")
20
- message += "\n======================\n"
21
- end
22
- end
23
- Rails.logger.fatal message unless message.blank?
24
- end
25
-
26
- private
27
-
28
- #User
29
- def user
30
- @controller.send(:current_user) if @controller.respond_to?(:current_user)
31
- end
32
-
33
- #Info
34
- def info
35
- info = {
36
- class_name: @exception.class.to_s,
37
- message: @exception.message.to_s,
38
- trace: @exception.backtrace.join("\n"),
39
- target_url: @request.url,
40
- referer_url: @request.referer,
41
- params: @request.params.inspect,
42
- user_agent: @request.user_agent
43
- }
44
- if @user && @user.respond_to(:id)
45
- info[:usable_type] = @user.model_name.human
46
- info[:usable_id] = @user.id
47
- end
48
- return info
49
- end
50
-
51
- end
52
- end
2
+ module Parser
3
+ class Data
4
+
5
+ # Data
6
+ attr_reader :exception, :request, :controller, :user
7
+
8
+ #Create
9
+ class << self
10
+ def create exception, request, controller
11
+
12
+ @exception = exception
13
+ @request = request
14
+ @controller = controller
15
+
16
+ #http://blog.habanerohq.com/post/16800611137/selectively-silence-activerecord-logging
17
+ message = ""
18
+ Rails.logger.silence do #-> stops Error.create from showing output
19
+ ExceptionHandler::Error.create info do |error|
20
+ message += "\n======================\n"
21
+ message += "#{error.class_name}:\n"
22
+ message += "\n#{error.message}\n"
23
+ message += Rails.backtrace_cleaner.clean(error.trace.split("\n")).join("\n")
24
+ message += "\n======================\n"
25
+ end
26
+ end
27
+ Rails.logger.fatal message unless message.blank?
28
+
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ #User
35
+ def user
36
+ @controller.send(:current_user) if @controller.respond_to?(:current_user)
37
+ end
38
+
39
+ #Info
40
+ def info
41
+ info = {
42
+ class_name: @exception.class.to_s,
43
+ message: @exception.message.to_s,
44
+ trace: @exception.backtrace.join("\n"),
45
+ target_url: @request.url,
46
+ referer_url: @request.referer,
47
+ params: @request.params.inspect,
48
+ user_agent: @request.user_agent
49
+ }
50
+ if @user && @user.respond_to(:id)
51
+ info[:usable_type] = @user.model_name.human
52
+ info[:usable_id] = @user.id
53
+ end
54
+ info
55
+ end
56
+
57
+ end
58
+ end
53
59
  end
@@ -1,32 +1,32 @@
1
1
  module ExceptionHandler
2
- module Parser
3
- class Ignore
2
+ module Parser
3
+ class Ignore
4
4
 
5
- #Init
6
- def initialize(exception, request)
7
- @exception, @request = exception, request
8
- end
5
+ #Init
6
+ def initialize(exception, request)
7
+ @exception, @request = exception, request
8
+ end
9
9
 
10
- #Matches?
11
- def match?
12
- return true if errors.include?(@exception.class) && @request.referer.blank?
13
- return true if @request.user_agent =~ bots
14
- end
10
+ #Matches?
11
+ def match?
12
+ return true if errors.include?(@exception.class) && @request.referer.blank?
13
+ return true if @request.user_agent =~ bots
14
+ end
15
15
 
16
- private
16
+ private
17
17
 
18
- #Has to be instance vars for env to handle ActionController::RoutingError constant etc
18
+ #Has to be instance vars for env to handle ActionController::RoutingError constant etc
19
19
 
20
- #Errors
21
- def errors #-> http://ruby-doc.org/core-2.2.0/Array.html#class-Array-label-Creating+Arrays
22
- [ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound]
23
- end
20
+ #Errors
21
+ def errors #-> http://ruby-doc.org/core-2.2.0/Array.html#class-Array-label-Creating+Arrays
22
+ [ActionController::RoutingError, AbstractController::ActionNotFound, ActiveRecord::RecordNotFound]
23
+ end
24
24
 
25
- #Bots
26
- def bots
27
- Regexp.new %w(Baidu Gigabot Googlebot libwww-per lwp-trivial msnbot SiteUptime Slurp Wordpress ZIBB ZyBorg Yandex Jyxobot Huaweisymantecspider ApptusBot).join("|"), Regexp::IGNORECASE
28
- end
25
+ #Bots
26
+ def bots
27
+ Regexp.new %w(Baidu Gigabot Googlebot libwww-per lwp-trivial msnbot SiteUptime Slurp Wordpress ZIBB ZyBorg Yandex Jyxobot Huaweisymantecspider ApptusBot).join("|"), Regexp::IGNORECASE
28
+ end
29
29
 
30
- end
31
- end
30
+ end
31
+ end
32
32
  end
@@ -1,3 +1,3 @@
1
1
  module ExceptionHandler
2
- VERSION = "0.4.7"
2
+ VERSION = "0.5.1"
3
3
  end
@@ -10,28 +10,28 @@ require 'rails/generators/active_record'
10
10
  module ExceptionHandler
11
11
  class MigrationGenerator < ActiveRecord::Generators::Base
12
12
 
13
- #Name - from http://old.thoughtsincomputation.com/posts/cgfr3-part-3-adding-a-generator
14
- argument :name, default: "migration"
13
+ #Name - from http://old.thoughtsincomputation.com/posts/cgfr3-part-3-adding-a-generator
14
+ argument :name, default: "migration"
15
15
 
16
- #Source of Migrations
17
- source_root File.expand_path("../../templates", __FILE__)
16
+ #Source of Migrations
17
+ source_root File.expand_path("../../templates", __FILE__)
18
18
 
19
- ###########################################
19
+ ###########################################
20
20
 
21
- #Table Name - false = off, true = errors, value = value
22
- #Always outputs string for some reason...
23
- def table_name
24
- ExceptionHandler.config.db
25
- end
21
+ #Table Name - false = off, true = errors, value = value
22
+ #Always outputs string for some reason...
23
+ def table_name
24
+ ExceptionHandler.config.db
25
+ end
26
26
 
27
- ###########################################
27
+ ###########################################
28
28
 
29
- #Create
30
- def create_errors_migration
31
- migration_template "migration.rb.erb", "db/migrate/create_errors.rb"
32
- end
29
+ #Create
30
+ def create_errors_migration
31
+ migration_template "migration.rb.erb", "db/migrate/create_errors.rb"
32
+ end
33
33
 
34
- ###########################################
34
+ ###########################################
35
35
 
36
- end
36
+ end
37
37
  end
@@ -1,42 +1,42 @@
1
1
  module ExceptionHandler
2
- class ViewsGenerator < Rails::Generators::Base
2
+ class ViewsGenerator < Rails::Generators::Base
3
3
 
4
- #Views
5
- @@views = %w(views controllers helpers models assets)
4
+ #Views
5
+ @@views = %w(views controllers helpers models assets)
6
6
 
7
- #Options
8
- class_option :files, aliases: "-v", default: @@views, type: :array, desc: "Select file types (views, models, controllers, assets)"
7
+ #Options
8
+ class_option :files, aliases: "-v", default: @@views, type: :array, desc: "Select file types (views, models, controllers, assets)"
9
9
 
10
- #Needed to reference files
11
- source_root File.expand_path("../../../../app", __FILE__)
10
+ #Needed to reference files
11
+ source_root File.expand_path("../../../../app", __FILE__)
12
12
 
13
- ###########################################
13
+ ###########################################
14
14
 
15
- #Files
16
- def create_files
17
- generate_files options.files
18
- end
15
+ #Files
16
+ def create_files
17
+ generate_files options.files
18
+ end
19
19
 
20
- ###########################################
20
+ ###########################################
21
21
 
22
- protected
22
+ protected
23
23
 
24
- #File Generator
25
- def generate_files args
24
+ #File Generator
25
+ def generate_files args
26
26
 
27
- #Valid?
28
- return raise args.inspect unless args.nil? || (args-@@views).empty?
27
+ #Valid?
28
+ return raise args.inspect unless args.nil? || (args-@@views).empty?
29
29
 
30
- #Types
31
- for arg in args do
32
- directory arg, "app/#{arg}"
33
- end
30
+ #Types
31
+ for arg in args do
32
+ directory arg, "app/#{arg}"
33
+ end
34
34
 
35
- #Success
36
- puts "Files transferred successfully"
37
- end
35
+ #Success
36
+ puts "Files transferred successfully"
37
+ end
38
38
 
39
- ###########################################
39
+ ###########################################
40
40
 
41
- end
41
+ end
42
42
  end
@@ -0,0 +1,3 @@
1
+ test:
2
+ adapter: sqlite3
3
+ database: ":memory:" #-> https://github.com/thoughtbot/paperclip/blob/master/spec/database.yml
@@ -0,0 +1,6 @@
1
+ # Add your own tasks in files placed in lib/tasks ending in .rake,
2
+ # for example lib/tasks/capistrano.rake, and they will automatically be available to Rake.
3
+
4
+ require File.expand_path('../config/application', __FILE__)
5
+
6
+ Rails.application.load_tasks