moromi-error 0.2.0 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3b3488c51946c8ca81848716ba4a10bb6e04143f
4
- data.tar.gz: a134a2a13ba6306c7524ede717a153db476979da
2
+ SHA256:
3
+ metadata.gz: 832c6cfe1cf0f2b4b4bf3986da115b1131a81fd3beedec14d282c0f29dfe8540
4
+ data.tar.gz: 0e1ced5d0279108a6e504087b836ee1591914eee2d812091a4e192fb83d00256
5
5
  SHA512:
6
- metadata.gz: 41b6e64b0dacb938aff65776baea13db6b1de7eb209104823bd1498d6a58368984c0e8c01a2140af38d47c16d50d6552f3978c8c83420034ba88494ba8dd8a63
7
- data.tar.gz: 6c5f2fccb3d3755bfc22af75d903e15afcaa1fd720ed4666618817f27e6d6d5592dfe453885d71a9aeacbf57af8e66698a0d14f520ce95c38d942d00f35b39b1
6
+ metadata.gz: 876be6091b110ac574c7e8757ce37f8da74d73419b07bd1e292511cea14bbc42cc4971299382b0dee9f611e9b01eca5fe08210f9f1a2153ad8fca2f64cb19130
7
+ data.tar.gz: f465b512ed31e6fa28a3714a1f21cf8c1ccacbf5e6202fb837c3382fc75460d5035fe3228e04348aff582e204eb658eb3cf72349769c6411864cb7e53d21a429
@@ -0,0 +1,23 @@
1
+ name: Ruby
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ strategy:
8
+ fail-fast: false
9
+ matrix:
10
+ os: [ubuntu-latest]
11
+ ruby: [2.7, 3.0]
12
+ runs-on: ${{ matrix.os }}
13
+ steps:
14
+ - uses: actions/checkout@v2
15
+ - uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: ${{ matrix.ruby }}
18
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
19
+ - run: |
20
+ gem install bundler
21
+ bundle config path vendor/bundle
22
+ bundle install --jobs 4 --retry 3
23
+ bundle exec rspec
data/.gitignore CHANGED
@@ -7,5 +7,6 @@ spec/dummy/log/*.log
7
7
  spec/dummy/tmp/
8
8
 
9
9
  vendor/bundle
10
+ vendor/bin
10
11
  Gemfile.lock
11
12
 
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # Moromi::Error
2
2
 
3
3
  [![Latest Version](https://img.shields.io/gem/v/moromi-error.svg)](http://rubygems.org/gems/moromi-error)
4
- [![Circle CI](https://circleci.com/gh/moromi/moromi-error.svg?style=svg)](https://circleci.com/gh/moromi/moromi-error)
5
-
4
+ [![Build Status](https://github.com/moromi/moromi-error/workflows/Ruby/badge.svg)](https://github.com/moromi/moromi-error/actions)
6
5
  Error templates.
7
6
 
8
7
  ## Installation
@@ -30,7 +29,6 @@ Or install it yourself as:
30
29
  ```ruby
31
30
  Moromi::Error.configure do |config|
32
31
  config.debug = true
33
- config.store_url = 'https://itunes.apple.com/jp/app/idxxxxxxxxxx'
34
32
  end
35
33
  ```
36
34
 
@@ -55,13 +53,13 @@ it's optional module.
55
53
 
56
54
  ### Copy Template
57
55
 
58
- - jbuilder and erb
56
+ - jb and jbuilder and erb
59
57
 
60
58
  ```ruby
61
59
  bundle exec rails g moromi:error:views -e erb
62
60
  ```
63
61
 
64
- - jbuilder and slim
62
+ - jb and jbuilder and slim
65
63
 
66
64
  ```ruby
67
65
  bundle exec rails g moromi:error:views -e slim
@@ -8,6 +8,8 @@ html lang="ja"
8
8
  body
9
9
  div
10
10
  h1= "#{status} #{title}"
11
+ p= "RequestId: #{request.uuid}"
12
+ p= exception.error_title
11
13
 
12
14
  - unless Rails.env.production?
13
15
  table
@@ -18,8 +20,17 @@ html lang="ja"
18
20
  tr
19
21
  td debug_message
20
22
  td= exception.debug_message
23
+ tr
24
+ td detail_url
25
+ td= exception.detail_url
21
26
 
22
27
  - exception.errors.each do |error|
23
28
  tr
24
29
  td error
25
30
  td= error
31
+
32
+ tr
33
+ td backtrace
34
+ td
35
+ - backtrace = exception.backtrace.presence || exception.original_exception&.backtrace || []
36
+ pre= safe_join(::Rails.backtrace_cleaner.clean(backtrace), '<br />'.html_safe)
@@ -0,0 +1,9 @@
1
+ {
2
+ status: status,
3
+ title: title,
4
+ code: exception.code,
5
+ detail_url: exception.detail_url,
6
+ debug_message: exception.debug_message,
7
+ error_title: exception.error_title,
8
+ errors: exception.errors
9
+ }
@@ -1,5 +1,7 @@
1
1
  json.status status
2
- json.code exception.code
3
2
  json.title title
3
+ json.code exception.code
4
+ json.detail_url exception.detail_url
4
5
  json.debug_message exception.debug_message
6
+ json.error_title exception.error_title
5
7
  json.errors exception.errors
@@ -1,18 +1,20 @@
1
1
  en:
2
2
  strings:
3
3
  moromi-error:
4
- an_error_has_occurred: 'An error has occurred.'
5
- validation_error: 'Validation error.'
6
- not_found: 'Not found.'
7
- permission_denied: 'Permission denied.'
8
- authentication_failed: 'Authentication failed.'
9
- need_force_update: 'Need update.'
4
+ an_error_has_occurred: 'An error has occurred. error_code = %{error_code}'
5
+ validation_error: 'Validation error. error_code = %{error_code}'
6
+ not_found: 'Not found. error_code = %{error_code}'
7
+ permission_denied: 'Permission denied. error_code = %{error_code}'
8
+ authentication_failed: 'Authentication failed. error_code = %{error_code}'
9
+ need_force_update: 'Need update. error_code = %{error_code}'
10
+ too_many_requests: 'Too Many Requests. error_code = %{error_code}'
10
11
  ja:
11
12
  strings:
12
13
  moromi-error:
13
- an_error_has_occurred: 'エラーが発生しました。'
14
- validation_error: '不正な入力です。'
15
- not_found: '見つかりませんでした。'
16
- permission_denied: '権限がありません。'
17
- authentication_failed: '認証に失敗しました。'
18
- need_force_update: '新しいバージョンのアプリがあります。'
14
+ an_error_has_occurred: 'エラーが発生しました。 error_code = %{error_code}'
15
+ validation_error: '不正な入力です。 error_code = %{error_code}'
16
+ not_found: '見つかりませんでした。 error_code = %{error_code}'
17
+ permission_denied: '権限がありません。 error_code = %{error_code}'
18
+ authentication_failed: '認証に失敗しました。 error_code = %{error_code}'
19
+ need_force_update: '新しいバージョンのアプリがあります。 error_code = %{error_code}'
20
+ too_many_requests: '所定の期間内に送信されたリクエスト数が多すぎます。 error_code = %{error_code}'
@@ -16,7 +16,8 @@ rails g moromi:error:views [options]
16
16
  desc ''
17
17
  def copy_or_fetch #:nodoc:
18
18
  copy_html_templates
19
- copy_json_templates
19
+ copy_jbuilder_templates
20
+ copy_jb_templates
20
21
  end
21
22
 
22
23
  private
@@ -28,13 +29,20 @@ rails g moromi:error:views [options]
28
29
  end
29
30
  end
30
31
 
31
- def copy_json_templates
32
+ def copy_jbuilder_templates
32
33
  filename_pattern = File.join self.class.source_root, "*.json.jbuilder"
33
34
  Dir.glob(filename_pattern).map {|f| File.basename f}.each do |f|
34
35
  copy_file f, "app/views/moromi/error/#{f}"
35
36
  end
36
37
  end
37
38
 
39
+ def copy_jb_templates
40
+ filename_pattern = File.join self.class.source_root, "*.json.jb"
41
+ Dir.glob(filename_pattern).map {|f| File.basename f}.each do |f|
42
+ copy_file f, "app/views/moromi/error/#{f}"
43
+ end
44
+ end
45
+
38
46
  def template_engine
39
47
  options[:template_engine]&.to_s&.downcase || 'erb'
40
48
  end
data/lib/moromi/error.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  require 'moromi/error/config'
2
- require 'moromi/error/loggerable'
3
2
  require 'moromi/error/default_logger'
3
+ require 'moromi/error/default_information_builder'
4
4
  require 'moromi/error/engine'
5
5
  require 'moromi/error/errors'
6
6
  require 'moromi/error/renderer'
@@ -16,10 +16,19 @@ module Moromi
16
16
  @config
17
17
  end
18
18
 
19
+ def self.default_severity_mappings
20
+ {
21
+ Moromi::Error::Default => Logger::Severity::DEBUG,
22
+ ActionController::RoutingError => Logger::Severity::WARN
23
+ }
24
+ end
25
+
19
26
  configure do |config|
20
27
  config.debug = false
21
28
  config.logger = Moromi::Error::DefaultLogger.new
22
- config.store_url = ''
29
+ config.severity_mappings = default_severity_mappings
30
+ config.information_builder_klass = Moromi::Error::DefaultInformationBuilder
31
+ config.use_exception_notifier = false
23
32
  end
24
33
  end
25
34
  end
@@ -5,7 +5,9 @@ module Moromi
5
5
 
6
6
  config_accessor :debug
7
7
  config_accessor :logger
8
- config_accessor :store_url
8
+ config_accessor :information_builder_klass
9
+ config_accessor :severity_mappings
10
+ config_accessor :use_exception_notifier
9
11
  end
10
12
  end
11
13
  end
@@ -0,0 +1,41 @@
1
+ require 'moromi/error/information_buildable'
2
+
3
+ module Moromi
4
+ module Error
5
+ class DefaultInformationBuilder
6
+ include ::Moromi::Error::InformationBuildable
7
+
8
+ def initialize(controller)
9
+ @controller = controller
10
+ end
11
+
12
+ def build
13
+ {
14
+ user_id: fetch_user_id(controller),
15
+ url: fetch_url(controller),
16
+ user_agent: fetch_user_agent(controller)
17
+ }
18
+ end
19
+
20
+ private
21
+
22
+ def fetch_user_id(controller)
23
+ controller.respond_to?(:current_user) ? controller.current_user&.id : 0
24
+ rescue
25
+ nil
26
+ end
27
+
28
+ def fetch_url(controller)
29
+ controller.request.try(:url)
30
+ rescue
31
+ nil
32
+ end
33
+
34
+ def fetch_user_agent(controller)
35
+ controller.request.try(:user_agent)
36
+ rescue
37
+ nil
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,15 +1,70 @@
1
+ require 'moromi/error/loggerable'
2
+
1
3
  module Moromi
2
4
  module Error
3
5
  class DefaultLogger
4
- include Loggerable
6
+ include ::Moromi::Error::Loggerable
7
+
8
+ UNKNOWN = 'unknown'.freeze
5
9
 
6
10
  def write(controller, status, title, exception, options, locals)
7
- return if exception.is_a? Moromi::Error::Default
11
+ Moromi::Error.config.severity_mappings.each do |klass, severity|
12
+ if exception.is_a? klass
13
+ message = ([exception.message] + ::Rails.backtrace_cleaner.clean(Array(exception.backtrace).compact)).join('\n')
14
+ Rails.logger.add severity, message
15
+ return
16
+ end
17
+ end
18
+
19
+ Rails.logger.add log_severity(exception), to_ltsv(controller, exception) unless skip?(exception)
20
+ notify_exception(controller, exception)
21
+ rescue => e
22
+ backtrace = ::Rails.backtrace_cleaner.clean(e.backtrace).join("\n").gsub("\n", '\n')
23
+ Rails.logger.error "[#{self.class}#write] #{e.inspect} #{backtrace}"
24
+ end
25
+
26
+ private
27
+
28
+ def to_ltsv(controller, exception)
29
+ backtrace = (exception&.backtrace || []).compact
30
+ information_builder = Moromi::Error.config.information_builder_klass.new(controller)
31
+
32
+ messages = {
33
+ error_class: exception.class,
34
+ message: exception.message,
35
+ errors: fetch_errors(exception).compact.join("\n").gsub("\n", '\n'),
36
+ backtrace: ::Rails.backtrace_cleaner.clean(backtrace).join("\n").gsub("\n", '\n')
37
+ }
38
+ messages.merge!(information_builder.build)
39
+
40
+ messages.map { |k, v| "#{k}:#{v}" }.join("\t")
41
+ rescue
42
+ (exception&.backtrace || []).compact.join("\n").gsub("\n", '\n')
43
+ end
44
+
45
+ def notify_exception(controller, exception)
46
+ return unless defined? ExceptionNotifier
47
+ return unless Moromi::Error.config.use_exception_notifier
48
+
49
+ ExceptionNotifier.notify_exception(exception, env: controller.request.env, data: {method: controller.request.method, url: controller.request.url})
50
+ end
51
+
52
+ def skip?(exception)
53
+ return false unless exception.respond_to?(:skip_logging?)
54
+
55
+ exception.skip_logging?
56
+ end
57
+
58
+ def log_severity(exception)
59
+ return Logger::Severity::ERROR unless exception.respond_to?(:log_severity)
60
+
61
+ exception.log_severity
62
+ end
8
63
 
9
- messages = []
10
- messages << ([exception.inspect] + (exception&.backtrace || [])).compact.join("\n").gsub("\n", '\n')
64
+ def fetch_errors(exception)
65
+ return [exception.inspect] unless exception.respond_to?(:errors)
11
66
 
12
- Rails.logger.error(messages.join(' '))
67
+ exception.errors
13
68
  end
14
69
  end
15
70
  end
@@ -5,34 +5,66 @@ module Moromi::Error
5
5
  DEFAULT_TITLE = 'moromi-error.an_error_has_occurred'
6
6
  DEFAULT_ERRORS = ['moromi-error.an_error_has_occurred']
7
7
 
8
- attr_reader :code
9
- attr_reader :title
10
8
  attr_reader :errors
9
+ attr_reader :debug_message
10
+ attr_reader :log_severity
11
+ attr_accessor :original_exception
12
+ attr_accessor :detail_url
11
13
 
12
14
  # @param [Integer] code
13
- # @param [String] title
15
+ # @param [String] error_title
14
16
  # @param [Array<String>] errors
15
17
  # @param [String] message
16
18
  # @param [String] debug_message
17
- def initialize(code: nil, title: nil, errors: self.class::DEFAULT_ERRORS, message: nil, debug_message: nil)
19
+ # @param [String] detail_url
20
+ # @param [Boolean] skip_logging
21
+ # @param [Integer] log_severity
22
+ def initialize(code: nil, error_title: nil, errors: self.class::DEFAULT_ERRORS, message: nil, debug_message: nil, detail_url: nil, skip_logging: false, log_severity: Logger::Severity::ERROR)
18
23
  super(message)
19
- @code = code || self.class::DEFAULT_CODE
20
- @title = translate(title || self.class::DEFAULT_TITLE)
21
- @errors = Array(errors).map { |error| translate(error) }
24
+ @code = code
25
+ @error_title = error_title
26
+ @errors = errors
22
27
  @debug_message = debug_message if Moromi::Error.config.debug
28
+ @detail_url = detail_url
29
+ @skip_logging = skip_logging
30
+ @log_severity = log_severity
31
+ end
32
+
33
+ # @param [Exception] exception
34
+ # @return [Moromi::Error::Default]
35
+ def self.make(exception)
36
+ return exception if exception.is_a? ::Moromi::Error::Default
37
+
38
+ new(debug_message: exception.try(:message) || '').tap do |e|
39
+ e.original_exception = exception
40
+ end
41
+ end
42
+
43
+ def code
44
+ @code || self.class::DEFAULT_CODE
45
+ end
46
+
47
+ def errors
48
+ Array(@errors).map(&method(:translate))
49
+ end
50
+
51
+ def error_title
52
+ translate(@error_title || self.class::DEFAULT_TITLE)
23
53
  end
24
54
 
25
55
  # @return [String]
26
56
  def debug_message
27
57
  return '' unless Moromi::Error.config.debug
28
- @debug_message || try(:backtrace).try(:first) || ''
58
+
59
+ @debug_message || cleaned_backtrace.first || ''
29
60
  end
30
61
 
31
- # @param [Exception] exception
32
- # @return [Moromi::Error::Default]
33
- def self.make(exception)
34
- return exception if exception.is_a? Default
35
- new(debug_message: exception.message)
62
+ def skip_logging?
63
+ @skip_logging
64
+ end
65
+
66
+ def cleaned_backtrace
67
+ ::Rails.backtrace_cleaner.clean(backtrace || [])
36
68
  end
37
69
 
38
70
  private
@@ -40,7 +72,11 @@ module Moromi::Error
40
72
  # @param [String] key
41
73
  # @return [String]
42
74
  def translate(key)
43
- I18n.translate(key, scope: [:strings], default: key.to_s)
75
+ I18n.t(key, scope: [:strings], default: key.to_s) % translate_params
76
+ end
77
+
78
+ def translate_params
79
+ {error_code: code}
44
80
  end
45
81
  end
46
82
 
@@ -51,13 +87,7 @@ module Moromi::Error
51
87
  # @param [Exception] exception
52
88
  # @return [Moromi::Error::Default]
53
89
  def self.make(exception)
54
- if defined?(ActiveRecord::RecordInvalid) && exception.is_a?(ActiveRecord::RecordInvalid)
55
- return new(debug_message: exception.try(:backtrace), message: exception.message, errors: [exception.message])
56
- end
57
-
58
- if defined?(WeakParameters::ValidationError) && exception.is_a?(WeakParameters::ValidationError)
59
- return new(debug_message: exception.message, message: exception.message)
60
- end
90
+ return new(debug_message: 'ActiveRecord::RecordInvalid', message: exception.message, errors: [exception.message]) if exception.is_a? ActiveRecord::RecordInvalid
61
91
 
62
92
  super(exception)
63
93
  end
@@ -81,7 +111,10 @@ module Moromi::Error
81
111
  class NeedForceUpdate < Default
82
112
  DEFAULT_CODE = 10004
83
113
  DEFAULT_ERRORS = ['moromi-error.need_force_update']
114
+ end
84
115
 
85
- attr_accessor :store_url
116
+ class TooManyRequests < Default
117
+ DEFAULT_CODE = 10005
118
+ DEFAULT_ERRORS = ['moromi-error.too_many_requests']
86
119
  end
87
120
  end
@@ -0,0 +1,13 @@
1
+ module Moromi
2
+ module Error
3
+ module InformationBuildable
4
+ def initialize(controller)
5
+ raise NotImplementedError
6
+ end
7
+
8
+ def build
9
+ raise NotImplementedError
10
+ end
11
+ end
12
+ end
13
+ end
@@ -5,7 +5,6 @@ module Moromi::Error
5
5
 
6
6
  ERROR_TEMPLATES = {
7
7
  default: 'moromi/error/default',
8
- force_update: 'moromi/error/force_update'
9
8
  }.freeze
10
9
 
11
10
  included do
@@ -40,11 +39,23 @@ module Moromi::Error
40
39
  render_error(410, 'Gone', exception, options: options, locals: locals)
41
40
  end
42
41
 
42
+ def render_too_many_requests(exception: Moromi::Error::Default.new, options: nil, locals: {})
43
+ render_error(429, 'Too Many Requests', exception, options: options, locals: locals)
44
+ end
45
+
43
46
  def render_force_update(exception: Moromi::Error::NeedForceUpdate.new, options: nil, locals: {})
44
- options = options || {partial: ERROR_TEMPLATES[:force_update], layout: false}
47
+ options = options || {partial: ERROR_TEMPLATES[:default], layout: false}
45
48
  render_bad_request(exception: exception, options: options, locals: locals)
46
49
  end
47
50
 
51
+ def render_internal_server_error(exception: Moromi::Error::Default.new, options: nil, locals: {})
52
+ render_error(500, 'Internal Server Error', exception, options: options, locals: locals)
53
+ end
54
+
55
+ def render_service_unavailable(exception: Moromi::Error::Default.new, options: nil, locals: {})
56
+ render_error(503, 'Service Unavailable', exception, options: options, locals: locals)
57
+ end
58
+
48
59
  private
49
60
 
50
61
  def render_error(status, title, exception, options: nil, locals: {})
@@ -64,6 +75,8 @@ module Moromi::Error
64
75
  format.html &render_block
65
76
  format.json &render_block
66
77
  end
78
+ rescue ActionController::UnknownFormat
79
+ render status: 406, body: "Not Acceptable"
67
80
  end
68
81
  end
69
82
  end
@@ -4,12 +4,16 @@ module Moromi
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  included do
7
- rescue_from Moromi::Error::Default, with: -> (e) { render_bad_request(exception: e) }
7
+ # 5xx error
8
+ rescue_from Moromi::Error::Default, with: -> (e) { render_internal_server_error(exception: e) }
9
+
10
+ # 4xx error
8
11
  rescue_from Moromi::Error::ValidationError, with: -> (e) { render_bad_request(exception: e) }
9
- rescue_from Moromi::Error::NotFound, with: -> (e) { render_not_found(exception: e) }
10
- rescue_from Moromi::Error::PermissionDenied, with: -> (e) { render_forbidden(exception: e) }
11
12
  rescue_from Moromi::Error::AuthenticationFailed, with: -> (e) { render_unauthorized(exception: e) }
12
- rescue_from Moromi::Error::NeedForceUpdate, with: -> (e) { e.store_url = Moromi::Error.config.store_url; render_force_update(exception: e) }
13
+ rescue_from Moromi::Error::PermissionDenied, with: -> (e) { render_forbidden(exception: e) }
14
+ rescue_from Moromi::Error::NotFound, with: -> (e) { render_not_found(exception: e) }
15
+ rescue_from Moromi::Error::TooManyRequests, with: -> (e) { render_too_many_requests(exception: e) }
16
+ rescue_from Moromi::Error::NeedForceUpdate, with: -> (e) { render_force_update(exception: e) }
13
17
  end
14
18
  end
15
19
  end
@@ -1,5 +1,5 @@
1
1
  module Moromi
2
2
  module Error
3
- VERSION = "0.2.0"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
data/moromi-error.gemspec CHANGED
@@ -19,14 +19,14 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.required_ruby_version = '>= 2.3'
22
+ spec.required_ruby_version = '>= 2.6'
23
23
 
24
- spec.add_dependency 'rails', ['>= 4.2', '< 6']
25
- spec.add_dependency 'jbuilder'
24
+ spec.add_dependency 'rails', ['>= 4.2', '< 6.2']
26
25
 
27
- spec.add_development_dependency "bundler", "~> 1.12"
28
- spec.add_development_dependency "rake", "~> 10.0"
29
- spec.add_development_dependency "rspec", "~> 3.0"
26
+ spec.add_development_dependency "jbuilder"
27
+ spec.add_development_dependency "bundler"
28
+ spec.add_development_dependency "rake"
29
+ spec.add_development_dependency "rspec"
30
30
  spec.add_development_dependency "rspec-rails"
31
31
  spec.add_development_dependency "sqlite3"
32
32
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: moromi-error
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Takahiro Ooishi
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-10-15 00:00:00.000000000 Z
11
+ date: 2021-02-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '4.2'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '6'
22
+ version: '6.2'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: '4.2'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '6'
32
+ version: '6.2'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: jbuilder
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -37,7 +37,7 @@ dependencies:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0'
40
- type: :runtime
40
+ type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
@@ -48,44 +48,44 @@ dependencies:
48
48
  name: bundler
49
49
  requirement: !ruby/object:Gem::Requirement
50
50
  requirements:
51
- - - "~>"
51
+ - - ">="
52
52
  - !ruby/object:Gem::Version
53
- version: '1.12'
53
+ version: '0'
54
54
  type: :development
55
55
  prerelease: false
56
56
  version_requirements: !ruby/object:Gem::Requirement
57
57
  requirements:
58
- - - "~>"
58
+ - - ">="
59
59
  - !ruby/object:Gem::Version
60
- version: '1.12'
60
+ version: '0'
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: rake
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ">="
66
66
  - !ruby/object:Gem::Version
67
- version: '10.0'
67
+ version: '0'
68
68
  type: :development
69
69
  prerelease: false
70
70
  version_requirements: !ruby/object:Gem::Requirement
71
71
  requirements:
72
- - - "~>"
72
+ - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: '10.0'
74
+ version: '0'
75
75
  - !ruby/object:Gem::Dependency
76
76
  name: rspec
77
77
  requirement: !ruby/object:Gem::Requirement
78
78
  requirements:
79
- - - "~>"
79
+ - - ">="
80
80
  - !ruby/object:Gem::Version
81
- version: '3.0'
81
+ version: '0'
82
82
  type: :development
83
83
  prerelease: false
84
84
  version_requirements: !ruby/object:Gem::Requirement
85
85
  requirements:
86
- - - "~>"
86
+ - - ">="
87
87
  - !ruby/object:Gem::Version
88
- version: '3.0'
88
+ version: '0'
89
89
  - !ruby/object:Gem::Dependency
90
90
  name: rspec-rails
91
91
  requirement: !ruby/object:Gem::Requirement
@@ -121,6 +121,7 @@ executables: []
121
121
  extensions: []
122
122
  extra_rdoc_files: []
123
123
  files:
124
+ - ".github/workflows/ruby.yml"
124
125
  - ".gitignore"
125
126
  - ".rspec"
126
127
  - Gemfile
@@ -129,24 +130,33 @@ files:
129
130
  - Rakefile
130
131
  - app/views/moromi/error/_default.html.erb
131
132
  - app/views/moromi/error/_default.html.slim
133
+ - app/views/moromi/error/_default.json.jb
132
134
  - app/views/moromi/error/_default.json.jbuilder
133
- - app/views/moromi/error/_force_update.html.erb
134
- - app/views/moromi/error/_force_update.html.slim
135
- - app/views/moromi/error/_force_update.json.jbuilder
136
135
  - bin/rails
137
- - circle.yml
138
136
  - config/locales/moromi-error.yml
139
137
  - lib/generators/moromi/error/views_generator.rb
140
138
  - lib/moromi/error.rb
141
139
  - lib/moromi/error/config.rb
140
+ - lib/moromi/error/default_information_builder.rb
142
141
  - lib/moromi/error/default_logger.rb
143
142
  - lib/moromi/error/engine.rb
144
143
  - lib/moromi/error/errors.rb
144
+ - lib/moromi/error/information_buildable.rb
145
145
  - lib/moromi/error/loggerable.rb
146
146
  - lib/moromi/error/renderer.rb
147
147
  - lib/moromi/error/rescue.rb
148
148
  - lib/moromi/error/version.rb
149
149
  - moromi-error.gemspec
150
+ - vendor/bin/bundle
151
+ - vendor/bin/htmldiff
152
+ - vendor/bin/ldiff
153
+ - vendor/bin/nokogiri
154
+ - vendor/bin/rackup
155
+ - vendor/bin/rails
156
+ - vendor/bin/rake
157
+ - vendor/bin/rspec
158
+ - vendor/bin/sprockets
159
+ - vendor/bin/thor
150
160
  homepage: https://github.com/moromi/moromi-error
151
161
  licenses:
152
162
  - MIT
@@ -159,15 +169,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
159
169
  requirements:
160
170
  - - ">="
161
171
  - !ruby/object:Gem::Version
162
- version: '2.3'
172
+ version: '2.6'
163
173
  required_rubygems_version: !ruby/object:Gem::Requirement
164
174
  requirements:
165
175
  - - ">="
166
176
  - !ruby/object:Gem::Version
167
177
  version: '0'
168
178
  requirements: []
169
- rubyforge_project:
170
- rubygems_version: 2.5.1
179
+ rubygems_version: 3.0.3
171
180
  signing_key:
172
181
  specification_version: 4
173
182
  summary: Error templates
@@ -1,36 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="ja">
3
- <head>
4
- <meta charset="utf-8" />
5
- <title>Need Force Update</title>
6
- <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport" />
7
- <meta name="robots" content="noindex" />
8
- </head>
9
- <body>
10
- <div>
11
- <h1><%= status %> <%= title %></h1>
12
- <% unless Rails.env.production? %>
13
- <table>
14
- <tbody>
15
- <tr>
16
- <td>code</td>
17
- <td><%= exception.code %></td>
18
- </tr>
19
-
20
- <tr>
21
- <td>debug_message</td>
22
- <td><%= exception.debug_message %></td>
23
- </tr>
24
-
25
- <% exception.errors.each do |error| %>
26
- <tr>
27
- <td>error</td>
28
- <td><%= error %></td>
29
- </tr>
30
- <% end %>
31
- </tbody>
32
- </table>
33
- <% end %>
34
- </div>
35
- </body>
36
- </html>
@@ -1,25 +0,0 @@
1
- doctype html
2
- html lang="ja"
3
- head
4
- meta charset="utf-8"
5
- title Need Force Update
6
- meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
7
- meta name="robots" content="noindex"
8
- body
9
- div
10
- h1= "#{status} #{title}"
11
-
12
- - unless Rails.env.production?
13
- table
14
- tbody
15
- tr
16
- td code
17
- td= exception.code
18
- tr
19
- td debug_message
20
- td= exception.debug_message
21
-
22
- - exception.errors.each do |error|
23
- tr
24
- td error
25
- td= error
@@ -1,6 +0,0 @@
1
- json.status status
2
- json.code exception.code
3
- json.title title
4
- json.store_url exception.store_url
5
- json.debug_message exception.debug_message
6
- json.errors exception.errors
data/circle.yml DELETED
@@ -1,11 +0,0 @@
1
- machine:
2
- ruby:
3
- version:
4
- 2.3.1
5
- dependencies:
6
- cache_directories:
7
- - vendor/bundle
8
- test:
9
- pre:
10
- - cd spec/dummy
11
- - bundle exec rake db:migrate