coaster 1.4.16 → 1.4.18

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d9b06a2cf428c68aaa8d8a990cd3c7a38d33bb2ff6e032d12ee7aeb3e3816cd9
4
- data.tar.gz: 638bf5a8d7a944c671b0b7e10f5308abff516d0b2ed98ac16279201131f394bf
3
+ metadata.gz: 2375ede6caac89a8fc38928222a8d1f69e054623183b5dd58c6b7d32a35568e1
4
+ data.tar.gz: '098118e09439e6aa1f70237cd4464691560d443eb9a196a507756d43a58c220c'
5
5
  SHA512:
6
- metadata.gz: a659d1d247a9294ee83e8a31bb7df3ab536bb043a5880dfebafe0dee3680ebc6edab51ea12c6c3894f2a6cc99af15a2e14a103a236326255d739f82f9ec2935c
7
- data.tar.gz: c2fff3ed081673f46fbb7570f10ef7d080bf2fd35898676d536a373830c38cf8e909e92a73c818226344b6ea0ec8b359987e54f6953ce7444e1e5c692ddc0fe7
6
+ metadata.gz: 39bea4db37ec0d25d6db9693904f16313f357e5c356497e9a1275171c04a722b2eab57c73618618fd65588763b553e7e5900e72d5b9575567b4af5c0d8a82b7e
7
+ data.tar.gz: 5cfc9e5c91546d36721382252b1628bb97ded32882569696eca1435877a0fcc5418df53756c518795922cefc36155fda21db828cc6d4f51ef7607990a9524fb5
@@ -1,12 +1,16 @@
1
1
  class Date
2
- def to_time_range(timezone = nil)
3
- if timezone
4
- timezone = ActiveSupport::TimeZone[timezone] if timezone.is_a?(String)
5
- b_day = in_time_zone(timezone)
6
- b_day...(b_day + 1.day)
7
- else
8
- beginning_of_day...(self + 1.day).beginning_of_day
9
- end
2
+ def to_time_range(timezone = ::Time.zone)
3
+ timezone = ActiveSupport::TimeZone[timezone] if timezone.is_a?(String)
4
+ b_day = in_time_zone(timezone)
5
+ b_day...(b_day + 1.day)
6
+ end
7
+
8
+ def beginning_of_range(timezone = ::Time.zone)
9
+ to_time_range(timezone).begin
10
+ end
11
+
12
+ def end_of_range(timezone = ::Time.zone)
13
+ to_time_range(timezone).end
10
14
  end
11
15
 
12
16
  def prev_specific_date(day_num)
@@ -82,20 +82,37 @@ class Month
82
82
  last_date.day
83
83
  end
84
84
 
85
- def beginning_of_month
86
- first_date.in_time_zone(timezone)
85
+ def _timezone(timezone)
86
+ tz = timezone || self.timezone
87
+ tz = ActiveSupport::TimeZone[tz] if tz.is_a?(String)
88
+ tz
89
+ end
90
+
91
+ def beginning_of_month(timezone = nil)
92
+ tz = _timezone(timezone)
93
+ first_date.in_time_zone(tz)
87
94
  end
88
95
 
89
96
  def end_of_month
90
- last_date.in_time_zone(timezone).end_of_day
97
+ tz = _timezone(timezone)
98
+ last_date.in_time_zone(tz).end_of_day
91
99
  end
92
100
 
93
101
  def date_for_day(number)
94
102
  Date.new(year, month, number)
95
103
  end
96
104
 
97
- def to_time_range
98
- beginning_of_month...(later.beginning_of_month)
105
+ def to_time_range(timezone = nil)
106
+ tz = _timezone(timezone)
107
+ beginning_of_month(tz)...(later.beginning_of_month(tz))
108
+ end
109
+
110
+ def beginning_of_range(timezone = nil)
111
+ to_time_range(timezone).begin
112
+ end
113
+
114
+ def end_of_range(timezone = nil)
115
+ to_time_range(timezone).end
99
116
  end
100
117
 
101
118
  def to_date_range
@@ -1,5 +1,6 @@
1
1
  class StandardError
2
2
  attr_writer :raven
3
+ attr_reader :sentry_event
3
4
 
4
5
  alias_method :initialize_original, :initialize
5
6
  def initialize(message = nil, cause = $!)
@@ -42,7 +43,7 @@ class StandardError
42
43
  return if options.key?(:report) && !options[:report]
43
44
  return unless report?
44
45
  nt = notes(options)
45
- Sentry.capture_exception(self, level: nt[:level]) do |scope|
46
+ @sentry_event = Sentry.capture_exception(self, level: nt[:level]) do |scope|
46
47
  scope.user.merge!(nt[:user] || {})
47
48
  scope.tags.merge!(nt[:tags])
48
49
  scope.extra.merge!(nt[:extra])
@@ -54,6 +55,10 @@ class StandardError
54
55
  Sentry.logger.error(msg)
55
56
  end
56
57
 
58
+ def sentry_event_id
59
+ @sentry_event&.event_id
60
+ end
61
+
57
62
  # options
58
63
  # :logger
59
64
  # :cleaner
