coaster 1.3.3 → 1.3.7

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
2
  SHA256:
3
- metadata.gz: 33d174be37c41745be18836a83e051931f9c7eff099bc65d4bfbdb292e467732
4
- data.tar.gz: 8c822b6bad5a1d334057a5cd577e8f236b201cfc74cd8ce6bd1c6586190880ab
3
+ metadata.gz: 03f82d0ec684919dbdd18695f9c9b44accf45defa3260b7fcfeaadaf511b5869
4
+ data.tar.gz: 963dd53ba23fe26a009308b6065d25d58ec0a32713980479840f86d4fd71ed71
5
5
  SHA512:
6
- metadata.gz: 58cfb38ecda73be57102b58e19d1badabc1a6ddf87717df4d8e6dc74b918fdf7f4e7d3569cffdb32968c3a5adc79b33930b14e534e6d1176656b22048a7a2951
7
- data.tar.gz: 2886f1c69b87eda652641e8f28e48fb1514c8e8d1fe0d65973a93d63553426ea8dedd6012f27058b483f3ec293233e1468a1c67763a02ac1e0208804b9b1ff80
6
+ metadata.gz: ce52bb11a0aa053e521ff7261b079ae47e424846ecb7937596112cb5ec2a42b56a0f13afddb222a1c1bc333685f94c9fc97478865067fd44b1ce9eb5596515be
7
+ data.tar.gz: 7b6278654542c48270b3c817d1bf15f404da41c0bf36d546f9f7dac2f229a322c119fe0760690acd7011511433808a8fa228e8d62b53300cb21fc0bb9a3af9a9
@@ -0,0 +1,22 @@
1
+ def require_more
2
+ required_file_path = caller[0].split(':', 2).first
3
+ load_name = nil
4
+ load_path_index = $LOAD_PATH.each_with_index do |load_path, ix|
5
+ scanned = required_file_path.scan(/(#{load_path})#{File::SEPARATOR}(.*)/).first
6
+ next false unless scanned
7
+ load_name = scanned[1]
8
+ break ix
9
+ end
10
+
11
+ return false unless load_path_index
12
+
13
+ more_load_paths = $LOAD_PATH.drop(load_path_index + 1)
14
+ more_load_paths.each do |load_path|
15
+ path = File.join(load_path, load_name)
16
+ if File.exists?(path)
17
+ return require_dependency path
18
+ end
19
+ end
20
+
21
+ raise LoadError, "cannot require more -- #{load_name}"
22
+ end
@@ -0,0 +1,69 @@
1
+ class StandardError
2
+ attr_writer :raven
3
+
4
+ alias_method :initialize_original, :initialize
5
+ def initialize(message = nil, cause = $!)
6
+ initialize_original(message, cause)
7
+ @raven = (attributes.delete(:raven) || attributes.delete(:sentry) || {}).with_indifferent_access
8
+ end
9
+
10
+ def raven
11
+ @raven ||= {}.with_indifferent_access
12
+ end
13
+
14
+ def raven_fingerprint
15
+ (fingerprint || Coaster.default_fingerprint).flatten.map do |fp|
16
+ if fp == true || fp == :class
17
+ self.class.name
18
+ elsif fp == :default
19
+ '{{ default }}'
20
+ else
21
+ fp
22
+ end
23
+ end.flatten
24
+ end
25
+
26
+ def notes(options = {})
27
+ opts = options ? options.dup : {}
28
+ extra_opts = opts.slice!(:fingerprint, :tags, :level, :extra)
29
+ opts[:extra] = extra_opts.merge(opts[:extra] || {})
30
+ nt = raven.merge(opts)
31
+
32
+ nt[:tags] ||= (tags && tags.merge(nt[:tags] || {})) || {}
33
+ nt[:tags] = nt[:tags].merge(environment: Rails.env) if defined?(Rails)
34
+ nt[:level] ||= self.level
35
+ nt[:extra] = attributes.merge(nt[:extra])
36
+ nt
37
+ end
38
+
39
+ def capture(options = {})
40
+ return if options.key?(:report) && !options[:report]
41
+ return unless report?
42
+ nt = notes(options)
43
+ Sentry.capture_exception(self, level: nt[:level]) do |scope|
44
+ scope.user.merge!(nt[:user] || {})
45
+ scope.tags.merge!(nt[:tags])
46
+ scope.extra.merge!(nt[:extra])
47
+ scope.fingerprint = raven_fingerprint
48
+ end
49
+ rescue => e
50
+ msg = "#{e.class.name}: #{e.message}"
51
+ msg += "\n\t" + e.backtrace.join("\n\t")
52
+ Sentry.logger.error(msg)
53
+ end
54
+
55
+ # options
56
+ # :logger
57
+ # :cleaner
58
+ # :fingerprint
59
+ # :tags
60
+ # :level
61
+ # :extra
62
+ # :report
63
+ # and others are merged to extra
64
+ alias_method :just_logging, :logging
65
+ def logging(options = {})
66
+ capture(options)
67
+ just_logging(options)
68
+ end
69
+ end
@@ -53,17 +53,23 @@ class StandardError
53
53
  msg = message
54
54
  set_backtrace(message.backtrace)
55
55
  when Hash then
56
+ @coaster = true # coaster 확장을 사용한 에러임을 확인할 수 있음.
56
57
  hash = message.with_indifferent_access rescue message
57
58
  msg = hash.delete(:m)
58
59
  msg = hash.delete(:msg) || msg
59
60
  msg = hash.delete(:message) || msg
60
61
  hash[:description] ||= hash.delete(:desc) if hash[:desc].present?
61
- hash[:dev_message] ||= hash.delete(:dm) if hash[:dm].present?
62
62
  @fingerprint = hash.delete(:fingerprint) || hash.delete(:fingerprints)
63
63
  @tags = hash.delete(:tags) || hash.delete(:tag)
64
64
  @level = hash.delete(:level) || hash.delete(:severity) || @level
65
65
  @tkey = hash.delete(:tkey)
66
66
  @attributes.merge!(hash)
67
+ if @attributes[:description] == :translate
68
+ @attributes.delete(:description)
69
+ @attributes[:description] = _translate
70
+ end
71
+ msg = "#{_translate} (#{msg || self.class.name})"
72
+ msg = "#{msg} {#{cause.message}}" if cause
67
73
  when String then
68
74
  msg = message
69
75
  when FalseClass, NilClass then
@@ -74,7 +80,7 @@ class StandardError
74
80
 
75
81
  @fingerprint = [] unless @fingerprint.is_a?(Array)
76
82
  @tags = {} unless @tags.is_a?(Hash)
77
- msg = cause.message if msg.blank? && cause
83
+ msg = "{#{cause.message}}" if msg.blank? && cause
78
84
  super(msg)
79
85
  end
80
86
 
@@ -118,8 +124,6 @@ class StandardError
118
124
  # error message is not user friendly in many cases.
119
125
  def description; attributes[:description] || attributes[:desc] end
120
126
  alias_method :desc, :description
121
- def dev_message; attributes[:dev_message] end
122
- alias_method :dm, :dev_message
123
127
 
124
128
  def _translate(*args)
125
129
  return description if description.present?
@@ -132,9 +136,9 @@ class StandardError
132
136
 
133
137
  # user friendly message, for overid
134
138
  def user_message
135
- return description if description.present?
136
- return _translate if tkey.present?
137
- "#{_translate} (#{to_origin_s})"
139
+ return _translate if description.present? || tkey.present?
140
+ return "#{_translate} (#{message})" unless defined?(@coaster)
141
+ message
138
142
  end
139
143
 
140
144
  # another user friendly messages
@@ -144,15 +148,6 @@ class StandardError
144
148
  attributes[:descriptions]
145
149
  end
146
150
 
147
- # https://github.com/getsentry/sentry-ruby/blob/fbbc7a51ed10684d0e8b7bd9d2a1b65a7351c9ef/lib/raven/event.rb#L162
148
- # sentry message use `to_s` method
149
- # https://ruby-doc.org/core-2.5.1/Exception.html#method-i-to_s
150
- alias to_origin_s to_s
151
-
152
- def to_s
153
- "#{_translate} (#{dev_message || to_origin_s})"
154
- end
155
-
156
151
  def to_hash
157
152
  hash = attributes.merge(
158
153
  type: self.class.name, status: status,
@@ -176,7 +171,7 @@ class StandardError
176
171
  lg = "[#{self.class.name}] status:#{status}"
177
172
  lg += "\n\tMESSAGE: #{safe_message.gsub(/\n/, "\n\t\t")}"
178
173
  instance_variables.each do |var|
179
- if var.to_s.start_with?('@_')
174
+ if var.to_s.start_with?('@_') || var.to_s == '@coaster'
180
175
  next
181
176
  elsif var.to_s == '@spell_checker'
182
177
  next
@@ -1,3 +1,4 @@
1
+ require_relative 'core_ext/require_more'
1
2
  require_relative 'core_ext/array'
2
3
  require_relative 'core_ext/date'
3
4
  require_relative 'core_ext/month'
@@ -1,3 +1,3 @@
1
1
  module Coaster
2
- VERSION = '1.3.3'
2
+ VERSION = '1.3.7'
3
3
  end
@@ -22,8 +22,8 @@ module Coaster
22
22
 
23
23
  def test_standard_messages
24
24
  e = StandardError.new('developer message')
25
- assert_equal "standard error translation (developer message)", e.to_s
26
- assert_equal "standard error translation (developer message)", e.message
25
+ assert_equal "developer message", e.to_s
26
+ assert_equal "developer message", e.message
27
27
  assert_nil e.description
28
28
  assert_nil e.desc
29
29
  assert_equal 'standard error translation', e._translate
@@ -41,8 +41,8 @@ module Coaster
41
41
 
42
42
  def test_no_translation_class
43
43
  e = UntitledError.new('developer message')
44
- assert_equal "standard error translation (developer message)", e.to_s
45
- assert_equal "standard error translation (developer message)", e.message
44
+ assert_equal "developer message", e.to_s
45
+ assert_equal "developer message", e.message
46
46
  assert_nil e.description
47
47
  assert_nil e.desc
48
48
  assert_equal 'standard error translation', e._translate
@@ -68,8 +68,8 @@ module Coaster
68
68
 
69
69
  def test_with_translation_class
70
70
  e = SampleError.new
71
- assert_equal "Test sample error (Coaster::TestStandardError::SampleError)", e.to_s
72
- assert_equal "Test sample error (Coaster::TestStandardError::SampleError)", e.message
71
+ assert_equal "Coaster::TestStandardError::SampleError", e.to_s
72
+ assert_equal "Coaster::TestStandardError::SampleError", e.message
73
73
  assert_nil e.description
74
74
  assert_nil e.desc
75
75
  assert_equal 'Test sample error', e._translate
@@ -84,21 +84,36 @@ module Coaster
84
84
  assert_equal 'Test sample error (Coaster::TestStandardError::SampleError)', e.user_message
85
85
  assert_equal 'Test this title', e.title
86
86
  e = SampleError.new('developer message')
87
- assert_equal "Test sample error (developer message)", e.to_s
88
- assert_equal "Test sample error (developer message)", e.message
87
+ assert_equal "developer message", e.to_s
88
+ assert_equal "developer message", e.message
89
89
  assert_nil e.description
90
90
  assert_nil e.desc
91
91
  assert_equal 'Test sample error', e._translate
92
92
  assert_equal 'Test sample error (developer message)', e.user_message
93
93
  assert_equal 'Test this title', e.title
94
- e = SampleError.new(dm: 'developer message')
94
+ e = SampleError.new(desc: 'user message')
95
+ assert_equal "user message (Coaster::TestStandardError::SampleError)", e.to_s
96
+ assert_equal "user message (Coaster::TestStandardError::SampleError)", e.message
97
+ assert_equal 'user message', e.description
98
+ assert_equal 'user message', e.desc
99
+ assert_equal 'user message', e._translate
100
+ assert_equal 'user message', e.user_message
101
+ assert_equal 'Test this title', e.title
102
+ e = SampleError.new(m: 'developer message', desc: :translate)
95
103
  assert_equal "Test sample error (developer message)", e.to_s
96
104
  assert_equal "Test sample error (developer message)", e.message
97
- assert_nil e.description
98
- assert_nil e.desc
105
+ assert_equal "Test sample error", e.description
106
+ assert_equal "Test sample error", e.desc
99
107
  assert_equal 'Test sample error', e._translate
100
- assert_equal 'Test sample error (Coaster::TestStandardError::SampleError)', e.user_message
108
+ assert_equal 'Test sample error', e.user_message
101
109
  assert_equal 'Test this title', e.title
110
+ e = SampleError.new(desc: :translate)
111
+ assert_equal "Test sample error (Coaster::TestStandardError::SampleError)", e.to_s
112
+ assert_equal "Test sample error (Coaster::TestStandardError::SampleError)", e.message
113
+ assert_equal "Test sample error", e.description
114
+ assert_equal "Test sample error", e.desc
115
+ assert_equal "Test sample error", e._translate
116
+ assert_equal "Test sample error", e.user_message
102
117
  e = SampleError.new(m: 'developer message', desc: 'user message')
103
118
  assert_equal "user message (developer message)", e.to_s
104
119
  assert_equal "user message (developer message)", e.message
@@ -140,7 +155,7 @@ module Coaster
140
155
  assert_equal 'Coaster::TestStandardError::ExampleError', e.to_hash['type']
141
156
  assert_equal 20, e.to_hash['status']
142
157
  assert_equal 500, e.to_hash['http_status']
143
- assert_equal "Test example error (Test sample error (#{SampleError.name}))", e.to_hash['message']
158
+ assert_equal "Test example error (Coaster::TestStandardError::ExampleError) {Test sample error (Coaster::TestStandardError::SampleError)}", e.to_hash['message']
144
159
  assert_equal 'rams', e.to_hash['cause']['frog']
145
160
  assert_equal 'Coaster::TestStandardError::SampleError', e.to_hash['cause']['type']
146
161
  assert_equal 10, e.to_hash['cause']['status']
@@ -152,9 +167,10 @@ module Coaster
152
167
  begin
153
168
  raise SampleError, {frog: 'rams'}
154
169
  rescue => e
155
- raise ExampleError, {wat: 'cha'}
170
+ raise ExampleError, {m: 'abc', wat: 'cha'}
156
171
  end
157
172
  rescue => e
173
+ assert_equal 'Test example error (abc) {Test sample error (Coaster::TestStandardError::SampleError)}', e.message
158
174
  assert_equal 'rams', e.cause.attr['frog']
159
175
  assert_equal 'rams', e.attr['frog']
160
176
  assert_equal 'cha', e.attr['wat']
@@ -169,7 +185,7 @@ module Coaster
169
185
  rescue => e
170
186
  detail = <<-LOG
171
187
  [Coaster::TestStandardError::ExampleError] status:20
172
- MESSAGE: Test example error (Test sample error (Coaster::TestStandardError::SampleError))
188
+ MESSAGE: Test example error (Coaster::TestStandardError::ExampleError) {Test sample error (Coaster::TestStandardError::SampleError)}
173
189
  @fingerprint: []
174
190
  @tags: {}
175
191
  @level: \"error\"
@@ -226,7 +242,7 @@ LOG
226
242
  begin
227
243
  root_cause_sample3
228
244
  rescue => e
229
- assert_equal "standard error translation (a)", e.root_cause.message
245
+ assert_equal "a", e.root_cause.message
230
246
  end
231
247
  end
232
248
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coaster
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.3
4
+ version: 1.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - buzz jung
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-14 00:00:00.000000000 Z
11
+ date: 2021-11-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: i18n
@@ -152,8 +152,10 @@ files:
152
152
  - lib/coaster/core_ext/date.rb
153
153
  - lib/coaster/core_ext/month.rb
154
154
  - lib/coaster/core_ext/object_translation.rb
155
+ - lib/coaster/core_ext/require_more.rb
155
156
  - lib/coaster/core_ext/standard_error.rb
156
157
  - lib/coaster/core_ext/standard_error/raven.rb
158
+ - lib/coaster/core_ext/standard_error/sentry.rb
157
159
  - lib/coaster/serialized_properties.rb
158
160
  - lib/coaster/version.rb
159
161
  - test/locales/en.yml
@@ -164,7 +166,7 @@ homepage: http://github.com/frograms/coaster
164
166
  licenses:
165
167
  - MIT
166
168
  metadata: {}
167
- post_install_message:
169
+ post_install_message:
168
170
  rdoc_options: []
169
171
  require_paths:
170
172
  - lib
@@ -179,12 +181,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
179
181
  - !ruby/object:Gem::Version
180
182
  version: '0'
181
183
  requirements: []
182
- rubygems_version: 3.1.2
183
- signing_key:
184
+ rubygems_version: 3.1.6
185
+ signing_key:
184
186
  specification_version: 4
185
187
  summary: A little convenient feature for standard library
186
188
  test_files:
187
- - test/test_object_translation.rb
188
- - test/test_helper.rb
189
- - test/test_standard_error.rb
190
189
  - test/locales/en.yml
190
+ - test/test_standard_error.rb
191
+ - test/test_helper.rb
192
+ - test/test_object_translation.rb