zakuro 0.5.0 → 0.6.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 (63) hide show
  1. checksums.yaml +4 -4
  2. data/VERSION +1 -0
  3. data/lib/zakuro/calculation/base/gengou.rb +82 -0
  4. data/lib/zakuro/calculation/base/linear_gengou.rb +76 -0
  5. data/lib/zakuro/calculation/base/operated_year.rb +5 -15
  6. data/lib/zakuro/calculation/base/year.rb +26 -14
  7. data/lib/zakuro/calculation/gengou/internal/counter.rb +129 -0
  8. data/lib/zakuro/calculation/gengou/internal/reserve/interval.rb +183 -0
  9. data/lib/zakuro/calculation/gengou/internal/reserve/list.rb +382 -0
  10. data/lib/zakuro/calculation/gengou/internal/reserve.rb +42 -0
  11. data/lib/zakuro/calculation/gengou/scroll.rb +262 -0
  12. data/lib/zakuro/calculation/monthly/first_day.rb +3 -2
  13. data/lib/zakuro/calculation/monthly/month.rb +49 -2
  14. data/lib/zakuro/calculation/monthly/operated_month.rb +2 -2
  15. data/lib/zakuro/calculation/range/full_range.rb +65 -103
  16. data/lib/zakuro/calculation/range/operated_range.rb +13 -8
  17. data/lib/zakuro/calculation/range/operated_solar_terms.rb +36 -17
  18. data/lib/zakuro/calculation/range/transfer/gengou_scroller.rb +54 -0
  19. data/lib/zakuro/calculation/range/transfer/year_boundary.rb +25 -21
  20. data/lib/zakuro/calculation/specifier/single_day.rb +13 -35
  21. data/lib/zakuro/calculation/summary/single.rb +5 -2
  22. data/lib/zakuro/calculation/version/internal/crawler.rb +51 -0
  23. data/lib/zakuro/calculation/version/internal/range.rb +39 -0
  24. data/lib/zakuro/calculation/version/version.rb +24 -0
  25. data/lib/zakuro/era/japan/calendar.rb +133 -0
  26. data/lib/zakuro/era/japan/gengou/parser.rb +95 -25
  27. data/lib/zakuro/era/japan/gengou/type.rb +148 -41
  28. data/lib/zakuro/era/japan/gengou/validator.rb +157 -52
  29. data/lib/zakuro/era/japan/gengou/yaml/set-001-until-south.yaml +1870 -0
  30. data/lib/zakuro/era/japan/gengou/yaml/set-002-from-north.yaml +810 -0
  31. data/lib/zakuro/era/japan/gengou/yaml/set-003-modern.yaml +50 -0
  32. data/lib/zakuro/era/japan/gengou.rb +5 -5
  33. data/lib/zakuro/era/japan/version.rb +151 -0
  34. data/lib/zakuro/era/{western.rb → western/calendar.rb} +0 -0
  35. data/lib/zakuro/merchant.rb +12 -3
  36. data/lib/zakuro/operation/month/parser.rb +1 -1
  37. data/lib/zakuro/operation/month/type.rb +1 -1
  38. data/lib/zakuro/operation/month/validator.rb +1 -1
  39. data/lib/zakuro/output/response.rb +5 -5
  40. data/lib/zakuro/tools/typeconv.rb +38 -0
  41. data/lib/zakuro/tools/typeof.rb +4 -1
  42. data/lib/zakuro/version/context.rb +24 -3
  43. data/lib/zakuro/version/daien/daien.rb +1 -26
  44. data/lib/zakuro/version/genka/genka.rb +1 -26
  45. data/lib/zakuro/version/gihou/gihou.rb +1 -30
  46. data/lib/zakuro/version/gregorio/gregorio.rb +1 -9
  47. data/lib/zakuro/version/houryaku/houryaku.rb +1 -9
  48. data/lib/zakuro/version/joukyou/joukyou.rb +1 -9
  49. data/lib/zakuro/version/kansei/kansei.rb +1 -9
  50. data/lib/zakuro/version/senmyou/senmyou.rb +1 -30
  51. data/lib/zakuro/version/tenpou/tenpou.rb +1 -9
  52. data/zakuro.gemspec +1 -3
  53. metadata +25 -17
  54. data/lib/zakuro/calculation/base/multi_gengou.rb +0 -101
  55. data/lib/zakuro/calculation/base/multi_gengou_roller.rb +0 -218
  56. data/lib/zakuro/calculation/range/transfer/western_date_allocation.rb +0 -82
  57. data/lib/zakuro/era/japan/reki.rb +0 -91
  58. data/lib/zakuro/era/japan/yaml/set-001-until-south.yaml +0 -1121
  59. data/lib/zakuro/era/japan/yaml/set-002-from-north.yaml +0 -485
  60. data/lib/zakuro/era/japan/yaml/set-003-modern.yaml +0 -28
  61. data/lib/zakuro/version/abstract_version.rb +0 -29
  62. data/lib/zakuro/version.rb +0 -7
  63. data/lib/zakuro/version_factory.rb +0 -59
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative '../base/gengou'
3
4
  require_relative './first_day'
