zakuro 0.9.2 → 0.9.4
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.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/VERSION +1 -1
- data/doc/dropped_date.md +25 -0
- data/doc/operation/csv/month.csv +4 -5
- data/doc/operation/operation.xlsx +0 -0
- data/doc/vanished_date.md +26 -0
- data/lib/zakuro/calculation/cycle/abstract_remainder.rb +26 -0
- data/lib/zakuro/calculation/cycle/abstract_solar_term.rb +7 -1
- data/lib/zakuro/calculation/era/gengou/dated_scroll.rb +8 -2
- data/lib/zakuro/calculation/era/gengou/internal/counter.rb +5 -5
- data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_list.rb +18 -5
- data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_range.rb +24 -9
- data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_list.rb +7 -2
- data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_range.rb +7 -2
- data/lib/zakuro/calculation/era/gengou/internal/reserve/named_list.rb +13 -3
- data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +15 -4
- data/lib/zakuro/calculation/era/gengou/named_scroll.rb +8 -2
- data/lib/zakuro/calculation/monthly/initialized_month.rb +4 -2
- data/lib/zakuro/calculation/monthly/meta/all_solar_term.rb +64 -0
- data/lib/zakuro/calculation/monthly/meta/meta_collector.rb +80 -0
- data/lib/zakuro/calculation/monthly/meta.rb +60 -0
- data/lib/zakuro/calculation/monthly/month.rb +119 -5
- data/lib/zakuro/calculation/monthly/operated_month.rb +7 -19
- data/lib/zakuro/calculation/option/dropped_date/location.rb +20 -24
- data/lib/zakuro/calculation/option/vanished_date/location.rb +9 -2
- data/lib/zakuro/calculation/range/abstract_full_range.rb +19 -2
- data/lib/zakuro/calculation/range/abstract_operation_range.rb +20 -2
- data/lib/zakuro/calculation/range/dated_full_range.rb +8 -3
- data/lib/zakuro/calculation/range/dated_operation_range.rb +4 -1
- data/lib/zakuro/calculation/range/medieval_annual_range.rb +1 -1
- data/lib/zakuro/calculation/range/named_full_range.rb +3 -1
- data/lib/zakuro/calculation/range/named_operation_range.rb +3 -1
- data/lib/zakuro/calculation/range/transfer/gengou_scroller.rb +2 -1
- data/lib/zakuro/calculation/range/transfer/year_boundary.rb +10 -8
- data/lib/zakuro/calculation/stella/solar/abstract_average.rb +8 -34
- data/lib/zakuro/calculation/summary/internal/option.rb +24 -5
- data/lib/zakuro/calculation/summary/western/range.rb +8 -1
- data/lib/zakuro/calculation/summary/western/single.rb +12 -5
- data/lib/zakuro/calculation/summary/western/specifier/single_day.rb +1 -1
- data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +1 -1
- data/lib/zakuro/era/japan/gengou/alignment.rb +41 -2
- data/lib/zakuro/era/japan/gengou/resource/parser.rb +83 -25
- data/lib/zakuro/era/japan/gengou/resource/type.rb +81 -26
- data/lib/zakuro/era/japan/gengou/resource/validator.rb +100 -21
- data/lib/zakuro/era/japan/gengou/resource/yaml/set-001-until-south.yaml +1123 -375
- data/lib/zakuro/era/japan/gengou/resource/yaml/set-002-from-north.yaml +487 -163
- data/lib/zakuro/era/japan/gengou/resource/yaml/set-003-modern.yaml +30 -10
- data/lib/zakuro/era/japan/gengou/resource.rb +16 -0
- data/lib/zakuro/era/japan/gengou.rb +11 -6
- data/lib/zakuro/operation/yaml/month.yaml +4 -36
- data/lib/zakuro/output/logger.rb +21 -3
- data/lib/zakuro/tools/gengou_range_comparer.rb +82 -0
- data/lib/zakuro/tools/remainder_comparer.rb +100 -0
- metadata +11 -6
@@ -21,12 +21,13 @@ module Zakuro
|
|
21
21
|
# 年間範囲内の年データの開始月を変更する
|
22
22
|
#
|
23
23
|
# @param [Context::Context] context 暦コンテキスト
|
24
|
-
# @param [Array<
|
24
|
+
# @param [Array<Array<Monthly::Month>>] annual_ranges 年データ(冬至基準)
|
25
25
|
#
|
26
26
|
# @return [Array<Base::Year>] 年データ(元旦基準)
|
27
27
|
#
|
28
28
|
def get(context:, annual_ranges:)
|
29
29
|
categorize(context: context, annual_ranges: annual_ranges)
|
30
|
+
|
30
31
|
rearranged_years(context: context, annual_ranges: annual_ranges)
|
31
32
|
end
|
32
33
|
|
@@ -36,7 +37,7 @@ module Zakuro
|
|
36
37
|
# 年間範囲内の年データの開始月を変更する
|
37
38
|
#
|
38
39
|
# @param [Context::Context] context 暦コンテキスト
|
39
|
-
# @param [Array<
|
40
|
+
# @param [Array<Array<Monthly::Month>>] annual_ranges 年データ(冬至基準)
|
40
41
|
#
|
41
42
|
# @return [Array<Base::Year>] 年データ(元旦基準)
|
42
43
|
#
|
@@ -57,7 +58,7 @@ module Zakuro
|
|
57
58
|
# 年間範囲を昨年/今年で分類する
|
58
59
|
#
|
59
60
|
# @param [Context::Context] context 暦コンテキスト
|
60
|
-
# @param [Array<
|
61
|
+
# @param [Array<Array<Monthly::Month>>] annual_range 1年データ
|
61
62
|
#
|
62
63
|
def categorize(context:, annual_ranges:)
|
63
64
|
annual_ranges.each do |annual_range|
|
@@ -69,7 +70,7 @@ module Zakuro
|
|
69
70
|
# 各月を昨年/今年で分類する
|
70
71
|
#
|
71
72
|
# @param [Context::Context] context 暦コンテキスト
|
72
|
-
# @param [Array<Month>] annual_range 1年データ
|
73
|
+
# @param [Array<Monthly::Month>] annual_range 1年データ
|
73
74
|
#
|
74
75
|
def categorize_year(context:, annual_range:)
|
75
76
|
is_last_year = true
|
@@ -80,7 +81,8 @@ module Zakuro
|
|
80
81
|
context: context,
|
81
82
|
month_label: month.month_label, first_day: month.first_day,
|
82
83
|
solar_terms: month.solar_terms, phase_index: month.phase_index,
|
83
|
-
is_last_year: is_last_year
|
84
|
+
is_last_year: is_last_year,
|
85
|
+
meta: month.meta
|
84
86
|
)
|
85
87
|
end
|
86
88
|
end
|
@@ -89,7 +91,7 @@ module Zakuro
|
|
89
91
|
# 年データの開始月を変更する
|
90
92
|
#
|
91
93
|
# @param [Context::Context] context 暦コンテキスト
|
92
|
-
# @param [Array<
|
94
|
+
# @param [Array<Array<Monthly::Month>>] annual_ranges 年データ(冬至基準)
|
93
95
|
# @param [Integer] index 対象年の要素番号
|
94
96
|
#
|
95
97
|
# @return [Base::Year] 年データ(元旦基準)
|
@@ -108,7 +110,7 @@ module Zakuro
|
|
108
110
|
# 当年データを生成する
|
109
111
|
#
|
110
112
|
# @param [Context::Context] context 暦コンテキスト
|
111
|
-
# @param [Array<Month>] annual_range 1年データ
|
113
|
+
# @param [Array<Monthly::Month>] annual_range 1年データ
|
112
114
|
#
|
113
115
|
# @return [Base::Year] 当年月ありの対象年
|
114
116
|
#
|
@@ -126,7 +128,7 @@ module Zakuro
|
|
126
128
|
#
|
127
129
|
# 昨年データを生成する
|
128
130
|
#
|
129
|
-
# @param [Array<Month>] annual_range 1年データ
|
131
|
+
# @param [Array<Monthly::Month>] annual_range 1年データ
|
130
132
|
# @param [Base::Year] year 対象年
|
131
133
|
#
|
132
134
|
# @return [Base::Year] 昨年月ありの対象年
|
@@ -1,5 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../monthly/meta/meta_collector'
|
4
|
+
|
5
|
+
require_relative '../../../tools/remainder_comparer'
|
6
|
+
|
3
7
|
# :nodoc:
|
4
8
|
module Zakuro
|
5
9
|
# :nodoc:
|
@@ -42,36 +46,6 @@ module Zakuro
|
|
42
46
|
annual_range
|
43
47
|
end
|
44
48
|
|
45
|
-
# :reek:TooManyStatements { max_statements: 7 }
|
46
|
-
|
47
|
-
class << self
|
48
|
-
#
|
49
|
-
# 月内(当月朔日から当月末日(来月朔日の前日)の間)に二十四節気があるか
|
50
|
-
# @note 大余60で一巡するため 以下2パターンがある
|
51
|
-
# * current_month <= next_month : (二十四節気) >= current_month && (二十四節気) < next_month
|
52
|
-
# * current_month > next_month : (二十四節気) >= current_month || (二十四節気) < next_month
|
53
|
-
#
|
54
|
-
# @param [Cycle::AbstractRemainder] solar_term 二十四節気
|
55
|
-
# @param [Cycle::AbstractRemainder] current_month 月初
|
56
|
-
# @param [Cycle::AbstractRemainder] next_month 月末
|
57
|
-
#
|
58
|
-
# @return [True] 対象の二十四節気がある
|
59
|
-
# @return [False] 対象の二十四節気がない
|
60
|
-
#
|
61
|
-
def in_solar_term?(solar_term:, current_month:, next_month:)
|
62
|
-
# 大余で比較する
|
63
|
-
target_time = solar_term.day
|
64
|
-
current_month_time = current_month.day
|
65
|
-
next_month_time = next_month.day
|
66
|
-
current_month_over = (target_time >= current_month_time)
|
67
|
-
next_month_under = (target_time < next_month_time)
|
68
|
-
|
69
|
-
return current_month_over && next_month_under if current_month_time <= next_month_time
|
70
|
-
|
71
|
-
current_month_over || next_month_under
|
72
|
-
end
|
73
|
-
end
|
74
|
-
|
75
49
|
private
|
76
50
|
|
77
51
|
# :reek:TooManyStatements { max_statements: 8 }
|
@@ -87,10 +61,10 @@ module Zakuro
|
|
87
61
|
# * 最大試行回数:4回(設定なし => 設定あり => 設定あり => 設定なし)
|
88
62
|
# * 閏月は1回しか設定しない
|
89
63
|
# * 最大2回設定する(中気・節気)
|
90
|
-
|
91
|
-
in_range =
|
92
|
-
|
93
|
-
|
64
|
+
4.times.each do |_index|
|
65
|
+
in_range = Tools::RemainderComparer.in_range?(
|
66
|
+
target: solar_term.remainder, start: current_month.remainder,
|
67
|
+
last: next_month.remainder
|
94
68
|
)
|
95
69
|
|
96
70
|
# 範囲外
|
@@ -34,17 +34,32 @@ module Zakuro
|
|
34
34
|
context = month.context
|
35
35
|
|
36
36
|
if context.option.dropped_date?
|
37
|
+
solar_term = month.solar_term_by_day(day: day.remainder.day)
|
38
|
+
|
37
39
|
remainder = day.remainder
|
38
|
-
solar_terms = month.solar_terms
|
39
40
|
option = dropped_date(
|
40
|
-
context: context, remainder: remainder,
|
41
|
+
context: context, remainder: remainder, solar_term: solar_term
|
41
42
|
)
|
42
43
|
options[Context::Option::DROPPED_DATE_KEY] = option
|
43
44
|
end
|
44
45
|
|
46
|
+
# TODO: refactor
|
45
47
|
if context.option.vanished_date?
|
46
48
|
remainder = day.remainder
|
47
49
|
average_remainder = month.first_day.average_remainder
|
50
|
+
# p "remainder: #{remainder.format}"
|
51
|
+
# p "last_average_remainder: #{month.meta.last_average_remainder.format}"
|
52
|
+
|
53
|
+
if day.number == 1
|
54
|
+
option = vanished_date(
|
55
|
+
context: context, remainder: remainder,
|
56
|
+
average_remainder: month.meta.last_average_remainder
|
57
|
+
)
|
58
|
+
options[Context::Option::VANISHED_DATE_KEY] = option
|
59
|
+
|
60
|
+
return options if option.matched
|
61
|
+
end
|
62
|
+
|
48
63
|
option = vanished_date(
|
49
64
|
context: context, remainder: remainder, average_remainder: average_remainder
|
50
65
|
)
|
@@ -61,19 +76,21 @@ module Zakuro
|
|
61
76
|
#
|
62
77
|
# @param [Context::Context] context 暦コンテキスト
|
63
78
|
# @param [Cycle::AbstractRemainder] remainder 当日和暦日
|
64
|
-
# @param [
|
79
|
+
# @param [Cycle::AbstractSolarTerm] solar_terms 二十四節気
|
65
80
|
#
|
66
81
|
# @return [Result::Data::Option::DroppedDate::Option] 没日
|
67
82
|
#
|
68
|
-
def dropped_date(context:, remainder:,
|
83
|
+
def dropped_date(context:, remainder:, solar_term:)
|
69
84
|
option = Result::Data::Option::DroppedDate::Option.new
|
70
85
|
|
71
86
|
return option if remainder.invalid?
|
72
87
|
|
73
88
|
location = Calculation::Option::DroppedDate::Location.new(
|
74
|
-
context: context,
|
89
|
+
context: context, solar_term: solar_term
|
75
90
|
)
|
76
91
|
|
92
|
+
return option if location.invalid?
|
93
|
+
|
77
94
|
return option unless location.exist?
|
78
95
|
|
79
96
|
dropped_date = location.get
|
@@ -122,6 +139,8 @@ module Zakuro
|
|
122
139
|
context: context, average_remainder: average_remainder
|
123
140
|
)
|
124
141
|
|
142
|
+
return Result::Data::Option::VanishedDate::Option.new if location.invalid?
|
143
|
+
|
125
144
|
unless location.exist?
|
126
145
|
# 結果確認のため経朔だけは設定する
|
127
146
|
return Result::Data::Option::VanishedDate::Option.new(
|
@@ -35,6 +35,7 @@ module Zakuro
|
|
35
35
|
years = get_full_range_years(
|
36
36
|
context: context, start_date: start_date, last_date: last_date
|
37
37
|
)
|
38
|
+
|
38
39
|
operated_years = get_operation_range_years(
|
39
40
|
context: context, years: years, start_date: start_date, last_date: last_date
|
40
41
|
)
|
@@ -66,8 +67,14 @@ module Zakuro
|
|
66
67
|
#
|
67
68
|
def get_full_range_years(context:, start_date: Western::Calendar.new,
|
68
69
|
last_date: Western::Calendar.new)
|
70
|
+
# 年情報の再計算
|
71
|
+
# * 元号開始日に計算値と運用値のズレが見られる場合、年情報の範囲が異なる場合がある
|
72
|
+
# * 例:0781-03-01(計算値は前の元号の「宝亀」を含めるが、運用値では含まない)
|
73
|
+
#
|
74
|
+
# 運用値の範囲で日付検索するが、元号開始日は計算値のままで取る
|
69
75
|
full_range = Calculation::Range::DatedFullRange.new(
|
70
|
-
context: context, start_date: start_date, last_date: last_date
|
76
|
+
context: context, start_date: start_date, last_date: last_date,
|
77
|
+
operated: true, restored: true
|
71
78
|
)
|
72
79
|
full_range.get
|
73
80
|
end
|
@@ -1,13 +1,15 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative '../../../tools/gengou_range_comparer'
|
4
|
+
|
3
5
|
require_relative '../../range/dated_operation_range'
|
4
6
|
|
5
7
|
require_relative '../../range/dated_full_range'
|
6
8
|
|
7
|
-
require_relative './specifier/single_day'
|
8
|
-
|
9
9
|
require_relative '../internal/operation'
|
10
10
|
|
11
|
+
require_relative './specifier/single_day'
|
12
|
+
|
11
13
|
# :nodoc:
|
12
14
|
module Zakuro
|
13
15
|
# :nodoc:
|
@@ -53,8 +55,13 @@ module Zakuro
|
|
53
55
|
# @return [Array<Calculation::Base::Year>] 完全範囲
|
54
56
|
#
|
55
57
|
def get_full_range_years(context:, date: Western::Calendar.new)
|
58
|
+
# 年情報の再計算
|
59
|
+
# * 元号開始日に計算値と運用値のズレが見られる場合、年情報の範囲が異なる場合がある
|
60
|
+
# * 例:0781-03-01(計算値は前の元号の「宝亀」を含めるが、運用値では含まない)
|
61
|
+
#
|
62
|
+
# 運用値の範囲で日付検索するが、元号開始日は計算値のままで取る
|
56
63
|
full_range = Calculation::Range::DatedFullRange.new(
|
57
|
-
context: context, start_date: date
|
64
|
+
context: context, start_date: date, operated: true, restored: true
|
58
65
|
)
|
59
66
|
full_range.get
|
60
67
|
end
|
@@ -93,12 +100,12 @@ module Zakuro
|
|
93
100
|
end
|
94
101
|
|
95
102
|
#
|
96
|
-
#
|
103
|
+
# 運用情報を取得する
|
97
104
|
#
|
98
105
|
# @param [Array<Calculation::Base::Year>] years 完全範囲
|
99
106
|
# @param [Western::Calendar] date 西暦日
|
100
107
|
#
|
101
|
-
# @return [
|
108
|
+
# @return [Result::Operation] 運用情報
|
102
109
|
#
|
103
110
|
def get_operation(years:, date: Western::Calendar.new)
|
104
111
|
calc_date = Specifier::SingleDay.get(
|
@@ -23,6 +23,9 @@ module Zakuro
|
|
23
23
|
# @return [Aligner] 整列結果
|
24
24
|
SUMMARY = Aligner.new(resources: Resource::LIST)
|
25
25
|
|
26
|
+
# @return [Aligner] 整列結果(運用値)
|
27
|
+
OPERATED_SUMMARY = Aligner.new(resources: Resource::OPERATED_LIST)
|
28
|
+
|
26
29
|
class << self
|
27
30
|
#
|
28
31
|
# 指定した範囲内の元号を取得する
|
@@ -30,11 +33,20 @@ module Zakuro
|
|
30
33
|
# @param [Integer] line 行
|
31
34
|
# @param [Western::Calendar] start_date 開始日
|
32
35
|
# @param [Western::Calendar] last_date 終了日
|
36
|
+
# @param [True, False] operated 運用値設定
|
37
|
+
# @param [True, False] restored 運用値から計算値に戻すか
|
33
38
|
#
|
34
39
|
# @return [Array<LinearGengou>] 元号
|
35
40
|
#
|
36
41
|
def get(line: FIRST_LINE,
|
37
|
-
start_date: Western::Calendar.new, last_date: Western::Calendar.new
|
42
|
+
start_date: Western::Calendar.new, last_date: Western::Calendar.new,
|
43
|
+
operated: false, restored: false)
|
44
|
+
if operated
|
45
|
+
result = OPERATED_SUMMARY.get(line: line, start_date: start_date, last_date: last_date)
|
46
|
+
return result unless restored
|
47
|
+
|
48
|
+
return restore(line: line, list: result)
|
49
|
+
end
|
38
50
|
|
39
51
|
SUMMARY.get(line: line, start_date: start_date, last_date: last_date)
|
40
52
|
end
|
@@ -44,12 +56,39 @@ module Zakuro
|
|
44
56
|
#
|
45
57
|
# @param [Integer] line 行
|
46
58
|
# @param [String] name 元号名
|
59
|
+
# @param [True, False] operated 運用値設定
|
60
|
+
# @param [True, False] restored 運用値から計算値に戻すか
|
47
61
|
#
|
48
62
|
# @return [Array<LinearGengou>] 元号
|
49
63
|
#
|
50
|
-
def get_by_name(line: FIRST_LINE, name:)
|
64
|
+
def get_by_name(line: FIRST_LINE, name:, operated: false, restored: false)
|
65
|
+
if operated
|
66
|
+
result = OPERATED_SUMMARY.get_by_name(line: line, name: name)
|
67
|
+
return result unless restored
|
68
|
+
|
69
|
+
return restore(line: line, list: result)
|
70
|
+
end
|
71
|
+
|
51
72
|
SUMMARY.get_by_name(line: line, name: name)
|
52
73
|
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# 運用値から計算値に戻す
|
77
|
+
#
|
78
|
+
# @param [Integer] line 行
|
79
|
+
# @param [Array<LinearGengou>] list 元号
|
80
|
+
#
|
81
|
+
# @return [Array<LinearGengou>] 元号
|
82
|
+
#
|
83
|
+
def restore(line: FIRST_LINE, list: [])
|
84
|
+
result = []
|
85
|
+
list.each do |gengou|
|
86
|
+
calc = SUMMARY.get_by_name(line: line, name: gengou.name)
|
87
|
+
result |= calc
|
88
|
+
end
|
89
|
+
|
90
|
+
result
|
91
|
+
end
|
53
92
|
end
|
54
93
|
end
|
55
94
|
end
|
@@ -30,9 +30,11 @@ module Zakuro
|
|
30
30
|
# @return [String] 元号名
|
31
31
|
attr_reader :name
|
32
32
|
# @return [Hash<String, String>] 開始年
|
33
|
-
attr_reader :
|
33
|
+
attr_reader :start_year
|
34
34
|
# @return [Hash<String, String>] 開始日
|
35
|
-
attr_reader :
|
35
|
+
attr_reader :start_date
|
36
|
+
# @return [True, False] 運用値
|
37
|
+
attr_reader :operated
|
36
38
|
|
37
39
|
#
|
38
40
|
# 初期化
|
@@ -40,11 +42,12 @@ module Zakuro
|
|
40
42
|
# @param [Hash<String, Strin>] hash 元号情報
|
41
43
|
# @param [Integer] index (元号セット内での)元号の要素位置
|
42
44
|
#
|
43
|
-
def initialize(hash:, index:)
|
45
|
+
def initialize(hash:, index:, operated: false)
|
44
46
|
@index = index
|
45
47
|
@name = hash['name']
|
46
|
-
@
|
47
|
-
@
|
48
|
+
@start_year = hash['start_year']
|
49
|
+
@start_date = hash['start_date']
|
50
|
+
@operated = operated
|
48
51
|
end
|
49
52
|
|
50
53
|
#
|
@@ -53,11 +56,11 @@ module Zakuro
|
|
53
56
|
# @return [Gengou] 元号情報
|
54
57
|
#
|
55
58
|
def create
|
56
|
-
|
57
|
-
|
59
|
+
year = Both::YearParser.new(hash: start_year).create
|
60
|
+
date = SwitchDateParser.new(hash: start_date, operated: operated).create
|
58
61
|
|
59
|
-
Gengou.new(name: name,
|
60
|
-
|
62
|
+
Gengou.new(name: name, start_year: year,
|
63
|
+
start_date: date)
|
61
64
|
end
|
62
65
|
end
|
63
66
|
|
@@ -70,23 +73,27 @@ module Zakuro
|
|
70
73
|
# @return [String] 元号セット名
|
71
74
|
attr_reader :name
|
72
75
|
# @return [Hash<String, String>] 終了年
|
73
|
-
attr_reader :
|
76
|
+
attr_reader :last_year
|
74
77
|
# @return [Hash<String, String>] 終了日
|
75
|
-
attr_reader :
|
78
|
+
attr_reader :last_date
|
76
79
|
# @return [Array<Hash<String, String>>] 元号情報
|
77
80
|
attr_reader :list
|
81
|
+
# @return [True, False] 運用値
|
82
|
+
attr_reader :operated
|
78
83
|
|
79
84
|
#
|
80
85
|
# 初期化
|
81
86
|
#
|
82
87
|
# @param [Hash<String, Object>] hash 元号セット情報
|
88
|
+
# @param [True, False] operated 運用値設定
|
83
89
|
#
|
84
|
-
def initialize(hash:)
|
90
|
+
def initialize(hash:, operated: false)
|
85
91
|
@id = hash['id']
|
86
92
|
@name = hash['name']
|
87
|
-
@
|
88
|
-
@
|
93
|
+
@last_year = hash['last_year']
|
94
|
+
@last_date = hash['last_date']
|
89
95
|
@list = hash['list']
|
96
|
+
@operated = operated
|
90
97
|
end
|
91
98
|
|
92
99
|
#
|
@@ -95,10 +102,10 @@ module Zakuro
|
|
95
102
|
# @return [Set] 元号セット情報
|
96
103
|
#
|
97
104
|
def create
|
98
|
-
|
105
|
+
date = SwitchDateParser.new(hash: last_date, operated: operated).create
|
99
106
|
list = create_list
|
100
107
|
Set.new(
|
101
|
-
id: id, name: name,
|
108
|
+
id: id, name: name, last_date: date, list: list
|
102
109
|
)
|
103
110
|
end
|
104
111
|
|
@@ -112,7 +119,9 @@ module Zakuro
|
|
112
119
|
def create_list
|
113
120
|
result = []
|
114
121
|
list.each_with_index do |li, index|
|
115
|
-
gengou = GengouParser.new(
|
122
|
+
gengou = GengouParser.new(
|
123
|
+
hash: li, index: index, operated: operated
|
124
|
+
).create
|
116
125
|
next_index = index + 1
|
117
126
|
gengou = calc_last_date_on_gengou_data(next_index: next_index,
|
118
127
|
gengou: gengou)
|
@@ -136,11 +145,15 @@ module Zakuro
|
|
136
145
|
return gengou
|
137
146
|
end
|
138
147
|
next_item = list[next_index]
|
148
|
+
next_start_date = SwitchDateParser.new(
|
149
|
+
hash: next_item['start_date'], operated: operated
|
150
|
+
).create
|
151
|
+
|
139
152
|
gengou.convert_next_start_year_to_last_year(
|
140
153
|
next_start_year: next_item['start_year']['western']
|
141
154
|
)
|
142
155
|
gengou.convert_next_start_date_to_last_date(
|
143
|
-
next_start_date:
|
156
|
+
next_start_date: next_start_date.western
|
144
157
|
)
|
145
158
|
gengou
|
146
159
|
end
|
@@ -153,9 +166,50 @@ module Zakuro
|
|
153
166
|
# @param [GengouParser] gengou 元号
|
154
167
|
#
|
155
168
|
def last_gengou_data(gengou:)
|
156
|
-
gengou.write_last_year(last_year:
|
157
|
-
|
158
|
-
|
169
|
+
gengou.write_last_year(last_year: last_year['western'])
|
170
|
+
|
171
|
+
date = SwitchDateParser.new(hash: last_date, operated: operated).create
|
172
|
+
|
173
|
+
gengou.write_last_date(last_date: date.western)
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
#
|
178
|
+
# SwitchDateParser 切替日(運用/計算)
|
179
|
+
#
|
180
|
+
class SwitchDateParser
|
181
|
+
# @return [Hash<String, Strin>] 計算値
|
182
|
+
attr_reader :calculation
|
183
|
+
# @return [Hash<String, Strin>] 運用値
|
184
|
+
attr_reader :operation
|
185
|
+
# @return [True, False] 運用値
|
186
|
+
attr_reader :operated
|
187
|
+
|
188
|
+
#
|
189
|
+
# 初期化
|
190
|
+
#
|
191
|
+
# @param [Hash<String, Strin>] hash 切替日(運用/計算)
|
192
|
+
# @param [True, False] operated 運用値設定
|
193
|
+
#
|
194
|
+
def initialize(hash:, operated: false)
|
195
|
+
@calculation = hash['calculation']
|
196
|
+
@operation = hash['operation']
|
197
|
+
@operated = operated
|
198
|
+
end
|
199
|
+
|
200
|
+
#
|
201
|
+
# 切替日(運用/計算)情報を生成する
|
202
|
+
#
|
203
|
+
# @return [SwitchDate] 切替日(運用/計算)情報
|
204
|
+
#
|
205
|
+
def create
|
206
|
+
calculation_date = Both::DateParser.new(hash: calculation).create
|
207
|
+
operation_date = Both::DateParser.new(hash: operation).create
|
208
|
+
|
209
|
+
Japan::Gengou::Resource::SwitchDate.new(
|
210
|
+
calculation: calculation_date, operation: operation_date,
|
211
|
+
operated: operated
|
212
|
+
)
|
159
213
|
end
|
160
214
|
end
|
161
215
|
|
@@ -222,8 +276,11 @@ module Zakuro
|
|
222
276
|
# @return [Both::Date] 日情報
|
223
277
|
#
|
224
278
|
def create
|
225
|
-
japan_date = Japan::Calendar.
|
226
|
-
western_date = Western::Calendar.
|
279
|
+
japan_date = Japan::Calendar.new
|
280
|
+
western_date = Western::Calendar.new
|
281
|
+
|
282
|
+
japan_date = Japan::Calendar.parse(text: japan) unless japan == ''
|
283
|
+
western_date = Western::Calendar.parse(text: western) unless western == ''
|
227
284
|
|
228
285
|
Japan::Gengou::Resource::Both::Date.new(
|
229
286
|
japan: japan_date, western: western_date
|
@@ -237,19 +294,20 @@ module Zakuro
|
|
237
294
|
# 解析/展開する
|
238
295
|
#
|
239
296
|
# @param [String] filepath 元号セットファイルパス
|
297
|
+
# @param [True, False] operated 運用値設定
|
240
298
|
#
|
241
299
|
# @return [Set] 元号セット情報
|
242
300
|
#
|
243
301
|
# @raise [ArgumentError] 引数エラー
|
244
302
|
#
|
245
|
-
def run(filepath: '')
|
303
|
+
def run(filepath: '', operated: false)
|
246
304
|
yaml = YAML.load_file(filepath)
|
247
305
|
|
248
306
|
failed = Validator.run(yaml_hash: yaml)
|
249
307
|
|
250
308
|
raise ArgumentError, failed.join("\n") unless failed.empty?
|
251
309
|
|
252
|
-
parser = SetParser.new(hash: yaml)
|
310
|
+
parser = SetParser.new(hash: yaml, operated: operated)
|
253
311
|
parser.create
|
254
312
|
end
|
255
313
|
end
|