decentworks-date-support 0.1.1 → 0.2.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.
Files changed (34) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +81 -0
  3. data/LICENSE +1 -1
  4. data/README.md +245 -40
  5. data/lib/decentworks/date_support/configuration.rb +19 -18
  6. data/lib/decentworks/date_support/date.rb +4 -541
  7. data/lib/decentworks/date_support/date_extension.rb +761 -0
  8. data/lib/decentworks/date_support/date_time.rb +9 -0
  9. data/lib/decentworks/date_support/time.rb +7 -0
  10. data/lib/decentworks/date_support/time_extension.rb +742 -0
  11. data/lib/decentworks/date_support/time_with_zone.rb +12 -0
  12. data/lib/decentworks/date_support/version.rb +1 -1
  13. data/lib/decentworks/date_support.rb +5 -1
  14. data/lib/generators/decentworks/date_support/install/templates/decentworks_date_support.rb.tt +4 -6
  15. data/sig/decentworks/date_support/configuration.rbs +12 -3
  16. data/sig/decentworks/date_support/date.rbs +3 -167
  17. data/sig/decentworks/date_support/date_extension.rbs +244 -0
  18. data/sig/decentworks/date_support/date_time.rbs +4 -0
  19. data/sig/decentworks/date_support/time.rbs +4 -0
  20. data/sig/decentworks/date_support/time_extension.rbs +248 -0
  21. data/sig/decentworks/date_support/time_with_zone.rbs +21 -0
  22. data/sig/decentworks/date_support/version.rbs +5 -0
  23. metadata +14 -13
  24. data/.rspec +0 -3
  25. data/.rubocop.yml +0 -8
  26. data/.ruby-version +0 -1
  27. data/CODE_OF_CONDUCT.md +0 -132
  28. data/LICENSE.txt +0 -21
  29. data/Rakefile +0 -12
  30. data/Steepfile +0 -43
  31. data/lib/decentworks/active_support/time_with_zone_support.rb +0 -541
  32. data/rbs_collection.lock.yaml +0 -288
  33. data/rbs_collection.yaml +0 -41
  34. data/sig/decentworks/active_support/time_with_zone_support.rbs +0 -163
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "active_support"
4
+ require "active_support/time" # ::ActiveSupport::TimeWithZone の定義元
5
+
6
+ require_relative "time_extension"
7
+
8
+ module ActiveSupport
9
+ class TimeWithZone
10
+ include ::Decentworks::DateSupport::TimeExtension
11
+ end
12
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Decentworks
4
4
  module DateSupport
5
- VERSION = "0.1.1"
5
+ VERSION = "0.2.0"
6
6
  end
7
7
  end
@@ -2,5 +2,9 @@
2
2
 
3
3
  require_relative "date_support/version"
4
4
  require_relative "date_support/configuration"
5
+ require_relative "date_support/date_extension"
5
6
  require_relative "date_support/date"
6
- require_relative "active_support/time_with_zone_support"
7
+ require_relative "date_support/time_extension"
8
+ require_relative "date_support/time"
9
+ require_relative "date_support/date_time"
10
+ require_relative "date_support/time_with_zone"
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require "decentworks/date_support"
4
-
5
3
  ::Decentworks::DateSupport.configure do |config|
6
4
  # 第1四半期(上期)の開始月を指定します。
7
5
  # 指定可能な値:
@@ -18,7 +16,7 @@ require "decentworks/date_support"
18
16
  # :november # => 11月
19
17
  # :december # => 12月
20
18
 
21
- config.beginning_of_first_quarter = :january # 1月始まり
19
+ config.first_quarter_month_name = :january # 1月始まり
22
20
  # 第1四半期:1月〜3月
23
21
  # 第2四半期:4月〜6月
24
22
  # 第3四半期:7月〜9月
@@ -26,7 +24,7 @@ require "decentworks/date_support"
26
24
  # 上期:1月〜6月
27
25
  # 下期:7月〜12月
28
26
 
29
- # config.beginning_of_first_quarter = :april # 4月始まり
27
+ # config.first_quarter_month_name = :april # 4月始まり
30
28
  # 第1四半期:4月〜6月
