zakuro 0.6.1 → 0.7.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 (80) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3 -0
  3. data/README.md +6 -4
  4. data/VERSION +1 -1
  5. data/doc/operation/transfer.rb +8 -8
  6. data/lib/zakuro/calculation/base/gengou.rb +46 -0
  7. data/lib/zakuro/calculation/era/gengou/{scroll.rb → abstract_scroll.rb} +6 -8
  8. data/lib/zakuro/calculation/era/gengou/dated_scroll.rb +30 -0
  9. data/lib/zakuro/calculation/era/gengou/internal/reserve/{list.rb → abstract_list.rb} +37 -51
  10. data/lib/zakuro/calculation/era/gengou/internal/reserve/{range.rb → abstract_range.rb} +17 -17
  11. data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_list.rb +48 -0
  12. data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_range.rb +30 -0
  13. data/lib/zakuro/calculation/era/gengou/internal/reserve/empty_link.rb +158 -0
  14. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_list.rb +125 -0
  15. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +75 -0
  16. data/lib/zakuro/calculation/era/gengou/internal/reserve.rb +2 -3
  17. data/lib/zakuro/calculation/era/gengou/named_scroll.rb +30 -0
  18. data/lib/zakuro/calculation/monthly/month.rb +39 -0
  19. data/lib/zakuro/calculation/monthly/operated_month.rb +1 -1
  20. data/lib/zakuro/calculation/range/{full_range.rb → abstract_full_range.rb} +5 -4
  21. data/lib/zakuro/calculation/range/{operated_range.rb → abstract_operation_range.rb} +9 -11
  22. data/lib/zakuro/calculation/range/dated_full_range.rb +32 -0
  23. data/lib/zakuro/calculation/range/dated_operation_range.rb +33 -0
  24. data/lib/zakuro/calculation/range/named_full_range.rb +38 -0
  25. data/lib/zakuro/calculation/range/named_operation_range.rb +36 -0
  26. data/lib/zakuro/calculation/range/operated_solar_terms.rb +0 -2
  27. data/lib/zakuro/calculation/{specifier → summary}/internal/month.rb +1 -1
  28. data/lib/zakuro/calculation/summary/japan/range.rb +152 -0
  29. data/lib/zakuro/calculation/summary/japan/single.rb +118 -0
  30. data/lib/zakuro/calculation/summary/japan/specifier/single_day.rb +91 -0
  31. data/lib/zakuro/calculation/summary/western/range.rb +124 -0
  32. data/lib/zakuro/calculation/summary/western/single.rb +113 -0
  33. data/lib/zakuro/calculation/summary/western/specifier/multiple_day.rb +169 -0
  34. data/lib/zakuro/calculation/summary/western/specifier/single_day.rb +93 -0
  35. data/lib/zakuro/condition.rb +1 -2
  36. data/lib/zakuro/era/japan/gengou/alignment/aligner.rb +89 -74
  37. data/lib/zakuro/era/japan/gengou/alignment/division.rb +125 -122
  38. data/lib/zakuro/era/japan/gengou/alignment/line.rb +141 -122
  39. data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +171 -168
  40. data/lib/zakuro/era/japan/gengou/alignment.rb +38 -25
  41. data/lib/zakuro/era/japan/gengou/resource/parser.rb +183 -182
  42. data/lib/zakuro/era/japan/gengou/resource/type.rb +233 -232
  43. data/lib/zakuro/era/japan/gengou/resource/validator.rb +255 -254
  44. data/lib/zakuro/era/japan/gengou/resource.rb +23 -22
  45. data/lib/zakuro/era/japan/gengou.rb +5 -20
  46. data/lib/zakuro/era/western/calendar.rb +9 -9
  47. data/lib/zakuro/exception/case/pattern.rb +35 -0
  48. data/lib/zakuro/exception/case/preset.rb +51 -0
  49. data/lib/zakuro/exception/case/template.rb +48 -0
  50. data/lib/zakuro/exception/cause.rb +28 -0
  51. data/lib/zakuro/exception/exception.rb +37 -0
  52. data/lib/zakuro/exception/zakuro_error.rb +28 -0
  53. data/lib/zakuro/gateway/locale/date.rb +127 -0
  54. data/lib/zakuro/gateway/locale/range.rb +67 -0
  55. data/lib/zakuro/gateway/range.rb +99 -0
  56. data/lib/zakuro/gateway/single.rb +70 -0
  57. data/lib/zakuro/merchant.rb +8 -44
  58. data/lib/zakuro/operation/month/parser.rb +9 -9
  59. data/lib/zakuro/operation/month/type.rb +31 -31
  60. data/lib/zakuro/operation/month/validator.rb +49 -49
  61. data/lib/zakuro/operation/yaml/month.yaml +3736 -3736
  62. data/lib/zakuro/output/logger.rb +17 -3
  63. data/lib/zakuro/result/data/day.rb +43 -0
  64. data/lib/zakuro/result/data/gengou.rb +35 -0
  65. data/lib/zakuro/result/data/month.rb +63 -0
  66. data/lib/zakuro/result/data/single_day.rb +48 -0
  67. data/lib/zakuro/result/data/solar_term.rb +35 -0
  68. data/lib/zakuro/result/data/year.rb +45 -0
  69. data/lib/zakuro/result/operation/month/annotation.rb +40 -0
  70. data/lib/zakuro/result/operation/month/bundle.rb +36 -0
  71. data/lib/zakuro/result/operation/month/history.rb +54 -0
  72. data/lib/zakuro/result/operation/operation.rb +44 -0
  73. data/lib/zakuro/result/result.rb +4 -2
  74. metadata +46 -14
  75. data/lib/zakuro/calculation/specifier/multiple_day.rb +0 -162
  76. data/lib/zakuro/calculation/specifier/single_day.rb +0 -87
  77. data/lib/zakuro/calculation/summary/range.rb +0 -120
  78. data/lib/zakuro/calculation/summary/single.rb +0 -110
  79. data/lib/zakuro/result/data.rb +0 -187
  80. data/lib/zakuro/result/operation.rb +0 -114
