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.
- checksums.yaml +4 -4
- data/VERSION +1 -0
- data/lib/zakuro/calculation/base/gengou.rb +82 -0
- data/lib/zakuro/calculation/base/linear_gengou.rb +76 -0
- data/lib/zakuro/calculation/base/operated_year.rb +5 -15
- data/lib/zakuro/calculation/base/year.rb +26 -14
- data/lib/zakuro/calculation/gengou/internal/counter.rb +129 -0
- data/lib/zakuro/calculation/gengou/internal/reserve/interval.rb +183 -0
- data/lib/zakuro/calculation/gengou/internal/reserve/list.rb +382 -0
- data/lib/zakuro/calculation/gengou/internal/reserve.rb +42 -0
- data/lib/zakuro/calculation/gengou/scroll.rb +262 -0
- data/lib/zakuro/calculation/monthly/first_day.rb +3 -2
- data/lib/zakuro/calculation/monthly/month.rb +49 -2
- data/lib/zakuro/calculation/monthly/operated_month.rb +2 -2
- data/lib/zakuro/calculation/range/full_range.rb +65 -103
- data/lib/zakuro/calculation/range/operated_range.rb +13 -8
- data/lib/zakuro/calculation/range/operated_solar_terms.rb +36 -17
- data/lib/zakuro/calculation/range/transfer/gengou_scroller.rb +54 -0
- data/lib/zakuro/calculation/range/transfer/year_boundary.rb +25 -21
- data/lib/zakuro/calculation/specifier/single_day.rb +13 -35
- data/lib/zakuro/calculation/summary/single.rb +5 -2
- data/lib/zakuro/calculation/version/internal/crawler.rb +51 -0
- data/lib/zakuro/calculation/version/internal/range.rb +39 -0
- data/lib/zakuro/calculation/version/version.rb +24 -0
- data/lib/zakuro/era/japan/calendar.rb +133 -0
- data/lib/zakuro/era/japan/gengou/parser.rb +95 -25
- data/lib/zakuro/era/japan/gengou/type.rb +148 -41
- data/lib/zakuro/era/japan/gengou/validator.rb +157 -52
- data/lib/zakuro/era/japan/gengou/yaml/set-001-until-south.yaml +1870 -0
- data/lib/zakuro/era/japan/gengou/yaml/set-002-from-north.yaml +810 -0
- data/lib/zakuro/era/japan/gengou/yaml/set-003-modern.yaml +50 -0
- data/lib/zakuro/era/japan/gengou.rb +5 -5
- data/lib/zakuro/era/japan/version.rb +151 -0
- data/lib/zakuro/era/{western.rb → western/calendar.rb} +0 -0
- data/lib/zakuro/merchant.rb +12 -3
- data/lib/zakuro/operation/month/parser.rb +1 -1
- data/lib/zakuro/operation/month/type.rb +1 -1
- data/lib/zakuro/operation/month/validator.rb +1 -1
- data/lib/zakuro/output/response.rb +5 -5
- data/lib/zakuro/tools/typeconv.rb +38 -0
- data/lib/zakuro/tools/typeof.rb +4 -1
- data/lib/zakuro/version/context.rb +24 -3
- data/lib/zakuro/version/daien/daien.rb +1 -26
- data/lib/zakuro/version/genka/genka.rb +1 -26
- data/lib/zakuro/version/gihou/gihou.rb +1 -30
- data/lib/zakuro/version/gregorio/gregorio.rb +1 -9
- data/lib/zakuro/version/houryaku/houryaku.rb +1 -9
- data/lib/zakuro/version/joukyou/joukyou.rb +1 -9
- data/lib/zakuro/version/kansei/kansei.rb +1 -9
- data/lib/zakuro/version/senmyou/senmyou.rb +1 -30
- data/lib/zakuro/version/tenpou/tenpou.rb +1 -9
- data/zakuro.gemspec +1 -3
- metadata +25 -17
- data/lib/zakuro/calculation/base/multi_gengou.rb +0 -101
- data/lib/zakuro/calculation/base/multi_gengou_roller.rb +0 -218
- data/lib/zakuro/calculation/range/transfer/western_date_allocation.rb +0 -82
- data/lib/zakuro/era/japan/reki.rb +0 -91
- data/lib/zakuro/era/japan/yaml/set-001-until-south.yaml +0 -1121
- data/lib/zakuro/era/japan/yaml/set-002-from-north.yaml +0 -485
- data/lib/zakuro/era/japan/yaml/set-003-modern.yaml +0 -28
- data/lib/zakuro/version/abstract_version.rb +0 -29
- data/lib/zakuro/version.rb +0 -7
- data/lib/zakuro/version_factory.rb +0 -59
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '../../western'
|
3
|
+
require_relative '../../western/calendar'
|
4
4
|
|
5
5
|
# :nodoc:
|
6
6
|
module Zakuro
|
@@ -8,40 +8,52 @@ module Zakuro
|
|
8
8
|
# Japan 和暦
|
9
9
|
#
|
10
10
|
module Japan
|
11
|
-
# :reek:TooManyInstanceVariables { max_instance_variables: 5 }
|
12
|
-
|
13
11
|
#
|
14
12
|
# Gengou 元号情報
|
15
13
|
#
|
16
14
|
class Gengou
|
17
15
|
# @return [String] 元号名
|
18
16
|
attr_reader :name
|
19
|
-
# @return [
|
20
|
-
attr_reader :
|
21
|
-
# @return [
|
22
|
-
attr_reader :
|
17
|
+
# @return [Both::Year] 開始年(和暦/西暦)
|
18
|
+
attr_reader :both_start_year
|
19
|
+
# @return [Both::Date] 開始日(和暦/西暦)
|
20
|
+
attr_reader :both_start_date
|
21
|
+
# @return [Integer] 終了年
|
22
|
+
attr_reader :end_year
|
23
23
|
# @return [Western::Calendar] 終了日
|
24
24
|
attr_reader :end_date
|
25
|
-
# @return [Integer] 元号年
|
26
|
-
attr_reader :year
|
27
25
|
|
28
26
|
#
|
29
27
|
# 初期化
|
30
28
|
#
|
31
29
|
# @param [String] name 元号名
|
32
|
-
# @param [
|
33
|
-
# @param [
|
30
|
+
# @param [Both::Year] both_start_year 開始年(和暦/西暦)
|
31
|
+
# @param [Both::Date] both_start_date 開始日(和暦/西暦)
|
32
|
+
# @param [Integer] end_date 終了年
|
34
33
|
# @param [Western::Calendar] end_date 終了日
|
35
|
-
# @param [Integer] year 元号年
|
36
34
|
#
|
37
|
-
def initialize(name: '',
|
38
|
-
|
39
|
-
end_date: Western::Calendar.new,
|
35
|
+
def initialize(name: '', both_start_year: Both::Year.new,
|
36
|
+
both_start_date: Both::Date.new,
|
37
|
+
end_date: Western::Calendar.new,
|
38
|
+
end_year: Both::Year::INVALID)
|
40
39
|
@name = name
|
41
|
-
@
|
42
|
-
@
|
40
|
+
@both_start_year = both_start_year
|
41
|
+
@both_start_date = both_start_date
|
42
|
+
@end_year = end_year
|
43
43
|
@end_date = end_date
|
44
|
-
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# 終了年を更新する
|
48
|
+
#
|
49
|
+
# @param [Integer] end_year 終了年
|
50
|
+
#
|
51
|
+
def write_end_year(end_year:)
|
52
|
+
unless Gengou.valid_year(year: end_year)
|
53
|
+
raise ArgumentError, "invalid year format. [#{end_year}]"
|
54
|
+
end
|
55
|
+
|
56
|
+
@end_year = end_year
|
45
57
|
end
|
46
58
|
|
47
59
|
#
|
@@ -59,12 +71,26 @@ module Zakuro
|
|
59
71
|
end
|
60
72
|
|
61
73
|
#
|
62
|
-
#
|
74
|
+
# 年が不正なしかどうかを確認する
|
75
|
+
#
|
76
|
+
# @param [Integer] year 年
|
77
|
+
#
|
78
|
+
# @return [True] 不正なし
|
79
|
+
# @return [False] 不正
|
80
|
+
#
|
81
|
+
def self.valid_year(year:)
|
82
|
+
return false unless year
|
83
|
+
|
84
|
+
year.is_a?(Integer)
|
85
|
+
end
|
86
|
+
|
87
|
+
#
|
88
|
+
# 日付が不正なしかどうかを確認する
|
63
89
|
#
|
64
90
|
# @param [Western::Calendar] date 日付
|
65
91
|
#
|
66
|
-
# @return [True]
|
67
|
-
# @return [False]
|
92
|
+
# @return [True] 不正なし
|
93
|
+
# @return [False] 不正
|
68
94
|
#
|
69
95
|
def self.valid_date(date:)
|
70
96
|
return false unless date
|
@@ -72,16 +98,33 @@ module Zakuro
|
|
72
98
|
date.is_a?(Western::Calendar)
|
73
99
|
end
|
74
100
|
|
101
|
+
#
|
102
|
+
# 次の元号の開始年から、元号の終了年に変換する
|
103
|
+
#
|
104
|
+
# @param [Integer] next_start_year 次回開始年
|
105
|
+
#
|
106
|
+
def convert_next_start_year_to_end_year(next_start_year:)
|
107
|
+
if @both_start_year.western >= next_start_year
|
108
|
+
@end_year = next_start_year
|
109
|
+
return
|
110
|
+
end
|
111
|
+
|
112
|
+
@end_year = next_start_year - 1
|
113
|
+
|
114
|
+
nil
|
115
|
+
end
|
116
|
+
|
75
117
|
#
|
76
118
|
# 次の元号の開始日から、元号の終了日に変換する
|
77
119
|
#
|
78
|
-
# @param [String]
|
120
|
+
# @param [String] next_start_date 次回開始日
|
79
121
|
#
|
80
|
-
def convert_next_start_date_to_end_date(
|
81
|
-
raise ArgumentError, 'empty string cannot convert' if
|
122
|
+
def convert_next_start_date_to_end_date(next_start_date: '')
|
123
|
+
raise ArgumentError, 'empty string cannot convert' if next_start_date.empty?
|
82
124
|
|
83
|
-
start_date = Western::Calendar.parse(str:
|
125
|
+
start_date = Western::Calendar.parse(str: next_start_date)
|
84
126
|
@end_date = start_date - 1
|
127
|
+
|
85
128
|
nil
|
86
129
|
end
|
87
130
|
|
@@ -94,30 +137,31 @@ module Zakuro
|
|
94
137
|
# @return [False] 含まれない
|
95
138
|
#
|
96
139
|
def include?(date:)
|
97
|
-
date >= @
|
140
|
+
date >= @both_start_date.western && date <= @end_date
|
98
141
|
end
|
99
142
|
|
100
143
|
#
|
101
|
-
#
|
144
|
+
# 不正か
|
102
145
|
#
|
103
|
-
# @return [True]
|
104
|
-
# @return [
|
146
|
+
# @return [True] 不正
|
147
|
+
# @return [False] 不正なし
|
105
148
|
#
|
106
149
|
def invalid?
|
107
|
-
@
|
150
|
+
@both_start_year.japan == -1 || @both_start_year.invalid? ||
|
151
|
+
@both_start_date.invalid? || @end_date.invalid?
|
108
152
|
end
|
109
153
|
|
110
154
|
#
|
111
155
|
# 1元号年を追加する
|
112
156
|
#
|
113
|
-
def next_year
|
114
|
-
|
115
|
-
|
116
|
-
end
|
157
|
+
# def next_year
|
158
|
+
# @year += 1 unless invalid?
|
159
|
+
# nil
|
160
|
+
# end
|
117
161
|
|
118
162
|
def to_s
|
119
|
-
"name: #{@name},
|
120
|
-
"
|
163
|
+
"name: #{@name}, both_start_year: #{@both_start_year.format}, " \
|
164
|
+
"both_start_date: #{@both_start_date.format}, end_date: #{@end_date.format}"
|
121
165
|
end
|
122
166
|
end
|
123
167
|
|
@@ -125,12 +169,16 @@ module Zakuro
|
|
125
169
|
# Set 元号セット
|
126
170
|
#
|
127
171
|
class Set
|
172
|
+
# @return [Integer] 不正値
|
173
|
+
INVALID = -1
|
128
174
|
# @return [Integer] 元号セットID
|
129
175
|
attr_reader :id
|
130
176
|
# @return [String] 元号セット名
|
131
177
|
attr_reader :name
|
132
|
-
# @return [
|
133
|
-
attr_reader :
|
178
|
+
# @return [Both::Date] 元号セットでの終了年
|
179
|
+
attr_reader :both_end_year
|
180
|
+
# @return [Both::Date] 元号セットでの終了日
|
181
|
+
attr_reader :both_end_date
|
134
182
|
# @return [Array<Gengou>] 元号リスト
|
135
183
|
attr_reader :list
|
136
184
|
|
@@ -142,10 +190,12 @@ module Zakuro
|
|
142
190
|
# @param [Western::Calendar] end_date 元号セットでの終了日
|
143
191
|
# @param [Array<Gengou>] list 元号リスト
|
144
192
|
#
|
145
|
-
def initialize(id:
|
193
|
+
def initialize(id: INVALID, name: '', both_end_year: Both::Year.new,
|
194
|
+
both_end_date: Both::Date.new, list: [])
|
146
195
|
@id = id
|
147
196
|
@name = name
|
148
|
-
@
|
197
|
+
@both_end_year = both_end_year
|
198
|
+
@both_end_date = both_end_date
|
149
199
|
@list = list
|
150
200
|
end
|
151
201
|
|
@@ -171,7 +221,64 @@ module Zakuro
|
|
171
221
|
# @return [False] 正しい
|
172
222
|
#
|
173
223
|
def invalid?
|
174
|
-
@id ==
|
224
|
+
@id == INVALID
|
225
|
+
end
|
226
|
+
end
|
227
|
+
|
228
|
+
#
|
229
|
+
# 和暦/西暦
|
230
|
+
#
|
231
|
+
module Both
|
232
|
+
#
|
233
|
+
# Year 年
|
234
|
+
#
|
235
|
+
class Year
|
236
|
+
# @return [Integer] 不正値
|
237
|
+
INVALID = -1
|
238
|
+
# @return [Integer] 和暦元号年
|
239
|
+
attr_reader :japan
|
240
|
+
# @return [Integer] 西暦年
|
241
|
+
attr_reader :western
|
242
|
+
|
243
|
+
def initialize(japan: INVALID, western: INVALID)
|
244
|
+
@japan = japan
|
245
|
+
@western = western
|
246
|
+
end
|
247
|
+
|
248
|
+
#
|
249
|
+
# 不正か
|
250
|
+
#
|
251
|
+
# @return [True] 不正
|
252
|
+
# @return [False] 不正なし
|
253
|
+
#
|
254
|
+
def invalid?
|
255
|
+
@japan == INVALID || @western == INVALID
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
#
|
260
|
+
# Date 日
|
261
|
+
#
|
262
|
+
class Date
|
263
|
+
# @return [Japan::Calendar] 和暦日
|
264
|
+
attr_reader :japan
|
265
|
+
# @return [Western::Calendar] 西暦日
|
266
|
+
attr_reader :western
|
267
|
+
|
268
|
+
def initialize(japan: Japan::Calendar.new, western: Western::Calendar.new)
|
269
|
+
@japan = japan
|
270
|
+
@western = western
|
271
|
+
end
|
272
|
+
|
273
|
+
#
|
274
|
+
# 不正か
|
275
|
+
#
|
276
|
+
# @return [True] 不正
|
277
|
+
# @return [False] 不正なし
|
278
|
+
#
|
279
|
+
def invalid?
|
280
|
+
@japan.invalid? || @western.invalid?
|
281
|
+
end
|
175
282
|
end
|
176
283
|
end
|
177
284
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '../../
|
3
|
+
require_relative '../../japan/calendar'
|
4
|
+
require_relative '../../western/calendar'
|
4
5
|
require_relative './type'
|
5
6
|
require 'yaml'
|
6
7
|
|
@@ -14,8 +15,6 @@ module Zakuro
|
|
14
15
|
# Validator yaml解析
|
15
16
|
#
|
16
17
|
module Validator
|
17
|
-
# :reek:TooManyInstanceVariables { max_instance_variables: 5 }
|
18
|
-
|
19
18
|
#
|
20
19
|
# Set 元号セット情報の検証/展開
|
21
20
|
#
|
@@ -24,8 +23,10 @@ module Zakuro
|
|
24
23
|
attr_reader :id
|
25
24
|
# @return [String] 元号セット名
|
26
25
|
attr_reader :name
|
27
|
-
# @return [String]
|
28
|
-
attr_reader :
|
26
|
+
# @return [Hash<String, String>] 終了年
|
27
|
+
attr_reader :both_end_year
|
28
|
+
# @return [Hash<String, String>] 終了日
|
29
|
+
attr_reader :both_end_date
|
29
30
|
# @return [Array<Hash<String, String>>] 元号情報
|
30
31
|
attr_reader :list
|
31
32
|
|
@@ -37,12 +38,11 @@ module Zakuro
|
|
37
38
|
def initialize(hash:)
|
38
39
|
@id = hash['id']
|
39
40
|
@name = hash['name']
|
40
|
-
@
|
41
|
+
@both_end_year = hash['end_year']
|
42
|
+
@both_end_date = hash['end_date']
|
41
43
|
@list = hash['list']
|
42
44
|
end
|
43
45
|
|
44
|
-
# :reek:TooManyStatements { max_statements: 6 }
|
45
|
-
|
46
46
|
#
|
47
47
|
# 検証する
|
48
48
|
#
|
@@ -50,11 +50,13 @@ module Zakuro
|
|
50
50
|
#
|
51
51
|
def validate
|
52
52
|
failed = []
|
53
|
-
failed.push("invalid id. #{id}") unless id?
|
53
|
+
failed.push("invalid id. #{@id}") unless id?
|
54
54
|
|
55
|
-
failed.push("invalid name. #{name}") unless name?
|
55
|
+
failed.push("invalid name. #{@name}") unless name?
|
56
56
|
|
57
|
-
failed
|
57
|
+
failed |= validate_both_end_year
|
58
|
+
|
59
|
+
failed |= validate_both_end_date
|
58
60
|
|
59
61
|
failed |= validate_list
|
60
62
|
failed
|
@@ -85,13 +87,21 @@ module Zakuro
|
|
85
87
|
end
|
86
88
|
|
87
89
|
#
|
88
|
-
#
|
90
|
+
# 終了年を検証する
|
89
91
|
#
|
90
|
-
# @return [
|
91
|
-
#
|
92
|
+
# @return [Array<String>] 不正メッセージ
|
93
|
+
#
|
94
|
+
def validate_both_end_year
|
95
|
+
Both::Year.new(hash: @both_end_year).validate
|
96
|
+
end
|
97
|
+
|
92
98
|
#
|
93
|
-
|
94
|
-
|
99
|
+
# 終了日を検証する
|
100
|
+
#
|
101
|
+
# @return [Array<String>] 不正メッセージ
|
102
|
+
#
|
103
|
+
def validate_both_end_date
|
104
|
+
Both::Date.new(hash: @both_end_date).validate
|
95
105
|
end
|
96
106
|
|
97
107
|
#
|
@@ -109,8 +119,7 @@ module Zakuro
|
|
109
119
|
#
|
110
120
|
# 元号情報を検証する
|
111
121
|
#
|
112
|
-
# @return [
|
113
|
-
# @return [False] 正しくない
|
122
|
+
# @return [Array<String>] 不正メッセージ
|
114
123
|
#
|
115
124
|
def validate_list
|
116
125
|
return ["invalid list. #{@list.class}"] unless list?
|
@@ -123,8 +132,6 @@ module Zakuro
|
|
123
132
|
end
|
124
133
|
end
|
125
134
|
|
126
|
-
# :reek:TooManyInstanceVariables { max_instance_variables: 5 }
|
127
|
-
|
128
135
|
#
|
129
136
|
# Gengou 元号情報
|
130
137
|
#
|
@@ -133,12 +140,10 @@ module Zakuro
|
|
133
140
|
attr_reader :index
|
134
141
|
# @return [String] 元号名
|
135
142
|
attr_reader :name
|
136
|
-
# @return [String]
|
137
|
-
attr_reader :
|
138
|
-
# @return [String]
|
139
|
-
attr_reader :
|
140
|
-
# @return [String] 開始年
|
141
|
-
attr_reader :start_year
|
143
|
+
# @return [Hash<String, String>] 開始年
|
144
|
+
attr_reader :both_start_year
|
145
|
+
# @return [Hash<String, String>] 開始日
|
146
|
+
attr_reader :both_start_date
|
142
147
|
|
143
148
|
#
|
144
149
|
# 初期化
|
@@ -149,13 +154,10 @@ module Zakuro
|
|
149
154
|
def initialize(hash:, index:)
|
150
155
|
@index = index
|
151
156
|
@name = hash['name']
|
152
|
-
@
|
153
|
-
@
|
154
|
-
@start_year = hash['start_year']
|
157
|
+
@both_start_year = hash['start_year']
|
158
|
+
@both_start_date = hash['start_date']
|
155
159
|
end
|
156
160
|
|
157
|
-
# :reek:TooManyStatements { max_statements: 7 }
|
158
|
-
|
159
161
|
#
|
160
162
|
# 検証する
|
161
163
|
#
|
@@ -167,11 +169,9 @@ module Zakuro
|
|
167
169
|
|
168
170
|
failed.push(prefix + "invalid name. #{@name}") unless name?
|
169
171
|
|
170
|
-
failed
|
171
|
-
|
172
|
-
failed.push(prefix + "invalid start_year. #{@start_year}") unless year?
|
172
|
+
failed |= validate_both_start_year
|
173
173
|
|
174
|
-
failed
|
174
|
+
failed |= validate_both_start_date
|
175
175
|
|
176
176
|
failed
|
177
177
|
end
|
@@ -189,35 +189,140 @@ module Zakuro
|
|
189
189
|
end
|
190
190
|
|
191
191
|
#
|
192
|
-
#
|
192
|
+
# 開始年を検証する
|
193
193
|
#
|
194
|
-
# @return [
|
195
|
-
# @return [False] 正しくない
|
194
|
+
# @return [Array<String>] 不正メッセージ
|
196
195
|
#
|
197
|
-
def
|
198
|
-
|
196
|
+
def validate_both_start_year
|
197
|
+
Both::Year.new(hash: @both_start_year).validate
|
199
198
|
end
|
200
199
|
|
201
200
|
#
|
202
|
-
#
|
201
|
+
# 開始日を検証する
|
203
202
|
#
|
204
|
-
# @return [
|
205
|
-
# @return [False] 正しくない
|
203
|
+
# @return [Array<String>] 不正メッセージ
|
206
204
|
#
|
207
|
-
def
|
208
|
-
|
205
|
+
def validate_both_start_date
|
206
|
+
Both::Date.new(hash: @both_start_date).validate
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
#
|
211
|
+
# 和暦/西暦
|
212
|
+
#
|
213
|
+
module Both
|
214
|
+
#
|
215
|
+
# Year 年
|
216
|
+
#
|
217
|
+
class Year
|
218
|
+
# @return [String] 和暦元号年
|
219
|
+
attr_reader :japan
|
220
|
+
# @return [String] 西暦年
|
221
|
+
attr_reader :western
|
222
|
+
|
223
|
+
#
|
224
|
+
# 初期化
|
225
|
+
#
|
226
|
+
# @param [Hash<String, Strin>] hash 年情報
|
227
|
+
#
|
228
|
+
def initialize(hash:)
|
229
|
+
@japan = hash['japan']
|
230
|
+
@western = hash['western']
|
231
|
+
end
|
232
|
+
|
233
|
+
#
|
234
|
+
# 検証する
|
235
|
+
#
|
236
|
+
# @return [Array<String>] 不正メッセージ
|
237
|
+
#
|
238
|
+
def validate
|
239
|
+
failed = []
|
240
|
+
|
241
|
+
failed.push("invalid japan year. #{@japan}") unless japan?
|
242
|
+
|
243
|
+
failed.push("invalid western year. #{@western}") unless western?
|
244
|
+
|
245
|
+
failed
|
246
|
+
end
|
247
|
+
|
248
|
+
#
|
249
|
+
# 和暦元号年を検証する
|
250
|
+
#
|
251
|
+
# @return [True] 正しい
|
252
|
+
# @return [False] 正しくない
|
253
|
+
#
|
254
|
+
def japan?
|
255
|
+
return false unless @japan
|
256
|
+
|
257
|
+
@japan.is_a?(Integer)
|
258
|
+
end
|
259
|
+
|
260
|
+
#
|
261
|
+
# 和暦元号年を検証する
|
262
|
+
#
|
263
|
+
# @return [True] 正しい
|
264
|
+
# @return [False] 正しくない
|
265
|
+
#
|
266
|
+
def western?
|
267
|
+
return false unless @western
|
268
|
+
|
269
|
+
@western.is_a?(Integer)
|
270
|
+
end
|
209
271
|
end
|
210
272
|
|
211
273
|
#
|
212
|
-
#
|
213
|
-
#
|
214
|
-
# @return [True] 正しい
|
215
|
-
# @return [False] 正しくない
|
274
|
+
# Date 日
|
216
275
|
#
|
217
|
-
|
218
|
-
return
|
276
|
+
class Date
|
277
|
+
# @return [String] 和暦日
|
278
|
+
attr_reader :japan
|
279
|
+
# @return [String] 西暦日
|
280
|
+
attr_reader :western
|
281
|
+
|
282
|
+
#
|
283
|
+
# 初期化
|
284
|
+
#
|
285
|
+
# @param [Hash<String, Strin>] hash 日情報
|
286
|
+
#
|
287
|
+
def initialize(hash:)
|
288
|
+
@japan = hash['japan']
|
289
|
+
@western = hash['western']
|
290
|
+
end
|
291
|
+
|
292
|
+
#
|
293
|
+
# 検証する
|
294
|
+
#
|
295
|
+
# @return [Array<String>] 不正メッセージ
|
296
|
+
#
|
297
|
+
def validate
|
298
|
+
failed = []
|
299
|
+
|
300
|
+
failed.push("invalid japan date. #{@japan}") unless japan?
|
219
301
|
|
220
|
-
|
302
|
+
failed.push("invalid western date. #{@western}") unless western?
|
303
|
+
|
304
|
+
failed
|
305
|
+
end
|
306
|
+
|
307
|
+
#
|
308
|
+
# 和暦日を検証する
|
309
|
+
#
|
310
|
+
# @return [True] 正しい
|
311
|
+
# @return [False] 正しくない
|
312
|
+
#
|
313
|
+
def japan?
|
314
|
+
Japan::Calendar.valid_date_string(text: @japan)
|
315
|
+
end
|
316
|
+
|
317
|
+
#
|
318
|
+
# 西暦日を検証する
|
319
|
+
#
|
320
|
+
# @return [True] 正しい
|
321
|
+
# @return [False] 正しくない
|
322
|
+
#
|
323
|
+
def western?
|
324
|
+
Western::Calendar.valid_date_string(str: @western)
|
325
|
+
end
|
221
326
|
end
|
222
327
|
end
|
223
328
|
|