zakuro 0.6.0 → 0.6.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -3
- data/VERSION +1 -1
- data/lib/zakuro/calculation/base/gengou.rb +4 -4
- data/lib/zakuro/calculation/base/linear_gengou.rb +6 -6
- data/lib/zakuro/calculation/era/gengou/internal/connector.rb +107 -0
- data/lib/zakuro/calculation/era/gengou/internal/counter.rb +214 -0
- data/lib/zakuro/calculation/era/gengou/internal/publisher.rb +104 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/list.rb +244 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/range.rb +193 -0
- data/lib/zakuro/calculation/{gengou → era/gengou}/internal/reserve.rb +6 -6
- data/lib/zakuro/calculation/{gengou → era/gengou}/scroll.rb +44 -95
- data/lib/zakuro/calculation/{version → era/version}/internal/crawler.rb +7 -7
- data/lib/zakuro/calculation/{version → era/version}/internal/range.rb +4 -4
- data/lib/zakuro/calculation/{version → era/version}/version.rb +3 -3
- data/lib/zakuro/calculation/monthly/month.rb +2 -2
- data/lib/zakuro/calculation/range/full_range.rb +18 -19
- data/lib/zakuro/calculation/range/operated_range.rb +3 -4
- data/lib/zakuro/calculation/specifier/internal/month.rb +84 -0
- data/lib/zakuro/calculation/specifier/multiple_day.rb +162 -0
- data/lib/zakuro/calculation/specifier/single_day.rb +2 -2
- data/lib/zakuro/calculation/summary/internal/operation.rb +98 -0
- data/lib/zakuro/calculation/summary/range.rb +120 -0
- data/lib/zakuro/calculation/summary/single.rb +45 -67
- data/lib/zakuro/condition.rb +14 -0
- data/lib/zakuro/era/japan/gengou/alignment/aligner.rb +106 -0
- data/lib/zakuro/era/japan/gengou/alignment/division.rb +165 -0
- data/lib/zakuro/era/japan/gengou/alignment/line.rb +156 -0
- data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +184 -0
- data/lib/zakuro/era/japan/gengou/alignment.rb +42 -0
- data/lib/zakuro/era/japan/gengou/resource/parser.rb +242 -0
- data/lib/zakuro/era/japan/gengou/resource/type.rb +292 -0
- data/lib/zakuro/era/japan/gengou/resource/validator.rb +346 -0
- data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-001-until-south.yaml +2 -2
- data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-002-from-north.yaml +2 -2
- data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-003-modern.yaml +2 -2
- data/lib/zakuro/era/japan/gengou/resource.rb +32 -0
- data/lib/zakuro/era/japan/gengou.rb +34 -73
- data/lib/zakuro/era/japan/version.rb +18 -18
- data/lib/zakuro/merchant.rb +41 -3
- data/lib/zakuro/operation/month/validator.rb +1 -1
- data/lib/zakuro/result/result.rb +17 -0
- data/lib/zakuro/version/senmyou/README.md +11 -7
- metadata +32 -20
- data/lib/zakuro/calculation/gengou/internal/counter.rb +0 -129
- data/lib/zakuro/calculation/gengou/internal/reserve/interval.rb +0 -183
- data/lib/zakuro/calculation/gengou/internal/reserve/list.rb +0 -382
- data/lib/zakuro/era/japan/gengou/parser.rb +0 -237
- data/lib/zakuro/era/japan/gengou/type.rb +0 -285
- data/lib/zakuro/era/japan/gengou/validator.rb +0 -341
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '
|
3
|
+
require_relative '../../../../era/japan/version'
|
4
4
|
require_relative './range'
|
5
5
|
|
6
6
|
# :nodoc:
|
@@ -17,12 +17,12 @@ module Zakuro
|
|
17
17
|
# 暦の範囲を取得する
|
18
18
|
#
|
19
19
|
# @param [Integer] start_year 開始西暦年
|
20
|
-
# @param [Integer]
|
20
|
+
# @param [Integer] last_year 終了西暦年
|
21
21
|
#
|
22
22
|
# @return [Array<Range>] 暦の範囲
|
23
23
|
#
|
24
|
-
def self.get(start_year:,
|
25
|
-
ranges = Japan::Version.ranges_with_year(start_year: start_year,
|
24
|
+
def self.get(start_year:, last_year:)
|
25
|
+
ranges = Japan::Version.ranges_with_year(start_year: start_year, last_year: last_year)
|
26
26
|
|
27
27
|
result = []
|
28
28
|
|
@@ -32,13 +32,13 @@ module Zakuro
|
|
32
32
|
range_start_year = range.start_year
|
33
33
|
range_start_year = start_year if start_year > range.start_year
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
range_last_year = range.last_year
|
36
|
+
range_last_year = last_year if last_year < range.last_year
|
37
37
|
|
38
38
|
result.push(
|
39
39
|
Range.new(
|
40
40
|
name: range.name, start_date: range.start_date.clone,
|
41
|
-
start_year: range_start_year,
|
41
|
+
start_year: range_start_year, last_year: range_last_year
|
42
42
|
)
|
43
43
|
)
|
44
44
|
end
|
@@ -17,7 +17,7 @@ module Zakuro
|
|
17
17
|
# @return [Integer] 開始西暦年
|
18
18
|
attr_reader :start_year
|
19
19
|
# @return [Integer] 終了西暦年
|
20
|
-
attr_reader :
|
20
|
+
attr_reader :last_year
|
21
21
|
|
22
22
|
#
|
23
23
|
# 初期化
|
@@ -25,13 +25,13 @@ module Zakuro
|
|
25
25
|
# @param [String] name 暦名
|
26
26
|
# @param [Western::Calendar] start_date 暦の開始日
|
27
27
|
# @param [Integer] start_year 開始西暦年
|
28
|
-
# @param [Integer]
|
28
|
+
# @param [Integer] last_year 終了西暦年
|
29
29
|
#
|
30
|
-
def initialize(name:, start_date:, start_year:,
|
30
|
+
def initialize(name:, start_date:, start_year:, last_year:)
|
31
31
|
@name = name
|
32
32
|
@start_date = start_date
|
33
33
|
@start_year = start_year
|
34
|
-
@
|
34
|
+
@last_year = last_year
|
35
35
|
end
|
36
36
|
end
|
37
37
|
end
|
@@ -12,12 +12,12 @@ module Zakuro
|
|
12
12
|
# 暦の範囲を取得する
|
13
13
|
#
|
14
14
|
# @param [Integer] start_year 開始西暦年
|
15
|
-
# @param [Integer]
|
15
|
+
# @param [Integer] last_year 終了西暦年
|
16
16
|
#
|
17
17
|
# @return [Array<Range>] 暦の範囲
|
18
18
|
#
|
19
|
-
def self.get(start_year:,
|
20
|
-
Crawler.get(start_year: start_year,
|
19
|
+
def self.get(start_year:, last_year:)
|
20
|
+
Crawler.get(start_year: start_year, last_year: last_year)
|
21
21
|
end
|
22
22
|
end
|
23
23
|
end
|
@@ -202,7 +202,7 @@ module Zakuro
|
|
202
202
|
#
|
203
203
|
# @return [Western::Calendar] 月の終了日
|
204
204
|
#
|
205
|
-
def
|
205
|
+
def last_date
|
206
206
|
return Western::Calendar.new if western_date.invalid?
|
207
207
|
|
208
208
|
western_date.clone + days - 1
|
@@ -224,7 +224,7 @@ module Zakuro
|
|
224
224
|
|
225
225
|
return false if date < start_date
|
226
226
|
|
227
|
-
return false if date >
|
227
|
+
return false if date > last_date
|
228
228
|
|
229
229
|
true
|
230
230
|
end
|
@@ -5,13 +5,12 @@ require_relative '../../version/context'
|
|
5
5
|
require_relative '../../era/western/calendar'
|
6
6
|
require_relative '../../output/logger'
|
7
7
|
|
8
|
-
require_relative '../gengou/scroll'
|
8
|
+
require_relative '../era/gengou/scroll'
|
9
|
+
require_relative '../era/version/version'
|
9
10
|
|
10
11
|
require_relative '../base/gengou'
|
11
12
|
require_relative '../base/year'
|
12
13
|
|
13
|
-
require_relative '../version/version'
|
14
|
-
|
15
14
|
require_relative './transfer/year_boundary'
|
16
15
|
|
17
16
|
require_relative './transfer/gengou_scroller'
|
@@ -42,7 +41,7 @@ module Zakuro
|
|
42
41
|
# @return [Western::Calendar] 開始日
|
43
42
|
attr_reader :start_date
|
44
43
|
# @return [Western::Calendar] 終了日
|
45
|
-
attr_reader :
|
44
|
+
attr_reader :last_date
|
46
45
|
# @return [MultiGengouRoller] 改元処理
|
47
46
|
attr_reader :scroll
|
48
47
|
|
@@ -54,16 +53,16 @@ module Zakuro
|
|
54
53
|
#
|
55
54
|
# @param [Context] context 暦コンテキスト
|
56
55
|
# @param [Western::Calendar] start_date 開始日
|
57
|
-
# @param [Western::Calendar]
|
56
|
+
# @param [Western::Calendar] last_date 終了日
|
58
57
|
#
|
59
|
-
def initialize(context:, start_date: Western::Calendar.new,
|
58
|
+
def initialize(context:, start_date: Western::Calendar.new, last_date: Western::Calendar.new)
|
60
59
|
@start_date = start_date
|
61
|
-
@
|
60
|
+
@last_date = last_date
|
62
61
|
return if invalid?
|
63
62
|
|
64
63
|
# TODO: 現時点では使用していない。特定の暦を指定できるようになった状態で使用する
|
65
64
|
@context = context
|
66
|
-
@scroll = Gengou::Scroll.new(start_date: start_date,
|
65
|
+
@scroll = Gengou::Scroll.new(start_date: start_date, last_date: last_date)
|
67
66
|
end
|
68
67
|
|
69
68
|
#
|
@@ -104,19 +103,19 @@ module Zakuro
|
|
104
103
|
result = []
|
105
104
|
|
106
105
|
start_year = @scroll.western_start_year
|
107
|
-
|
106
|
+
last_year = @scroll.western_last_year
|
108
107
|
|
109
|
-
versions = Version.get(start_year: start_year,
|
108
|
+
versions = Version.get(start_year: start_year, last_year: last_year)
|
110
109
|
|
111
110
|
versions.each_with_index do |version, index|
|
112
111
|
context = Context.new(version_name: version.name)
|
113
112
|
start_year = version.start_year
|
114
|
-
|
113
|
+
last_year = version.last_year
|
115
114
|
# 最後の暦だけ1年足す(次の元号の開始年まで計算するケースあり)
|
116
|
-
|
115
|
+
last_year += 1 if (index + 1) == versions.size
|
117
116
|
|
118
117
|
years = boundary_resolved_ranges(
|
119
|
-
context: context, start_year: start_year,
|
118
|
+
context: context, start_year: start_year, last_year: last_year
|
120
119
|
)
|
121
120
|
result.concat(years)
|
122
121
|
end
|
@@ -129,13 +128,13 @@ module Zakuro
|
|
129
128
|
#
|
130
129
|
# @param [Context] context 暦コンテキスト
|
131
130
|
# @param [Integer] start_year 開始西暦年
|
132
|
-
# @param [Integer]
|
131
|
+
# @param [Integer] last_year 終了西暦年
|
133
132
|
#
|
134
133
|
# @return [Array<Base::Year>] 年境界解決済みの範囲
|
135
134
|
#
|
136
|
-
def boundary_resolved_ranges(context:, start_year:,
|
135
|
+
def boundary_resolved_ranges(context:, start_year:, last_year:)
|
137
136
|
ranges = annual_ranges(
|
138
|
-
context: context, start_year: start_year,
|
137
|
+
context: context, start_year: start_year, last_year: last_year
|
139
138
|
)
|
140
139
|
|
141
140
|
Transfer::YearBoundary.get(
|
@@ -148,15 +147,15 @@ module Zakuro
|
|
148
147
|
#
|
149
148
|
# @param [Context] context 暦コンテキスト
|
150
149
|
# @param [Integer] start_year 開始西暦年
|
151
|
-
# @param [Integer]
|
150
|
+
# @param [Integer] last_year 終了西暦年
|
152
151
|
#
|
153
152
|
# @return [Array<Base::Year>] 年データ(冬至基準)
|
154
153
|
#
|
155
|
-
def annual_ranges(context:, start_year:,
|
154
|
+
def annual_ranges(context:, start_year:, last_year:)
|
156
155
|
annual_range = context.resolver.annual_range
|
157
156
|
|
158
157
|
years = []
|
159
|
-
(start_year..(
|
158
|
+
(start_year..(last_year + 1)).each do |year|
|
160
159
|
years.push(
|
161
160
|
annual_range.get(
|
162
161
|
context: context, western_year: year
|
@@ -29,14 +29,14 @@ module Zakuro
|
|
29
29
|
#
|
30
30
|
# @param [Context] context 暦コンテキスト
|
31
31
|
# @param [Western::Calendar] start_date 開始日
|
32
|
-
# @param [Western::Calendar]
|
32
|
+
# @param [Western::Calendar] last_date 終了日
|
33
33
|
# @param [Array<Year>] years 年データ(完全範囲)
|
34
34
|
#
|
35
|
-
def initialize(context:, start_date: Western::Calendar.new,
|
35
|
+
def initialize(context:, start_date: Western::Calendar.new, last_date: Western::Calendar.new,
|
36
36
|
years: [])
|
37
37
|
@context = context
|
38
38
|
@years = years
|
39
|
-
@scroll = Gengou::Scroll.new(start_date: start_date,
|
39
|
+
@scroll = Gengou::Scroll.new(start_date: start_date, last_date: last_date)
|
40
40
|
@operated_solar_terms = OperatedSolarTerms.new(context: context, years: @years)
|
41
41
|
@operated_solar_terms.create
|
42
42
|
end
|
@@ -83,7 +83,6 @@ module Zakuro
|
|
83
83
|
# @param [Array<OperatedYear>] operated_years 運用結果範囲
|
84
84
|
#
|
85
85
|
def self.move(operated_years:)
|
86
|
-
# FIXME: この方式は完全ではない。範囲の1年前/1年後が必要
|
87
86
|
move_into_next_year(operated_years: operated_years)
|
88
87
|
move_into_last_year(operated_years: operated_years)
|
89
88
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../output/response'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
# :nodoc:
|
8
|
+
module Calculation
|
9
|
+
# :nodoc:
|
10
|
+
module Specifier
|
11
|
+
#
|
12
|
+
# Month 特定月
|
13
|
+
#
|
14
|
+
class Month
|
15
|
+
# @return [Western::Calendar] 西暦開始日
|
16
|
+
attr_reader :start_date
|
17
|
+
# @return [Western::Calendar] 西暦終了日
|
18
|
+
attr_reader :last_date
|
19
|
+
# @return [Base::Year] 年
|
20
|
+
attr_reader :year
|
21
|
+
# @return [Monthly::Month] 月
|
22
|
+
attr_reader :month
|
23
|
+
|
24
|
+
#
|
25
|
+
# 初期化
|
26
|
+
#
|
27
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
28
|
+
# @param [Western::Calendar] last_date 西暦終了日
|
29
|
+
# @param [Base::Year] year 年
|
30
|
+
# @param [Monthly::Month] month 月
|
31
|
+
#
|
32
|
+
def initialize(start_date:, last_date:, year:, month:)
|
33
|
+
@start_date = start_date
|
34
|
+
@last_date = last_date
|
35
|
+
@year = year
|
36
|
+
@month = month
|
37
|
+
end
|
38
|
+
|
39
|
+
#
|
40
|
+
# 取得する
|
41
|
+
#
|
42
|
+
# @return [Array<Result::Data::SingleDay>] 1日データ
|
43
|
+
#
|
44
|
+
def get
|
45
|
+
result = []
|
46
|
+
first_date = @month.western_date.clone
|
47
|
+
|
48
|
+
(0..@month.days).each do |index|
|
49
|
+
current_date = first_date.clone + index
|
50
|
+
|
51
|
+
next unless include?(date: current_date)
|
52
|
+
|
53
|
+
day = Output::Response::SingleDay.save_single_day(
|
54
|
+
param: Output::Response::SingleDay::Param.new(
|
55
|
+
year: @year, month: @month,
|
56
|
+
date: current_date, days: index
|
57
|
+
)
|
58
|
+
)
|
59
|
+
|
60
|
+
result.push(day)
|
61
|
+
end
|
62
|
+
|
63
|
+
result
|
64
|
+
end
|
65
|
+
|
66
|
+
#
|
67
|
+
# 含まれるか
|
68
|
+
#
|
69
|
+
# @param [Western::Calendar] date 西暦日
|
70
|
+
#
|
71
|
+
# @return [True] 含む
|
72
|
+
# @return [False] 含まない
|
73
|
+
#
|
74
|
+
def include?(date:)
|
75
|
+
return false if date < @start_date
|
76
|
+
|
77
|
+
return false if date > @last_date
|
78
|
+
|
79
|
+
true
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../base/year'
|
4
|
+
|
5
|
+
require_relative '../../era/western/calendar'
|
6
|
+
require_relative '../../output/response'
|
7
|
+
require_relative '../../output/logger'
|
8
|
+
|
9
|
+
require_relative './internal/month'
|
10
|
+
|
11
|
+
# :nodoc:
|
12
|
+
module Zakuro
|
13
|
+
# :nodoc:
|
14
|
+
module Calculation
|
15
|
+
# :nodoc:
|
16
|
+
module Specifier
|
17
|
+
#
|
18
|
+
# MultipleDay 複数日検索
|
19
|
+
#
|
20
|
+
module MultipleDay
|
21
|
+
# @return [Output::Logger] ロガー
|
22
|
+
LOGGER = Output::Logger.new(location: 'specifier')
|
23
|
+
|
24
|
+
#
|
25
|
+
# 取得する
|
26
|
+
#
|
27
|
+
# @param [Array<Base::Year>] years 範囲
|
28
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
29
|
+
# @param [Western::Calendar] last_date 西暦終了日
|
30
|
+
#
|
31
|
+
# @return [Array<Result::Data::SingleDay>] 期間検索結果(和暦日)
|
32
|
+
#
|
33
|
+
def self.get(years: [], start_date: Western::Calendar.new, last_date: Western::Calendar.new)
|
34
|
+
months = specify(years: years, start_date: start_date, last_date: last_date)
|
35
|
+
|
36
|
+
result = []
|
37
|
+
months.each do |month|
|
38
|
+
result |= month.get
|
39
|
+
end
|
40
|
+
|
41
|
+
result
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# 年を特定する
|
46
|
+
#
|
47
|
+
# @param [Array<Year>] years 範囲
|
48
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
49
|
+
# @param [Western::Calendar] last_date 西暦終了日
|
50
|
+
#
|
51
|
+
# @return [Array<Month>] 特定月
|
52
|
+
#
|
53
|
+
def self.specify(years: [], start_date: Western::Calendar.new,
|
54
|
+
last_date: Western::Calendar.new)
|
55
|
+
result = []
|
56
|
+
years.each do |year|
|
57
|
+
result |= specify_month(
|
58
|
+
year: year, start_date: start_date, last_date: last_date
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
62
|
+
result
|
63
|
+
end
|
64
|
+
private_class_method :specify
|
65
|
+
|
66
|
+
# :reek:TooManyStatements { max_statements: 7 }
|
67
|
+
|
68
|
+
#
|
69
|
+
# 月を特定する
|
70
|
+
#
|
71
|
+
# @param [Year] year 年
|
72
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
73
|
+
# @param [Western::Calendar] last_date 西暦終了日
|
74
|
+
#
|
75
|
+
# @return [Month] 対象月
|
76
|
+
#
|
77
|
+
def self.specify_month(year:, start_date: Western::Calendar.new,
|
78
|
+
last_date: Western::Calendar.new)
|
79
|
+
months = year.months
|
80
|
+
|
81
|
+
specify_months = []
|
82
|
+
months.each do |month|
|
83
|
+
next unless include?(month: month, start_date: start_date, last_date: last_date)
|
84
|
+
|
85
|
+
monthly_start_date = month.western_date.clone
|
86
|
+
monthly_last_date = month.last_date.clone
|
87
|
+
|
88
|
+
monthly_start_date = start_date.clone if start_date > monthly_start_date
|
89
|
+
|
90
|
+
monthly_last_date = last_date.clone if last_date < monthly_last_date
|
91
|
+
|
92
|
+
specify_months.push(
|
93
|
+
Month.new(year: year, month: month,
|
94
|
+
start_date: monthly_start_date, last_date: monthly_last_date)
|
95
|
+
)
|
96
|
+
end
|
97
|
+
|
98
|
+
specify_months
|
99
|
+
end
|
100
|
+
private_class_method :specify_month
|
101
|
+
|
102
|
+
#
|
103
|
+
# 月が範囲に含まれるか
|
104
|
+
#
|
105
|
+
# @param [Monthly::Month] month 月
|
106
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
107
|
+
# @param [Western::Calendar] last_date 西暦終了日
|
108
|
+
#
|
109
|
+
# @return [True] 含む
|
110
|
+
# @return [False] 含まない
|
111
|
+
#
|
112
|
+
def self.include?(month:, start_date:, last_date:)
|
113
|
+
monthly_start_date = month.western_date.clone
|
114
|
+
monthly_last_date = month.last_date.clone
|
115
|
+
|
116
|
+
return false if monthly_start_date.invalid?
|
117
|
+
|
118
|
+
return false if monthly_last_date.invalid?
|
119
|
+
|
120
|
+
return false if under(monthly_start_date: monthly_start_date,
|
121
|
+
start_date: start_date, last_date: last_date)
|
122
|
+
|
123
|
+
return false if over(monthly_last_date: monthly_last_date,
|
124
|
+
start_date: start_date, last_date: last_date)
|
125
|
+
|
126
|
+
true
|
127
|
+
end
|
128
|
+
private_class_method :include?
|
129
|
+
|
130
|
+
#
|
131
|
+
# 範囲が月より前にあるか
|
132
|
+
#
|
133
|
+
# @param [Western::Calendar] monthly_start_date 月初日
|
134
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
135
|
+
# @param [Western::Calendar] last_date 西暦終了日
|
136
|
+
#
|
137
|
+
# @return [True] 前にある
|
138
|
+
# @return [False] 前にない
|
139
|
+
#
|
140
|
+
def self.under(monthly_start_date:, start_date:, last_date:)
|
141
|
+
start_date < monthly_start_date && last_date < monthly_start_date
|
142
|
+
end
|
143
|
+
private_class_method :under
|
144
|
+
|
145
|
+
#
|
146
|
+
# 範囲が月より後にあるか
|
147
|
+
#
|
148
|
+
# @param [Western::Calendar] monthly_start_date 月末日
|
149
|
+
# @param [Western::Calendar] start_date 西暦開始日
|
150
|
+
# @param [Western::Calendar] last_date 西暦終了日
|
151
|
+
#
|
152
|
+
# @return [True] 後にある
|
153
|
+
# @return [False] 後にない
|
154
|
+
#
|
155
|
+
def self.over(monthly_last_date:, start_date:, last_date:)
|
156
|
+
start_date > monthly_last_date && last_date > monthly_last_date
|
157
|
+
end
|
158
|
+
private_class_method :over
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
@@ -63,10 +63,10 @@ module Zakuro
|
|
63
63
|
#
|
64
64
|
# 月を特定する
|
65
65
|
#
|
66
|
-
# @param [Year] year 年
|
66
|
+
# @param [Base::Year] year 年
|
67
67
|
# @param [Western::Calendar] date 西暦日
|
68
68
|
#
|
69
|
-
# @return [Month] 対象月
|
69
|
+
# @return [Base::Month] 対象月
|
70
70
|
#
|
71
71
|
def self.specify_month(year:, date:)
|
72
72
|
months = year.months
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../operation/operation'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
# :nodoc:
|
8
|
+
module Calculation
|
9
|
+
# :nodoc:
|
10
|
+
module Summary
|
11
|
+
#
|
12
|
+
# Operation 運用情報
|
13
|
+
#
|
14
|
+
module Operation
|
15
|
+
#
|
16
|
+
# 運用情報を生成する
|
17
|
+
#
|
18
|
+
# @param [Result::Data::SingleDay] calc_date 和暦日(計算値)
|
19
|
+
#
|
20
|
+
# @return [Result::Operation::Bundle] 運用情報
|
21
|
+
#
|
22
|
+
def self.create(calc_date: Result::Data::SingleDay.new)
|
23
|
+
first_day = calc_date.month.first_day.western_date
|
24
|
+
operation_history = Zakuro::Operation.specify_history(western_date: first_day)
|
25
|
+
|
26
|
+
operation_month = create_operation_month(operation_history: operation_history)
|
27
|
+
|
28
|
+
Result::Operation::Bundle.new(
|
29
|
+
operated: !operation_history.invalid?, month: operation_month, original: calc_date
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# 月履歴集約情報を生成する
|
35
|
+
#
|
36
|
+
# @param [Operation::MonthHistory] operation_history 変更履歴(月)
|
37
|
+
#
|
38
|
+
# @return [Result::Operation::Month::Bundle] 月履歴集約情報
|
39
|
+
#
|
40
|
+
def self.create_operation_month(operation_history: Operation::MonthHistory.new)
|
41
|
+
return Result::Operation::Month::Bundle.new if operation_history.invalid?
|
42
|
+
|
43
|
+
parent_operation_history = Zakuro::Operation.specify_history_by_id(
|
44
|
+
id: operation_history.parent_id
|
45
|
+
)
|
46
|
+
|
47
|
+
Result::Operation::Month::Bundle.new(
|
48
|
+
current: create_operation_month_history(operation_history: operation_history),
|
49
|
+
parent: create_operation_month_history(operation_history: parent_operation_history)
|
50
|
+
)
|
51
|
+
end
|
52
|
+
private_class_method :create_operation_month
|
53
|
+
|
54
|
+
#
|
55
|
+
# 月別履歴情報を生成する
|
56
|
+
#
|
57
|
+
# @param [Operation::MonthHistory] operation_history 変更履歴(月)
|
58
|
+
#
|
59
|
+
# @return [Result::Operation::Month::History] 月別履歴情報
|
60
|
+
#
|
61
|
+
def self.create_operation_month_history(operation_history: Operation::MonthHistory.new)
|
62
|
+
return Result::Operation::Month::History.new if operation_history.invalid?
|
63
|
+
|
64
|
+
annotations = create_annnotations(operation_history: operation_history)
|
65
|
+
|
66
|
+
reference = operation_history.reference
|
67
|
+
Result::Operation::Month::History.new(
|
68
|
+
id: operation_history.id, western_date: operation_history.western_date.format,
|
69
|
+
page: reference.page, number: reference.number, annotations: annotations
|
70
|
+
)
|
71
|
+
end
|
72
|
+
private_class_method :create_operation_month_history
|
73
|
+
|
74
|
+
#
|
75
|
+
# 注釈情報を生成する
|
76
|
+
#
|
77
|
+
# @param [Operation::MonthHistory] operation_history 変更履歴(月)
|
78
|
+
#
|
79
|
+
# @return [Array<Result::Operation::Month::Annotation>] 注釈
|
80
|
+
#
|
81
|
+
def self.create_annnotations(operation_history: Operation::MonthHistory.new)
|
82
|
+
annotations = []
|
83
|
+
operation_history.annotations.each do |annotation|
|
84
|
+
annotations.push(
|
85
|
+
Result::Operation::Month::Annotation.new(
|
86
|
+
description: annotation.description,
|
87
|
+
note: annotation.note
|
88
|
+
)
|
89
|
+
)
|
90
|
+
end
|
91
|
+
|
92
|
+
annotations
|
93
|
+
end
|
94
|
+
private_class_method :create_annnotations
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|