@@ -0,0 +1,15 @@
1
+ class Time
2
+ def to_time_range(timezone = ::Time.zone)
3
+ timezone = ActiveSupport::TimeZone[timezone] if timezone.is_a?(String)
4
+ s = self.in_time_zone(timezone).change(usec: 0)
5
+ s...(s + 1.second)
6
+ end
7
+
8
+ def beginning_of_range(timezone = ::Time.zone)
9
+ to_time_range(timezone).begin
10
+ end
11
+
12
+ def end_of_range(timezone = ::Time.zone)
13
+ to_time_range(timezone).end
14
+ end
15
+ end
@@ -1,5 +1,6 @@
1
1
  require_relative 'core_ext/require_more'
2
2
  require_relative 'core_ext/array'
3
+ require_relative 'core_ext/time'
3
4
  require_relative 'core_ext/date'
4
5
  require_relative 'core_ext/month'
5
6
  require_relative 'core_ext/object_translation'
@@ -0,0 +1,26 @@
1
+ module ActiveRecord
2
+ module RecordMessages
3
+ # user friendly message, for overid
4
+ def user_message
5
+ return _translate if description.present? || tkey.present?
6
+ return record.errors.full_messages.join(', ') if record.present?
7
+ return "#{_translate} (#{user_digests})" unless defined?(@coaster)
8
+ message
9
+ rescue => e
10
+ "#{message} (user_message_error - #{e.class.name} #{e.message})"
11
+ end
12
+ end
13
+
14
+ class RecordNotSaved < ActiveRecordError
15
+ include RecordMessages
16
+ end
17
+ class RecordNotDestroyed < ActiveRecordError
18
+ include RecordMessages
19
+ end
20
+ class SoleRecordExceeded < ActiveRecordError
21
+ include RecordMessages
22
+ end
23
+ class StaleObjectError < ActiveRecordError
24
+ include RecordMessages
25
+ end
26
+ end
@@ -1 +1,2 @@
1
1
  require 'coaster/rails_ext/backtrace_cleaner'
2
+ require 'coaster/rails_ext/active_record/errors'
@@ -1,3 +1,3 @@
1
1
  module Coaster
2
- VERSION = '1.4.16'
2
+ VERSION = '1.4.18'
3
3
  end
data/test/test_month.rb CHANGED
@@ -73,5 +73,20 @@ module Coaster
73
73
  h = {Month.now => 1}
74
74
  assert_equal h[Month.now], 1
75
75
  end
76
+
77
+ def test_range_timezone
78
+ m = Month.parse('202001', timezone: 'Asia/Seoul')
79
+ assert_equal m.beginning_of_range('Asia/Seoul'), Date.parse('20200101').in_time_zone('Asia/Seoul')
80
+ assert_equal m.end_of_range('Asia/Seoul'), Date.parse('20200201').in_time_zone('Asia/Seoul')
81
+ assert m.to_time_range.exclude_end?
82
+ d = Date.parse('20200101')
83
+ assert_equal d.beginning_of_range('Asia/Seoul'), Date.parse('20200101').in_time_zone('Asia/Seoul')
84
+ assert_equal d.end_of_range('Asia/Seoul'), Date.parse('20200102').in_time_zone('Asia/Seoul')
85
+ assert d.to_time_range.exclude_end?
86
+ t = Time.parse('20200101 12:12:12.123456')
87
+ assert_equal t.beginning_of_range('Asia/Seoul'), Time.parse('20200101 12:12:12').in_time_zone('Asia/Seoul')
88
+ assert_equal t.end_of_range('Asia/Seoul'), Time.parse('20200101 12:12:13').in_time_zone('Asia/Seoul')
89
+ assert t.to_time_range.exclude_end?
90
+ end
76
91
  end
77
92
  end
@@ -316,7 +316,7 @@ LOG
316
316
  assert_equal 'NameError', e.to_hash['type']
317
317
  assert_equal 999999, e.to_hash['status']
318
318
  assert_equal 500, e.to_hash['http_status']
319
- assert_equal "standard error translation (3dd84e #{bt})", e.user_message
319
+ assert_equal "standard error translation (bc1746 #{bt})", e.user_message
320
320
  assert_match(/undefined local variable or method `aa'/, e.to_hash['message'])
321
321
  end
322
322
 
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.4.16
4
+ version: 1.4.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - buzz jung
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-10-02 00:00:00.000000000 Z
11
+ date: 2024-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -201,10 +201,12 @@ files:
201
201
  - lib/coaster/core_ext/standard_error/raven.rb
202
202
  - lib/coaster/core_ext/standard_error/sentry.rb
203
203
  - lib/coaster/core_ext/string.rb
204
+ - lib/coaster/core_ext/time.rb
204
205
  - lib/coaster/git.rb
205
206
  - lib/coaster/git/options.rb
206
207
  - lib/coaster/git/repository.rb
207
208
  - lib/coaster/rails_ext.rb
209
+ - lib/coaster/rails_ext/active_record/errors.rb
208
210
  - lib/coaster/rails_ext/backtrace_cleaner.rb
209
211
  - lib/coaster/safe_yaml_serializer.rb
210
212
  - lib/coaster/serialized_properties.rb