zakuro 0.6.0 → 0.6.1
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 +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
|