zakuro 0.0.0 → 0.1.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/.editorconfig +4 -0
- data/.gitignore +7 -1
- data/.rubocop.yml +3 -0
- data/Gemfile +2 -0
- data/Makefile +2 -0
- data/README.md +156 -10
- data/Rakefile +1 -1
- data/doc/gengou.md +315 -0
- data/doc/operation.md +25 -0
- data/doc/operation/csv/month.csv +202 -0
- data/doc/operation/operation.xlsx +0 -0
- data/doc/operation/transfer.rb +77 -0
- data/lib/zakuro/condition.rb +19 -15
- data/lib/zakuro/cycle/abstract_remainder.rb +3 -4
- data/lib/zakuro/era/japan/gengou.rb +106 -0
- data/lib/zakuro/era/japan/gengou/parser.rb +167 -0
- data/lib/zakuro/era/japan/gengou/type.rb +178 -0
- data/lib/zakuro/era/japan/gengou/validator.rb +236 -0
- data/lib/zakuro/era/japan/reki.rb +91 -0
- data/lib/zakuro/era/japan/yaml/set-001-until-south.yaml +1121 -0
- data/lib/zakuro/era/japan/yaml/set-002-from-north.yaml +485 -0
- data/lib/zakuro/era/japan/yaml/set-003-modern.yaml +28 -0
- data/lib/zakuro/era/western.rb +11 -1
- data/lib/zakuro/merchant.rb +3 -1
- data/lib/zakuro/operation/month/parser.rb +373 -0
- data/lib/zakuro/operation/month/type.rb +458 -0
- data/lib/zakuro/operation/month/validator.rb +802 -0
- data/lib/zakuro/operation/operation.rb +66 -0
- data/lib/zakuro/operation/yaml/month.yaml +6452 -0
- data/lib/zakuro/output/error.rb +2 -0
- data/lib/zakuro/output/logger.rb +2 -0
- data/lib/zakuro/output/response.rb +21 -19
- data/lib/zakuro/result/core.rb +52 -0
- data/lib/zakuro/result/data.rb +187 -0
- data/lib/zakuro/result/operation.rb +114 -0
- data/lib/zakuro/result/result.rb +37 -0
- data/lib/zakuro/{output → tools}/stringifier.rb +16 -9
- data/lib/zakuro/tools/typeof.rb +33 -0
- data/lib/zakuro/version.rb +1 -1
- data/lib/zakuro/version/senmyou/README.md +3 -1
- data/lib/zakuro/version/senmyou/base/era.rb +3 -1
- data/lib/zakuro/version/senmyou/base/multi_gengou.rb +98 -0
- data/lib/zakuro/version/senmyou/base/multi_gengou_roller.rb +217 -0
- data/lib/zakuro/version/senmyou/base/remainder.rb +4 -4
- data/lib/zakuro/version/senmyou/base/solar_term.rb +20 -0
- data/lib/zakuro/version/senmyou/base/year.rb +52 -6
- data/lib/zakuro/version/senmyou/monthly/first_day.rb +44 -0
- data/lib/zakuro/version/senmyou/monthly/initialized_month.rb +48 -0
- data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +1 -1
- data/lib/zakuro/version/senmyou/monthly/month.rb +136 -67
- data/lib/zakuro/version/senmyou/monthly/month_label.rb +87 -0
- data/lib/zakuro/version/senmyou/monthly/operated_month.rb +167 -0
- data/lib/zakuro/version/senmyou/{summary/annual_data.rb → range/annual_range.rb} +38 -40
- data/lib/zakuro/version/senmyou/range/full_range.rb +324 -0
- data/lib/zakuro/version/senmyou/range/operated_range.rb +126 -0
- data/lib/zakuro/version/senmyou/range/operated_solar_terms.rb +181 -0
- data/lib/zakuro/version/senmyou/senmyou.rb +2 -2
- data/lib/zakuro/version/senmyou/specifier/single_day_specifier.rb +102 -0
- data/lib/zakuro/version/senmyou/stella/lunar_orbit.rb +1 -1
- data/lib/zakuro/version/senmyou/stella/solar_average.rb +54 -32
- data/lib/zakuro/version/senmyou/stella/solar_orbit.rb +3 -7
- data/lib/zakuro/version/senmyou/summary/single.rb +125 -0
- data/lib/zakuro/version_factory.rb +1 -1
- metadata +40 -13
- data/.travis.yml +0 -6
- data/lib/zakuro/era/gengou/set-001-until-south.yaml +0 -375
- data/lib/zakuro/era/gengou/set-002-from-north.yaml +0 -166
- data/lib/zakuro/era/gengou/set-003-modern.yaml +0 -12
- data/lib/zakuro/era/japan.rb +0 -630
- data/lib/zakuro/output/result.rb +0 -219
- data/lib/zakuro/version/senmyou/base/gengou.rb +0 -210
- data/lib/zakuro/version/senmyou/summary/gengou_data.rb +0 -294
@@ -29,8 +29,8 @@ module Zakuro
|
|
29
29
|
# @param [Integer] total 繰り上げなしの小余
|
30
30
|
#
|
31
31
|
def initialize(day: -1, minute: -1, second: -1, total: -1)
|
32
|
-
super(
|
33
|
-
|
32
|
+
super(base_day: DAY, base_mitune: MINUTE,
|
33
|
+
day: day, minute: minute, second: second, total: total)
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -52,8 +52,8 @@ module Zakuro
|
|
52
52
|
# @param [Integer] total 繰り上げなしの小余
|
53
53
|
#
|
54
54
|
def initialize(day: -1, minute: -1, second: -1, total: -1)
|
55
|
-
super(
|
56
|
-
|
55
|
+
super(base_day: DAY, base_mitune: MINUTE,
|
56
|
+
day: day, minute: minute, second: second, total: total)
|
57
57
|
end
|
58
58
|
end
|
59
59
|
end
|
@@ -61,6 +61,26 @@ module Zakuro
|
|
61
61
|
def invalid?
|
62
62
|
(@index == -1 || @remainder.invalid?)
|
63
63
|
end
|
64
|
+
|
65
|
+
#
|
66
|
+
# データなしかを検証する
|
67
|
+
#
|
68
|
+
# @return [True] データなし
|
69
|
+
# @return [False] データあり
|
70
|
+
#
|
71
|
+
def empty?
|
72
|
+
(@index == -1 && @remainder.invalid?)
|
73
|
+
end
|
74
|
+
|
75
|
+
#
|
76
|
+
# ディープコピー
|
77
|
+
#
|
78
|
+
# @param [SolarTerm] obj 自身
|
79
|
+
#
|
80
|
+
def initialize_copy(obj)
|
81
|
+
@index = obj.index.clone
|
82
|
+
@remainder = obj.remainder.clone
|
83
|
+
end
|
64
84
|
end
|
65
85
|
end
|
66
86
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative './era'
|
4
|
+
|
3
5
|
# :nodoc:
|
4
6
|
module Zakuro
|
5
7
|
# :nodoc:
|
@@ -9,18 +11,63 @@ module Zakuro
|
|
9
11
|
#
|
10
12
|
class Year
|
11
13
|
# @return [Gengou] 元号
|
12
|
-
attr_reader :
|
14
|
+
attr_reader :multi_gengou
|
13
15
|
# @return [Array<Month>] 年内の全ての月
|
14
16
|
attr_reader :months
|
17
|
+
# @return [Integer] 年の日数
|
18
|
+
attr_reader :total_days
|
19
|
+
# @return [Western::Calendar] 元旦
|
20
|
+
attr_reader :new_year_date
|
15
21
|
|
16
22
|
#
|
17
23
|
# 初期化
|
18
24
|
#
|
19
|
-
# @param [Gengou]
|
25
|
+
# @param [Gengou] multi_gengou 元号
|
26
|
+
#
|
27
|
+
def initialize(multi_gengou: MultiGengou.new, new_year_date: Western::Calendar.new,
|
28
|
+
months: [], total_days: 0)
|
29
|
+
@multi_gengou = multi_gengou
|
30
|
+
@months = months
|
31
|
+
@new_year_date = new_year_date
|
32
|
+
@total_days = total_days
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# 年の日数を確定する
|
37
|
+
#
|
38
|
+
def commit
|
39
|
+
@total_days = 0
|
40
|
+
months.each do |month|
|
41
|
+
@total_days += month.days
|
42
|
+
end
|
43
|
+
|
44
|
+
self
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# 次年にする
|
49
|
+
#
|
50
|
+
# @param [Japan::Gengou] first_line 元号(1行目)
|
51
|
+
# @param [Japan::Gengou] second_line 元号(2行目)
|
52
|
+
#
|
53
|
+
# @return [MultiGengou] 自身
|
54
|
+
#
|
55
|
+
def next_year
|
56
|
+
@multi_gengou.next_year
|
57
|
+
|
58
|
+
@new_year_date += @total_days
|
59
|
+
@total_days = 0
|
60
|
+
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# 十干十二支を取得する
|
66
|
+
#
|
67
|
+
# @return [String] 十干十二支
|
20
68
|
#
|
21
|
-
def
|
22
|
-
@
|
23
|
-
@months = []
|
69
|
+
def zodiac_name
|
70
|
+
Era.zodiac_name(western_year: @new_year_date.year)
|
24
71
|
end
|
25
72
|
|
26
73
|
#
|
@@ -32,7 +79,6 @@ module Zakuro
|
|
32
79
|
return if duplicated?(month: month)
|
33
80
|
|
34
81
|
@months.push(month)
|
35
|
-
@gengou.add_days(days: month.days)
|
36
82
|
|
37
83
|
nil
|
38
84
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../../era/western'
|
4
|
+
|
5
|
+
# TODO: moduleでMonthly とする(全暦むけに共通化したあと)
|
6
|
+
|
7
|
+
# :nodoc:
|
8
|
+
module Zakuro
|
9
|
+
# :nodoc:
|
10
|
+
module Senmyou
|
11
|
+
#
|
12
|
+
# FirstDay 月初日(朔日)
|
13
|
+
#
|
14
|
+
class FirstDay
|
15
|
+
# @return [Western::Calendar] 西暦日
|
16
|
+
attr_reader :western_date
|
17
|
+
# @return [Remainder] 大余小余
|
18
|
+
attr_reader :remainder
|
19
|
+
|
20
|
+
#
|
21
|
+
# 初期化
|
22
|
+
#
|
23
|
+
# @param [Remainder] remainder 西暦日
|
24
|
+
# @param [Western::Calendar] western_date 大余小余
|
25
|
+
#
|
26
|
+
def initialize(western_date: Western::Calendar.new, remainder: Remainder.new)
|
27
|
+
# 西暦日
|
28
|
+
@western_date = western_date
|
29
|
+
# 大余小余
|
30
|
+
@remainder = remainder
|
31
|
+
end
|
32
|
+
|
33
|
+
#
|
34
|
+
# ディープコピー
|
35
|
+
#
|
36
|
+
# @param [FirstDay] obj 自身
|
37
|
+
#
|
38
|
+
def initialize_copy(obj)
|
39
|
+
@western_date = obj.western_date.clone
|
40
|
+
@remainder = obj.remainder.clone
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './month'
|
4
|
+
|
5
|
+
# TODO: moduleでMonthly とする(全暦むけに共通化したあと)
|
6
|
+
|
7
|
+
# :nodoc:
|
8
|
+
module Zakuro
|
9
|
+
# :nodoc:
|
10
|
+
module Senmyou
|
11
|
+
#
|
12
|
+
# InitializedMonth 初期月情報
|
13
|
+
#
|
14
|
+
class InitializedMonth < Month
|
15
|
+
# @return [True] 昨年の月
|
16
|
+
# @return [False] 今年の月
|
17
|
+
# @note 冬至基準で1年データを作成するため昨年の11月-12月である可能性がある
|
18
|
+
attr_reader :is_last_year
|
19
|
+
# @return [Integer] 月齢(朔月、上弦、望月、下弦)
|
20
|
+
attr_reader :phase_index
|
21
|
+
|
22
|
+
# :reek:ControlParameter and :reek:BooleanParameter
|
23
|
+
|
24
|
+
#
|
25
|
+
# 初期化
|
26
|
+
#
|
27
|
+
# @param [MonthLabel] month_label 月表示名
|
28
|
+
# @param [Array<SolarTerm>] solar_terms 二十四節気
|
29
|
+
# @param [FirstDay] first_day 月初日(朔日)
|
30
|
+
# @param [True, False] is_last_year 昨年の月/今年の月
|
31
|
+
# @param [Integer] phase_index 月齢(朔月、上弦、望月、下弦)
|
32
|
+
#
|
33
|
+
def initialize(month_label: MonthLabel.new, solar_terms: [], first_day: FirstDay.new,
|
34
|
+
is_last_year: false, phase_index: -1)
|
35
|
+
super(month_label: month_label, solar_terms: solar_terms, first_day: first_day)
|
36
|
+
@is_last_year = is_last_year
|
37
|
+
@phase_index = phase_index
|
38
|
+
end
|
39
|
+
|
40
|
+
#
|
41
|
+
# 一ヶ月戻す
|
42
|
+
#
|
43
|
+
def back_to_last_month
|
44
|
+
@is_last_year = true if month_label.back_to_last_month
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -145,7 +145,7 @@ module Zakuro
|
|
145
145
|
# @return [Remainder] 定朔
|
146
146
|
#
|
147
147
|
def current_remainder
|
148
|
-
debug(
|
148
|
+
debug("@average_remainder.format: #{@average_remainder.format}")
|
149
149
|
|
150
150
|
sum = correction_value
|
151
151
|
adjusted = @average_remainder.add(
|
@@ -1,5 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require_relative './first_day'
|
4
|
+
require_relative './month_label'
|
5
|
+
|
6
|
+
# TODO: moduleでMonthly とする(全暦むけに共通化したあと)
|
7
|
+
|
3
8
|
# :nodoc:
|
4
9
|
module Zakuro
|
5
10
|
# :nodoc:
|
@@ -8,63 +13,62 @@ module Zakuro
|
|
8
13
|
# Month 月情報
|
9
14
|
#
|
10
15
|
class Month
|
11
|
-
# @return [
|
12
|
-
|
13
|
-
# @
|
14
|
-
|
15
|
-
# @return [
|
16
|
-
|
17
|
-
attr_accessor :is_many_days
|
18
|
-
# @return [Integer] 月(xx月のxx)
|
19
|
-
attr_accessor :number
|
20
|
-
# @return [True] 閏月
|
21
|
-
# @return [False] 平月
|
22
|
-
attr_accessor :leaped
|
23
|
-
# @return [SolarTerm] 二十四節気(中気)
|
24
|
-
attr_accessor :even_term
|
25
|
-
# @return [SolarTerm] 二十四節気(節気)
|
26
|
-
attr_accessor :odd_term
|
27
|
-
# @return [Remainder] 月初日の大余小余
|
28
|
-
attr_reader :remainder
|
29
|
-
# @return [String] 月齢(朔月、上弦、望月、下弦)
|
30
|
-
attr_reader :phase_index
|
31
|
-
|
32
|
-
# rubocop:disable Metrics/ParameterLists
|
33
|
-
# :reek:BooleanParametere
|
16
|
+
# @return [MonthLabel] 月表示名
|
17
|
+
attr_reader :month_label
|
18
|
+
# @return [FirstDay] 月初日(朔日)
|
19
|
+
attr_reader :first_day
|
20
|
+
# @return [Array<SolarTerm>] 二十四節気
|
21
|
+
attr_reader :solar_terms
|
34
22
|
|
35
23
|
#
|
36
24
|
# 初期化
|
37
25
|
#
|
38
|
-
# @param [
|
39
|
-
# @param [
|
40
|
-
# @param [
|
41
|
-
#
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
@
|
64
|
-
|
65
|
-
|
26
|
+
# @param [MonthLabel] month_label 月表示名
|
27
|
+
# @param [FirstDay] first_day 月初日(朔日)
|
28
|
+
# @param [Array<SolarTerm>] solar_terms 二十四節気
|
29
|
+
#
|
30
|
+
def initialize(month_label: MonthLabel.new, first_day: FirstDay.new, solar_terms: [])
|
31
|
+
@month_label = month_label
|
32
|
+
@first_day = first_day
|
33
|
+
@solar_terms = solar_terms
|
34
|
+
end
|
35
|
+
|
36
|
+
#
|
37
|
+
# 中気なしは閏月とする
|
38
|
+
#
|
39
|
+
def eval_leaped
|
40
|
+
leaped = even_term.invalid?
|
41
|
+
|
42
|
+
@month_label = MonthLabel.new(number: number, is_many_days: many_days?, leaped: leaped)
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# 月初日の西暦日を返す
|
47
|
+
#
|
48
|
+
# @return [Western::Calendar] 西暦日
|
49
|
+
#
|
50
|
+
def western_date
|
51
|
+
@first_day.western_date
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# 月初日の大余小余を返す
|
56
|
+
#
|
57
|
+
# @return [Remainder] 大余小余
|
58
|
+
#
|
59
|
+
def remainder
|
60
|
+
@first_day.remainder
|
61
|
+
end
|
62
|
+
|
63
|
+
#
|
64
|
+
# 月の大小を返す
|
65
|
+
#
|
66
|
+
# @return [True] 大の月(30日)
|
67
|
+
# @return [False] 小の月(29日)
|
68
|
+
#
|
69
|
+
def many_days?
|
70
|
+
@month_label.is_many_days
|
66
71
|
end
|
67
|
-
# rubocop:enable Metrics/ParameterLists
|
68
72
|
|
69
73
|
#
|
70
74
|
# 月の日数を返す
|
@@ -72,7 +76,7 @@ module Zakuro
|
|
72
76
|
# @return [Integer] 日数
|
73
77
|
#
|
74
78
|
def days
|
75
|
-
@
|
79
|
+
@month_label.days
|
76
80
|
end
|
77
81
|
|
78
82
|
#
|
@@ -81,31 +85,96 @@ module Zakuro
|
|
81
85
|
# @return [String] 月の名前(大小)
|
82
86
|
#
|
83
87
|
def days_name
|
84
|
-
@
|
88
|
+
@month_label.days_name
|
85
89
|
end
|
86
90
|
|
87
91
|
#
|
88
|
-
#
|
92
|
+
# 月を返す
|
89
93
|
#
|
90
|
-
# @
|
94
|
+
# @return [Integer] 月(xx月のxx)
|
91
95
|
#
|
92
|
-
|
93
|
-
|
96
|
+
def number
|
97
|
+
@month_label.number
|
98
|
+
end
|
99
|
+
|
94
100
|
#
|
95
|
-
|
96
|
-
|
101
|
+
# 閏を返す
|
102
|
+
#
|
103
|
+
# @return [True] 閏月
|
104
|
+
# @return [False] 平月
|
105
|
+
#
|
106
|
+
def leaped?
|
107
|
+
@month_label.leaped
|
108
|
+
end
|
109
|
+
|
110
|
+
#
|
111
|
+
# 次月の大余から月の日数を定める
|
112
|
+
#
|
113
|
+
# @param [Integer] next_month_day 次月の大余
|
114
|
+
#
|
115
|
+
def eval_many_days(next_month_day:)
|
116
|
+
is_many_days = remainder.same_remainder_divided_by_ten?(other: next_month_day)
|
117
|
+
|
118
|
+
@month_label = MonthLabel.new(
|
119
|
+
number: number, is_many_days: is_many_days, leaped: leaped?
|
120
|
+
)
|
121
|
+
end
|
122
|
+
|
123
|
+
#
|
124
|
+
# 二十四節気が未設定かどうかを検証する
|
125
|
+
#
|
126
|
+
# @return [True] 設定なし
|
127
|
+
# @return [False] 設定あり
|
128
|
+
#
|
129
|
+
def empty_solar_term?
|
130
|
+
@solar_terms.empty?
|
131
|
+
end
|
132
|
+
|
133
|
+
#
|
134
|
+
# 中気を返す
|
135
|
+
#
|
136
|
+
# @return [SolarTerm] 中気
|
137
|
+
#
|
138
|
+
def even_term
|
139
|
+
@solar_terms.each do |term|
|
140
|
+
return term if term.index.even?
|
141
|
+
end
|
142
|
+
|
143
|
+
SolarTerm.new
|
144
|
+
end
|
145
|
+
|
146
|
+
#
|
147
|
+
# 節気を返す
|
148
|
+
#
|
149
|
+
# @return [SolarTerm] 節気
|
150
|
+
#
|
151
|
+
def odd_term
|
152
|
+
@solar_terms.each do |term|
|
153
|
+
return term if term.index.odd?
|
154
|
+
end
|
155
|
+
|
156
|
+
SolarTerm.new
|
97
157
|
end
|
98
158
|
|
99
159
|
#
|
100
|
-
#
|
160
|
+
# 二十四節気を追加する
|
101
161
|
#
|
102
|
-
# @
|
162
|
+
# @param [SolarTerm] term 二十四節気
|
103
163
|
#
|
104
|
-
def
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
164
|
+
def add_term(term:)
|
165
|
+
@solar_terms.push(term)
|
166
|
+
end
|
167
|
+
|
168
|
+
#
|
169
|
+
# 同一の月情報かを検証する
|
170
|
+
#
|
171
|
+
# @param [Month] other 他の月情報
|
172
|
+
#
|
173
|
+
# @return [True] 同一の月
|
174
|
+
# @return [False] 異なる月
|
175
|
+
#
|
176
|
+
def same?(other:)
|
177
|
+
number == other.number && leaped? == other.leaped?
|
109
178
|
end
|
110
179
|
end
|
111
180
|
end
|