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
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative '../western/calendar'
4
- require_relative './gengou/parser'
5
- require_relative './gengou/type'
4
+
5
+ require_relative './gengou/alignment'
6
6
 
7
7
  # :nodoc:
8
8
  module Zakuro
@@ -11,95 +11,56 @@ module Zakuro
11
11
  #
12
12
  module Japan
13
13
  #
14
- # GengouResource 元号情報
14
+ # Gengou 元号
15
15
  #
16
- module GengouResource
17
- # @return [Array<Set>] 元号セット情報リスト
18
- LIST = [
19
- Parser.run(filepath: File.expand_path(
20
- './gengou/yaml/set-001-until-south.yaml',
21
- __dir__
22
- )),
23
- Parser.run(filepath: File.expand_path(
24
- './gengou/yaml/set-002-from-north.yaml',
25
- __dir__
26
- )),
27
- Parser.run(filepath: File.expand_path(
28
- './gengou/yaml/set-003-modern.yaml',
29
- __dir__
30
- ))
31
- ].freeze
32
-
33
- # :reek:TooManyStatements { max_statements: 9 }
34
-
35
- #
36
- # 元号(1行目,2行目)を引き当てる
37
- #
38
- # * LIST配列の元号情報を配列順で「x行目」(1始まり)とする
39
- # * 1行目にデータがあれば、第一要素に1行目のデータが設定される
40
- # * 1行目と2行目にデータがあれば、第二要素に2行目のデータが設定される
41
- # * 1行目にデータがなく、2行目以降に1つだけデータがあれば、第一要素にそのデータを設定してそれ以外の要素は未設定
42
- # * 1行目にデータがなく、2行目以降に2つ以上のデータがあれば、第一要素に末尾行に一番近いデータを設定してそれ以外の要素は未設定
43
- #
44
- # @param [Western::Calendar] date 日
45
- #
46
- # @return [Array<Gengou>] 元号情報(1行目, 2行目)
47
- #
48
- def self.lines(date:)
49
- lines = native_lines(date: date)
50
- return lines unless lines[0].invalid?
51
-
52
- first = Japan::Gengou.new
53
- lines[1..].each.with_index(1) do |item, index|
54
- next if item.invalid?
16
+ module Gengou
17
+ # @return [Integer] 1行目
18
+ FIRST_LINE = Alignment::Aligner::FIRST_LINE
19
+ # @return [Integer] 2行目
20
+ SECOND_LINE = Alignment::Aligner::SECOND_LINE
55
21
 
56
- first = item
57
- lines[index] = Japan::Gengou.new
58
- end
59
- lines[0] = first
60
- lines
61
- end
62
-
63
- #
64
- # 元号を引き当てる
65
22
  #
66
- # * LISTから単純に元号を引き当てる
67
- # * 1行目,2行目といった概念は無視する
23
+ # 該当行の元号を取得する
68
24
  #
69
- # @param [Western::Calendar] date
25
+ # @param [Integer] line 行番号
26
+ # @param [Western::Calendar] start_date 開始日
27
+ # @param [Western::Calendar] last_date 終了日
70
28
  #
71
- # @return [Array<Gengou>] 元号情報
29
+ # @return [Array<LinearGengou>] 該当行の元号
72
30
  #
73
- def self.native_lines(date:)
74
- result = Array.new(LIST.size)
75
- LIST.each_with_index do |set, index|
76
- result[index] = set.include_item(date: date)
77
- end
78
- result
31
+ def self.line(line: FIRST_LINE,
32
+ start_date: Western::Calendar.new, last_date: Western::Calendar.new)
33
+ Alignment.get(
34
+ line: line, start_date: start_date, last_date: last_date
35
+ )
79
36
  end
80
37
 
81
38
  #
82
- # 「日本暦日原典」1行目の元号を返す
39
+ # 1行目元号を取得する
83
40
  #
84
- # @param [Western::Calendar] date
41
+ # @param [Western::Calendar] start_date 開始日
42
+ # @param [Western::Calendar] last_date 終了日
85
43
  #
86
- # @return [Gengou] 元号情報(1行目)
44
+ # @return [Array<LinearGengou>] 1行目元号
87
45
  #