4
5
  require_relative './month_label'
5
6
 
@@ -21,6 +22,8 @@ module Zakuro
21
22
  attr_reader :first_day
22
23
  # @return [Array<SolarTerm>] 二十四節気
23
24
  attr_reader :solar_terms
25
+ # @return [Base::Gengou] 元号
26
+ attr_reader :gengou
24
27
 
25
28
  #
26
29
  # 初期化
@@ -29,13 +32,25 @@ module Zakuro
29
32
  # @param [MonthLabel] month_label 月表示名
30
33
  # @param [FirstDay] first_day 月初日(朔日)
31
34
  # @param [Array<SolarTerm>] solar_terms 二十四節気
35
+ # @param [Base::Gengou] gengou 元号
32
36
  #
33
- def initialize(context:, month_label: MonthLabel.new, first_day: FirstDay.new,
34
- solar_terms: [])
37
+ def initialize(context: Context.new, month_label: MonthLabel.new, first_day: FirstDay.new,
38
+ solar_terms: [], gengou: Base::Gengou.new)
35
39
  @context = context
36
40
  @month_label = month_label
37
41
  @first_day = first_day
38
42
  @solar_terms = solar_terms
43
+ @gengou = gengou
44
+ end
45
+
46
+ #
47
+ # 不正か
48
+ #
49
+ # @return [True] 不正
50
+ # @return [False] 不正なし
51
+ #
52
+ def invalid?
53
+ @context.invalid?
39
54
  end
40
55
 
41
56
  #
@@ -181,6 +196,38 @@ module Zakuro
181
196
  def same?(other:)
182
197
  number == other.number && leaped? == other.leaped?
183
198
  end
199
+
200
+ #
201
+ # 月の終了日を返す
202
+ #
203
+ # @return [Western::Calendar] 月の終了日
204
+ #
205
+ def end_date
206
+ return Western::Calendar.new if western_date.invalid?
207
+
208
+ western_date.clone + days - 1
209
+ end
210
+
211
+ #
212
+ # 範囲内か
213
+ #
214
+ # @param [Western::Calendar] date 日付
215
+ #
216
+ # @return [True] 範囲内
217
+ # @return [False] 範囲外
218
+ #
219
+ def include?(date:)
220
+ return false if invalid?
221
+
222
+ start_date = western_date
223
+ return false if start_date.invalid?
224
+
225
+ return false if date < start_date
226
+
227
+ return false if date > end_date
228
+
229
+ true
230
+ end
184
231
  end
185
232
  end
186
233
  end
@@ -34,10 +34,10 @@ module Zakuro
34
34
  # @param [Operation::MonthHistory] history 変更履歴(月)
35
35
  #
36
36
  def initialize(context:, operated_solar_terms:, month_label: MonthLabel.new,
37
- first_day: FirstDay.new, solar_terms: [],
37
+ first_day: FirstDay.new, solar_terms: [], gengou: Base::Gengou.new,
38
38
  history: Operation::MonthHistory.new)
39
39
  super(context: context, month_label: month_label, first_day: first_day,
40
- solar_terms: solar_terms)
40
+ solar_terms: solar_terms, gengou: gengou)
41
41
  @history = history
