zakuro 0.0.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +102 -42
  3. data/doc/operation.md +25 -0
  4. data/doc/operation/csv/month.csv +202 -0
  5. data/doc/operation/operation.xlsx +0 -0
  6. data/doc/operation/transfer.rb +77 -0
  7. data/lib/zakuro/calculation/base/multi_gengou.rb +101 -0
  8. data/lib/zakuro/calculation/base/multi_gengou_roller.rb +218 -0
  9. data/lib/zakuro/calculation/base/year.rb +107 -0
  10. data/lib/zakuro/calculation/cycle/abstract_remainder.rb +459 -0
  11. data/lib/zakuro/calculation/cycle/abstract_solar_term.rb +173 -0
  12. data/lib/zakuro/calculation/cycle/zodiac.rb +106 -0
  13. data/lib/zakuro/calculation/monthly/first_day.rb +45 -0
  14. data/lib/zakuro/calculation/monthly/initialized_month.rb +125 -0
  15. data/lib/zakuro/calculation/monthly/month.rb +187 -0
  16. data/lib/zakuro/calculation/monthly/month_label.rb +88 -0
  17. data/lib/zakuro/calculation/monthly/operated_month.rb +209 -0
  18. data/lib/zakuro/calculation/range/full_range.rb +210 -0
  19. data/lib/zakuro/calculation/range/operated_range.rb +144 -0
  20. data/lib/zakuro/calculation/range/operated_solar_terms.rb +201 -0
  21. data/lib/zakuro/calculation/range/transfer/western_date_allocation.rb +82 -0
  22. data/lib/zakuro/calculation/range/transfer/year_boundary.rb +146 -0
  23. data/lib/zakuro/calculation/specifier/single_day.rb +109 -0
  24. data/lib/zakuro/calculation/summary/single.rb +129 -0
  25. data/lib/zakuro/condition.rb +16 -13
  26. data/lib/zakuro/era/japan/gengou.rb +106 -0
  27. data/lib/zakuro/era/japan/gengou/parser.rb +167 -0
  28. data/lib/zakuro/era/japan/gengou/type.rb +178 -0
  29. data/lib/zakuro/era/japan/gengou/validator.rb +236 -0
  30. data/lib/zakuro/era/japan/reki.rb +91 -0
  31. data/lib/zakuro/era/{gengou → japan/yaml}/set-001-until-south.yaml +0 -0
  32. data/lib/zakuro/era/{gengou → japan/yaml}/set-002-from-north.yaml +0 -0
  33. data/lib/zakuro/era/{gengou → japan/yaml}/set-003-modern.yaml +0 -0
  34. data/lib/zakuro/era/western.rb +1 -1
  35. data/lib/zakuro/merchant.rb +2 -2
  36. data/lib/zakuro/operation/month/parser.rb +373 -0
  37. data/lib/zakuro/operation/month/type.rb +453 -0
  38. data/lib/zakuro/operation/month/validator.rb +802 -0
  39. data/lib/zakuro/operation/operation.rb +66 -0
  40. data/lib/zakuro/operation/yaml/month.yaml +6452 -0
  41. data/lib/zakuro/output/error.rb +7 -4
  42. data/lib/zakuro/output/logger.rb +50 -47
  43. data/lib/zakuro/output/response.rb +146 -143
  44. data/lib/zakuro/result/core.rb +52 -0
  45. data/lib/zakuro/result/data.rb +187 -0
  46. data/lib/zakuro/result/operation.rb +114 -0
  47. data/lib/zakuro/result/result.rb +37 -0
  48. data/lib/zakuro/{output → tools}/stringifier.rb +16 -9
  49. data/lib/zakuro/tools/typeof.rb +33 -0
  50. data/lib/zakuro/version.rb +1 -1
  51. data/lib/zakuro/version/abstract_version.rb +1 -1
  52. data/lib/zakuro/version/context.rb +23 -0
  53. data/lib/zakuro/version/senmyou/cycle/remainder.rb +63 -0
  54. data/lib/zakuro/version/senmyou/cycle/solar_term.rb +31 -0
  55. data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +186 -182
  56. data/lib/zakuro/version/senmyou/range/annual_range.rb +167 -0
  57. data/lib/zakuro/version/senmyou/senmyou.rb +10 -4
  58. data/lib/zakuro/version/senmyou/stella/lunar_orbit.rb +6 -6
  59. data/lib/zakuro/version/senmyou/stella/solar_average.rb +103 -152
  60. data/lib/zakuro/version/senmyou/stella/solar_location.rb +213 -0
  61. data/lib/zakuro/version/senmyou/stella/solar_orbit.rb +3 -184
  62. data/lib/zakuro/version/senmyou/stella/winter_solstice.rb +4 -4
  63. data/lib/zakuro/version/version_class_resolver.rb +62 -0
  64. data/lib/zakuro/version_factory.rb +3 -3
  65. metadata +53 -24
  66. data/lib/zakuro/cycle/abstract_remainder.rb +0 -456
  67. data/lib/zakuro/cycle/zodiac.rb +0 -103
  68. data/lib/zakuro/era/japan.rb +0 -664
  69. data/lib/zakuro/output/result.rb +0 -225
  70. data/lib/zakuro/version/senmyou/base/era.rb +0 -83
  71. data/lib/zakuro/version/senmyou/base/multi_gengou.rb +0 -98
  72. data/lib/zakuro/version/senmyou/base/multi_gengou_roller.rb +0 -205
  73. data/lib/zakuro/version/senmyou/base/remainder.rb +0 -60
  74. data/lib/zakuro/version/senmyou/base/solar_term.rb +0 -66
  75. data/lib/zakuro/version/senmyou/base/year.rb +0 -104
  76. data/lib/zakuro/version/senmyou/monthly/month.rb +0 -122
  77. data/lib/zakuro/version/senmyou/summary/annual_range.rb +0 -187
  78. data/lib/zakuro/version/senmyou/summary/full_range.rb +0 -224
  79. data/lib/zakuro/version/senmyou/summary/specifier.rb +0 -100