31
29
  # 第2四半期:7月〜9月
32
30
  # 第3四半期:10月〜12月
@@ -34,7 +32,7 @@ require "decentworks/date_support"
34
32
  # 上期:4月〜9月
35
33
  # 下期:10月〜翌3月
36
34
 
37
- # config.beginning_of_first_quarter = :july # 7月始まり
35
+ # config.first_quarter_month_name = :july # 7月始まり
38
36
  # 第1四半期:7月〜9月
39
37
  # 第2四半期:10月〜12月
40
38
  # 第3四半期:翌1月〜翌3月
@@ -42,7 +40,7 @@ require "decentworks/date_support"
42
40
  # 上期:7月〜12月
43
41
  # 下期:翌1月〜翌6月
44
42
 
45
- # config.beginning_of_first_quarter = :october # 10月始まり
43
+ # config.first_quarter_month_name = :october # 10月始まり
46
44
  # 第1四半期:10月〜12月
47
45
  # 第2四半期:翌1月〜翌3月
48
46
  # 第3四半期:翌4月〜翌6月
@@ -1,14 +1,23 @@
1
1
  module Decentworks
2
2
  module DateSupport
3
+ def self.configure: () ?{ (::Decentworks::DateSupport::Configuration) -> void } -> void
4
+ def self.configuration: -> ::Decentworks::DateSupport::Configuration
5
+
6
+ def self.reset_configuration!: -> nil
7
+
8
+ def self.first_quarter_month_name: -> Symbol
9
+ def self.first_quarter_month: -> Integer
10
+ def self.first_quarter_month_offset: -> Integer
11
+
3
12
  class Configuration
4
13
  MONTHS: Hash[Symbol, Integer]
5
14
  DEFAULT: Symbol
6
15
 
7
- attr_reader beginning_of_first_quarter: Symbol
16
+ attr_reader first_quarter_month_name: Symbol
8
17
 
9
- def beginning_of_first_quarter=: (Symbol) -> void
18
+ def first_quarter_month_name=: (Symbol) -> void
10
19
 
11
- def beginning_of_first_quarter_month: -> Integer
20
+ def first_quarter_month: -> Integer
12
21
 
13
22
  def first_quarter_month_offset: -> Integer
14
23
  end