88
- def self.first_line(date:)
89
- lines = lines(date: date)
90
- lines[0].clone
46
+ def self.first_line(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
47
+ Alignment.get(
48
+ line: FIRST_LINE, start_date: start_date, last_date: last_date
49
+ )
91
50
  end
92
51
 
93
52
  #
94
- # 「日本暦日原典」2行目の元号を返す
53
+ # 2行目元号を取得する
95
54
  #
96
- # @param [Western::Calendar] date
55
+ # @param [Western::Calendar] start_date 開始日
56
+ # @param [Western::Calendar] last_date 終了日
97
57
  #
98
- # @return [Gengou] 元号情報(2行目)
58
+ # @return [Array<LinearGengou>] 2行目元号
99
59
  #
100
- def self.second_line(date:)
101
- lines = lines(date: date)
102
- lines[1].clone
60
+ def self.second_line(start_date: Western::Calendar.new, last_date: Western::Calendar.new)
61
+ Alignment.get(
62
+ line: SECOND_LINE, start_date: start_date, last_date: last_date
63
+ )
103
64
  end
104
65
  end
105
66
  end
@@ -23,7 +23,7 @@ module Zakuro
23
23
  # @return [Integer] 開始西暦年
24
24
  attr_reader :start_year
25
25
  # @return [Integer] 終了西暦年
26
- attr_reader :end_year
26
+ attr_reader :last_year
27
27
  # @return [True] リリース済
28
28
  # @return [False] 未リリース
29
29
  attr_reader :released
@@ -34,20 +34,20 @@ module Zakuro
34
34
  # @param [String] name 暦名
35
35
  # @param [Western::Calendar] start_date 暦の開始日
36
36
  # @param [Integer] start_year 開始西暦年
37
- # @param [Integer] end_year 終了西暦年
37
+ # @param [Integer] last_year 終了西暦年
38
38
  # @param [True, False] released リリース済 / 未リリース
39
39
  #
40
- def initialize(name:, start_date:, start_year:, end_year:, released:)
40
+ def initialize(name:, start_date:, start_year:, last_year:, released:)
41
41
  @name = name
42
42
  @start_date = start_date
43
43
  @start_year = start_year
44
- @end_year = end_year
44
+ @last_year = last_year
45
45
  @released = released
46
46
  end
47
47
  end
48
48
 
49
49
  # TODO: yamlにする
50
- # TODO: end_year は不要
50
+ # TODO: last_year は不要
51
51
 
52
52
  # @return [Array<Range>] 全和暦
53
53
  LIST = [
@@ -56,7 +56,7 @@ module Zakuro
56
56
  name: 'Genka',
57
57
  start_date: Western::Calendar.new(year: 445, month: 1, day: 24),
58
58
  start_year: 445,
59
- end_year: 697,
59
+ last_year: 697,
60
60
  released: true
61
61
  ),
62
62
  # 文武天皇02年01月01日
@@ -64,7 +64,7 @@ module Zakuro
64
64
  name: 'Gihou',
65
65
  start_date: Western::Calendar.new(year: 698, month: 2, day: 16),
66
66
  start_year: 698,
67
- end_year: 763,
67
+ last_year: 763,
68
68
  released: true
69
69
  ),
70
70
  # 天平宝字08年01月01日
@@ -72,7 +72,7 @@ module Zakuro
72
72
  name: 'Daien',
73
73
  start_date: Western::Calendar.new(year: 764, month: 2, day: 7),
74
74
  start_year: 764,
75
- end_year: 861,
75
+ last_year: 861,
76
76
  released: true
77
77
  ),
78
78
  # 貞観02年01月01日
@@ -80,7 +80,7 @@ module Zakuro
80
80
  name: 'Senmyou',
81
81
  start_date: Western::Calendar.new(year: 862, month: 2, day: 3),
82
82
  start_year: 862,
83
- end_year: 1684,
83
+ last_year: 1684,
84
84
  released: true
85
85
  ),
86
86
  # 貞享02年01月01日
@@ -88,7 +88,7 @@ module Zakuro
88
88
  name: 'Joukyou',
89
89
  start_date: Western::Calendar.new(year: 1685, month: 2, day: 4),
90
90
  start_year: 1685,