@@ -0,0 +1,453 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'yaml'
4
+ require_relative '../../era/western'
5
+ require_relative './validator'
6
+
7
+ # :nodoc:
8
+ module Zakuro
9
+ #
10
+ # Operation 運用
11
+ #
12
+ module Operation
13
+ #
14
+ # 日(差分)無効値
15
+ #
16
+ INVALID_DAY_VALUE = -30
17
+
18
+ # :reek:TooManyInstanceVariables { max_instance_variables: 6 }
19
+
20
+ #
21
+ # MonthHistory 変更履歴
22
+ #
23
+ class MonthHistory
24
+ # @return [String] ID
25
+ attr_reader :id
26
+ # @return [String] 親ID
27
+ attr_reader :parent_id
28
+ # @return [Reference] 参照
29
+ attr_reader :reference
30
+ # @return [Western::Calendar] 西暦日
31
+ attr_reader :western_date
32
+ # @return [Array<Annotation>] 注釈
33
+ attr_reader :annotations
34
+ # @return [Diffs] 総差分
35
+ attr_reader :diffs
36
+
37
+ # rubocop:disable Metrics/ParameterLists
38
+ # :reek:LongParameterList { max_params: 6 }
39
+
40
+ #
41
+ # 初期化
42
+ #
43
+ # @param [String] id ID
44
+ # @param [String] parent_id 親ID
45
+ # @param [Reference] reference 参照
46
+ # @param [Western::Calendar] western_date 西暦日
47
+ # @param [Array<Annotation>] annotations 注釈
48
+ # @param [Diffs] diffs 総差分
49
+ #
50
+ def initialize(id: '', parent_id: '', reference: Reference.new,
51
+ western_date: Western::Calendar.new, annotations: [], diffs: Diffs.new)
52
+ @id = id
53
+ @parent_id = parent_id
54
+ @reference = reference
55
+ @western_date = western_date
56
+ @annotations = annotations
57
+ @diffs = diffs
58
+ end
59
+ # rubocop:enable Metrics/ParameterLists
60
+
61
+ #
62
+ # 無効か
63
+ #
64
+ # @return [True] 無効
65
+ # @return [False] 有効
66
+ #
67
+ def invalid?
68
+ id == ''
69
+ end
70
+ end
71
+
72
+ #
73
+ # Annotation 注釈
74
+ #
75
+ class Annotation
76
+ # @return [String] ID
77
+ attr_reader :id
78
+ # @return [String] 内容
79
+ attr_reader :description
80
+ # @return [String] 正誤訂正(zakuro)
81
+ attr_reader :note
82
+
83
+ #
84
+ # 初期化
85
+ #
86
+ # @param [String] id ID
87
+ # @param [String] description 内容
88
+ # @param [String] note 正誤訂正(zakuro)
89
+ #
90
+ def initialize(id: '', description: '', note: '')
91
+ @id = id
92
+ @description = description
93
+ @note = note
94
+ end
95
+
96
+ #
97
+ # 無効か
98
+ #
99
+ # @return [True] 無効
100
+ # @return [False] 有効
101
+ #
102
+ def invalid?
103
+ return true if @id == ''
104
+
105
+ @description == '' && @note == ''
106
+ end
107
+ end
108
+
109
+ #
110
+ # Reference 参照
111
+ #
112
+ class Reference
113
+ # @return [Integer] 頁数
114
+ attr_reader :page
115
+ # @return [Integer] 注釈番号
116
+ attr_reader :number
117
+ # @return [String] 和暦日
118
+ attr_reader :japan_date
119
+
120
+ #
121
+ # 初期化
122
+ #
123
+ # @param [Integer] page 頁数
124
+ # @param [Integer] number 注釈番号
125
+ # @param [String] japan_date 和暦日
126
+ #
127
+ def initialize(page: -1, number: -1, japan_date: '')
128
+ @page = page
129
+ @number = number
130
+ @japan_date = japan_date
131
+ end
132
+
133
+ #
134
+ # 無効か
135
+ #
136
+ # @return [True] 無効
137
+ # @return [False] 有効
138
+ #
139
+ def invalid?
140
+ page == -1
141
+ end
142
+ end
143
+
144
+ #
145
+ # Diffs 総差分
146
+ #
147
+ class Diffs
148
+ # @return [Month] 月差分
149
+ attr_reader :month
150
+ # @return [SolarTerm::Direction] 二十四節気差分
151
+ attr_reader :solar_term
152
+ # @return [Integer] 日差分
153
+ attr_reader :days
154
+
155
+ #
156
+ # 初期化
157
+ #
158
+ # @param [Month] month 月差分
159
+ # @param [SolarTerm::Direction] solar_term 二十四節気差分
160
+ # @param [Integer] days 日差分
161
+ #
162
+ def initialize(month: Month.new, solar_term: SolarTerm::Direction.new,
163
+ days: INVALID_DAY_VALUE)
164
+ @month = month
165
+ @solar_term = solar_term
166
+ @days = days
167
+ end
168
+
169
+ #
170
+ # 日差分が無効か
171
+ #
172
+ # @return [True] 無効
173
+ # @return [False] 有効
174
+ #
175
+ def invalid_days?
176
+ @days == INVALID_DAY_VALUE
177
+ end
178
+ end
179
+
180
+ #
181
+ # Month 月差分
182
+ #
183
+ class Month
184
+ # @return [Number] 月
185
+ attr_reader :number
186
+ # @return [Leaped] 閏有無
187
+ attr_reader :leaped
188
+ # @return [Days] 月の大小
189
+ attr_reader :is_many_days
190
+
191
+ # :reek:BooleanParameter
192
+
193
+ #
194
+ # 初期化
195
+ #
196
+ # @param [Number] number 月
197
+ # @param [Leaped] leaped 閏有無
198
+ # @param [Days] days 月の大小
199
+ #
200
+ def initialize(number: Number.new, leaped: Leaped.new, is_many_days: Days.new)
201
+ @number = number
202
+ @leaped = leaped
203
+ @is_many_days = is_many_days
204
+ end
205
+
206
+ #
207
+ # 無効か
208
+ #
209
+ # @return [True] 無効
210
+ # @return [False] 有効
211
+ #
212
+ def invalid?
213
+ number == -1
214
+ end
215
+ end
216
+
217
+ #
218
+ # 二十四節気
219
+ #
220
+ module SolarTerm
221
+ #
222
+ # Direction 二十四節気(移動)
223
+ #
224
+ class Direction
225
+ # @return [Source] 二十四節気(移動元)
226
+ attr_reader :source
227
+ # @return [Destination] 二十四節気(移動先)
228
+ attr_reader :destination
229
+ # @return [Integer] 大余差分
230
+ attr_reader :days
231
+
232
+ #
233
+ # 初期化
234
+ #
235
+ # @param [Source] source 二十四節気(移動元)
236
+ # @param [Destination] destination 二十四節気(移動先)
237
+ # @param [Integer] day 大余差分
238
+ #
239
+ def initialize(source: Source.new, destination: Destination.new,
240
+ days: INVALID_DAY_VALUE)
241
+ @source = source
242
+ @destination = destination
243
+ @days = days
244
+ end
245
+
246
+ #
247
+ # 無効か(大余差分)
248
+ #
249
+ # @return [True] 無効
250
+ # @return [False] 有効
251
+ #
252
+ def invalid_days?
253
+ @days == INVALID_DAY_VALUE
254
+ end
255
+
256
+ #
257
+ # 無効か
258
+ #
259
+ # @return [True] 無効
260
+ # @return [False] 有効
261
+ #
262
+ def invalid?
263
+ @source.invalid? && @destination.invalid?
264
+ end
265
+ end
266
+
267
+ #
268
+ # Source 二十四節気(移動元)
269
+ #
270
+ class Source
271
+ # @return [Integer] 二十四節気番号
272
+ attr_reader :index
273
+ # @return [Western::Calendar] 移動先の月初日
274
+ attr_reader :to
275
+ # @return [String] 十干十二支
276
+ attr_reader :zodiac_name
277
+
278
+ #
279
+ # 初期化
280
+ #
281
+ # @param [Integer] index 二十四節気番号
282
+ # @param [Western::Calendar] to 移動先の月初日
283
+ # @param [String] zodiac_name 十干十二支
284
+ #
285
+ def initialize(index: -1, to: Western::Calendar.new, zodiac_name: '')
286
+ @index = index
287
+ @to = to
288
+ @zodiac_name = zodiac_name
289
+ end
290
+
291
+ #
292
+ # 無効か
293
+ #
294
+ # @return [True] 無効
295
+ # @return [False] 有効
296
+ #
297
+ def invalid?
298
+ @index == -1
299
+ end
300
+ end
301
+
302
+ #
303
+ # Destination 二十四節気(移動先)
304
+ #
305
+ class Destination
306
+ # @return [Integer] 二十四節気番号
307
+ attr_reader :index
308
+ # @return [Western::Calendar] 移動元の月初日
309
+ attr_reader :from
310
+ # @return [String] 十干十二支
311
+ attr_reader :zodiac_name
312
+
313
+ #
314
+ # 初期化
315
+ #
316
+ # @param [Integer] index 二十四節気番号
317
+ # @param [Western::Calendar] from 移動元の月初日
318
+ # @param [String] zodiac_name 十干十二支
319
+ #
320
+ def initialize(index: -1, from: Western::Calendar.new, zodiac_name: '')
321
+ @index = index
322
+ @from = from
323
+ @zodiac_name = zodiac_name
324
+ end
325
+
326
+ #
327
+ # 無効か
328
+ #
329
+ # @return [True] 無効
330
+ # @return [False] 有効
331
+ #
332
+ def invalid?
333
+ @index == -1
334
+ end
335
+ end
336
+ end
337
+
338
+ #
339
+ # Number 月
340
+ #
341
+ class Number
342
+ # @return [Integer] 計算
343
+ attr_reader :calc
344
+ # @return [Integer] 運用
345
+ attr_reader :actual
346
+
347
+ #
348
+ # 初期化
349
+ #
350
+ # @param [Integer] calc 計算
351
+ # @param [Integer] actual 運用
352
+ #
353
+ def initialize(calc: -1, actual: -1)
354
+ @calc = calc
355
+ @actual = actual
356
+ end
357
+
358
+ #
359
+ # 無効か
360
+ #
361
+ # @return [True] 無効
362
+ # @return [False] 有効
363
+ #
364
+ def invalid?
365
+ @calc == -1 || @actual == -1
366
+ end
367
+ end
368
+
369
+ #
370
+ # Leaped 閏有無
371
+ #
372
+ class Leaped
373
+ # @return [True, False] 計算
374
+ attr_reader :calc
375
+ # @return [True, False] 運用
376
+ attr_reader :actual
377
+
378
+ # :reek:BooleanParameter
379
+
380
+ #
381
+ # 初期化
382
+ #
383
+ # @param [True, False] calc 計算
384
+ # @param [True, False] actual 運用
385
+ #
386
+ def initialize(calc: false, actual: false)
387
+ @calc = calc
388
+ @actual = actual
389
+ end
390
+
391
+ #
392
+ # 無効か
393
+ #
394
+ # @return [True] 無効(設定値なし)
395
+ # @return [False] 有効
396
+ #
397
+ def invalid?
398
+ !@calc && !@actual
399
+ end
400
+ end
401
+
402
+ #
403
+ # Days 月大小
404
+ #
405
+ class Days
406
+ # @return [String] 29日
407
+ SMALL = '小'
408
+ # @return [String] 30日
409
+ BIG = '大'
410
+
411
+ #
412
+ # 初期化
413
+ #
414
+ # @param [String] calc 計算
415
+ # @param [String] actual 運用
416
+ #
417
+ def initialize(calc: '小', actual: '小')
418
+ @calc = calc
419
+ @actual = actual
420
+ end
421
+
422
+ #
423
+ # 計算値が大か
424
+ #
425
+ # @return [True] 大
426
+ # @return [False] 小
427
+ #
428
+ def calc
429
+ @calc == BIG
430
+ end
431
+
432
+ #
433
+ # 運用値が大か
434
+ #
435
+ # @return [True] 大
436
+ # @return [False] 小
437
+ #
438
+ def actual
439
+ @actual == BIG
440
+ end
441
+
442
+ #
443
+ # 無効か
444
+ #
445
+ # @return [True] 無効(差分なし/設定値なし)
446
+ # @return [False] 有効
447
+ #
448
+ def invalid?
449
+ @calc == @actual
450
+ end
451
+ end
452
+ end
453
+ end