@@ -6,284 +6,285 @@ require_relative '../../calendar'
6
6
 
7
7
  # :nodoc:
8
8
  module Zakuro
9
- #
10
- # Japan 和暦
11
- #
9
+ # :nodoc:
12
10
  module Japan
13
- #
14
- # Resource yaml解析結果
15
- #
16
- module Resource
11
+ # :nodoc:
12
+ module Gengou
17
13
  #
18
- # Gengou 元号情報
14
+ # Resource yaml解析結果
19
15
  #
20
- class Gengou
21
- # @return [String] 元号名
22
- attr_reader :name
23
- # @return [Both::Year] 開始年(和暦/西暦)
24
- attr_reader :both_start_year
25
- # @return [Both::Date] 開始日(和暦/西暦)
26
- attr_reader :both_start_date
27
- # @return [Integer] 終了年
28
- attr_reader :last_year
29
- # @return [Western::Calendar] 終了日
30
- attr_reader :last_date
16
+ module Resource
17
+ #
18
+ # Gengou 元号情報
19
+ #
20
+ class Gengou
21
+ # @return [String] 元号名
22
+ attr_reader :name
23
+ # @return [Both::Year] 開始年(和暦/西暦)
24
+ attr_reader :both_start_year
25
+ # @return [Both::Date] 開始日(和暦/西暦)
26
+ attr_reader :both_start_date
27
+ # @return [Integer] 終了年
28
+ attr_reader :last_year
29
+ # @return [Western::Calendar] 終了日
30
+ attr_reader :last_date
31
31
 
32
- #
33
- # 初期化
34
- #
35
- # @param [String] name 元号名
36
- # @param [Both::Year] both_start_year 開始年(和暦/西暦)
37
- # @param [Both::Date] both_start_date 開始日(和暦/西暦)
38
- # @param [Integer] last_date 終了年
39
- # @param [Western::Calendar] last_date 終了日
40
- #
41
- def initialize(name: '', both_start_year: Both::Year.new,
42
- both_start_date: Both::Date.new,
43
- last_date: Western::Calendar.new,
44
- last_year: Both::Year::INVALID)
45
- @name = name
46
- @both_start_year = both_start_year
47
- @both_start_date = both_start_date
48
- @last_year = last_year
49
- @last_date = last_date
50
- end
51
-
52
- #
53
- # 終了年を更新する
54
- #
55
- # @param [Integer] last_year 終了年
56
- #
57
- def write_last_year(last_year:)
58
- unless Gengou.valid_year(year: last_year)
59
- raise ArgumentError, "invalid year format. [#{last_year}]"
32
+ #
33
+ # 初期化
34
+ #
35
+ # @param [String] name 元号名
36
+ # @param [Both::Year] both_start_year 開始年(和暦/西暦)
37
+ # @param [Both::Date] both_start_date 開始日(和暦/西暦)
38
+ # @param [Integer] last_date 終了年
39
+ # @param [Western::Calendar] last_date 終了日
40
+ #
41
+ def initialize(name: '', both_start_year: Both::Year.new,
42
+ both_start_date: Both::Date.new,
43
+ last_date: Western::Calendar.new,
44
+ last_year: Both::Year::INVALID)
45
+ @name = name
46
+ @both_start_year = both_start_year
47
+ @both_start_date = both_start_date
48
+ @last_year = last_year
49
+ @last_date = last_date
60
50
  end