91
- end_year: 1754,
91
+ last_year: 1754,
92
92
  released: false
93
93
  ),
94
94
  # 宝暦05年01月01日
@@ -96,7 +96,7 @@ module Zakuro
96
96
  name: 'Houryaku',
97
97
  start_date: Western::Calendar.new(year: 1755, month: 2, day: 11),
98
98
  start_year: 1755,
99
- end_year: 1797,
99
+ last_year: 1797,
100
100
  released: false
101
101
  ),
102
102
  # 寛政10年01月01日
@@ -104,7 +104,7 @@ module Zakuro
104
104
  name: 'Kansei',
105
105
  start_date: Western::Calendar.new(year: 1798, month: 2, day: 16),
106
106
  start_year: 1798,
107
- end_year: 1843,
107
+ last_year: 1843,
108
108
  released: false
109
109
  ),
110
110
  # 天保13年01月01日
@@ -112,7 +112,7 @@ module Zakuro
112
112
  name: 'Tenpou',
113
113
  start_date: Western::Calendar.new(year: 1844, month: 2, day: 18),
114
114
  start_year: 1844,
115
- end_year: 1867,
115
+ last_year: 1867,
116
116
  released: false
117
117
  ),
118
118
  # 明治01年09月08日
@@ -120,7 +120,7 @@ module Zakuro
120
120
  name: 'Gregorio',
121
121
  start_date: Western::Calendar.new(year: 1868, month: 10, day: 23),
122
122
  start_year: 1868,
123
- end_year: 9999,
123
+ last_year: 9999,
124
124
  released: false
125
125
  )
126
126
  ].freeze
@@ -129,17 +129,17 @@ module Zakuro
129
129
  # 年を基準に暦を引き当てる
130
130
  #
131
131
  # @param [Integer] start_year 開始西暦年
132
- # @param [Integer] end_year 終了西暦年
132
+ # @param [Integer] last_year 終了西暦年
133
133
  #
134
134
  # @return [Array<Range>] 和暦
135
135
  #
136
- def self.ranges_with_year(start_year:, end_year:)
136
+ def self.ranges_with_year(start_year:, last_year:)
137
137
  result = []
138
138
 
139
139
  LIST.each do |range|
140
- next if start_year > range.end_year
140
+ next if start_year > range.last_year
141
141
 
142
- next if end_year < range.start_year
142
+ next if last_year < range.start_year
143
143
 
144
144
  result.push(range)
145
145
  end
@@ -4,6 +4,8 @@ require_relative './era/western/calendar'
4
4
 
5
5
  require_relative './calculation/summary/single'
6
6
 
7
+ require_relative './calculation/summary/range'
8
+
7
9
  require_relative './condition'
8
10
 
9
11
  require_relative './output/error'
@@ -50,19 +52,55 @@ module Zakuro
50
52
  # 承諾する
51
53
  #
52
54
  # @return [Result::SingleDay] 和暦日
55
+ # @return [Result::Range] 和暦日範囲
53
56
  #
54
57
  def commit
55
58
  date = condition.date
56
59
 
57
- # TODO: does not have no patterns now
58
- return {} unless date
60
+ return single(date: date) if date
61
+
62
+ range = condition.range
63
+
64
+ return range(range: range) if range
65
+
66
+ {}
67
+ end
68
+
69
+ private
59
70
 
71
+ #
72
+ # 1日検索
73
+ #
74
+ # @param [Date] date 西暦日
75
+ #
76
+ # @return [Result::Single] 検索結果
77
+ #
78
+ def single(date:)
60
79
  western_date = Western::Calendar.create(date: date)
61
80
 
62
- # TODO: 引数不要
81
+ # TODO: condition で設定する
63
82
  context = Context.new(version_name: '')
64
83
 
65
84
  Calculation::Summary::Single.get(context: context, date: western_date)
66
85
  end
86
+
87
+ #
88
+ # 期間検索
89
+ #
90
+ # @param [Catalog::Range] range 期間
91
+ #
92
+ # @return [Result::Range] 和暦日範囲
93
+ #
94
+ def range(range:)
95
+ start_date = Western::Calendar.create(date: range[:start])
96
+ last_date = Western::Calendar.create(date: range[:last])
97
+
98
+ # TODO: condition で設定する
99
+ context = Context.new(version_name: '')
100
+
101
+ Calculation::Summary::Range.get(
102
+ context: context, start_date: start_date, last_date: last_date
103
+ )
104
+ end
67
105
  end
