zakuro 0.6.0 → 0.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -3
  3. data/VERSION +1 -1
  4. data/lib/zakuro/calculation/base/gengou.rb +4 -4
  5. data/lib/zakuro/calculation/base/linear_gengou.rb +6 -6
  6. data/lib/zakuro/calculation/era/gengou/internal/connector.rb +107 -0
  7. data/lib/zakuro/calculation/era/gengou/internal/counter.rb +214 -0
  8. data/lib/zakuro/calculation/era/gengou/internal/publisher.rb +104 -0
  9. data/lib/zakuro/calculation/era/gengou/internal/reserve/list.rb +244 -0
  10. data/lib/zakuro/calculation/era/gengou/internal/reserve/range.rb +193 -0
  11. data/lib/zakuro/calculation/{gengou → era/gengou}/internal/reserve.rb +6 -6
  12. data/lib/zakuro/calculation/{gengou → era/gengou}/scroll.rb +44 -95
  13. data/lib/zakuro/calculation/{version → era/version}/internal/crawler.rb +7 -7
  14. data/lib/zakuro/calculation/{version → era/version}/internal/range.rb +4 -4
  15. data/lib/zakuro/calculation/{version → era/version}/version.rb +3 -3
  16. data/lib/zakuro/calculation/monthly/month.rb +2 -2
  17. data/lib/zakuro/calculation/range/full_range.rb +18 -19
  18. data/lib/zakuro/calculation/range/operated_range.rb +3 -4
  19. data/lib/zakuro/calculation/specifier/internal/month.rb +84 -0
  20. data/lib/zakuro/calculation/specifier/multiple_day.rb +162 -0
  21. data/lib/zakuro/calculation/specifier/single_day.rb +2 -2
  22. data/lib/zakuro/calculation/summary/internal/operation.rb +98 -0
  23. data/lib/zakuro/calculation/summary/range.rb +120 -0
  24. data/lib/zakuro/calculation/summary/single.rb +45 -67
  25. data/lib/zakuro/condition.rb +14 -0
  26. data/lib/zakuro/era/japan/gengou/alignment/aligner.rb +106 -0
  27. data/lib/zakuro/era/japan/gengou/alignment/division.rb +165 -0
  28. data/lib/zakuro/era/japan/gengou/alignment/line.rb +156 -0
  29. data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +184 -0
  30. data/lib/zakuro/era/japan/gengou/alignment.rb +42 -0
  31. data/lib/zakuro/era/japan/gengou/resource/parser.rb +242 -0
  32. data/lib/zakuro/era/japan/gengou/resource/type.rb +292 -0
  33. data/lib/zakuro/era/japan/gengou/resource/validator.rb +346 -0
  34. data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-001-until-south.yaml +2 -2
  35. data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-002-from-north.yaml +2 -2
  36. data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-003-modern.yaml +2 -2
  37. data/lib/zakuro/era/japan/gengou/resource.rb +32 -0
  38. data/lib/zakuro/era/japan/gengou.rb +34 -73
  39. data/lib/zakuro/era/japan/version.rb +18 -18
  40. data/lib/zakuro/merchant.rb +41 -3
  41. data/lib/zakuro/operation/month/validator.rb +1 -1
  42. data/lib/zakuro/result/result.rb +17 -0
  43. data/lib/zakuro/version/senmyou/README.md +11 -7
  44. metadata +32 -20
  45. data/lib/zakuro/calculation/gengou/internal/counter.rb +0 -129
  46. data/lib/zakuro/calculation/gengou/internal/reserve/interval.rb +0 -183
  47. data/lib/zakuro/calculation/gengou/internal/reserve/list.rb +0 -382
  48. data/lib/zakuro/era/japan/gengou/parser.rb +0 -237
  49. data/lib/zakuro/era/japan/gengou/type.rb +0 -285
  50. data/lib/zakuro/era/japan/gengou/validator.rb +0 -341