61
51
 
62
- @last_year = last_year
63
- end
52
+ #
53
+ # 終了年を更新する
54
+ #
55
+ # @param [Integer] last_year 終了年
56
+ #
57
+ def write_last_year(last_year:)
58
+ unless Gengou.valid_year(year: last_year)
59
+ raise ArgumentError, "invalid year format. [#{last_year}]"
60
+ end
64
61
 
65
- #
66
- # 終了日を更新する
67
- #
68
- # @param [Western::Calendar] last_date 終了日
69
- #
70
- def write_last_date(last_date:)
71
- unless Gengou.valid_date(date: last_date)
72
- raise ArgumentError, "invalid date format. [#{last_date}]"
62
+ @last_year = last_year
73
63
  end
74
64
 
75
- @last_date = last_date
76
- nil
77
- end
78
-
79
- #
80
- # 年が不正なしかどうかを確認する
81
- #
82
- # @param [Integer] year 年
83
- #
84
- # @return [True] 不正なし
85
- # @return [False] 不正
86
- #
87
- def self.valid_year(year:)
88
- return false unless year
89
-
90
- year.is_a?(Integer)
91
- end
92
-
93
- #
94
- # 日付が不正なしかどうかを確認する
95
- #
96
- # @param [Western::Calendar] date 日付
97
- #
98
- # @return [True] 不正なし
99
- # @return [False] 不正
100
- #
101
- def self.valid_date(date:)
102
- return false unless date
103
-
104
- date.is_a?(Western::Calendar)
105
- end
65
+ #
66
+ # 終了日を更新する
67
+ #
68
+ # @param [Western::Calendar] last_date 終了日
69
+ #
70
+ def write_last_date(last_date:)
71
+ unless Gengou.valid_date(date: last_date)
72
+ raise ArgumentError, "invalid date format. [#{last_date}]"
73
+ end
106
74
 
107
- #
108
- # 次の元号の開始年から、元号の終了年に変換する
109
- #
110
- # @param [Integer] next_start_year 次回開始年
111
- #
112
- def convert_next_start_year_to_last_year(next_start_year:)
113
- if @both_start_year.western >= next_start_year
114
- @last_year = next_start_year
115
- return
75
+ @last_date = last_date
76
+ nil
116
77
  end
117
78
 
118
- @last_year = next_start_year - 1
79
+ #
80
+ # 年が不正なしかどうかを確認する
81
+ #
82
+ # @param [Integer] year 年
83
+ #
84
+ # @return [True] 不正なし
85
+ # @return [False] 不正
86
+ #
87
+ def self.valid_year(year:)
88
+ return false unless year
119
89
 
120
- nil
121
- end
90
+ year.is_a?(Integer)
91
+ end
122
92
 
123
- #
124
- # 次の元号の開始日から、元号の終了日に変換する
125
- #
126
- # @param [String] next_start_date 次回開始日
127
- #
128
- def convert_next_start_date_to_last_date(next_start_date: '')
129
- raise ArgumentError, 'empty string cannot convert' if next_start_date.empty?
93
+ #
94
+ # 日付が不正なしかどうかを確認する
95
+ #
96
+ # @param [Western::Calendar] date 日付
97
+ #
98
+ # @return [True] 不正なし
99
+ # @return [False] 不正
100
+ #
101
+ def self.valid_date(date:)
102
+ return false unless date
130
103
 
131
- start_date = Western::Calendar.parse(str: next_start_date)
132
- @last_date = start_date - 1
104
+ date.is_a?(Western::Calendar)
105
+ end
133
106
 
134
- nil
135
- end
107
+ #
108
+ # 次の元号の開始年から、元号の終了年に変換する
109
+ #
110
+ # @param [Integer] next_start_year 次回開始年
111
+ #
112
+ def convert_next_start_year_to_last_year(next_start_year:)
113
+ if @both_start_year.western >= next_start_year
114
+ @last_year = next_start_year
115
+ return
116
+ end
136
117
 