68
106
  end
@@ -150,7 +150,7 @@ module Zakuro
150
150
  # @return [String] ID
151
151
  attr_reader :id
152
152
  # @return [String] 親ID
153
- attr_reader :parend_id
153
+ attr_reader :parent_id
154
154
  # @return [String] 西暦日
155
155
  attr_reader :western_date
156
156
  # @return [String] 有効行
@@ -33,5 +33,22 @@ module Zakuro
33
33
  @operation = operation
34
34
  end
35
35
  end
36
+
37
+ #
38
+ # Range 期間検索結果
39
+ #
40
+ class Range < Core
41
+ attr_reader :list
42
+
43
+ #
44
+ # 初期化
45
+ #
46
+ # @param [Array<Data::Single>] list 期間内データ
47
+ #
48
+ def initialize(list: [])
49
+ super
50
+ @list = list
51
+ end
52
+ end
36
53
  end
37
54
  end
@@ -94,21 +94,25 @@
94
94
 
95
95
  計算の多くはそれぞれの暦に依存するが、まずは共通の計算部分を列挙する
96
96
 
97
- ### ある元号の2年目以降について
97
+ ### 元号の求め方
98
98
 
99
- 各元号の1年(元年)の始まりは固定値のため、西暦にて開始日を持つ(例: 正慶1年1月1日 = 1332/01/28)
99
+ 元慶(877-6-1 885-3-10)をもとに考える
100
100
 
101
- 日本の旧暦(太陰太陽暦)において、元号は1月1日を境に改元または継続する
101
+ 元号開始年が存在する元号年(877)から、次の元号の開始年(885) + 1 までを和暦計算する。これをAとする
102
102
 