@@ -0,0 +1,244 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../../era/japan/gengou/resource'
4
+ require_relative '../../../../../era/japan/gengou'
5
+ require_relative '../../../../../era/japan/calendar'
6
+ require_relative '../../../../../era/western/calendar'
7
+
8
+ require_relative '../counter'
9
+
10
+ # :nodoc:
11
+ module Zakuro
12
+ # :nodoc:
13
+ module Calculation
14
+ # :nodoc:
15
+ module Gengou
16
+ # :nodoc:
17
+ module Reserve
18
+ # List
19
+ #
20
+ # 予約元号一覧
21
+ #
22
+ class List
23
+ # @return [Integer] 不正年
24
+ INVALID_YEAR = -1
25
+ # @return [Integer] 最大月日数
26
+ MAX_MONTH_DAYS = 30
27
+
28
+ # @return [Symbol] 行番号
29
+ attr_reader :index
30
+ # @return [Western::Calendar] 開始日
31
+ attr_reader :start_date
32
+ # @return [Western::Calendar] 終了日
33
+ attr_reader :last_date
34
+ # @return [Array<Japan::Alignment::LinearGengou>] 予約元号一覧
35
+ attr_reader :list
36
+
37
+ #
38
+ # 初期化
39
+ #
40
+ # @param [True, False] first true:1行目元号, false:2行目元号
41
+ # @param [Western::Calendar] start_date 開始日
42
+ # @param [Western::Calendar] last_date 終了日
43
+ #
44
+ def initialize(first: true, start_date: Western::Calendar.new,
45
+ last_date: Western::Calendar)
46
+ @index = first ? Japan::Gengou::FIRST_LINE : Japan::Gengou::SECOND_LINE
47
+ @start_date = start_date.clone
48
+ @last_date = last_date.invalid? ? start_date.clone : last_date.clone
49
+ @list = []
50
+
51
+ update
52
+ end
53
+
54
+ #
55
+ # 元号を取得する
56
+ #
57
+ # @param [Western::Calendar] western_date 西暦日
58
+ #
59
+ # @return [Gengou::Counter] 加算元号
60
+ #
61
+ def get(western_date: Western::Calendar.new)
62
+ @list.each do |linear_gengou|
63
+ next if linear_gengou.out?(start_date: western_date, last_date: western_date)
64
+
65
+ Gengou::Counter.new(gengou: linear_gengou.gengou).clone
66
+ end
67
+
68
+ Gengou::Counter.new
69
+ end
70
+
71
+ #
72
+ # 範囲内元号を取得する
73
+ #
74
+ # @param [Western::Calendar] start_date 西暦開始日
75
+ # @param [Western::Calendar] last_date 西暦終了日
76
+ #
77
+ # @return [Array<Gengou::Counter>] 範囲内元号
78
+ #
79
+ def collect(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
80
+ result = []
81
+
82
+ @list.each do |linear_gengou|
83
+ next if linear_gengou.out?(start_date: start_date, last_date: last_date)
84
+
85
+ result.push(
86
+ Gengou::Counter.new(
87
+ gengou: linear_gengou.gengou.clone,
88
+ start_date: linear_gengou.start_date.clone,
89
+ last_date: linear_gengou.last_date.clone
90
+ )
91
+ )
92
+ end
93
+
94
+ # TODO: refactor
95
+ if result.size.zero?
96
+ result.push(
97
+ Gengou::Counter.new(
98
+ gengou: Japan::Resource::Gengou.new(
99
+ both_start_date: Japan::Resource::Both::Date.new(
100
+ western: start_date.clone
101
+ ),
102
+ last_date: last_date.clone
103
+ )
104
+ )
105
+ )
106
+ return result
107
+ end
108
+
109
+ # FIXME: 有効元号の前後しか見ていない
110
+ if start_date < result[0].start_date
111
+ result.unshift(
112
+ Gengou::Counter.new(
113
+ gengou: Japan::Resource::Gengou.new,
114
+ start_date: start_date.clone,
115
+ last_date: result[0].start_date.clone - 1
116
+ )
117
+ )
118
+ end
119
+
120
+ if last_date > result[-1].last_date
121
+ result.push(
122
+ Gengou::Counter.new(
123
+ gengou: Japan::Resource::Gengou.new,
124
+ start_date: result[0].last_date.clone + 1,
125
+ last_date: last_date.clone
126
+ )
127
+ )
128
+ end
129
+
130
+ result
131
+ end
132
+
133
+ #
134
+ # 和暦開始日を取得する
135
+ #
136
+ # @return [Japan::Calendar] 和暦開始日
137
+ #
138
+ def japan_start_date
139
+ return Japan::Calendar.new if invalid?
140
+
141
+ @list[0].gengou.both_start_date.japan.clone
142
+ end
143
+
144
+ #
145
+ # 西暦開始日を取得する
146
+ #
147
+ # @return [Western::Calendar] 西暦開始日
148
+ #
149
+ def western_start_date
150
+ return Western::Calendar.new if invalid?
151
+
152
+ @list[0].gengou.both_start_date.western.clone
153
+ end
154
+
155
+ #
156
+ # 西暦開始年を取得する
157
+ #
158
+ # @return [Integer] 西暦開始年
159
+ #
160
+ def western_start_year
161
+ return INVALID_YEAR if invalid?
162
+
163
+ @list[0].gengou.both_start_year.western.clone
164
+ end
165
+
166
+ #
167
+ # 西暦終了年を取得する
168
+ #
169
+ # @return [Integer] 西暦終了年
170
+ #
171
+ def western_last_year
172
+ return INVALID_YEAR if invalid?
173
+
174
+ return INVALID_YEAR if @list.size.zero?
175
+
176
+ @list[-1].gengou.last_year
177
+ end
178
+
179
+ #
180
+ # 不正か
181
+ #
182
+ # @return [True] 不正
183
+ # @return [False] 不正なし
184
+ #
185
+ def invalid?
186
+ return true unless @list
187
+
188
+ return true if @list.size.zero?
189
+
190
+ false
191
+ end
192
+
193
+ #
194
+ # 設定された元号の開始日を取得する
195
+ #
196
+ # @return [Western::Calendar]設定された元号の開始日
197
+ #
198
+ def native_start_date
199
+ return Western::Calendar.new if @list.size.zero?
200
+
201
+ @list[0].native_start_date
202
+ end
203
+
204
+ #
205
+ # 開始日が設定された開始日と異なるか(行が変更されているか)
206
+ #
207
+ # @return [True] 異なる
208
+ # @return [False] 同一
209
+ #
210
+ def change_start_date?
211
+ return false if @list.size.zero?
212
+
213
+ @list[0].change_start_date?
214
+ end
215
+
216
+ private
217
+
218
+ #
219
+ # 予約元号一覧を更新する
220
+ #
221
+ def update
222
+ # 開始日の30日前に前の元号がある場合は、前の元号を設定する
223
+ start_date = @start_date.clone - (MAX_MONTH_DAYS + 1)
224
+ # 開始日の30日後に次の元号がある場合は、次の元号を設定する
225
+ last_date = @last_date.clone + (MAX_MONTH_DAYS + 1)
226
+
227
+ @list |= line(start_date: start_date, last_date: last_date)
228
+ end
229
+
230
+ #
231
+ # 元号
232
+ #
233
+ # @param [Western::Calendar] date 日付
234
+ #
235
+ # @return [Array<Japan::Alignment::LinearGengou>] 元号
236
+ #
237
+ def line(start_date:, last_date:)
238
+ Japan::Gengou.line(line: @index, start_date: start_date, last_date: last_date)
239
+ end
240
+ end
241
+ end
242
+ end
243
+ end
244
+ end
@@ -0,0 +1,193 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../../era/western/calendar'
4
+
5
+ require_relative './list'
6
+
7
+ # :nodoc:
8
+ module Zakuro
9
+ # :nodoc:
10
+ module Calculation
11
+ # :nodoc:
12
+ module Gengou
13
+ # :nodoc:
14
+ module Reserve
15
+ #
16
+ # Range 予約済み計算範囲
17
+ #
18
+ class Range
19
+ # @return [List] 1行目元号
20
+ attr_reader :first_list
21
+ # @return [List] 2行目元号
22
+ attr_reader :second_list
23
+
24
+ #
25
+ # 初期化
26
+ #
27
+ # @param [Western::Calendar] start_date 西暦開始日
28
+ # @param [Western::Calendar] last_date 西暦終了日
29
+ #
30
+ def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
31
+ last_date = start_date.clone if last_date.invalid?
32
+
33
+ @first_list = List.new(first: true, start_date: start_date, last_date: last_date)
34
+ @second_list = List.new(first: false, start_date: start_date, last_date: last_date)
35
+
36
+ renew(last_date: last_date)
37
+ end
38
+
39
+ #
40
+ # 再初期化
41
+ # 含まれる最初の元号が別の行にまたがっている場合に開始日を前倒しする
42
+ #
43
+ # @param [Western::Calendar] last_date 西暦終了日
44
+ #
45
+ def renew(last_date: Western::Calendar.new)
46
+ native_start_date = Western::Calendar.new
47
+ [@first_list, @second_list].each do |list|
48
+ next unless list.change_start_date?
49
+
50
+ if native_start_date.invalid?
51
+ native_start_date = list.native_start_date.clone
52
+ next
53
+ end
54
+
55
+ next if native_start_date <= list.native_start_date
56
+
57
+ native_start_date = list.native_start_date.clone
58
+ end
59
+
60
+ return if native_start_date.invalid?
61
+
62
+ @first_list = List.new(first: true,
63
+ start_date: native_start_date, last_date: last_date)
64
+ @second_list = List.new(first: false,
65
+ start_date: native_start_date, last_date: last_date)
66
+ end
67
+
68
+ #
69
+ # 不正か
70
+ #
71
+ # @return [True] 不正
72
+ # @return [False] 不正なし
73
+ #
74
+ def invalid?
75
+ @first_list.invalid?
76
+ end
77
+
78
+ #
79
+ # 範囲内元号(1行目元号)を取得する
80
+ #
81
+ # @param [Western::Calendar] start_date 西暦開始日
82
+ # @param [Western::Calendar] last_date 西暦終了日
83
+ #
84
+ # @return [Array<Gengou::Counter>] 範囲内元号(1行目元号)
85
+ #
86
+ def collect_first(start_date: Western::Calendar.new,
87
+ last_date: Western::Calendar.new)
88
+ @first_list.collect(start_date: start_date, last_date: last_date)
89
+ end
90
+
91
+ #
92
+ # 範囲内元号(2行目元号)を取得する
93
+ #
94
+ # @param [Western::Calendar] start_date 西暦開始日
95
+ # @param [Western::Calendar] last_date 西暦終了日
96
+ #
97
+ # @return [Array<Gengou::Counter>] 範囲内元号(2行目元号)
98
+ #
99
+ def collect_second(start_date: Western::Calendar.new,
100
+ last_date: Western::Calendar.new)
101
+ @second_list.collect(start_date: start_date, last_date: last_date)
102
+ end
103
+
104
+ #
105
+ # 最古の元号から和暦開始日を取得する
106
+ #
107
+ # @return [Japan::Calendar] 和暦開始日
108
+ #
109
+ def japan_start_date
110
+ gengou = oldest_gengou
111
+
112
+ return Japan::Calendar.new if gengou.invalid?
113
+
114
+ gengou.japan_start_date
115
+ end
116
+
117
+ #
118
+ # 最古の元号から西暦開始日を取得する
119
+ #
120
+ # @return [Western::Calendar] 西暦開始日
121
+ #
122
+ def western_start_date
123
+ gengou = oldest_gengou
124
+
125
+ return Western::Calendar.new if gengou.invalid?
126
+
127
+ gengou.western_start_date
128
+ end
129
+
130
+ #
131
+ # 開始西暦年を取得する
132
+ #
133
+ # @return [Integer] 開始西暦年
134
+ #
135
+ def western_start_year
136
+ first_start_year = @first_list.western_start_year
137
+ second_start_year = @second_list.western_start_year
138
+
139
+ return first_start_year if @first_list.invalid?
140
+
141
+ return first_start_year if @second_list.invalid?
142
+
143
+ return first_start_year if first_start_year < second_start_year
144
+
145
+ second_start_year
146
+ end
147
+
148
+ #
149
+ # 終了西暦年を取得する
150
+ #
151
+ # @return [Integer] 終了西暦年
152
+ #
153
+ def western_last_year
154
+ first_last_year = @first_list.western_last_year
155
+ second_last_year = @second_list.western_last_year
156
+
157
+ return first_last_year if @first_list.invalid?
158
+
159
+ return first_last_year if @second_list.invalid?
160
+
161
+ return first_last_year if first_last_year > second_last_year
162
+
163
+ second_last_year
164
+ end
165
+
166
+ private
167
+
168
+ #
169
+ # 最古の元号を取得する
170
+ #
171
+ # @return [Japan::Gengou] 最古の元号
172
+ #
173
+ def oldest_gengou
174
+ return @first_list if @first_list.invalid?
175
+
176
+ return @first_list if @second_list.invalid?
177
+
178
+ first_western_date = @first_list.western_start_date
179
+ second_western_date = @second_list.western_start_date
180
+
181
+ return @first_list if first_western_date.invalid?
182
+
183
+ return @first_list if second_western_date.invalid?
184
+
185
+ return @first_list if first_western_date < second_western_date
186
+
187
+ @second_list
188
+ end
189
+ end
190
+ end
191
+ end
192
+ end
193
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../../era/western/calendar'
4
- require_relative './reserve/interval'
3
+ require_relative '../../../../era/western/calendar'
4
+ require_relative './reserve/range'
5
5
  require_relative './reserve/list'
6
6
 
7
7
  # :nodoc:
@@ -29,12 +29,12 @@ module Zakuro
29
29
  # * 終了日が最後の元号の改元前日30日以内の場合、さらに次の元号まで対象にする
30
30
  #
31
31
  # @param [Western::Calendar] start_date 開始日
32
- # @param [Western::Calendar] end_date 終了日
32
+ # @param [Western::Calendar] last_date 終了日
33
33
  #
34
- # @return [Interval] 予約済み計算範囲
34
+ # @return [Range] 予約済み計算範囲
35
35
  #
36
- def self.get(start_date: Western::Calendar.new, end_date: Western::Calendar.new)
37
- Interval.new(start_date: start_date, end_date: end_date)
36
+ def self.get(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
37
+ Range.new(start_date: start_date, last_date: last_date)
38
38
  end
39
39
  end
40
40
  end
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../era/western/calendar'
4
- require_relative '../base/gengou'
5
- require_relative '../base/linear_gengou'
6
- require_relative './internal/reserve/interval'
3
+ require_relative '../../../era/western/calendar'
4
+ require_relative '../../base/gengou'
5
+ require_relative '../../base/linear_gengou'
6
+ require_relative './internal/reserve/range'
7
+ require_relative './internal/connector'
8
+ require_relative './internal/publisher'
7
9
 
8
10
  # :nodoc:
9
11
  module Zakuro
@@ -19,27 +21,30 @@ module Zakuro
19
21
  # @return [Western::Calendar] 月初日
20
22
  attr_reader :monthly_start_date
21
23
  # @return [Western::Calendar] 月末日
22
- attr_reader :monthly_end_date
23
- # @return [Reserve::Interval] 予約範囲
24
- attr_reader :interval
24
+ attr_reader :monthly_last_date
25
+ # @return [Reserve::Range] 予約範囲
26
+ attr_reader :range
25
27
  # @return [Array<Counte>] 1行目元号
26
28
  attr_reader :first_gengou
27
29
  # @return [Array<Counte>] 2行目元号
28
30
  attr_reader :second_gengou
31
+ # @return [Connector] 行変更済元号
32
+ attr_reader :connector
29
33
 
30
34
  #
31
35
  # 初期化
32
36
  #
33
37
  # @param [Western::Calendar] start_date 西暦開始日(最大範囲)
34
- # @param [Western::Calendar] end_date 西暦終了日(最大範囲)
38
+ # @param [Western::Calendar] last_date 西暦終了日(最大範囲)
35
39
  #
36
- def initialize(start_date: Western::Calendar.new, end_date: Western::Calendar.new)
40
+ def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
37
41
  @monthly_start_date = Western::Calendar.new
38
- @monthly_end_date = Western::Calendar.new
39
- @interval = Reserve::Interval.new(start_date: start_date, end_date: end_date)
42
+ @monthly_last_date = Western::Calendar.new
43
+ @range = Reserve::Range.new(start_date: start_date, last_date: last_date)
40
44
  @first_gengou = []
41
45
  @second_gengou = []
42
46
  @ignited = false
47
+ @connector = Connector.new
43
48
  end
44
49
 
45
50
  #
@@ -69,15 +74,15 @@ module Zakuro
69
74
  def ignite(month:)
70
75
  return false unless ignitable?(month: month)
71
76
 
72
- japan_start_date = @interval.japan_start_date
77
+ japan_start_date = @range.japan_start_date
73
78
 
74
- western_start_date = @interval.western_start_date
79
+ western_start_date = @range.western_start_date
75
80
 
76
81
  # 今月初日(和暦日が1月2日であれば、開始日の1日前が初日)
77
82
  @monthly_start_date = western_start_date.clone - japan_start_date.day + 1
78
83
 
79
84
  # 今月末
80
- @monthly_end_date = @monthly_start_date.clone + month.days - 1
85
+ @monthly_last_date = @monthly_start_date.clone + month.days - 1
81
86
 
82
87
  update_current_gengou
83
88
 
@@ -90,9 +95,9 @@ module Zakuro
90
95
  # @param [Monthly::Month] month 月
91
96
  #
92
97
  def advance(month:)
93
- @monthly_start_date = @monthly_end_date.clone + 1
98
+ @monthly_start_date = @monthly_last_date.clone + 1
94
99
 
95
- @monthly_end_date = @monthly_start_date.clone + month.days - 1
100
+ @monthly_last_date = @monthly_start_date.clone + month.days - 1
96
101
 
97
102
  next_year if month.number == 1 && !month.leaped?
98
103
 
@@ -106,17 +111,14 @@ module Zakuro
106
111
  #
107
112
  def to_gengou
108
113
  start_date = @monthly_start_date.clone
109
- end_date = @monthly_end_date.clone
110
-
111
- Base::Gengou.new(
112
- start_date: start_date,
113
- end_date: end_date,
114
- first_line: to_linear_gengou(
115
- start_date: start_date, end_date: end_date, gengou_list: @first_gengou
116
- ),
117
- second_line: to_linear_gengou(
118
- start_date: start_date, end_date: end_date, gengou_list: @second_gengou
119
- )
114
+ last_date = @monthly_last_date.clone
115
+
116
+ # 行を超えた元号切り替え処理
117
+ continue_year
118
+
119
+ Publisher.run(
120
+ start_date: start_date, last_date: last_date,
121
+ first_gengou: @first_gengou, second_gengou: @second_gengou
120
122
  )
121
123
  end
122
124
 
@@ -126,7 +128,7 @@ module Zakuro
126
128
  # @return [Integer] 開始西暦年
127
129
  #
128
130
  def western_start_year
129
- @interval.western_start_year
131
+ @range.western_start_year
130
132
  end
131
133
 
132
134
  #
@@ -134,21 +136,28 @@ module Zakuro
134
136
  #
135
137
  # @return [Integer] 終了西暦年
136
138
  #
137
- def western_end_year
138
- @interval.western_end_year
139
+ def western_last_year
140
+ @range.western_last_year
139
141
  end
140
142
 
141
143
  private
142
144
 
145
+ #
146
+ # 行を跨ぐ元号年を継続させる
147
+ #
148
+ def continue_year
149
+ @connector.update(lines: [@first_gengou, @second_gengou])
150
+ end
151
+
143
152
  #
144
153
  # 現在月に合わせて元号を更新する
145
154
  #
146
155
  def update_current_gengou
147
156
  start_date = @monthly_start_date
148
- end_date = @monthly_end_date
149
- first_gengou = @interval.collect_first_gengou(start_date: start_date, end_date: end_date)
150
- second_gengou = @interval.collect_second_gengou(start_date: start_date,
151
- end_date: end_date)
157
+ last_date = @monthly_last_date
158
+ first_gengou = @range.collect_first(start_date: start_date, last_date: last_date)
159
+ second_gengou = @range.collect_second(start_date: start_date,
160
+ last_date: last_date)
152
161
 
153
162
  @first_gengou = replace_gengou(source: @first_gengou, destination: first_gengou)
154
163
  @second_gengou = replace_gengou(source: @second_gengou, destination: second_gengou)
@@ -173,66 +182,6 @@ module Zakuro
173
182
  destination
174
183
  end
175
184
 
176
- #
177
- # 直列元号に変換する
178
- #
179
- # * 最初の元号:開始日~その元号の終了日
180
- # * 中間の元号:その元号の開始日~その元号の終了日
181
- # * 最後の元号:その元号の開始日~終了日
182
- #
183
- # @param [Western::Calendar] start_date 西暦開始日
184
- # @param [Western::Calendar] end_date 西暦終了日
185
- # @param [Array<Counter>] gengou_list 元号リスト
186
- #
187
- # @return [Array<Base::Gengou>] 元号リスト
188
- #
189
- def to_linear_gengou(start_date:, end_date:, gengou_list: [])
190
- return [] if gengou_list.size.zero?
191
-
192
- result = []
193
-
194
- gengou_list.each do |gengou|
195
- if gengou.invalid?
196
- # 無効元号は無効のままにする
197
- result.push(Base::LinearGengou.new)
198
- next
199
- end
200
-
201
- linear_gengou = to_limited_linear_gengou(
202
- start_date: start_date,
203
- end_date: end_date,
204
- gengou: gengou
205
- )
206
- result.push(linear_gengou)
207
- end
208
-
209
- result
210
- end
211
-
212
- #
213
- # 範囲を限定した直列元号に変換する
214
- #
215
- # * 開始日・終了日により範囲を狭める
216
- #
217
- # @param [Western::Calendar] start_date 西暦開始日
218
- # @param [Western::Calendar] end_date 西暦終了日
219
- # @param [Counter] gengou 加算元号
220
- #
221
- # @return [Base::Gengou] 元号
222
- #
223
- def to_limited_linear_gengou(start_date:, end_date:, gengou:)
224
- gengou_start_date = gengou.western_start_date.clone
225
- gengou_end_date = gengou.western_end_date.clone
226
-
227
- gengou_start_date = start_date.clone if start_date > gengou_start_date
228
- gengou_end_date = end_date.clone if end_date < gengou_end_date
229
-
230
- Base::LinearGengou.new(
231
- start_date: gengou_start_date, end_date: gengou_end_date,
232
- name: gengou.name, year: gengou.japan_year
233
- )
234
- end
235
-
236
185
  #
237
186
  # 開始可能か
238
187
  #
@@ -244,7 +193,7 @@ module Zakuro
244
193
  def ignitable?(month:)
245
194
  return false unless @monthly_start_date.invalid?
246
195
 
247
- japan_start_date = @interval.japan_start_date
196
+ japan_start_date = @range.japan_start_date
248
197
 
249
198
  japan_start_date.same_month?(leaped: month.leaped?, month: month.number)
250
199
  end