42
42
  @operated_solar_terms = operated_solar_terms
43
43
  @moved = false
@@ -1,13 +1,20 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../era/western'
3
+ require_relative '../../version/context'
4
+
5
+ require_relative '../../era/western/calendar'
4
6
  require_relative '../../output/logger'
5
7
 
6
- require_relative '../base/multi_gengou_roller'
8
+ require_relative '../gengou/scroll'
9
+
10
+ require_relative '../base/gengou'
7
11
  require_relative '../base/year'
8
12
 
13
+ require_relative '../version/version'
14
+
9
15
  require_relative './transfer/year_boundary'
10
- require_relative './transfer/western_date_allocation'
16
+
17
+ require_relative './transfer/gengou_scroller'
11
18
 
12
19
  # :nodoc:
13
20
  module Zakuro
@@ -37,11 +44,7 @@ module Zakuro
37
44
  # @return [Western::Calendar] 終了日
38
45
  attr_reader :end_date
39
46
  # @return [MultiGengouRoller] 改元処理
40
- attr_reader :multi_gengou_roller
41
- # @return [Western::Calendar] 最過去の元旦
42
- attr_reader :new_year_date
43
- # @return [Integer] 西暦年
44
- attr_reader :western_year
47
+ attr_reader :scroll
45
48
 
46
49
  # @return [Output::Logger] ロガー
47
50
  LOGGER = Output::Logger.new(location: 'full_range')
@@ -58,12 +61,9 @@ module Zakuro
58
61
  @end_date = end_date
59
62
  return if invalid?
60
63
 
64
+ # TODO: 現時点では使用していない。特定の暦を指定できるようになった状態で使用する
61
65
  @context = context
62
- @multi_gengou_roller = Base::MultiGengouRoller.new(
63
- start_date: start_date, end_date: end_date
64
- )
65
- @new_year_date = @multi_gengou_roller.oldest_date.clone
66
- @western_year = @new_year_date.year
66
+ @scroll = Gengou::Scroll.new(start_date: start_date, end_date: end_date)
67
67
  end
68
68
 
69
69
  #
@@ -79,130 +79,92 @@ module Zakuro
79
79
  #
80
80
  # 完全範囲を取得する
81
81
  #
82
- # @return [Array<Year>] 完全範囲
82
+ # @return [Array<Base::Year>] 完全範囲
83
83
  #
84
84
  def get
85
85
  return [] if invalid?
86
86
 
87
- years = Transfer::YearBoundary.get(
88
- context: @context, annual_ranges: annual_ranges
89
- )
90
- years = update_gengou(years: years)
91
-
92
- Transfer::WesternDateAllocation.update_first_day(
93
- context: @context, years: years
94
- )
95
-
96
- years
97
- end
87
+ years = version_ranges
98
88
 
99
- # :reek:TooManyStatements { max_statements: 7 }
100
-
101
- #
102
- # 完全範囲内の年データを取得する
103
- #
104
- # @return [Array<Year>] 年データ(冬至基準)
105
- #
106
- def annual_ranges
107
- oldest_date = @new_year_date
108
- newest_date = @multi_gengou_roller.newest_date
109
- annual_range = context.resolver.annual_range
89
+ years.each(&:commit)
110
90
 
111
- years = []
112
- ((oldest_date.year)..(newest_date.year + 2)).each do |year|
113
- years.push(
114
- annual_range.get(
115
- context: @context, western_year: year
116
- )
117
- )
118
- end
91
+ Transfer::GengouScroller.set(scroll: scroll, years: years)
119
92
 
120
93
  years
121
94
  end
122
95
 
123
- # :reek:TooManyStatements { max_statements: 8 }
96
+ private
124
97
 
125
98
  #
126
- # 完全範囲内の年データの元号を開始年基準で更新する
127
- #
128
- # @param [Array<Year>] years 年データ(元旦基準)
99
+ # 暦別範囲
129
100
  #
130
- # @return [Array<Year>] 元号更新済み年データ(元旦基準)
101
+ # @return [Array<Base::Year>] 完全範囲
131
102
  #