103
- NOTE: これは『日本暦日原典』をベースにした場合であり、多くの場合、実際の改元は1月1日ではない [返却される元号が実際の存在期間と一致しない](https://github.com/pldb/zakuro/issues/3)
103
+ 元号のはじまりは固定値のため、西暦開始日と、それに対応する和暦開始日を持つ(例: 元慶01年0416日 = 877-6-1
104
104
 
105
- ここで問題となるのは、元号2年目以降はその前年までの計算結果が必要になることである
105
+ この和暦開始日は必ずAの1年目に存在するため、1年目の和暦日を特定し、その日と西暦開始日を関連付ける
106
106
 
107
- 西暦(太陽暦)のように1年あたりの日数は一定しない
107
+ もし元慶2年以降を計算したい場合は、Aの西暦開始日から該当年月日までを加算で求める
108
+
109
+ 具体的には、和暦上の月の大小(29日 or 30日)を用いた加算となる
110
+
111
+ 念のため補足するが、西暦(太陽暦)のように1年あたりの日数は一定しない
108
112
 
109
113
  平年(353/354/355/356)または閏年(383/384/385)のパターンがあり、月の大小(29/30)や閏月(中気のない月)の有無で変動する
110
114
 
111
- この日数を求めることで、初めて2年目の開始日が求められる(1332/01/28 + 355日 = 1333/1/17 = 正慶2年1月1日)
115
+ したがって、2年目以降を加算なしに特定することはできない
112
116
 
113
117
  ### 南北朝について
114
118
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: zakuro
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.6.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - pldb
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-15 00:00:00.000000000 Z
11
+ date: 2022-03-02 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: mainly lunar solar calendar
14
14
  email:
@@ -48,11 +48,16 @@ files:
48
48
  - lib/zakuro/calculation/cycle/abstract_remainder.rb
49
49
  - lib/zakuro/calculation/cycle/abstract_solar_term.rb
50
50
  - lib/zakuro/calculation/cycle/zodiac.rb
51
- - lib/zakuro/calculation/gengou/internal/counter.rb
52
- - lib/zakuro/calculation/gengou/internal/reserve.rb
53
- - lib/zakuro/calculation/gengou/internal/reserve/interval.rb
54
- - lib/zakuro/calculation/gengou/internal/reserve/list.rb
55
- - lib/zakuro/calculation/gengou/scroll.rb
51
+ - lib/zakuro/calculation/era/gengou/internal/connector.rb
52
+ - lib/zakuro/calculation/era/gengou/internal/counter.rb
53
+ - lib/zakuro/calculation/era/gengou/internal/publisher.rb
54
+ - lib/zakuro/calculation/era/gengou/internal/reserve.rb
55
+ - lib/zakuro/calculation/era/gengou/internal/reserve/list.rb
56
+ - lib/zakuro/calculation/era/gengou/internal/reserve/range.rb
57
+ - lib/zakuro/calculation/era/gengou/scroll.rb
58
+ - lib/zakuro/calculation/era/version/internal/crawler.rb
59
+ - lib/zakuro/calculation/era/version/internal/range.rb
60
+ - lib/zakuro/calculation/era/version/version.rb
56
61
  - lib/zakuro/calculation/monthly/abstract_lunar_phase.rb
57
62
  - lib/zakuro/calculation/monthly/first_day.rb
58
63
  - lib/zakuro/calculation/monthly/initialized_month.rb
@@ -65,26 +70,33 @@ files:
65
70
  - lib/zakuro/calculation/range/operated_solar_terms.rb
66
71
  - lib/zakuro/calculation/range/transfer/gengou_scroller.rb
67
72
  - lib/zakuro/calculation/range/transfer/year_boundary.rb
73
+ - lib/zakuro/calculation/specifier/internal/month.rb
74
+ - lib/zakuro/calculation/specifier/multiple_day.rb
68
75
  - lib/zakuro/calculation/specifier/single_day.rb
69
76
  - lib/zakuro/calculation/stella/lunar/abstract_location.rb
70
77
  - lib/zakuro/calculation/stella/lunar/choukei_value.rb
71
78
  - lib/zakuro/calculation/stella/solar/abstract_average.rb
72
79
  - lib/zakuro/calculation/stella/solar/abstract_location.rb
73
80
  - lib/zakuro/calculation/stella/solar/choukei_value.rb
81
+ - lib/zakuro/calculation/summary/internal/operation.rb
82
+ - lib/zakuro/calculation/summary/range.rb
74
83
  - lib/zakuro/calculation/summary/single.rb
75
84
  - lib/zakuro/calculation/type/old_float.rb
76
- - lib/zakuro/calculation/version/internal/crawler.rb
77
- - lib/zakuro/calculation/version/internal/range.rb
78
- - lib/zakuro/calculation/version/version.rb
79
85
  - lib/zakuro/condition.rb
80
86
  - lib/zakuro/era/japan/calendar.rb
81
87
  - lib/zakuro/era/japan/gengou.rb
82
- - lib/zakuro/era/japan/gengou/parser.rb
83
- - lib/zakuro/era/japan/gengou/type.rb
84
- - lib/zakuro/era/japan/gengou/validator.rb
85
- - lib/zakuro/era/japan/gengou/yaml/set-001-until-south.yaml
86
- - lib/zakuro/era/japan/gengou/yaml/set-002-from-north.yaml
87
- - lib/zakuro/era/japan/gengou/yaml/set-003-modern.yaml
88
+ - lib/zakuro/era/japan/gengou/alignment.rb
89
+ - lib/zakuro/era/japan/gengou/alignment/aligner.rb
90
+ - lib/zakuro/era/japan/gengou/alignment/division.rb
91
+ - lib/zakuro/era/japan/gengou/alignment/line.rb
92
+ - lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb
93
+ - lib/zakuro/era/japan/gengou/resource.rb
94
+ - lib/zakuro/era/japan/gengou/resource/parser.rb
95
+ - lib/zakuro/era/japan/gengou/resource/type.rb
96
+ - lib/zakuro/era/japan/gengou/resource/validator.rb
97
+ - lib/zakuro/era/japan/gengou/resource/yaml/set-001-until-south.yaml
98
+ - lib/zakuro/era/japan/gengou/resource/yaml/set-002-from-north.yaml
99
+ - lib/zakuro/era/japan/gengou/resource/yaml/set-003-modern.yaml
88
100
  - lib/zakuro/era/japan/version.rb
89
101
  - lib/zakuro/era/western/calendar.rb
90
102
  - lib/zakuro/merchant.rb
@@ -187,7 +199,7 @@ metadata:
187
199
  homepage_uri: https://github.com/pldb/zakuro
188
200
  source_code_uri: https://github.com/pldb/zakuro
189
201
  changelog_uri: https://github.com/pldb/zakuro
190
- post_install_message:
202
+ post_install_message:
191
203
  rdoc_options: []
192
204
  require_paths:
193
205
  - lib
@@ -202,8 +214,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
202
214
  - !ruby/object:Gem::Version
203
215
  version: '0'
204
216
  requirements: []
205
- rubygems_version: 3.1.4
206
- signing_key:
217
+ rubygems_version: 3.1.2
218
+ signing_key:
207
219
  specification_version: 4
208
220
  summary: japanese calendar library.
209
221
  test_files: []
@@ -1,129 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../../era/japan/gengou'
4
- require_relative '../../../era/japan/calendar'
5
- require_relative '../../../era/western/calendar'
6
-
7
- # :nodoc:
8
- module Zakuro
9
- # :nodoc:
10
- module Calculation
11
- # :nodoc:
12
- module Gengou
13
- #
14
- # Counter 加算元号
15
- #
16
- class Counter
17
- # @return [Integer] 不正値
18
- INVALID_YEAR = -1
19
-
20
- # @return [Japan::Gengou] 元号
21
- attr_reader :gengou
22
- # @return [Integer] 元号年
23
- attr_reader :japan_year
24
- # @return [Integer] 西暦年
25
- attr_reader :western_year
26
-
27
- #
28
- # 初期化
29
- #
30
- # @param [Japan::Gengou] gengou 元号
31
- #
32
- def initialize(gengou: Japan::Gengou.new)
33
- @gengou = gengou
34
- @japan_year = gengou.both_start_year.japan
35
- @western_year = gengou.both_start_year.western
36
- end
37
-
38
- #
39
- # 和暦開始日を取得する
40
- #
41
- # @return [Japan::Calendar] 和暦開始日
42
- #
43
- def japan_start_date
44
- return Japan::Calendar.new if @gengou.invalid?
45
-
46
- @gengou.both_start_date.japan
47
- end
48
-
49
- #
50
- # 西暦開始日を取得する
51
- #
52
- # @return [Western::Calendar] 西暦開始日
53
- #
54
- def western_start_date
55
- return Western::Calendar.new if @gengou.invalid?
56
-
57
- @gengou.both_start_date.western
58
- end
59
-
60
- #
61
- # 西暦終了日を取得する
62
- #
63
- # @return [Western::Calendar] 西暦終了日
64
- #
65
- def western_end_date
66
- return Western::Calendar.new if @gengou.invalid?
67
-
68
- @gengou.end_date
69
- end
70
-
71
- #
72
- # 次年にする
73
- #
74
- # @return [MultiGengou] 自身
75
- #
76
- def next_year
77
- @japan_year += 1
78
- @western_year += 1
79
-
80
- self
81
- end
82
-
83
- #
84
- # 元号名を取得する
85
- #
86
- # @return [String] 元号名
87
- #
88
- def name
89
- return '' unless @gengou
90
-
91
- @gengou.name
92
- end
93
-
94
- #
95
- # 不正か
96
- #
97
- # @return [True] 不正
98
- # @return [False] 不正なし
99
- #
100
- def invalid?
101
- @gengou.invalid? || @japan_year == INVALID_YEAR || @western_year == INVALID_YEAR
102
- end
103
-
104
- #
105
- # 指定した日が元号に含まれるか
106
- #
107
- # @param [Western::Calendar] date 日
108
- #
109
- # @return [True] 含まれる
110
- # @return [False] 含まれない
111
- #
112
- def include?
113
- @gengou.include?
114
- end
115
-
116
- #
117
- # ディープコピー
118
- #
119
- # @param [MultiGengou] obj 自身
120
- #
121
- def initialize_copy(obj)
122
- @gengou = obj.gengou.clone
123
- @japan_year = obj.japan_year
124
- @western_year = obj.western_year
125
- end
126
- end
127
- end
128
- end
129
- end