@@ -1,168 +1,4 @@
1
- module Decentworks
2
- module DateSupport
3
- VERSION: String
4
-
5
- def self.configure: -> void
6
- def self.configuration: -> ::Decentworks::DateSupport::Configuration
7
-
8
- def self.reset_configuration!: -> nil
9
-
10
- def beginning_of_this_week: -> ::Date
11
- def end_of_this_week: -> ::Date
12
- def all_this_week: -> ::Range[::Date]
13
-
14
- def all_this_month: -> ::Range[::Date]
15
-
16
- def two_months_ago: -> ::Date
17
- def three_months_ago: -> ::Date
18
- def four_months_ago: -> ::Date
19
- def five_months_ago: -> ::Date
20
- def six_months_ago: -> ::Date
21
- def half_year_ago: -> ::Date
22
- def seven_months_ago: -> ::Date
23
- def eight_months_ago: -> ::Date
24
- def nine_months_ago: -> ::Date
25
- def ten_months_ago: -> ::Date
26
- def eleven_months_ago: -> ::Date
27
-
28
- def two_months_since: -> ::Date
29
- def three_months_since: -> ::Date
30
- def four_months_since: -> ::Date
31
- def five_months_since: -> ::Date
32
- def six_months_since: -> ::Date
33
- def half_year_since: -> ::Date
34
- def seven_months_since: -> ::Date
35
- def eight_months_since: -> ::Date
36
- def nine_months_since: -> ::Date
37
- def ten_months_since: -> ::Date
38
- def eleven_months_since: -> ::Date
39
-
40
- def beginning_of_january: -> ::Date
41
- def end_of_january: -> ::Date
42
- def all_january: -> ::Range[::Date]
43
- def beginning_of_january?: -> bool
44
- def end_of_january?: -> bool
45
- def in_january?: -> bool
46
-
47
- def beginning_of_february: -> ::Date
48
- def end_of_february: -> ::Date
49
- def all_february: -> ::Range[::Date]
50
- def beginning_of_february?: -> bool
51
- def end_of_february?: -> bool
52
- def in_february?: -> bool
53
-
54
- def beginning_of_march: -> ::Date
55
- def end_of_march: -> ::Date
56
- def all_march: -> ::Range[::Date]
57
- def beginning_of_march?: -> bool
58
- def end_of_march?: -> bool
59
- def in_march?: -> bool
60
-
61
- def beginning_of_april: -> ::Date
62
- def end_of_april: -> ::Date
63
- def all_april: -> ::Range[::Date]
64
- def beginning_of_april?: -> bool
65
- def end_of_april?: -> bool
66
- def in_april?: -> bool
67
-
68
- def beginning_of_may: -> ::Date
69
- def end_of_may: -> ::Date
70
- def all_may: -> ::Range[::Date]
71
- def beginning_of_may?: -> bool
72
- def end_of_may?: -> bool
73
- def in_may?: -> bool
74
-
75
- def beginning_of_june: -> ::Date
76
- def end_of_june: -> ::Date
77
- def all_june: -> ::Range[::Date]
78
- def beginning_of_june?: -> bool
79
- def end_of_june?: -> bool
80
- def in_june?: -> bool
81
-
82
- def beginning_of_july: -> ::Date
83
- def end_of_july: -> ::Date
84
- def all_july: -> ::Range[::Date]
85
- def beginning_of_july?: -> bool
86
- def end_of_july?: -> bool
87
- def in_july?: -> bool
88
-
89
- def beginning_of_august: -> ::Date
90
- def end_of_august: -> ::Date
91
- def all_august: -> ::Range[::Date]
92
- def beginning_of_august?: -> bool
93
- def end_of_august?: -> bool
94
- def in_august?: -> bool
95
-
96
- def beginning_of_september: -> ::Date
97
- def end_of_september: -> ::Date
98
- def all_september: -> ::Range[::Date]
99
- def beginning_of_september?: -> bool
100
- def end_of_september?: -> bool
101
- def in_september?: -> bool
102
-
103
- def beginning_of_october: -> ::Date
104
- def end_of_october: -> ::Date
105
- def all_october: -> ::Range[::Date]
106
- def beginning_of_october?: -> bool
107
- def end_of_october?: -> bool
108
- def in_october?: -> bool
109
-
110
- def beginning_of_november: -> ::Date
111
- def end_of_november: -> ::Date
112
- def all_november: -> ::Range[::Date]
113
- def beginning_of_november?: -> bool
114
- def end_of_november?: -> bool
115
- def in_november?: -> bool
116
-
117
- def beginning_of_december: -> ::Date
118
- def end_of_december: -> ::Date
119
- def all_december: -> ::Range[::Date]
120
- def beginning_of_december?: -> bool
121
- def end_of_december?: -> bool
122
- def in_december?: -> bool
123
-
124
- def beginning_of_first_quarter: -> ::Date
125
- def end_of_first_quarter: -> ::Date
126
- def all_first_quarter: -> ::Range[::Date]
127
- def beginning_of_first_quarter?: -> bool
128
- def end_of_first_quarter?: -> bool
129
- def in_first_quarter?: -> bool
130
-
131
- def beginning_of_second_quarter: -> ::Date
132
- def end_of_second_quarter: -> ::Date
133
- def all_second_quarter: -> ::Range[::Date]
134
- def beginning_of_second_quarter?: -> bool
135
- def end_of_second_quarter?: -> bool
136
- def in_second_quarter?: -> bool
137
-
138
- def beginning_of_third_quarter: -> ::Date
139
- def end_of_third_quarter: -> ::Date
140
- def all_third_quarter: -> ::Range[::Date]
141
- def beginning_of_third_quarter?: -> bool
142
- def end_of_third_quarter?: -> bool
143
- def in_third_quarter?: -> bool
144
-
145
- def beginning_of_fourth_quarter: -> ::Date
146
- def end_of_fourth_quarter: -> ::Date
147
- def all_fourth_quarter: -> ::Range[::Date]
148
- def beginning_of_fourth_quarter?: -> bool
149
- def end_of_fourth_quarter?: -> bool
150
- def in_fourth_quarter?: -> bool
151
-
152
- def beginning_of_first_half: -> ::Date
153
- def end_of_first_half: -> ::Date
154
- def all_first_half: -> ::Range[::Date]
155
- def beginning_of_first_half?: -> bool
156
- def end_of_first_half?: -> bool
157
- def in_first_half?: -> bool
158
-
159
- def beginning_of_second_half: -> ::Date
160
- def end_of_second_half: -> ::Date
161
- def all_second_half: -> ::Range[::Date]
162
- def beginning_of_second_half?: -> bool
163
- def end_of_second_half?: -> bool
164
- def in_second_half?: -> bool
165
-
166
- def whole_months_elapsed: (?from: ::Date, ?to: ::Date) -> ::Integer
167
- end
1
+ class Date
2
+ include ::Decentworks::DateSupport::DateExtension
3
+ extend ::Decentworks::DateSupport::DateExtension::ClassMethods
168
4
  end