132
- def update_gengou(years:)
133
- updated_years = []
103
+ def version_ranges
104
+ result = []
134
105
 
135
- nearest_end_date = choise_nearest_end_date
106
+ start_year = @scroll.western_start_year
107
+ end_year = @scroll.western_end_year
136
108
 
137
- years.each do |year|
138
- next_year(years: updated_years, year: year)
109
+ versions = Version.get(start_year: start_year, end_year: end_year)
139
110
 
140
- if @new_year_date > nearest_end_date
141
- @multi_gengou_roller.transfer
142
- nearest_end_date = choise_nearest_end_date
143
- end
144
- @multi_gengou_roller.next_year
145
- end
146
-
147
- updated_years
148
- end
111
+ versions.each_with_index do |version, index|
112
+ context = Context.new(version_name: version.name)
113
+ start_year = version.start_year
114
+ end_year = version.end_year
115
+ # 最後の暦だけ1年足す(次の元号の開始年まで計算するケースあり)
116
+ end_year += 1 if (index + 1) == versions.size
149
117
 
150
- private
151
-
152
- #
153
- # 元号処理対象の年を進める
154
- #
155
- # @param [Array<Year>] years 元号処理済み年データ(元旦基準)
156
- # @param [Year] year 元号処理前の年(元旦基準)
157
- #
158
- def next_year(years:, year:)
159
- updated_year = update_year(year: year)
160
-
161
- years.push(updated_year)
162
-
163
- next_new_year_date(total_days: updated_year.total_days)
118
+ years = boundary_resolved_ranges(
119
+ context: context, start_year: start_year, end_year: end_year
120
+ )
121
+ result.concat(years)
122
+ end
164
123
 
165
- nil
124
+ result
166
125
  end
167
126
 
168
127
  #
169
- # 年の元号を更新する
128
+ # 年境界解決済みの範囲
170
129
  #
171
- # @param [Year] year 元号処理前の年(元旦基準)
130
+ # @param [Context] context 暦コンテキスト
131
+ # @param [Integer] start_year 開始西暦年
132
+ # @param [Integer] end_year 終了西暦年
172
133
  #
173
- # @return [Year] 元号処理済の年(元旦基準)
134
+ # @return [Array<Base::Year>] 年境界解決済みの範囲
174
135
  #