137
- #
138
- # 指定した日が元号に含まれるか
139
- #
140
- # @param [Western::Calendar] date 日
141
- #
142
- # @return [True] 含まれる
143
- # @return [False] 含まれない
144
- #
145
- def include?(date:)
146
- date >= @both_start_date.western && date <= @last_date
147
- end
118
+ @last_year = next_start_year - 1
148
119
 
149
- #
150
- # 不正か
151
- #
152
- # @return [True] 不正
153
- # @return [False] 不正なし
154
- #
155
- def invalid?
156
- @both_start_year.japan == -1 || @both_start_year.invalid? ||
157
- @both_start_date.invalid? || @last_date.invalid?
158
- end
120
+ nil
121
+ end
159
122
 
160
- #
161
- # 1元号年を追加する
162
- #
163
- # def next_year
164
- # @year += 1 unless invalid?
165
- # nil
166
- # end
167
-
168
- def to_s
169
- "name: #{@name}, both_start_year: #{@both_start_year.format}, " \
170
- "both_start_date: #{@both_start_date.format}, last_date: #{@last_date.format}"
171
- end
172
- end
123
+ #
124
+ # 次の元号の開始日から、元号の終了日に変換する
125
+ #
126
+ # @param [String] next_start_date 次回開始日
127
+ #
128
+ def convert_next_start_date_to_last_date(next_start_date: '')
129
+ raise ArgumentError, 'empty string cannot convert' if next_start_date.empty?
173
130
 
174
- #
175
- # Set 元号セット
176
- #
177
- class Set
178
- # @return [Integer] 不正値
179
- INVALID = -1
180
- # @return [Integer] 元号セットID
181
- attr_reader :id
182
- # @return [String] 元号セット名
183
- attr_reader :name
184
- # @return [Both::Date] 元号セットでの終了年
185
- attr_reader :both_last_year
186
- # @return [Both::Date] 元号セットでの終了日
187
- attr_reader :both_last_date
188
- # @return [Array<Gengou>] 元号リスト
189
- attr_reader :list
131
+ start_date = Western::Calendar.parse(text: next_start_date)
132
+ @last_date = start_date - 1
190
133
 
191
- #
192
- # 初期化
193
- #
194
- # @param [Integer] id 元号セットID
195
- # @param [String] name 元号セット名
196
- # @param [Western::Calendar] last_date 元号セットでの終了日
197
- # @param [Array<Gengou>] list 元号リスト
198
- #
199
- def initialize(id: INVALID, name: '', both_last_year: Both::Year.new,
200
- both_last_date: Both::Date.new, list: [])
201
- @id = id
202
- @name = name
203
- @both_last_year = both_last_year
204
- @both_last_date = both_last_date
205
- @list = list
206
- end
134
+ nil
135
+ end
207
136
 
208
- #
209
- # 指定した日付を含む元号を返す
210
- #
211
- # @param [Western::Calendar] date 日
212
- #
213
- # @return [Gengou] 元号
214
- #
215
- def include_item(date:)
216
- @list.each do |item|
217
- return item if item.include?(date: date)
137
+ #
138
+ # 指定した日が元号に含まれるか
139
+ #
140
+ # @param [Western::Calendar] date 日
141
+ #
142
+ # @return [True] 含まれる
143
+ # @return [False] 含まれない
144
+ #
145
+ def include?(date:)
146
+ date >= @both_start_date.western && date <= @last_date
218
147
  end
219
148
 
220
- Gengou.new
221
- end
149
+ #
150
+ # 不正か
151
+ #
152
+ # @return [True] 不正
153
+ # @return [False] 不正なし
154
+ #
155
+ def invalid?
156
+ @both_start_year.japan == -1 || @both_start_year.invalid? ||
157
+ @both_start_date.invalid? || @last_date.invalid?
158
+ end
222
159
 
223
- #
224
- # 元号セットが不正かどうかを確認する
225
- #
226
- # @return [True] 正しくない
227
- # @return [False] 正しい
228
- #
229
- def invalid?
230
- @id == INVALID
160
+ #
161
+ # 1元号年を追加する
162
+ #
163
+ # def next_year
164
+ # @year += 1 unless invalid?
165
+ # nil
166
+ # end
167
+
168
+ def to_s
169
+ "name: #{@name}, both_start_year: #{@both_start_year.format}, " \
170
+ "both_start_date: #{@both_start_date.format}, last_date: #{@last_date.format}"
171
+ end
231
172
  end
232
- end
233
173
 