@@ -0,0 +1,244 @@
1
+ module Decentworks
2
+ module DateSupport
3
+ # ::Date が備えているActiveSupport(DateAndTime::Calculations)由来のメソッドと、
4
+ # モジュール内部でレシーバとして使うメソッド。
5
+ #
6
+ # DateExtension のself型として指定することで、モジュール内部での
7
+ # レシーバ省略呼び出しを型検査できるようにする。
8
+ #
9
+ # self型に ::Date を直接指定すると、::Date が DateExtension をincludeしているため
10
+ # RBS::RecursiveAncestor(循環)になる。そのためinterfaceを経由する。
11
+ interface _DateCalculations
12
+ def ==: (untyped other) -> bool
13
+ def month: () -> ::Integer
14
+ def beginning_of_week: (?untyped start_day) -> ::Date
15
+ def beginning_of_month: () -> ::Date
16
+ def end_of_month: () -> ::Date
17
+ def months_ago: (untyped months) -> ::Date
18
+ def months_since: (untyped months) -> ::Date
19
+ def change: (untyped options) -> ::Date
20
+ end
21
+
22
+ # ::Date の日付拡張
23
+ #
24
+ # 各メソッドは ::Date を返す。
25
+ module DateExtension : _DateCalculations
26
+ module ClassMethods
27
+ def whole_months_elapsed: (from: ::Date, to: ::Date) -> ::Integer
28
+
29
+ private
30
+
31
+ def expiration_date: (from: ::Date, months: ::Integer) -> ::Date
32
+ end
33
+
34
+ def self.included: (untyped base) -> untyped
35
+
36
+ def beginning_of_this_week: -> ::Date
37
+ def end_of_this_week: -> ::Date
38
+ def all_this_week: -> ::Range[::Date]
39
+
40
+ def beginning_of_this_month: -> ::Date
41
+ def end_of_this_month: -> ::Date
42
+ def all_this_month: -> ::Range[::Date]
43
+
44
+ def two_months_ago: -> ::Date
45
+ def three_months_ago: -> ::Date
46
+ def four_months_ago: -> ::Date
47
+ def five_months_ago: -> ::Date
48
+ def six_months_ago: -> ::Date
49
+ def half_year_ago: -> ::Date
50
+ def seven_months_ago: -> ::Date
51
+ def eight_months_ago: -> ::Date
52
+ def nine_months_ago: -> ::Date
53
+ def ten_months_ago: -> ::Date
54
+ def eleven_months_ago: -> ::Date
55
+
56
+ def two_months_since: -> ::Date
57
+ def three_months_since: -> ::Date
58
+ def four_months_since: -> ::Date
59
+ def five_months_since: -> ::Date
60
+ def six_months_since: -> ::Date
61
+ def half_year_since: -> ::Date
62
+ def seven_months_since: -> ::Date
63
+ def eight_months_since: -> ::Date
64
+ def nine_months_since: -> ::Date
65
+ def ten_months_since: -> ::Date
66
+ def eleven_months_since: -> ::Date
67
+
68
+ def beginning_of_january: -> ::Date
69
+ def end_of_january: -> ::Date
70
+ def all_january: -> ::Range[::Date]
71
+ def beginning_of_january?: -> bool
72
+ def end_of_january?: -> bool
73
+ def in_january?: -> bool
74
+
75
+ def beginning_of_february: -> ::Date
76
+ def end_of_february: -> ::Date
77
+ def all_february: -> ::Range[::Date]
78
+ def beginning_of_february?: -> bool
79
+ def end_of_february?: -> bool
80
+ def in_february?: -> bool
81
+
82
+ def beginning_of_march: -> ::Date
83
+ def end_of_march: -> ::Date
84
+ def all_march: -> ::Range[::Date]
85
+ def beginning_of_march?: -> bool
86
+ def end_of_march?: -> bool
87
+ def in_march?: -> bool
88
+
89
+ def beginning_of_april: -> ::Date
90
+ def end_of_april: -> ::Date
91
+ def all_april: -> ::Range[::Date]
92
+ def beginning_of_april?: -> bool
93
+ def end_of_april?: -> bool
94
+ def in_april?: -> bool
95
+
96
+ def beginning_of_may: -> ::Date
97
+ def end_of_may: -> ::Date
98
+ def all_may: -> ::Range[::Date]
99
+ def beginning_of_may?: -> bool
100
+ def end_of_may?: -> bool
101
+ def in_may?: -> bool
102
+
103
+ def beginning_of_june: -> ::Date
104
+ def end_of_june: -> ::Date
105
+ def all_june: -> ::Range[::Date]
106
+ def beginning_of_june?: -> bool
107
+ def end_of_june?: -> bool
108
+ def in_june?: -> bool
109
+
110
+ def beginning_of_july: -> ::Date
111
+ def end_of_july: -> ::Date
112
+ def all_july: -> ::Range[::Date]
113
+ def beginning_of_july?: -> bool
114
+ def end_of_july?: -> bool
115
+ def in_july?: -> bool
116
+
117
+ def beginning_of_august: -> ::Date
118
+ def end_of_august: -> ::Date
119
+ def all_august: -> ::Range[::Date]
120
+ def beginning_of_august?: -> bool
121
+ def end_of_august?: -> bool
122
+ def in_august?: -> bool
123
+
124
+ def beginning_of_september: -> ::Date
125
+ def end_of_september: -> ::Date
126
+ def all_september: -> ::Range[::Date]
127
+ def beginning_of_september?: -> bool
128
+ def end_of_september?: -> bool
129
+ def in_september?: -> bool
130
+
131
+ def beginning_of_october: -> ::Date
132
+ def end_of_october: -> ::Date
133
+ def all_october: -> ::Range[::Date]
134
+ def beginning_of_october?: -> bool
135
+ def end_of_october?: -> bool
136
+ def in_october?: -> bool
137
+
138
+ def beginning_of_november: -> ::Date
139
+ def end_of_november: -> ::Date
140
+ def all_november: -> ::Range[::Date]
141
+ def beginning_of_november?: -> bool
142
+ def end_of_november?: -> bool
143
+ def in_november?: -> bool
144
+
145
+ def beginning_of_december: -> ::Date
146
+ def end_of_december: -> ::Date
147
+ def all_december: -> ::Range[::Date]
148
+ def beginning_of_december?: -> bool
149
+ def end_of_december?: -> bool
150
+ def in_december?: -> bool
151
+
152
+ def beginning_of_first_quarter: -> ::Date
153
+ def end_of_first_quarter: -> ::Date
154
+ def all_first_quarter: -> ::Range[::Date]
155
+ def beginning_of_first_quarter?: -> bool
156
+ def end_of_first_quarter?: -> bool
157
+ def in_first_quarter?: -> bool
158
+
159
+ def beginning_of_second_quarter: -> ::Date
160
+ def end_of_second_quarter: -> ::Date
161
+ def all_second_quarter: -> ::Range[::Date]
162
+ def beginning_of_second_quarter?: -> bool
163
+ def end_of_second_quarter?: -> bool
164
+ def in_second_quarter?: -> bool
165
+
166
+ def beginning_of_third_quarter: -> ::Date
167
+ def end_of_third_quarter: -> ::Date
168
+ def all_third_quarter: -> ::Range[::Date]
169
+ def beginning_of_third_quarter?: -> bool
170
+ def end_of_third_quarter?: -> bool
171
+ def in_third_quarter?: -> bool
172
+
173
+ def beginning_of_fourth_quarter: -> ::Date
174
+ def end_of_fourth_quarter: -> ::Date
175
+ def all_fourth_quarter: -> ::Range[::Date]
176
+ def beginning_of_fourth_quarter?: -> bool
177
+ def end_of_fourth_quarter?: -> bool
178
+ def in_fourth_quarter?: -> bool
179
+
180
+ def beginning_of_first_half: -> ::Date
181
+ def end_of_first_half: -> ::Date
182
+ def all_first_half: -> ::Range[::Date]
183
+ def beginning_of_first_half?: -> bool
184
+ def end_of_first_half?: -> bool
185
+ def in_first_half?: -> bool
186
+
187
+ def beginning_of_second_half: -> ::Date
188
+ def end_of_second_half: -> ::Date
189
+ def all_second_half: -> ::Range[::Date]
190
+ def beginning_of_second_half?: -> bool
191
+ def end_of_second_half?: -> bool
192
+ def in_second_half?: -> bool
193
+
194
+ def this_quarter_number: -> ::Integer
195
+ def beginning_of_this_quarter: -> ::Date
196
+ def end_of_this_quarter: -> ::Date
197
+ def all_this_quarter: -> ::Range[::Date]
198
+
199
+ def this_half_number: -> ::Integer
200
+ def beginning_of_this_half: -> ::Date
201
+ def end_of_this_half: -> ::Date
202
+ def all_this_half: -> ::Range[::Date]
203
+
204
+ def fiscal_year: -> ::Integer
205
+ def beginning_of_fiscal_year: -> ::Date
206
+ def end_of_fiscal_year: -> ::Date
207
+ def all_fiscal_year: -> ::Range[::Date]
208
+
209
+ def beginning_of_next_quarter: -> ::Date
210
+ def end_of_next_quarter: -> ::Date
211
+ def all_next_quarter: -> ::Range[::Date]
212
+ def beginning_of_prev_quarter: -> ::Date
213
+ def end_of_prev_quarter: -> ::Date
214
+ def all_prev_quarter: -> ::Range[::Date]
215
+
216
+ def beginning_of_next_half: -> ::Date
217
+ def end_of_next_half: -> ::Date
218
+ def all_next_half: -> ::Range[::Date]
219
+ def beginning_of_prev_half: -> ::Date
220
+ def end_of_prev_half: -> ::Date
221
+ def all_prev_half: -> ::Range[::Date]
222
+
223
+ def next_fiscal_year: -> ::Integer
224
+ def beginning_of_next_fiscal_year: -> ::Date
225
+ def end_of_next_fiscal_year: -> ::Date
226
+ def all_next_fiscal_year: -> ::Range[::Date]
227
+ def prev_fiscal_year: -> ::Integer
228
+ def beginning_of_prev_fiscal_year: -> ::Date
229
+ def end_of_prev_fiscal_year: -> ::Date
230
+ def all_prev_fiscal_year: -> ::Range[::Date]
231
+
232
+ # ActiveSupportのメソッドの上書き
233
+ def quarter: -> ::Integer
234
+ def beginning_of_quarter: -> ::Date
235
+ def at_beginning_of_quarter: -> ::Date
236
+ def end_of_quarter: -> ::Date
237
+ def at_end_of_quarter: -> ::Date
238
+ def all_quarter: -> ::Range[::Date]
239
+ def next_quarter: -> ::Date
240
+ def prev_quarter: -> ::Date
241
+ def last_quarter: -> ::Date
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,4 @@
1
+ class DateTime
2
+ include ::Decentworks::DateSupport::TimeExtension[::DateTime]
3
+ extend ::Decentworks::DateSupport::TimeExtension::ClassMethods
4
+ end
@@ -0,0 +1,4 @@
1
+ class Time
2
+ include ::Decentworks::DateSupport::TimeExtension[::Time]
3
+ extend ::Decentworks::DateSupport::TimeExtension::ClassMethods
4
+ end