zakuro 0.7.0 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|