175
- def update_year(year:)
176
- multi_gengou = @multi_gengou_roller.multi_gengou.clone
177
-
178
- updated_year = Base::Year.new(
179
- multi_gengou: multi_gengou, new_year_date: @new_year_date.clone,
180
- months: year.months
136
+ def boundary_resolved_ranges(context:, start_year:, end_year:)
137
+ ranges = annual_ranges(
138
+ context: context, start_year: start_year, end_year: end_year
181
139
  )
182
- updated_year.commit
183
140
 
184
- updated_year
141
+ Transfer::YearBoundary.get(
142
+ context: context, annual_ranges: ranges
143
+ )
185
144
  end
186
145
 
187
146
  #
188
- # 次の年に進める
147
+ # 完全範囲内の年データを取得する
189
148
  #
190
- # @param [Integer] total_days 年の日数
149
+ # @param [Context] context 暦コンテキスト
150
+ # @param [Integer] start_year 開始西暦年
151
+ # @param [Integer] end_year 終了西暦年
191
152
  #
192
- def next_new_year_date(total_days:)
193
- @new_year_date += total_days
194
- @multi_gengou_roller.next(days: total_days)
153
+ # @return [Array<Base::Year>] 年データ(冬至基準)
154
+ #
155
+ def annual_ranges(context:, start_year:, end_year:)
156
+ annual_range = context.resolver.annual_range
195
157
 
196
- nil
197
- end
158
+ years = []
159
+ (start_year..(end_year + 1)).each do |year|
160
+ years.push(
161
+ annual_range.get(
162
+ context: context, western_year: year
163
+ )
164
+ )
165
+ end
198
166
 
199
- #
200
- # 現在日からみて直近の未来に対する元号の切替前日を求める
201
- #
202
- # @return [Western::Calendar] 元号の切替前日
203
- #
204
- def choise_nearest_end_date
205
- @multi_gengou_roller.choise_nearest_end_date
167
+ years
206
168
  end
207
169
  end
208
170
  end
@@ -4,6 +4,7 @@ require_relative './operated_solar_terms'
4
4
  require_relative '../../operation/operation'
5
5
  require_relative '../base/operated_year'
6
6
  require_relative '../../calculation/monthly/operated_month'
7
+ require_relative './transfer/gengou_scroller'
7
8
 
8
9
  # :nodoc:
9
10
  module Zakuro
@@ -27,11 +28,15 @@ module Zakuro
27
28
  # 初期化
28
29
  #
29
30
  # @param [Context] context 暦コンテキスト
31
+ # @param [Western::Calendar] start_date 開始日
32
+ # @param [Western::Calendar] end_date 終了日
30
33
  # @param [Array<Year>] years 年データ(完全範囲)
31
34
  #
32
- def initialize(context:, years: [])
35
+ def initialize(context:, start_date: Western::Calendar.new, end_date: Western::Calendar.new,
36
+ years: [])
33
37
  @context = context
34
38
  @years = years
39
+ @scroll = Gengou::Scroll.new(start_date: start_date, end_date: end_date)
35
40
  @operated_solar_terms = OperatedSolarTerms.new(context: context, years: @years)
36
41
  @operated_solar_terms.create
37
42
  end
@@ -48,6 +53,8 @@ module Zakuro
48
53
 
49
54
  OperatedRange.commit(operated_years: operated_years)
50
55
 
56
+ Transfer::GengouScroller.set(scroll: @scroll, years: operated_years)
57
+
51
58
  operated_years
52
59
  end
53
60
 
@@ -61,7 +68,7 @@ module Zakuro
61
68
 
62
69
  years.each do |year|
63
70
  operated_year = OperatedRange.rewrite_year(
64
- context: context, year: year,
71
+ year: year,
65
72
  operated_solar_terms: @operated_solar_terms
66
73
  )
67
74
  operated_years.push(operated_year)
@@ -121,16 +128,14 @@ module Zakuro
121
128
  #
122
129
  # 年を書き換える
123
130
  #
124
- # @param [Context] context 暦コンテキスト
125
131
  # @param [Year] year 年
126
132
  # @param [OperatedSolarTerms] operated_solar_terms 運用時二十四節気
127
133
  #
128
134
  # @return [OperatedYear] 年
129
135
  #
130
- def self.rewrite_year(context:, year:, operated_solar_terms:)
131
- result = Base::OperatedYear.new(
132
- multi_gengou: year.multi_gengou, new_year_date: year.new_year_date
133
- )
136
+ def self.rewrite_year(year:, operated_solar_terms:)
137
+ context = year.context
138
+ result = Base::OperatedYear.new(context: context)
134
139
  year.months.each do |month|
135
140
  result.push(month: resolve_month(
136
141
  context: context, month: month,
@@ -175,7 +180,7 @@ module Zakuro
175
180
  operated_month = Monthly::OperatedMonth.new(
176
181
  context: context,
177
182
  month_label: month.month_label, first_day: month.first_day,
178
- solar_terms: month.solar_terms, history: history,
183
+ solar_terms: month.solar_terms, history: history, gengou: month.gengou,
179
184
  operated_solar_terms: operated_solar_terms
180
185
  )
181
186
 
@@ -57,6 +57,8 @@ module Zakuro
57
57
  # @return [SolarTerm] 二十四節気
58
58
  #
59
59
  def get(western_date: Western::Calendar.new)
60
+ context = current_context(western_date: western_date)
61
+
60
62
  solar_term_class = context.resolver.solar_term
61
63
  solar_term = @directions.fetch(western_date.format, solar_term_class.new)
62
64
 
@@ -68,23 +70,6 @@ module Zakuro
68
70
  [true, solar_term]
69
71
  end
70
72
 
71
- #
72
- # 二十四節気の移動元/移動先を生成する
73
- #
74
- # @return [Hash<String, SolarTerm>] 二十四節気の移動元/移動先(西暦日 -> 対応する二十四節気)
75
- #
76
- def create_directions
77
- directions = {}
78
-
79
- years.each do |year|
80
- OperatedSolarTerms.create_directions_with_months(
81
- context: context, directions: directions, months: year.months
82
- )
83
- end
84
-
85
- directions
86
- end
87
-
88
73
  # :reek:TooManyStatements { max_statements: 6 }
89
74
 
90
75
  #
@@ -195,6 +180,40 @@ module Zakuro
195
180
  index: destination.index
196
181
  )
197
182
  end
183
+
184
+ private
185
+
186
+ #
187
+ # 日付に対応する暦コンテキストを取得する
188
+ #
189
+ # @param [Western::Calendar] western_date 西暦日
190
+ #
191
+ # @return [Context] 暦コンテキスト
192
+ #
193
+ def current_context(western_date: Western::Calendar.new)
194
+ @years.each do |year|
195
+ return year.context if western_date >= year.new_year_date
196
+ end
197
+
198
+ Context.new
199
+ end
200
+
201
+ #
202
+ # 二十四節気の移動元/移動先を生成する
203
+ #
204
+ # @return [Hash<String, SolarTerm>] 二十四節気の移動元/移動先(西暦日 -> 対応する二十四節気)
205
+ #
206
+ def create_directions
207
+ directions = {}
208
+
209
+ years.each do |year|
210
+ OperatedSolarTerms.create_directions_with_months(
211
+ context: year.context, directions: directions, months: year.months
212
+ )
213
+ end
214
+
215
+ directions
216
+ end
198
217
  end
199
218
  end
200
219
  end
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../monthly/month'
4
+
5
+ # :nodoc:
6
+ module Zakuro
7
+ # :nodoc:
8
+ module Calculation
9
+ # :nodoc:
10
+ module Range
11
+ # :nodoc:
12
+ module Transfer
13
+ #
14
+ # GengouScroller 元号スクロール
15
+ #
16
+ module GengouScroller
17
+ #
18
+ # 元号を年に設定する
19
+ #
20
+ # @param [Gengou::Scroll] scroll 元号スクロール
21
+ # @param [Array<Base::Year>] years 年
22
+ #
23
+ def self.set(scroll:, years: [])
24
+ years.each do |year|
25
+ update_gengou_year(scroll: scroll, year: year)
26
+ end
27
+ end
28
+
29
+ #
30
+ # 年の元号を更新する
31
+ #
32
+ # @param [Base::Year] year 年
33
+ #
34
+ def self.update_gengou_year(scroll:, year:)
35
+ year.months.each_with_index do |month, index|
36
+ scroll.run(month: month)
37
+ gengou = scroll.to_gengou
38
+ year.months[index] = Monthly::Month.new(
39
+ context: month.context,
40
+ month_label: month.month_label,
41
+ first_day: Monthly::FirstDay.new(
42
+ remainder: month.first_day.remainder,
43
+ western_date: gengou.start_date.clone
44
+ ),
45
+ solar_terms: month.solar_terms, gengou: gengou
46
+ )
47
+ end
48
+ end
49
+ private_class_method :update_gengou_year
50
+ end
51
+ end
52
+ end
53
+ end
54
+ end
@@ -1,9 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../../calculation/base/multi_gengou_roller'
4
3
  require_relative '../../../calculation/base/year'
5
4
 
6
- require_relative '../../../era/western'
5
+ require_relative '../../../era/western/calendar'
7
6
 
8
7
  # :nodoc:
9
8
  module Zakuro
@@ -21,27 +20,30 @@ module Zakuro
21
20
  # 年間範囲内の年データの開始月を変更する
22
21
  #
23
22
  # @param [Context] context 暦コンテキスト
24
- # @param [Array<Year>] annual_ranges 年データ(冬至基準)
23
+ # @param [Array<Base::Year>] annual_ranges 年データ(冬至基準)
25
24
  #
26
- # @return [Array<Year>] 年データ(元旦基準)
25
+ # @return [Array<Base::Year>] 年データ(元旦基準)
27
26
  #
28
27
  def self.get(context:, annual_ranges:)
29
28
  categorize(context: context, annual_ranges: annual_ranges)
30
- rearranged_years(annual_ranges: annual_ranges)
29
+ rearranged_years(context: context, annual_ranges: annual_ranges)
31
30
  end
32
31
 
33
32
  #
34
33
  # 年間範囲内の年データの開始月を変更する
35
34
  #
36
- # @param [Array<Year>] annual_ranges 年データ(冬至基準)
35
+ # @param [Context] context 暦コンテキスト
36
+ # @param [Array<Base::Year>] annual_ranges 年データ(冬至基準)
37
37
  #
38
- # @return [Array<Year>] 年データ(元旦基準)
38
+ # @return [Array<Base::Year>] 年データ(元旦基準)
39
39
  #
40
- def self.rearranged_years(annual_ranges:)
40
+ def self.rearranged_years(context:, annual_ranges:)
41
41
  years = []
42
42
 
43
43
  (0..(annual_ranges.size - 2)).each do |index|
44
- year = rearranged_year(annual_ranges: annual_ranges, index: index)
44
+ year = rearranged_year(
45
+ context: context, annual_ranges: annual_ranges, index: index
46
+ )
45
47
  years.push(year)
46
48
  end
47
49
 
@@ -53,7 +55,7 @@ module Zakuro
53
55
  # 年間範囲を昨年/今年で分類する
54
56
  #
55
57
  # @param [Context] context 暦コンテキスト
56
- # @param [Array<Year>] annual_range 1年データ
58
+ # @param [Array<Base::Year>] annual_range 1年データ
57
59
  #
58
60
  def self.categorize(context:, annual_ranges:)
59
61
  annual_ranges.each do |annual_range|
@@ -86,16 +88,17 @@ module Zakuro
86
88
  #
87
89
  # 年データの開始月を変更する
88
90
  #
89
- # @param [Array<Year>] annual_ranges 年データ(冬至基準)
91
+ # @param [Context] context 暦コンテキスト
92
+ # @param [Array<Base::Year>] annual_ranges 年データ(冬至基準)
90
93
  # @param [Integer] index 対象年の要素番号
91
94
  #
92
- # @return [Year] 年データ(元旦基準)
95
+ # @return [Base::Year] 年データ(元旦基準)
93
96
  #
94
- def self.rearranged_year(annual_ranges:, index:)
97
+ def self.rearranged_year(context:, annual_ranges:, index:)
95
98
  current_annual_range = annual_ranges[index]
96
99
  next_annual_range = annual_ranges[index + 1]
97
100
 
98
- year = push_current_year(annual_range: current_annual_range)
101
+ year = push_current_year(context: context, annual_range: current_annual_range)
99
102
  push_last_year(annual_range: next_annual_range, year: year)
100
103
 
101
104
  year
@@ -105,12 +108,13 @@ module Zakuro
105
108
  #
106
109
  # 当年データを生成する
107
110
  #
108
- # @param [Array<Year>] annual_ranges 年データ(冬至基準)
109
- # @param [Year] year 対象年
111
+ # @param [Context] context 暦コンテキスト
112
+ # @param [Array<Month>] annual_range 1年データ
110
113
  #
111
- # @return [Year] 当年月ありの対象年
114
+ # @return [Base::Year] 当年月ありの対象年
112
115
  #
113
- def self.push_current_year(annual_range:, year: Base::Year.new)
116
+ def self.push_current_year(context:, annual_range:)
117
+ year = Base::Year.new(context: context)
114
118
  annual_range.each do |month|
115
119
  next if month.is_last_year
116
120
 
@@ -124,10 +128,10 @@ module Zakuro
124
128
  #
125
129
  # 昨年データを生成する
126
130
  #
127
- # @param [Array<Year>] annual_ranges 年データ(冬至基準)
128
- # @param [Year] year 対象年
131
+ # @param [Array<Month>] annual_range 1年データ
132
+ # @param [Base::Year] year 対象年
129
133
  #
130
- # @return [Year] 昨年月ありの対象年
134
+ # @return [Base::Year] 昨年月ありの対象年
131
135
  #
132
136
  def self.push_last_year(annual_range:, year: Base::Year.new)
133
137
  annual_range.each do |month|