234
- #
235
- # 和暦/西暦
236
- #
237
- module Both
238
174
  #
239
- # Year
175
+ # Set 元号セット
240
176
  #
241
- class Year
177
+ class Set
242
178
  # @return [Integer] 不正値
243
179
  INVALID = -1
244
- # @return [Integer] 和暦元号年
245
- attr_reader :japan
246
- # @return [Integer] 西暦年
247
- attr_reader :western
248
-
249
- def initialize(japan: INVALID, western: INVALID)
250
- @japan = japan
251
- @western = western
180
+ # @return [Integer] 元号セットID
181
+ attr_reader :id
182
+ # @return [String] 元号セット名
183
+ attr_reader :name
184
+ # @return [Both::Date] 元号セットでの終了年
185
+ attr_reader :both_last_year
186
+ # @return [Both::Date] 元号セットでの終了日
187
+ attr_reader :both_last_date
188
+ # @return [Array<Gengou>] 元号リスト
189
+ attr_reader :list
190
+
191
+ #
192
+ # 初期化
193
+ #
194
+ # @param [Integer] id 元号セットID
195
+ # @param [String] name 元号セット名
196
+ # @param [Western::Calendar] last_date 元号セットでの終了日
197
+ # @param [Array<Gengou>] list 元号リスト
198
+ #
199
+ def initialize(id: INVALID, name: '', both_last_year: Both::Year.new,
200
+ both_last_date: Both::Date.new, list: [])
201
+ @id = id
202
+ @name = name
203
+ @both_last_year = both_last_year
204
+ @both_last_date = both_last_date
205
+ @list = list
252
206
  end
253
207
 
254
208
  #
255
- # 不正か
209
+ # 指定した日付を含む元号を返す
256
210
  #
257
- # @return [True] 不正
258
- # @return [False] 不正なし
211
+ # @param [Western::Calendar] date 日
212
+ #
213
+ # @return [Gengou] 元号
214
+ #
215
+ def include_item(date:)
216
+ @list.each do |item|
217
+ return item if item.include?(date: date)
218
+ end
219
+
220
+ Gengou.new
221
+ end
222
+
223
+ #
224
+ # 元号セットが不正かどうかを確認する
225
+ #
226
+ # @return [True] 正しくない
227
+ # @return [False] 正しい
259
228
  #
260
229
  def invalid?
261
- @japan == INVALID || @western == INVALID
230
+ @id == INVALID
262
231
  end
263
232
  end
264
233
 
265
234
  #
266
- # Date 日
235
+ # 和暦/西暦
267
236
  #
268
- class Date
269
- # @return [Japan::Calendar] 和暦日
270
- attr_reader :japan
271
- # @return [Western::Calendar] 西暦日
272
- attr_reader :western
273
-
274
- def initialize(japan: Japan::Calendar.new, western: Western::Calendar.new)
275
- @japan = japan
276
- @western = western
237
+ module Both
238
+ #
239
+ # Year 年
240
+ #
241
+ class Year
242
+ # @return [Integer] 不正値
243
+ INVALID = -1
244
+ # @return [Integer] 和暦元号年
245
+ attr_reader :japan
246
+ # @return [Integer] 西暦年
247
+ attr_reader :western
248
+
249
+ def initialize(japan: INVALID, western: INVALID)
250
+ @japan = japan
251
+ @western = western
252
+ end
253
+
254
+ #
255
+ # 不正か
256
+ #
257
+ # @return [True] 不正
258
+ # @return [False] 不正なし
259
+ #
260
+ def invalid?
261
+ @japan == INVALID || @western == INVALID
262
+ end
277
263
  end
278
264
 
279
265
  #
280
- # 不正か
281
- #
282
- # @return [True] 不正
283
- # @return [False] 不正なし
266
+ # Date 日
284
267
  #
285
- def invalid?
286
- @japan.invalid? || @western.invalid?
268
+ class Date
269
+ # @return [Japan::Calendar] 和暦日
270
+ attr_reader :japan
271
+ # @return [Western::Calendar] 西暦日
272
+ attr_reader :western
273
+
274
+ def initialize(japan: Japan::Calendar.new, western: Western::Calendar.new)
275
+ @japan = japan
276
+ @western = western
277
+ end
278
+
279
+ #
280
+ # 不正か
281
+ #
282
+ # @return [True] 不正
283
+ # @return [False] 不正なし
284
+ #
285
+ def invalid?
286
+ @japan.invalid? || @western.invalid?
287
+ end
287
288
  end
288
289
  end
289
290
  end