zakuro 0.7.0 → 0.7.2
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 +37 -10
- data/VERSION +1 -1
- data/doc/dropped_date.md +93 -0
- data/doc/error.md +45 -0
- data/lib/zakuro/calculation/base/day.rb +52 -0
- data/lib/zakuro/calculation/base/operated_year.rb +3 -3
- data/lib/zakuro/calculation/base/year.rb +4 -4
- data/lib/zakuro/calculation/cycle/abstract_remainder.rb +5 -3
- data/lib/zakuro/calculation/monthly/initialized_month.rb +1 -1
- data/lib/zakuro/calculation/monthly/month.rb +3 -3
- data/lib/zakuro/calculation/monthly/operated_month.rb +1 -1
- data/lib/zakuro/calculation/option/dropped_date/abstract_parameter.rb +44 -0
- data/lib/zakuro/calculation/option/dropped_date/location.rb +135 -0
- data/lib/zakuro/calculation/range/abstract_full_range.rb +10 -8
- data/lib/zakuro/calculation/range/abstract_operation_range.rb +2 -2
- data/lib/zakuro/calculation/range/dated_full_range.rb +1 -1
- data/lib/zakuro/calculation/range/dated_operation_range.rb +1 -1
- data/lib/zakuro/calculation/range/medieval_annual_range.rb +2 -2
- data/lib/zakuro/calculation/range/named_full_range.rb +1 -1
- data/lib/zakuro/calculation/range/named_operation_range.rb +1 -1
- data/lib/zakuro/calculation/range/operated_solar_terms.rb +9 -9
- data/lib/zakuro/calculation/range/transfer/year_boundary.rb +6 -6
- data/lib/zakuro/calculation/stella/solar/abstract_location.rb +2 -0
- data/lib/zakuro/calculation/summary/internal/day.rb +40 -0
- data/lib/zakuro/calculation/summary/internal/month.rb +15 -7
- data/lib/zakuro/calculation/summary/internal/option.rb +85 -0
- data/lib/zakuro/calculation/summary/japan/range.rb +15 -9
- data/lib/zakuro/calculation/summary/japan/single.rb +6 -6
- data/lib/zakuro/calculation/summary/japan/specifier/single_day.rb +10 -5
- data/lib/zakuro/calculation/summary/western/range.rb +5 -5
- data/lib/zakuro/calculation/summary/western/single.rb +9 -9
- data/lib/zakuro/calculation/summary/western/specifier/multiple_day.rb +15 -10
- data/lib/zakuro/calculation/summary/western/specifier/single_day.rb +12 -7
- data/lib/zakuro/calculation/type/optional.rb +46 -0
- data/lib/zakuro/condition.rb +60 -20
- data/lib/zakuro/context/context.rb +44 -0
- data/lib/zakuro/context/option.rb +117 -0
- data/lib/zakuro/context/version_class_resolver.rb +110 -0
- data/lib/zakuro/era/japan/gengou/alignment/aligner.rb +4 -0
- data/lib/zakuro/era/japan/gengou/resource/parser.rb +2 -0
- data/lib/zakuro/era/japan/gengou/resource/type.rb +6 -0
- data/lib/zakuro/era/western/calendar.rb +4 -0
- data/lib/zakuro/exception/case/pattern.rb +39 -3
- data/lib/zakuro/exception/exception.rb +3 -3
- data/lib/zakuro/exception/zakuro_error.rb +19 -1
- data/lib/zakuro/gateway/range.rb +2 -2
- data/lib/zakuro/gateway/single.rb +1 -1
- data/lib/zakuro/merchant.rb +78 -8
- data/lib/zakuro/operation/month/parser.rb +2 -0
- data/lib/zakuro/output/response.rb +24 -57
- data/lib/zakuro/result/data/option/abstract_option.rb +37 -0
- data/lib/zakuro/result/data/option/dropped_date/calculation.rb +47 -0
- data/lib/zakuro/result/data/option/dropped_date/option.rb +47 -0
- data/lib/zakuro/result/data/option/dropped_date/solar_term.rb +48 -0
- data/lib/zakuro/result/data/single_day.rb +9 -1
- data/lib/zakuro/result/operation/{operation.rb → bundle.rb} +0 -0
- data/lib/zakuro/result/result.rb +1 -1
- data/lib/zakuro/tools/stringifier.rb +26 -3
- data/lib/zakuro/version/daien/cycle/remainder.rb +2 -2
- data/lib/zakuro/version/daien/option/dropped_date/parameter.rb +31 -0
- data/lib/zakuro/version/daien/range/annual_range.rb +1 -1
- data/lib/zakuro/version/daien/stella/lunar/adjustment.rb +2 -0
- data/lib/zakuro/version/daien/stella/lunar/value.rb +2 -0
- data/lib/zakuro/version/genka/cycle/remainder.rb +2 -2
- data/lib/zakuro/version/genka/option/dropped_date/parameter.rb +31 -0
- data/lib/zakuro/version/genka/range/annual_range.rb +1 -1
- data/lib/zakuro/version/gihou/cycle/remainder.rb +2 -2
- data/lib/zakuro/version/gihou/option/dropped_date/parameter.rb +31 -0
- data/lib/zakuro/version/gihou/range/annual_range.rb +1 -1
- data/lib/zakuro/version/gihou/stella/lunar/adjustment.rb +2 -0
- data/lib/zakuro/version/gihou/stella/lunar/value.rb +2 -0
- data/lib/zakuro/version/senmyou/const/remainder.rb +5 -0
- data/lib/zakuro/version/senmyou/cycle/remainder.rb +37 -2
- data/lib/zakuro/version/senmyou/option/dropped_date/parameter.rb +33 -0
- data/lib/zakuro/version/senmyou/range/annual_range.rb +1 -1
- data/lib/zakuro/version/senmyou/stella/lunar/adjustment.rb +2 -0
- data/lib/zakuro/version/senmyou/stella/lunar/value.rb +2 -0
- metadata +26 -9
- data/lib/zakuro/version/context.rb +0 -44
- data/lib/zakuro/version/version_class_resolver.rb +0 -74
@@ -68,6 +68,8 @@ module Zakuro
|
|
68
68
|
#
|
69
69
|
# @return [Array<LinearGengou>] 元号
|
70
70
|
#
|
71
|
+
# @raise [ArgumentError] 引数エラー
|
72
|
+
#
|
71
73
|
def get(line:, start_date:, last_date:)
|
72
74
|
raise ArgumentError.new, 'invalid line number' unless LINE_INDEXES.include?(line)
|
73
75
|
|
@@ -82,6 +84,8 @@ module Zakuro
|
|
82
84
|
#
|
83
85
|
# @return [Array<LinearGengou>] 元号
|
84
86
|
#
|
87
|
+
# @raise [ArgumentError] 引数エラー
|
88
|
+
#
|
85
89
|
def get_by_name(line:, name:)
|
86
90
|
raise ArgumentError.new, 'invalid line number' unless LINE_INDEXES.include?(line)
|
87
91
|
|
@@ -54,6 +54,8 @@ module Zakuro
|
|
54
54
|
#
|
55
55
|
# @param [Integer] last_year 終了年
|
56
56
|
#
|
57
|
+
# @raise [ArgumentError] 引数エラー
|
58
|
+
#
|
57
59
|
def write_last_year(last_year:)
|
58
60
|
unless Gengou.valid_year(year: last_year)
|
59
61
|
raise ArgumentError, "invalid year format. [#{last_year}]"
|
@@ -67,6 +69,8 @@ module Zakuro
|
|
67
69
|
#
|
68
70
|
# @param [Western::Calendar] last_date 終了日
|
69
71
|
#
|
72
|
+
# @raise [ArgumentError] 引数エラー
|
73
|
+
#
|
70
74
|
def write_last_date(last_date:)
|
71
75
|
unless Gengou.valid_date(date: last_date)
|
72
76
|
raise ArgumentError, "invalid date format. [#{last_date}]"
|
@@ -125,6 +129,8 @@ module Zakuro
|
|
125
129
|
#
|
126
130
|
# @param [String] next_start_date 次回開始日
|
127
131
|
#
|
132
|
+
# @raise [ArgumentError] 引数エラー
|
133
|
+
#
|
128
134
|
def convert_next_start_date_to_last_date(next_start_date: '')
|
129
135
|
raise ArgumentError, 'empty string cannot convert' if next_start_date.empty?
|
130
136
|
|
@@ -188,6 +188,8 @@ module Zakuro
|
|
188
188
|
# @param [Integer] day 日
|
189
189
|
# @param [Symbol] type 日付種別
|
190
190
|
#
|
191
|
+
# @raise [ArgumentError] 引数エラー
|
192
|
+
#
|
191
193
|
def initialize(year: -4712, month: 1, day: 1, type: Type::DEFAULT)
|
192
194
|
start = Western.to_native_start(type: type)
|
193
195
|
@param = Parameter.new(year: year, month: month, day: day, start: start)
|
@@ -386,6 +388,8 @@ module Zakuro
|
|
386
388
|
#
|
387
389
|
# @return [Calendar] 年月日情報(西暦)
|
388
390
|
#
|
391
|
+
# @raise [ArgumentError] 引数エラー
|
392
|
+
#
|
389
393
|
def self.parse(text: '', type: Type::DEFAULT)
|
390
394
|
unless Calendar.valid_date_string(text: text, type: type)
|
391
395
|
raise ArgumentError, "invalid date string: #{text}"
|
@@ -14,21 +14,57 @@ module Zakuro
|
|
14
14
|
module Pattern
|
15
15
|
INTERNAL_ERROR = Template.new(
|
16
16
|
code: 'ERROR_0001',
|
17
|
-
message: '
|
17
|
+
message: '内部エラーです。',
|
18
18
|
length: 0
|
19
19
|
)
|
20
20
|
|
21
|
+
INVALID_DATE_TYPE = Template.new(
|
22
|
+
code: 'ERROR_0101',
|
23
|
+
message: '日付の型は文字列/日付です。指定型:%s',
|
24
|
+
length: 1
|
25
|
+
)
|
26
|
+
|
27
|
+
INVALID_RANGE_TYPE = Template.new(
|
28
|
+
code: 'ERROR_0102',
|
29
|
+
message: '範囲の型はhashです。指定型:%s',
|
30
|
+
length: 1
|
31
|
+
)
|
32
|
+
|
33
|
+
INVALID_OPTION_TYPE = Template.new(
|
34
|
+
code: 'ERROR_0103',
|
35
|
+
message: 'オプションの型はhashです。指定型:%s',
|
36
|
+
length: 1
|
37
|
+
)
|
38
|
+
|
39
|
+
INVALID_COLUMN_TYPE = Template.new(
|
40
|
+
code: 'ERROR_0104',
|
41
|
+
message: '列の型は配列です。指定型:%s',
|
42
|
+
length: 1
|
43
|
+
)
|
44
|
+
|
45
|
+
INVALID_CONDITION_TYPE = Template.new(
|
46
|
+
code: 'ERROR_0105',
|
47
|
+
message: '条件の型は配列です。指定型:%s',
|
48
|
+
length: 1
|
49
|
+
)
|
50
|
+
|
21
51
|
INVALID_DATE = Template.new(
|
22
|
-
code: '
|
52
|
+
code: 'ERROR_0201',
|
23
53
|
message: '一日検索の日付指定が誤っています。',
|
24
54
|
length: 0
|
25
55
|
)
|
26
56
|
|
27
57
|
INVALID_RANGE = Template.new(
|
28
|
-
code: '
|
58
|
+
code: 'ERROR_0202',
|
29
59
|
message: '範囲検索の日付指定が誤っています。',
|
30
60
|
length: 0
|
31
61
|
)
|
62
|
+
|
63
|
+
UNCOMMITTABLE_DATE = Template.new(
|
64
|
+
code: 'ERROR_0203',
|
65
|
+
message: '検索不可能な日付指定です。',
|
66
|
+
length: 0
|
67
|
+
)
|
32
68
|
end
|
33
69
|
end
|
34
70
|
end
|
@@ -2,11 +2,11 @@
|
|
2
2
|
|
3
3
|
require_relative '../output/logger'
|
4
4
|
|
5
|
-
require_relative './
|
6
|
-
|
5
|
+
require_relative './case/preset'
|
7
6
|
require_relative './case/pattern'
|
8
7
|
|
9
8
|
require_relative './zakuro_error'
|
9
|
+
require_relative './cause'
|
10
10
|
|
11
11
|
# :nodoc:
|
12
12
|
module Zakuro
|
@@ -21,7 +21,7 @@ module Zakuro
|
|
21
21
|
#
|
22
22
|
# 例外を取得する
|
23
23
|
#
|
24
|
-
# @param [Array<
|
24
|
+
# @param [Array<Case::Preset>] presets 原因プリセット
|
25
25
|
#
|
26
26
|
# @return [ZakuroError] ライブラリエラー
|
27
27
|
#
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'json'
|
3
4
|
require_relative './cause'
|
4
5
|
|
5
6
|
# :nodoc:
|
@@ -20,8 +21,25 @@ module Zakuro
|
|
20
21
|
# @param [Array<Cause>] causes 原因
|
21
22
|
#
|
22
23
|
def initialize(msg: '', causes: [])
|
23
|
-
super(msg)
|
24
24
|
@causes = causes
|
25
|
+
out = "#{msg}:#{text}"
|
26
|
+
super(out)
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
#
|
32
|
+
# 原因をJSON文字列にする
|
33
|
+
#
|
34
|
+
# @return [String] JSON文字列
|
35
|
+
#
|
36
|
+
def text
|
37
|
+
list = []
|
38
|
+
@causes.each do |cause|
|
39
|
+
list.push(Tools::Stringifier.to_h(obj: cause, class_prefix: 'Zakuro'))
|
40
|
+
end
|
41
|
+
|
42
|
+
JSON.generate(list)
|
25
43
|
end
|
26
44
|
end
|
27
45
|
end
|
data/lib/zakuro/gateway/range.rb
CHANGED
@@ -15,7 +15,7 @@ module Zakuro
|
|
15
15
|
# Range 範囲
|
16
16
|
#
|
17
17
|
class Range
|
18
|
-
# @return [Context] 暦コンテキスト
|
18
|
+
# @return [Context::Context] 暦コンテキスト
|
19
19
|
attr_reader :context
|
20
20
|
# @return [Locale::Range] 範囲
|
21
21
|
attr_reader :range
|
@@ -23,7 +23,7 @@ module Zakuro
|
|
23
23
|
#
|
24
24
|
# 初期化
|
25
25
|
#
|
26
|
-
# @param [Context] context 暦コンテキスト
|
26
|
+
# @param [Context::Context] context 暦コンテキスト
|
27
27
|
# @param [Hash<Symbol, Object>] range 範囲
|
28
28
|
#
|
29
29
|
def initialize(context:, range:)
|
data/lib/zakuro/merchant.rb
CHANGED
@@ -6,7 +6,9 @@ require_relative './gateway/range'
|
|
6
6
|
|
7
7
|
require_relative './condition'
|
8
8
|
|
9
|
-
require_relative './
|
9
|
+
require_relative './exception/exception'
|
10
|
+
|
11
|
+
require_relative './calculation/type/optional'
|
10
12
|
|
11
13
|
# :nodoc:
|
12
14
|
module Zakuro
|
@@ -15,6 +17,8 @@ module Zakuro
|
|
15
17
|
# 東西の暦を取引する、素敵な笑顔の持ち主
|
16
18
|
#
|
17
19
|
class Merchant
|
20
|
+
# @return [Output::Logger] ロガー
|
21
|
+
LOGGER = Output::Logger.new(location: Merchant)
|
18
22
|
# @return [Hash<Symbol, Object>] 条件
|
19
23
|
attr_reader :condition
|
20
24
|
|
@@ -23,11 +27,17 @@ module Zakuro
|
|
23
27
|
#
|
24
28
|
# @param [Hash<Symbol, Object>] condition 条件
|
25
29
|
#
|
30
|
+
# @raise [Exception::ZakuroError] ライブラリ内エラー
|
31
|
+
#
|
26
32
|
def initialize(condition: {})
|
27
33
|
failed = Condition.validate(hash: condition)
|
28
|
-
raise
|
34
|
+
raise Exception.get(presets: failed) unless failed.empty?
|
29
35
|
|
30
36
|
@condition = Condition.new(hash: condition)
|
37
|
+
rescue Exception::ZakuroError => e
|
38
|
+
raise e
|
39
|
+
rescue StandardError => e
|
40
|
+
make_internal_error(error: e)
|
31
41
|
end
|
32
42
|
|
33
43
|
#
|
@@ -37,13 +47,19 @@ module Zakuro
|
|
37
47
|
#
|
38
48
|
# @return [Merchant] 自インスタンス
|
39
49
|
#
|
50
|
+
# @raise [Exception::ZakuroError] ライブラリ内エラー
|
51
|
+
#
|
40
52
|
def offer(condition: {})
|
41
53
|
failed = Condition.validate(hash: condition)
|
42
|
-
raise
|
54
|
+
raise Exception.get(presets: failed) unless failed.empty?
|
43
55
|
|
44
56
|
@condition.rewrite(hash: condition)
|
45
57
|
|
46
58
|
self
|
59
|
+
rescue Exception::ZakuroError => e
|
60
|
+
raise e
|
61
|
+
rescue StandardError => e
|
62
|
+
make_internal_error(error: e)
|
47
63
|
end
|
48
64
|
|
49
65
|
#
|
@@ -52,19 +68,73 @@ module Zakuro
|
|
52
68
|
# @return [Result::SingleDay] 和暦日
|
53
69
|
# @return [Result::Range] 和暦日範囲
|
54
70
|
#
|
71
|
+
# @raise [Exception::ZakuroError] ライブラリ内エラー
|
72
|
+
#
|
55
73
|
def commit
|
56
|
-
|
57
|
-
|
74
|
+
context = Context::Context.new(options: condition.options)
|
75
|
+
|
76
|
+
result = get(context: context)
|
77
|
+
|
78
|
+
return result.get unless result.invalid?
|
58
79
|
|
80
|
+
make_uncommitable_error
|
81
|
+
rescue Exception::ZakuroError => e
|
82
|
+
raise e
|
83
|
+
rescue StandardError => e
|
84
|
+
make_internal_error(error: e)
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
#
|
90
|
+
# 結果取得する
|
91
|
+
#
|
92
|
+
# @param [Context::Context] context 暦コンテキスト
|
93
|
+
#
|
94
|
+
# @return [Calculation::Type::Optional] 参照
|
95
|
+
#
|
96
|
+
def get(context:)
|
59
97
|
single = Gateway::Single.new(context: context, date: condition.date)
|
60
98
|
|
61
|
-
return single.get unless single.invalid?
|
99
|
+
return Calculation::Type::Optional.new(obj: single.get) unless single.invalid?
|
62
100
|
|
63
101
|
range = Gateway::Range.new(context: context, range: condition.range)
|
64
102
|
|
65
|
-
return range.get unless range.invalid?
|
103
|
+
return Calculation::Type::Optional.new(obj: range.get) unless range.invalid?
|
104
|
+
|
105
|
+
Calculation::Type::Optional.new
|
106
|
+
end
|
107
|
+
|
108
|
+
#
|
109
|
+
# 内部エラーを生成する
|
110
|
+
#
|
111
|
+
# @param [StandardError] error 内部エラー
|
112
|
+
#
|
113
|
+
# @raise [Exception::ZakuroError] ライブラリ内エラー
|
114
|
+
#
|
115
|
+
def make_internal_error(error:)
|
116
|
+
LOGGER.error(error)
|
117
|
+
presets = [
|
118
|
+
Exception::Case::Preset.new(
|
119
|
+
template: Exception::Case::Pattern::INTERNAL_ERROR
|
120
|
+
)
|
121
|
+
]
|
122
|
+
raise Exception.get(presets: presets)
|
123
|
+
end
|
66
124
|
|
67
|
-
|
125
|
+
#
|
126
|
+
# 内部エラーを生成する
|
127
|
+
#
|
128
|
+
# @raise [Exception::ZakuroError] ライブラリ内エラー
|
129
|
+
#
|
130
|
+
def make_uncommitable_error
|
131
|
+
raise Exception.get(
|
132
|
+
presets: [
|
133
|
+
Exception::Case::Preset.new(
|
134
|
+
template: Exception::Case::Pattern::UNCOMMITTABLE_DATE
|
135
|
+
)
|
136
|
+
]
|
137
|
+
)
|
68
138
|
end
|
69
139
|
end
|
70
140
|
end
|
@@ -14,63 +14,37 @@ module Zakuro
|
|
14
14
|
# SingleDay 1日データ
|
15
15
|
#
|
16
16
|
module SingleDay
|
17
|
-
#
|
18
|
-
# Param 引数
|
19
|
-
#
|
20
|
-
class Param
|
21
|
-
# @return [Year] 年情報(各暦のデータ型)
|
22
|
-
attr_reader :year
|
23
|
-
# @return [Month] 月情報(各暦のデータ型)
|
24
|
-
attr_reader :month
|
25
|
-
# @return [Western::Calendar] 年月日情報(西暦)
|
26
|
-
attr_reader :date
|
27
|
-
# @return [Integer] 日数(月初日から指定日までの日数)
|
28
|
-
attr_reader :days
|
29
|
-
|
30
|
-
#
|
31
|
-
# 初期化
|
32
|
-
#
|
33
|
-
# @param [Year] year 年情報(各暦のデータ型)
|
34
|
-
# @param [Month] month 月情報(各暦のデータ型)
|
35
|
-
# @param [Western::Calendar] date 年月日情報(西暦)
|
36
|
-
# @param [Integer] days 日数(月初日から指定日までの日数)
|
37
|
-
#
|
38
|
-
def initialize(year:, month:, date:, days:)
|
39
|
-
@year = year
|
40
|
-
@month = month
|
41
|
-
@date = date
|
42
|
-
@days = days
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
17
|
#
|
47
18
|
# 1日データを生成する
|
48
19
|
#
|
49
|
-
# @param [
|
20
|
+
# @param [Calculation::Base::Year] year 年情報(各暦のデータ型)
|
21
|
+
# @param [Calculation::Monthly::Month] month 月情報(各暦のデータ型)
|
22
|
+
# @param [Calculation::Base::Day] day 日情報
|
23
|
+
# @param [Hash<String, Result::Data::Option::AbstractOption>] options オプション
|
50
24
|
#
|
51
|
-
# @return [SingleDay] 1日データ
|
25
|
+
# @return [Result::Data::SingleDay] 1日データ
|
52
26
|
#
|
53
|
-
def self.
|
54
|
-
year = param.year
|
55
|
-
month = param.month
|
56
|
-
date = param.date
|
57
|
-
days = param.days
|
27
|
+
def self.create(year:, month:, day:, options: {})
|
58
28
|
Result::Data::SingleDay.new(
|
59
|
-
year: save_year(year: year, month: month,
|
60
|
-
month: save_month(month: month,
|
61
|
-
day: save_day(
|
29
|
+
year: save_year(year: year, month: month, day: day),
|
30
|
+
month: save_month(month: month, day: day),
|
31
|
+
day: save_day(day: day),
|
32
|
+
options: options
|
62
33
|
)
|
63
34
|
end
|
64
35
|
|
65
36
|
#
|
66
37
|
# 年データを保存する
|
67
38
|
#
|
68
|
-
# @param [Year] year 年情報(各暦のデータ型)
|
39
|
+
# @param [Calculation::Base::Year] year 年情報(各暦のデータ型)
|
40
|
+
# @param [Calculation::Monthly::Month] month 月情報(各暦のデータ型)
|
41
|
+
# @param [Calculation::Base::Day] day 日情報
|
69
42
|
#
|
70
43
|
# @return [Result::Year] 年データ
|
71
44
|
#
|
72
|
-
def self.save_year(year:, month:,
|
45
|
+
def self.save_year(year:, month:, day:)
|
73
46
|
gengou = month.gengou
|
47
|
+
date = day.western_date
|
74
48
|
first = gengou.match_first_line(date: date)
|
75
49
|
second = gengou.match_second_line(date: date)
|
76
50
|
Result::Data::Year.new(
|
@@ -86,17 +60,16 @@ module Zakuro
|
|
86
60
|
#
|
87
61
|
# 月データを保存する
|
88
62
|
#
|
89
|
-
# @param [Month] month 月情報(各暦のデータ型)
|
90
|
-
# @param [
|
91
|
-
# @param [Integer] days 日数(月初日から指定日までの日数)
|
63
|
+
# @param [Calculation::Monthly::Month] month 月情報(各暦のデータ型)
|
64
|
+
# @param [Calculation::Base::Day] day 日情報
|
92
65
|
#
|
93
66
|
# @return [Result::Month] 月データ
|
94
67
|
#
|
95
|
-
def self.save_month(month:,
|
68
|
+
def self.save_month(month:, day:)
|
96
69
|
Result::Data::Month.new(
|
97
70
|
number: month.number, leaped: month.leaped?, days_name: month.days_name,
|
98
71
|
first_day: save_first_day(remainder: month.remainder,
|
99
|
-
date:
|
72
|
+
date: day.western_date, days: day.number - 1),
|
100
73
|
odd_solar_terms: save_solar_term(term: month.odd_term),
|
101
74
|
even_solar_terms: save_solar_term(term: month.even_term)
|
102
75
|
)
|
@@ -147,23 +120,17 @@ module Zakuro
|
|
147
120
|
#
|
148
121
|
# 日データを保存する
|
149
122
|
#
|
150
|
-
# @param [
|
151
|
-
# @param [Western::Calendar] date 年月日情報(西暦)
|
152
|
-
# @param [Integer] days 日数(月初日から指定日までの日数)
|
123
|
+
# @param [Calculation::Base::Day] day 日情報
|
153
124
|
#
|
154
125
|
# @return [Result::Day] 日データ
|
155
126
|
#
|
156
|
-
def self.save_day(
|
157
|
-
remainder =
|
158
|
-
remainder = remainder.add(
|
159
|
-
# 常に参照元のRemainderクラスで生成する
|
160
|
-
remainder.class.new(day: days, minute: 0, second: 0)
|
161
|
-
)
|
127
|
+
def self.save_day(day:)
|
128
|
+
remainder = day.remainder
|
162
129
|
Result::Data::Day.new(
|
163
|
-
number:
|
130
|
+
number: day.number,
|
164
131
|
zodiac_name: remainder.zodiac_name,
|
165
132
|
remainder: remainder,
|
166
|
-
western_date:
|
133
|
+
western_date: day.western_date
|
167
134
|
)
|
168
135
|
end
|
169
136
|
private_class_method :save_day
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :nodoc:
|
4
|
+
module Zakuro
|
5
|
+
#
|
6
|
+
# Result 演算結果
|
7
|
+
#
|
8
|
+
module Result
|
9
|
+
#
|
10
|
+
# データ部
|
11
|
+
#
|
12
|
+
module Data
|
13
|
+
#
|
14
|
+
# Option オプション
|
15
|
+
#
|
16
|
+
module Option
|
17
|
+
#
|
18
|
+
# AbstractOption 抽象オプション結果
|
19
|
+
#
|
20
|
+
class AbstractOption
|
21
|
+
# @return [True] オプション値有
|
22
|
+
# @return [False] オプション値無
|
23
|
+
attr_reader :matched
|
24
|
+
|
25
|
+
#
|
26
|
+
# 初期化
|
27
|
+
#
|
28
|
+
# @param [True, False] matched オプション値有無
|
29
|
+
#
|
30
|
+
def initialize(matched: false)
|
31
|
+
@matched = matched
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './solar_term'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
#
|
8
|
+
# Result 演算結果
|
9
|
+
#
|
10
|
+
module Result
|
11
|
+
#
|
12
|
+
# データ部
|
13
|
+
#
|
14
|
+
module Data
|
15
|
+
#
|
16
|
+
# Option オプション
|
17
|
+
#
|
18
|
+
module Option
|
19
|
+
#
|
20
|
+
# DroppedDate 没日
|
21
|
+
#
|
22
|
+
module DroppedDate
|
23
|
+
#
|
24
|
+
# Calculation 演算値
|
25
|
+
#
|
26
|
+
class Calculation
|
27
|
+
# @return [String] 大余小余(没余)
|
28
|
+
attr_reader :remainder
|
29
|
+
# @return [SolarTerm] 二十四節気
|
30
|
+
attr_reader :solar_term
|
31
|
+
|
32
|
+
#
|
33
|
+
# 初期化
|
34
|
+
#
|
35
|
+
# @param [String] remainder 大余小余(没余)
|
36
|
+
# @param [SolarTerm] solar_term 二十四節気
|
37
|
+
#
|
38
|
+
def initialize(remainder: '', solar_term: SolarTerm.new)
|
39
|
+
@remainder = remainder
|
40
|
+
@solar_term = solar_term
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../abstract_option'
|
4
|
+
|
5
|
+
require_relative './calculation'
|
6
|
+
|
7
|
+
# :nodoc:
|
8
|
+
module Zakuro
|
9
|
+
#
|
10
|
+
# Result 演算結果
|
11
|
+
#
|
12
|
+
module Result
|
13
|
+
#
|
14
|
+
# データ部
|
15
|
+
#
|
16
|
+
module Data
|
17
|
+
#
|
18
|
+
# Option オプション
|
19
|
+
#
|
20
|
+
module Option
|
21
|
+
#
|
22
|
+
# DroppedDate 没日
|
23
|
+
#
|
24
|
+
module DroppedDate
|
25
|
+
#
|
26
|
+
# Option 没日集約
|
27
|
+
#
|
28
|
+
class Option < AbstractOption
|
29
|
+
# @return [Calculation] 演算値
|
30
|
+
attr_reader :calculation
|
31
|
+
|
32
|
+
#
|
33
|
+
# 初期化
|
34
|
+
#
|
35
|
+
# @param [True, False] matched オプション値有無
|
36
|
+
# @param [Calculation] calculation 演算値
|
37
|
+
#
|
38
|
+
def initialize(matched: false, calculation: Calculation.new)
|
39
|
+
super(matched: matched)
|
40
|
+
@calculation = calculation
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# :nodoc:
|
4
|
+
module Zakuro
|
5
|
+
#
|
6
|
+
# Result 演算結果
|
7
|
+
#
|
8
|
+
module Result
|
9
|
+
#
|
10
|
+
# データ部
|
11
|
+
#
|
12
|
+
module Data
|
13
|
+
#
|
14
|
+
# Option オプション
|
15
|
+
#
|
16
|
+
module Option
|
17
|
+
#
|
18
|
+
# DroppedDate 没日
|
19
|
+
#
|
20
|
+
module DroppedDate
|
21
|
+
#
|
22
|
+
# SolarTerm 二十四節気
|
23
|
+
#
|
24
|
+
class SolarTerm
|
25
|
+
# @return [Interger] 不正連番
|
26
|
+
INVALID = -1
|
27
|
+
|
28
|
+
# @return [Integer] 連番
|
29
|
+
attr_reader :index
|
30
|
+
# @return [String] 大余小余
|
31
|
+
attr_reader :remainder
|
32
|
+
|
33
|
+
#
|
34
|
+
# 初期化
|
35
|
+
#
|
36
|
+
# @param [Integer] index 連番
|
37
|
+
# @param [String] remainder 大余小余
|
38
|
+
#
|
39
|
+
def initialize(index: INVALID, remainder: '')
|
40
|
+
@index = index
|
41
|
+
@remainder = remainder
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|