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,9 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '../base/multi_gengou_roller'
|
4
3
|
require_relative '../base/year'
|
5
4
|
|
6
|
-
require_relative '../../era/western'
|
5
|
+
require_relative '../../era/western/calendar'
|
7
6
|
require_relative '../../output/response'
|
8
7
|
require_relative '../../output/logger'
|
9
8
|
|
@@ -29,11 +28,7 @@ module Zakuro
|
|
29
28
|
# @return [Result::Data::SingleDay] 和暦日
|
30
29
|
#
|
31
30
|
def self.get(years: [], date: Western::Calendar.new)
|
32
|
-
year =
|
33
|
-
|
34
|
-
year = transfer(year: year, date: date)
|
35
|
-
|
36
|
-
month = specify_month(year: year, date: date)
|
31
|
+
year, month = specify(years: years, date: date)
|
37
32
|
first_date = month.western_date
|
38
33
|
|
39
34
|
Output::Response::SingleDay.save_single_day(
|
@@ -50,35 +45,18 @@ module Zakuro
|
|
50
45
|
# @param [Array<Year>] years 範囲
|
51
46
|
# @param [Western::Calendar] date 西暦日
|
52
47
|
#
|
53
|
-
# @return [Year] 対象年
|
48
|
+
# @return [Base::Year] 対象年
|
49
|
+
# @return [Base::Month] 対象月
|
54
50
|
#
|
55
|
-
def self.
|
56
|
-
years.
|
57
|
-
|
51
|
+
def self.specify(years:, date:)
|
52
|
+
years.each do |year|
|
53
|
+
month = specify_month(year: year, date: date)
|
54
|
+
return year, month unless month.invalid?
|
58
55
|
end
|
59
56
|
|
60
57
|
raise ArgumentError, "invalid year range. date: #{date.format}"
|
61
58
|
end
|
62
|
-
private_class_method :
|
63
|
-
|
64
|
-
#
|
65
|
-
# 改元する
|
66
|
-
#
|
67
|
-
# @param [Year] year 年
|
68
|
-
# @param [Western::Calendar] date 西暦日
|
69
|
-
#
|
70
|
-
# @return [Year] 改元後の年
|
71
|
-
#
|
72
|
-
def self.transfer(year:, date:)
|
73
|
-
multi_gengou = Calculation::Base::MultiGengouRoller.transfer(
|
74
|
-
multi_gengou: year.multi_gengou, date: date
|
75
|
-
)
|
76
|
-
Calculation::Base::Year.new(
|
77
|
-
multi_gengou: multi_gengou, new_year_date: year.new_year_date,
|
78
|
-
months: year.months, total_days: year.total_days
|
79
|
-
)
|
80
|
-
end
|
81
|
-
private_class_method :transfer
|
59
|
+
private_class_method :specify
|
82
60
|
|
83
61
|
# :reek:TooManyStatements { max_statements: 7 }
|
84
62
|
|
@@ -93,14 +71,14 @@ module Zakuro
|
|
93
71
|
def self.specify_month(year:, date:)
|
94
72
|
months = year.months
|
95
73
|
|
96
|
-
current_month = months[0]
|
97
74
|
months.each do |month|
|
98
|
-
|
75
|
+
western_date = month.western_date
|
76
|
+
next if western_date.invalid?
|
99
77
|
|
100
|
-
|
78
|
+
return month if month.include?(date: date)
|
101
79
|
end
|
102
80
|
|
103
|
-
|
81
|
+
Monthly::Month.new
|
104
82
|
end
|
105
83
|
private_class_method :specify_month
|
106
84
|
end
|
@@ -32,11 +32,14 @@ module Zakuro
|
|
32
32
|
years: years, date: date
|
33
33
|
)
|
34
34
|
|
35
|
-
operated_range = Calculation::Range::OperatedRange.new(
|
35
|
+
operated_range = Calculation::Range::OperatedRange.new(
|
36
|
+
context: context, start_date: date, years: years
|
37
|
+
)
|
38
|
+
operated_years = operated_range.get
|
36
39
|
|
37
40
|
Result::Single.new(
|
38
41
|
data: Calculation::Specifier::SingleDay.get(
|
39
|
-
years:
|
42
|
+
years: operated_years, date: date
|
40
43
|
),
|
41
44
|
operation: create_operation(calc_date: calc_date)
|
42
45
|
)
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../era/japan/version'
|
4
|
+
require_relative './range'
|
5
|
+
|
6
|
+
# :nodoc:
|
7
|
+
module Zakuro
|
8
|
+
# :nodoc:
|
9
|
+
module Calculation
|
10
|
+
# :nodoc:
|
11
|
+
module Version
|
12
|
+
#
|
13
|
+
# 暦検索
|
14
|
+
#
|
15
|
+
module Crawler
|
16
|
+
#
|
17
|
+
# 暦の範囲を取得する
|
18
|
+
#
|
19
|
+
# @param [Integer] start_year 開始西暦年
|
20
|
+
# @param [Integer] end_year 終了西暦年
|
21
|
+
#
|
22
|
+
# @return [Array<Range>] 暦の範囲
|
23
|
+
#
|
24
|
+
def self.get(start_year:, end_year:)
|
25
|
+
ranges = Japan::Version.ranges_with_year(start_year: start_year, end_year: end_year)
|
26
|
+
|
27
|
+
result = []
|
28
|
+
|
29
|
+
ranges.each do |range|
|
30
|
+
next unless range.released
|
31
|
+
|
32
|
+
range_start_year = range.start_year
|
33
|
+
range_start_year = start_year if start_year > range.start_year
|
34
|
+
|
35
|
+
range_end_year = range.end_year
|
36
|
+
range_end_year = end_year if end_year < range.end_year
|
37
|
+
|
38
|
+
result.push(
|
39
|
+
Range.new(
|
40
|
+
name: range.name, start_date: range.start_date.clone,
|
41
|
+
start_year: range_start_year, end_year: range_end_year
|
42
|
+
)
|
43
|
+
)
|
44
|
+
end
|
45
|
+
|
46
|
+
result
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :nodoc:
|
4
|
+
module Zakuro
|
5
|
+
# :nodoc:
|
6
|
+
module Calculation
|
7
|
+
# :nodoc:
|
8
|
+
module Version
|
9
|
+
#
|
10
|
+
# Range 暦(範囲)
|
11
|
+
#
|
12
|
+
class Range
|
13
|
+
# @return [String] 暦名
|
14
|
+
attr_reader :name
|
15
|
+
# @return [Western::Calendar] 暦の開始日
|
16
|
+
attr_reader :start_date
|
17
|
+
# @return [Integer] 開始西暦年
|
18
|
+
attr_reader :start_year
|
19
|
+
# @return [Integer] 終了西暦年
|
20
|
+
attr_reader :end_year
|
21
|
+
|
22
|
+
#
|
23
|
+
# 初期化
|
24
|
+
#
|
25
|
+
# @param [String] name 暦名
|
26
|
+
# @param [Western::Calendar] start_date 暦の開始日
|
27
|
+
# @param [Integer] start_year 開始西暦年
|
28
|
+
# @param [Integer] end_year 終了西暦年
|
29
|
+
#
|
30
|
+
def initialize(name:, start_date:, start_year:, end_year:)
|
31
|
+
@name = name
|
32
|
+
@start_date = start_date
|
33
|
+
@start_year = start_year
|
34
|
+
@end_year = end_year
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './internal/crawler'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
# :nodoc:
|
8
|
+
module Calculation
|
9
|
+
# :nodoc:
|
10
|
+
module Version
|
11
|
+
#
|
12
|
+
# 暦の範囲を取得する
|
13
|
+
#
|
14
|
+
# @param [Integer] start_year 開始西暦年
|
15
|
+
# @param [Integer] end_year 終了西暦年
|
16
|
+
#
|
17
|
+
# @return [Array<Range>] 暦の範囲
|
18
|
+
#
|
19
|
+
def self.get(start_year:, end_year:)
|
20
|
+
Crawler.get(start_year: start_year, end_year: end_year)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../tools/typeconv'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
#
|
8
|
+
# Japan 和暦
|
9
|
+
#
|
10
|
+
module Japan
|
11
|
+
#
|
12
|
+
# Calendar 年月日情報(和暦)
|
13
|
+
#
|
14
|
+
class Calendar
|
15
|
+
# @return [Integer] 無効値
|
16
|
+
INVALID = -1
|
17
|
+
# @return [String] 空文字列
|
18
|
+
EMPTY = ''
|
19
|
+
# @return [String] 閏を示す文字列
|
20
|
+
LEAPED_TEXT = '閏'
|
21
|
+
# @return [Regexp] 和暦日フォーマット
|
22
|
+
FORMAT = /^([一-龥]{2,4})([0-9]+)年(#{LEAPED_TEXT})?([0-9]+)月([0-9]+)日$/.freeze
|
23
|
+
# @return [String] 出力用デフォルトフォーマット
|
24
|
+
DEFAULT_OUTPUT_FORM = '%s%02d年%s%02d月%02d日'
|
25
|
+
|
26
|
+
# @return [String] 元号
|
27
|
+
attr_reader :gengou
|
28
|
+
# @return [Integer] 元号年
|
29
|
+
attr_reader :year
|
30
|
+
# @return [True] 閏あり
|
31
|
+
# @return [False] 閏なし
|
32
|
+
attr_reader :leaped
|
33
|
+
# @return [Integer] 月
|
34
|
+
attr_reader :month
|
35
|
+
# @return [Integer] 日
|
36
|
+
attr_reader :day
|
37
|
+
|
38
|
+
#
|
39
|
+
# 初期化
|
40
|
+
#
|
41
|
+
# @param [String] gengou 元号
|
42
|
+
# @param [Integer] year 元号年
|
43
|
+
# @param [True, False] leaped 閏
|
44
|
+
# @param [Integer] month 月
|
45
|
+
# @param [Integer] day 日
|
46
|
+
#
|
47
|
+
def initialize(gengou: EMPTY, year: INVALID, leaped: false, month: INVALID, day: INVALID)
|
48
|
+
@gengou = gengou
|
49
|
+
@year = year
|
50
|
+
@leaped = leaped
|
51
|
+
@month = month
|
52
|
+
@day = day
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# 無効か
|
57
|
+
#
|
58
|
+
# @return [True] 無効
|
59
|
+
# @return [False] 有効
|
60
|
+
#
|
61
|
+
def invalid?
|
62
|
+
@gengou == EMPTY || @year == INVALID || @month == INVALID || @day == INVALID
|
63
|
+
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# 文字列にする
|
67
|
+
#
|
68
|
+
# @return [String] 和暦日フォーマット文字列
|
69
|
+
#
|
70
|
+
def format(form: DEFAULT_OUTPUT_FORM)
|
71
|
+
leaped_text = @leaped ? LEAPED_TEXT : ''
|
72
|
+
super(form, @gengou, @year, leaped_text, @month, @day)
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# 同月か
|
77
|
+
# 年と日は無視する
|
78
|
+
#
|
79
|
+
# @param [True, False] leaped 閏
|
80
|
+
# @param [Integer] month 月
|
81
|
+
#
|
82
|
+
# @return [True] 同月
|
83
|
+
# @return [True] 同月ではない
|
84
|
+
#
|
85
|
+
def same_month?(leaped:, month:)
|
86
|
+
return false unless @leaped == leaped
|
87
|
+
|
88
|
+
@month == month
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
# 年月日情報(和暦)を生成する
|
93
|
+
#
|
94
|
+
# @param [Regexp] regex 正規表現
|
95
|
+
# @param [String] text 和暦日文字列
|
96
|
+
#
|
97
|
+
# @return [Calendar] 年月日情報(和暦)
|
98
|
+
#
|
99
|
+
def self.parse(regex: FORMAT, text: '')
|
100
|
+
return Calendar.new unless valid_date_string(regex: regex, text: text)
|
101
|
+
|
102
|
+
matched = text.match(regex)
|
103
|
+
|
104
|
+
Calendar.new(
|
105
|
+
gengou: matched[1],
|
106
|
+
year: Tools::Typeconv.to_i(text: matched[2], default: INVALID),
|
107
|
+
leaped: matched[3] ? true : false,
|
108
|
+
month: Tools::Typeconv.to_i(text: matched[4], default: INVALID),
|
109
|
+
day: Tools::Typeconv.to_i(text: matched[5], default: INVALID)
|
110
|
+
)
|
111
|
+
end
|
112
|
+
|
113
|
+
#
|
114
|
+
# 日付文字列を検証する
|
115
|
+
#
|
116
|
+
# @param [Regexp] regex 正規表現
|
117
|
+
# @param [String] text 和暦日文字列
|
118
|
+
#
|
119
|
+
# @return [True] 正しい
|
120
|
+
# @return [True] 正しくない
|
121
|
+
#
|
122
|
+
def self.valid_date_string(regex: FORMAT, text: '')
|
123
|
+
return false unless text
|
124
|
+
|
125
|
+
matched = text.match(regex)
|
126
|
+
|
127
|
+
return false unless matched
|
128
|
+
|
129
|
+
matched.size == 6
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative '../../western'
|
3
|
+
require_relative '../../western/calendar'
|
4
4
|
require_relative './type'
|
5
5
|
require_relative './validator'
|
6
6
|
require 'yaml'
|
@@ -17,8 +17,6 @@ module Zakuro
|
|
17
17
|
# Parser yaml解析
|
18
18
|
#
|
19
19
|
module Parser
|
20
|
-
# :reek:TooManyInstanceVariables { max_instance_variables: 5 }
|
21
|
-
|
22
20
|
#
|
23
21
|
# GengouParser 元号情報の検証/展開を行う
|
24
22
|
#
|
@@ -27,12 +25,10 @@ module Zakuro
|
|
27
25
|
attr_reader :index
|
28
26
|
# @return [String] 元号名
|
29
27
|
attr_reader :name
|
30
|
-
# @return [String]
|
31
|
-
attr_reader :
|
32
|
-
# @return [String]
|
33
|
-
attr_reader :
|
34
|
-
# @return [String] 開始年
|
35
|
-
attr_reader :start_year
|
28
|
+
# @return [Hash<String, String>] 開始年
|
29
|
+
attr_reader :both_start_year
|
30
|
+
# @return [Hash<String, String>] 開始日
|
31
|
+
attr_reader :both_start_date
|
36
32
|
|
37
33
|
#
|
38
34
|
# 初期化
|
@@ -43,9 +39,8 @@ module Zakuro
|
|
43
39
|
def initialize(hash:, index:)
|
44
40
|
@index = index
|
45
41
|
@name = hash['name']
|
46
|
-
@
|
47
|
-
@
|
48
|
-
@start_year = hash['start_year']
|
42
|
+
@both_start_year = hash['start_year']
|
43
|
+
@both_start_date = hash['start_date']
|
49
44
|
end
|
50
45
|
|
51
46
|
#
|
@@ -54,12 +49,11 @@ module Zakuro
|
|
54
49
|
# @return [Gengou] 元号情報
|
55
50
|
#
|
56
51
|
def create
|
57
|
-
|
58
|
-
|
59
|
-
start_year = @start_year || 1
|
52
|
+
both_start_year = Both::YearParser.new(hash: @both_start_year).create
|
53
|
+
both_start_date = Both::DateParser.new(hash: @both_start_date).create
|
60
54
|
|
61
|
-
Gengou.new(name: @name,
|
62
|
-
|
55
|
+
Gengou.new(name: @name, both_start_year: both_start_year,
|
56
|
+
both_start_date: both_start_date)
|
63
57
|
end
|
64
58
|
end
|
65
59
|
|
@@ -71,8 +65,10 @@ module Zakuro
|
|
71
65
|
attr_reader :id
|
72
66
|
# @return [String] 元号セット名
|
73
67
|
attr_reader :name
|
74
|
-
# @return [String]
|
75
|
-
attr_reader :
|
68
|
+
# @return [Hash<String, String>] 終了年
|
69
|
+
attr_reader :both_end_year
|
70
|
+
# @return [Hash<String, String>] 終了日
|
71
|
+
attr_reader :both_end_date
|
76
72
|
# @return [Array<Hash<String, String>>] 元号情報
|
77
73
|
attr_reader :list
|
78
74
|
|
@@ -84,7 +80,8 @@ module Zakuro
|
|
84
80
|
def initialize(hash:)
|
85
81
|
@id = hash['id']
|
86
82
|
@name = hash['name']
|
87
|
-
@
|
83
|
+
@both_end_year = hash['end_year']
|
84
|
+
@both_end_date = hash['end_date']
|
88
85
|
@list = hash['list']
|
89
86
|
end
|
90
87
|
|
@@ -94,10 +91,10 @@ module Zakuro
|
|
94
91
|
# @return [Set] 元号セット情報
|
95
92
|
#
|
96
93
|
def create
|
97
|
-
|
94
|
+
both_end_date = Both::DateParser.new(hash: @both_end_date).create
|
98
95
|
list = create_list
|
99
96
|
Set.new(
|
100
|
-
id: @id, name: @name,
|
97
|
+
id: @id, name: @name, both_end_date: both_end_date, list: list
|
101
98
|
)
|
102
99
|
end
|
103
100
|
|
@@ -133,18 +130,91 @@ module Zakuro
|
|
133
130
|
#
|
134
131
|
def calc_end_date_on_gengou_data(next_index:, gengou:)
|
135
132
|
if next_index >= @list.size
|
136
|
-
|
133
|
+
gengou.write_end_year(end_year: @both_end_year['western'])
|
134
|
+
end_date = Western::Calendar.parse(str: @both_end_date['western'])
|
137
135
|
gengou.write_end_date(end_date: end_date)
|
138
136
|
return gengou
|
139
137
|
end
|
140
|
-
|
138
|
+
next_item = @list[next_index]
|
139
|
+
gengou.convert_next_start_year_to_end_year(
|
140
|
+
next_start_year: next_item['start_year']['western']
|
141
|
+
)
|
141
142
|
gengou.convert_next_start_date_to_end_date(
|
142
|
-
|
143
|
+
next_start_date: next_item['start_date']['western']
|
143
144
|
)
|
144
145
|
gengou
|
145
146
|
end
|
146
147
|
end
|
147
148
|
|
149
|
+
#
|
150
|
+
# 和暦/西暦
|
151
|
+
#
|
152
|
+
module Both
|
153
|
+
#
|
154
|
+
# YearParser 年
|
155
|
+
#
|
156
|
+
class YearParser
|
157
|
+
# @return [Integer] 和暦元号年
|
158
|
+
attr_reader :japan
|
159
|
+
# @return [Integer] 西暦年
|
160
|
+
attr_reader :western
|
161
|
+
|
162
|
+
#
|
163
|
+
# 初期化
|
164
|
+
#
|
165
|
+
# @param [Hash<String, Object>] hash 年情報
|
166
|
+
#
|
167
|
+
def initialize(hash:)
|
168
|
+
@japan = hash['japan']
|
169
|
+
@western = hash['western']
|
170
|
+
end
|
171
|
+
|
172
|
+
#
|
173
|
+
# 年情報を生成する
|
174
|
+
#
|
175
|
+
# @return [Both::Year] 年情報
|
176
|
+
#
|
177
|
+
def create
|
178
|
+
japan = @japan.to_i
|
179
|
+
western = @western.to_i
|
180
|
+
|
181
|
+
Japan::Both::Year.new(japan: japan, western: western)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
#
|
186
|
+
# DateParser 日
|
187
|
+
#
|
188
|
+
class DateParser
|
189
|
+
# @return [Japan::Calendar] 和暦日
|
190
|
+
attr_reader :japan
|
191
|
+
# @return [Western::Calendar] 西暦日
|
192
|
+
attr_reader :western
|
193
|
+
|
194
|
+
#
|
195
|
+
# 初期化
|
196
|
+
#
|
197
|
+
# @param [Hash<String, Object>] hash 日情報
|
198
|
+
#
|
199
|
+
def initialize(hash:)
|
200
|
+
@japan = hash['japan']
|
201
|
+
@western = hash['western']
|
202
|
+
end
|
203
|
+
|
204
|
+
#
|
205
|
+
# 日情報を生成する
|
206
|
+
#
|
207
|
+
# @return [Both::Date] 日情報
|
208
|
+
#
|
209
|
+
def create
|
210
|
+
japan = Japan::Calendar.parse(text: @japan)
|
211
|
+
western = Western::Calendar.parse(str: @western)
|
212
|
+
|
213
|
+
Japan::Both::Date.new(japan: japan, western: western)
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
217
|
+
|
148
218
|
#
|
149
219
|
# 解析/展開する
|
150
220
|
#
|