zakuro 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
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