zakuro 0.6.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/Makefile +3 -0
- data/README.md +58 -16
- data/VERSION +1 -1
- data/doc/dropped_date.md +93 -0
- data/doc/error.md +45 -0
- data/doc/operation/transfer.rb +8 -8
- data/lib/zakuro/calculation/base/day.rb +52 -0
- data/lib/zakuro/calculation/base/gengou.rb +50 -4
- data/lib/zakuro/calculation/base/linear_gengou.rb +6 -6
- 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/era/gengou/abstract_scroll.rb +209 -0
- data/lib/zakuro/calculation/era/gengou/dated_scroll.rb +30 -0
- data/lib/zakuro/calculation/era/gengou/internal/connector.rb +107 -0
- data/lib/zakuro/calculation/era/gengou/internal/counter.rb +214 -0
- data/lib/zakuro/calculation/era/gengou/internal/publisher.rb +104 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_list.rb +230 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_range.rb +193 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_list.rb +48 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_range.rb +30 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/empty_link.rb +158 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/named_list.rb +125 -0
- data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +75 -0
- data/lib/zakuro/calculation/{gengou → era/gengou}/internal/reserve.rb +6 -7
- data/lib/zakuro/calculation/era/gengou/named_scroll.rb +30 -0
- data/lib/zakuro/calculation/{version → era/version}/internal/crawler.rb +7 -7
- data/lib/zakuro/calculation/{version → era/version}/internal/range.rb +4 -4
- data/lib/zakuro/calculation/{version → era/version}/version.rb +3 -3
- data/lib/zakuro/calculation/monthly/initialized_month.rb +1 -1
- data/lib/zakuro/calculation/monthly/month.rb +44 -5
- data/lib/zakuro/calculation/monthly/operated_month.rb +2 -2
- 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/{full_range.rb → abstract_full_range.rb} +29 -27
- data/lib/zakuro/calculation/range/{operated_range.rb → abstract_operation_range.rb} +11 -14
- data/lib/zakuro/calculation/range/dated_full_range.rb +32 -0
- data/lib/zakuro/calculation/range/dated_operation_range.rb +33 -0
- data/lib/zakuro/calculation/range/medieval_annual_range.rb +2 -2
- data/lib/zakuro/calculation/range/named_full_range.rb +38 -0
- data/lib/zakuro/calculation/range/named_operation_range.rb +36 -0
- data/lib/zakuro/calculation/range/operated_solar_terms.rb +9 -11
- 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 +92 -0
- data/lib/zakuro/calculation/summary/{single.rb → internal/operation.rb} +6 -40
- data/lib/zakuro/calculation/summary/internal/option.rb +85 -0
- data/lib/zakuro/calculation/summary/japan/range.rb +158 -0
- data/lib/zakuro/calculation/summary/japan/single.rb +118 -0
- data/lib/zakuro/calculation/summary/japan/specifier/single_day.rb +96 -0
- data/lib/zakuro/calculation/summary/western/range.rb +124 -0
- data/lib/zakuro/calculation/summary/western/single.rb +113 -0
- data/lib/zakuro/calculation/summary/western/specifier/multiple_day.rb +174 -0
- data/lib/zakuro/calculation/summary/western/specifier/single_day.rb +98 -0
- data/lib/zakuro/calculation/type/optional.rb +46 -0
- data/lib/zakuro/condition.rb +75 -22
- 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 +125 -0
- data/lib/zakuro/era/japan/gengou/alignment/division.rb +168 -0
- data/lib/zakuro/era/japan/gengou/alignment/line.rb +175 -0
- data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +187 -0
- data/lib/zakuro/era/japan/gengou/alignment.rb +55 -0
- data/lib/zakuro/era/japan/gengou/resource/parser.rb +245 -0
- data/lib/zakuro/era/japan/gengou/resource/type.rb +299 -0
- data/lib/zakuro/era/japan/gengou/resource/validator.rb +347 -0
- data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-001-until-south.yaml +2 -2
- data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-002-from-north.yaml +2 -2
- data/lib/zakuro/era/japan/gengou/{yaml → resource/yaml}/set-003-modern.yaml +2 -2
- data/lib/zakuro/era/japan/gengou/resource.rb +33 -0
- data/lib/zakuro/era/japan/gengou.rb +25 -79
- data/lib/zakuro/era/japan/version.rb +18 -18
- data/lib/zakuro/era/western/calendar.rb +13 -9
- data/lib/zakuro/exception/case/pattern.rb +71 -0
- data/lib/zakuro/exception/case/preset.rb +51 -0
- data/lib/zakuro/exception/case/template.rb +48 -0
- data/lib/zakuro/exception/cause.rb +28 -0
- data/lib/zakuro/exception/exception.rb +37 -0
- data/lib/zakuro/exception/zakuro_error.rb +46 -0
- data/lib/zakuro/gateway/locale/date.rb +127 -0
- data/lib/zakuro/gateway/locale/range.rb +67 -0
- data/lib/zakuro/gateway/range.rb +99 -0
- data/lib/zakuro/gateway/single.rb +70 -0
- data/lib/zakuro/merchant.rb +84 -12
- data/lib/zakuro/operation/month/parser.rb +11 -9
- data/lib/zakuro/operation/month/type.rb +31 -31
- data/lib/zakuro/operation/month/validator.rb +50 -50
- data/lib/zakuro/operation/yaml/month.yaml +3736 -3736
- data/lib/zakuro/output/logger.rb +17 -3
- data/lib/zakuro/output/response.rb +24 -57
- data/lib/zakuro/result/data/day.rb +43 -0
- data/lib/zakuro/result/data/gengou.rb +35 -0
- data/lib/zakuro/result/data/month.rb +63 -0
- 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 +56 -0
- data/lib/zakuro/result/data/solar_term.rb +35 -0
- data/lib/zakuro/result/data/year.rb +45 -0
- data/lib/zakuro/result/operation/bundle.rb +44 -0
- data/lib/zakuro/result/operation/month/annotation.rb +40 -0
- data/lib/zakuro/result/operation/month/bundle.rb +36 -0
- data/lib/zakuro/result/operation/month/history.rb +54 -0
- data/lib/zakuro/result/result.rb +21 -2
- 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/README.md +11 -7
- 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 +85 -24
- data/lib/zakuro/calculation/gengou/internal/counter.rb +0 -129
- data/lib/zakuro/calculation/gengou/internal/reserve/interval.rb +0 -183
- data/lib/zakuro/calculation/gengou/internal/reserve/list.rb +0 -382
- data/lib/zakuro/calculation/gengou/scroll.rb +0 -262
- data/lib/zakuro/calculation/specifier/single_day.rb +0 -87
- data/lib/zakuro/era/japan/gengou/parser.rb +0 -237
- data/lib/zakuro/era/japan/gengou/type.rb +0 -285
- data/lib/zakuro/era/japan/gengou/validator.rb +0 -341
- data/lib/zakuro/result/data.rb +0 -187
- data/lib/zakuro/result/operation.rb +0 -114
- data/lib/zakuro/version/context.rb +0 -44
- data/lib/zakuro/version/version_class_resolver.rb +0 -74
@@ -0,0 +1,127 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../../era/japan/calendar'
|
4
|
+
require_relative '../../era/western/calendar'
|
5
|
+
|
6
|
+
require 'date'
|
7
|
+
|
8
|
+
# :nodoc:
|
9
|
+
module Zakuro
|
10
|
+
# :nodoc:
|
11
|
+
module Gateway
|
12
|
+
# :nodoc:
|
13
|
+
class Locale
|
14
|
+
#
|
15
|
+
# Date 日付
|
16
|
+
#
|
17
|
+
class Date
|
18
|
+
INDALID = Object::Date.new
|
19
|
+
|
20
|
+
# @return [Western::Calendar] 西暦日
|
21
|
+
attr_reader :western_date
|
22
|
+
# @return [Japan::Calendar] 和暦日
|
23
|
+
attr_reader :japan_date
|
24
|
+
|
25
|
+
#
|
26
|
+
# 初期化
|
27
|
+
#
|
28
|
+
# @param [Date, String] date 日付
|
29
|
+
#
|
30
|
+
def initialize(date: INDALID)
|
31
|
+
@western_date = Western::Calendar.new
|
32
|
+
@japan_date = Japan::Calendar.new
|
33
|
+
|
34
|
+
parse(date: date)
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# 和暦日が有効か
|
39
|
+
#
|
40
|
+
# @return [True] 有効
|
41
|
+
# @return [False] 無効
|
42
|
+
#
|
43
|
+
def valid_japan?
|
44
|
+
!invalid_japan?
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# 和暦日が不正か
|
49
|
+
#
|
50
|
+
# @return [True] 不正
|
51
|
+
# @return [False] 不正なし
|
52
|
+
#
|
53
|
+
def invalid_japan?
|
54
|
+
@japan_date.invalid?
|
55
|
+
end
|
56
|
+
|
57
|
+
#
|
58
|
+
# 西暦日が有効か
|
59
|
+
#
|
60
|
+
# @return [True] 有効
|
61
|
+
# @return [False] 無効
|
62
|
+
#
|
63
|
+
def valid_western?
|
64
|
+
!invalid_western?
|
65
|
+
end
|
66
|
+
|
67
|
+
#
|
68
|
+
# 西暦日が不正か
|
69
|
+
#
|
70
|
+
# @return [True] 不正
|
71
|
+
# @return [False] 不正なし
|
72
|
+
#
|
73
|
+
def invalid_western?
|
74
|
+
@western_date.invalid?
|
75
|
+
end
|
76
|
+
|
77
|
+
#
|
78
|
+
# 不正か
|
79
|
+
#
|
80
|
+
# @return [True] 不正
|
81
|
+
# @return [False] 不正なし
|
82
|
+
#
|
83
|
+
def invalid?
|
84
|
+
invalid_japan? && invalid_western?
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
|
89
|
+
#
|
90
|
+
# 解析する
|
91
|
+
#
|
92
|
+
# @param [Date, String] date 日付
|
93
|
+
#
|
94
|
+
def parse(date:)
|
95
|
+
return unless date
|
96
|
+
|
97
|
+
return if date == INDALID
|
98
|
+
|
99
|
+
if date.is_a?(Object::Date)
|
100
|
+
@western_date = Western::Calendar.create(date: date)
|
101
|
+
return
|
102
|
+
end
|
103
|
+
|
104
|
+
return unless date.is_a?(String)
|
105
|
+
|
106
|
+
parse_text(text: date)
|
107
|
+
end
|
108
|
+
|
109
|
+
#
|
110
|
+
# 文字解析する
|
111
|
+
#
|
112
|
+
# @param [String] text 日付文字列
|
113
|
+
#
|
114
|
+
def parse_text(text:)
|
115
|
+
if Western::Calendar.valid_date_string(text: text)
|
116
|
+
@western_date = Western::Calendar.parse(text: text)
|
117
|
+
return
|
118
|
+
end
|
119
|
+
|
120
|
+
return unless Japan::Calendar.valid_date_string(text: text)
|
121
|
+
|
122
|
+
@japan_date = Japan::Calendar.parse(text: text)
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './date'
|
4
|
+
|
5
|
+
# :nodoc:
|
6
|
+
module Zakuro
|
7
|
+
# :nodoc:
|
8
|
+
module Gateway
|
9
|
+
# :nodoc:
|
10
|
+
class Locale
|
11
|
+
#
|
12
|
+
# Range 範囲
|
13
|
+
#
|
14
|
+
class Range
|
15
|
+
# @return [LocaleDate] 開始日
|
16
|
+
attr_reader :start_date
|
17
|
+
# @return [LocaleDate] 終了日
|
18
|
+
attr_reader :last_date
|
19
|
+
|
20
|
+
#
|
21
|
+
# 初期化
|
22
|
+
#
|
23
|
+
# @param [Hash<Symbol, Object>] range 範囲
|
24
|
+
#
|
25
|
+
def initialize(range:)
|
26
|
+
@start_date = Date.new
|
27
|
+
@last_date = Date.new
|
28
|
+
|
29
|
+
return unless range
|
30
|
+
|
31
|
+
@start_date = Date.new(date: range[:start])
|
32
|
+
@last_date = Date.new(date: range[:last])
|
33
|
+
end
|
34
|
+
|
35
|
+
#
|
36
|
+
# 西暦日は有効か
|
37
|
+
#
|
38
|
+
# @return [True] 有効
|
39
|
+
# @return [False] 無効
|
40
|
+
#
|
41
|
+
def valid_western?
|
42
|
+
@start_date.valid_western? && @last_date.valid_western?
|
43
|
+
end
|
44
|
+
|
45
|
+
#
|
46
|
+
# 和暦日は有効か
|
47
|
+
#
|
48
|
+
# @return [True] 有効
|
49
|
+
# @return [False] 無効
|
50
|
+
#
|
51
|
+
def valid_japan?
|
52
|
+
@start_date.valid_japan? && @last_date.valid_japan?
|
53
|
+
end
|
54
|
+
|
55
|
+
#
|
56
|
+
# 不正か
|
57
|
+
#
|
58
|
+
# @return [True] 不正
|
59
|
+
# @return [False] 不正なし
|
60
|
+
#
|
61
|
+
def invalid?
|
62
|
+
@start_date.invalid? && @last_date.invalid?
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../calculation/summary/japan/range'
|
4
|
+
require_relative '../calculation/summary/western/range'
|
5
|
+
require_relative '../exception/case/preset'
|
6
|
+
require_relative '../exception/exception'
|
7
|
+
|
8
|
+
require_relative './locale/range'
|
9
|
+
|
10
|
+
# :nodoc:
|
11
|
+
module Zakuro
|
12
|
+
# :nodoc:
|
13
|
+
module Gateway
|
14
|
+
#
|
15
|
+
# Range 範囲
|
16
|
+
#
|
17
|
+
class Range
|
18
|
+
# @return [Context::Context] 暦コンテキスト
|
19
|
+
attr_reader :context
|
20
|
+
# @return [Locale::Range] 範囲
|
21
|
+
attr_reader :range
|
22
|
+
|
23
|
+
#
|
24
|
+
# 初期化
|
25
|
+
#
|
26
|
+
# @param [Context::Context] context 暦コンテキスト
|
27
|
+
# @param [Hash<Symbol, Object>] range 範囲
|
28
|
+
#
|
29
|
+
def initialize(context:, range:)
|
30
|
+
@context = context
|
31
|
+
@range = Locale::Range.new(range: range)
|
32
|
+
end
|
33
|
+
|
34
|
+
#
|
35
|
+
# 不正か
|
36
|
+
#
|
37
|
+
# @return [True] 不正
|
38
|
+
# @return [False] 不正なし
|
39
|
+
#
|
40
|
+
def invalid?
|
41
|
+
@range.invalid?
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# 検索結果を取得する
|
46
|
+
#
|
47
|
+
# @return [Result::Range] 範囲検索結果(和暦日)
|
48
|
+
#
|
49
|
+
def get
|
50
|
+
start_date = range.start_date
|
51
|
+
last_date = range.last_date
|
52
|
+
|
53
|
+
return western(start_date: start_date, last_date: last_date) if range.valid_western?
|
54
|
+
|
55
|
+
return japan(start_date: start_date, last_date: last_date) if range.valid_japan?
|
56
|
+
|
57
|
+
raise Exception.get(
|
58
|
+
presets: [
|
59
|
+
Exception::Case::Preset.new(
|
60
|
+
template: Exception::Case::Pattern::INVALID_RANGE
|
61
|
+
)
|
62
|
+
]
|
63
|
+
)
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
#
|
69
|
+
# 西暦日による結果を取得する
|
70
|
+
#
|
71
|
+
# @param [Locale::Date] start_date 西暦開始日
|
72
|
+
# @param [Locale::Date] last_date 西暦終了日
|
73
|
+
#
|
74
|
+
# @return [Result::Range] 範囲検索結果(和暦日)
|
75
|
+
#
|
76
|
+
def western(start_date: Locale::Date.new, last_date: Locale::Date.new)
|
77
|
+
Calculation::Summary::Western::Range.get(
|
78
|
+
context: context, start_date: start_date.western_date,
|
79
|
+
last_date: last_date.western_date
|
80
|
+
)
|
81
|
+
end
|
82
|
+
|
83
|
+
#
|
84
|
+
# 和暦日による結果を取得する
|
85
|
+
#
|
86
|
+
# @param [Locale::Date] start_date 和暦開始日
|
87
|
+
# @param [Locale::Date] last_date 和暦終了日
|
88
|
+
#
|
89
|
+
# @return [Result::Range] 範囲検索結果(和暦日)
|
90
|
+
#
|
91
|
+
def japan(start_date: Locale::Date.new, last_date: Locale::Date.new)
|
92
|
+
Calculation::Summary::Japan::Range.get(
|
93
|
+
context: context, start_date: start_date.japan_date,
|
94
|
+
last_date: last_date.japan_date
|
95
|
+
)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative '../calculation/summary/japan/single'
|
4
|
+
require_relative '../calculation/summary/western/single'
|
5
|
+
require_relative '../exception/case/preset'
|
6
|
+
require_relative '../exception/exception'
|
7
|
+
|
8
|
+
require_relative './locale/date'
|
9
|
+
|
10
|
+
# :nodoc:
|
11
|
+
module Zakuro
|
12
|
+
# :nodoc:
|
13
|
+
module Gateway
|
14
|
+
#
|
15
|
+
# Single 1日
|
16
|
+
#
|
17
|
+
class Single
|
18
|
+
# @return [Locale::Date] 日付
|
19
|
+
attr_reader :date
|
20
|
+
|
21
|
+
#
|
22
|
+
# 初期化
|
23
|
+
#
|
24
|
+
# @param [Context::Context] context 暦コンテキスト
|
25
|
+
# @param [Date, String] date 日付
|
26
|
+
#
|
27
|
+
def initialize(context:, date:)
|
28
|
+
@context = context
|
29
|
+
@date = Locale::Date.new(date: date)
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# 不正か
|
34
|
+
#
|
35
|
+
# @return [True] 不正
|
36
|
+
# @return [False] 不正なし
|
37
|
+
#
|
38
|
+
def invalid?
|
39
|
+
@date.invalid?
|
40
|
+
end
|
41
|
+
|
42
|
+
#
|
43
|
+
# 検索結果を取得する
|
44
|
+
#
|
45
|
+
# @return [Result::Single] 一日検索結果(和暦日)
|
46
|
+
#
|
47
|
+
def get
|
48
|
+
if date.valid_western?
|
49
|
+
return Calculation::Summary::Western::Single.get(
|
50
|
+
context: @context, date: date.western_date
|
51
|
+
)
|
52
|
+
end
|
53
|
+
|
54
|
+
if date.valid_japan?
|
55
|
+
return Calculation::Summary::Japan::Single.get(
|
56
|
+
context: @context, date: date.japan_date
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
raise Exception.get(
|
61
|
+
presets: [
|
62
|
+
Exception::Case::Preset.new(
|
63
|
+
template: Exception::Case::Pattern::INVALID_DATE
|
64
|
+
)
|
65
|
+
]
|
66
|
+
)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
data/lib/zakuro/merchant.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative './
|
3
|
+
require_relative './gateway/single'
|
4
4
|
|
5
|
-
require_relative './
|
5
|
+
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,32 +47,94 @@ 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
|
#
|
50
66
|
# 承諾する
|
51
67
|
#
|
52
68
|
# @return [Result::SingleDay] 和暦日
|
69
|
+
# @return [Result::Range] 和暦日範囲
|
70
|
+
#
|
71
|
+
# @raise [Exception::ZakuroError] ライブラリ内エラー
|
53
72
|
#
|
54
73
|
def commit
|
55
|
-
|
74
|
+
context = Context::Context.new(options: condition.options)
|
56
75
|
|
57
|
-
|
58
|
-
|
76
|
+
result = get(context: context)
|
77
|
+
|
78
|
+
return result.get unless result.invalid?
|
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:)
|
97
|
+
single = Gateway::Single.new(context: context, date: condition.date)
|
59
98
|
|
60
|
-
|
99
|
+
return Calculation::Type::Optional.new(obj: single.get) unless single.invalid?
|
61
100
|
|
62
|
-
|
63
|
-
context = Context.new(version_name: '')
|
101
|
+
range = Gateway::Range.new(context: context, range: condition.range)
|
64
102
|
|
65
|
-
Calculation::
|
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
|
124
|
+
|
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
|
+
)
|
66
138
|
end
|
67
139
|
end
|
68
140
|
end
|
@@ -80,7 +80,7 @@ module Zakuro
|
|
80
80
|
def self.western_date(str:)
|
81
81
|
return Western::Calendar.new if invalid?(str: str)
|
82
82
|
|
83
|
-
Western::Calendar.parse(
|
83
|
+
Western::Calendar.parse(text: str)
|
84
84
|
end
|
85
85
|
|
86
86
|
#
|
@@ -112,6 +112,8 @@ module Zakuro
|
|
112
112
|
#
|
113
113
|
# @return [Array<MonthHistory>] 変更履歴
|
114
114
|
#
|
115
|
+
# @raise [ArgumentError] 引数エラー
|
116
|
+
#
|
115
117
|
def self.run(filepath:)
|
116
118
|
hash = YAML.load_file(filepath)
|
117
119
|
|
@@ -311,8 +313,8 @@ module Zakuro
|
|
311
313
|
|
312
314
|
def self.create_solar_term(yaml_hash: {})
|
313
315
|
SolarTerm::Direction.new(
|
314
|
-
source: create_source_solar_term(yaml_hash: yaml_hash['
|
315
|
-
destination: create_destination_solar_term(yaml_hash: yaml_hash['
|
316
|
+
source: create_source_solar_term(yaml_hash: yaml_hash['src']),
|
317
|
+
destination: create_destination_solar_term(yaml_hash: yaml_hash['dest']),
|
316
318
|
days: Operation::TypeParser.days(str: yaml_hash['days'])
|
317
319
|
)
|
318
320
|
end
|
@@ -347,24 +349,24 @@ module Zakuro
|
|
347
349
|
|
348
350
|
def self.create_month_number(yaml_hash: {})
|
349
351
|
Number.new(
|
350
|
-
|
351
|
-
|
352
|
+
src: Operation::TypeParser.month_number(str: yaml_hash['src']),
|
353
|
+
dest: Operation::TypeParser.month_number(str: yaml_hash['dest'])
|
352
354
|
)
|
353
355
|
end
|
354
356
|
private_class_method :create_month_number
|
355
357
|
|
356
358
|
def self.create_month_leaped(yaml_hash: {})
|
357
359
|
Leaped.new(
|
358
|
-
|
359
|
-
|
360
|
+
src: Operation::TypeParser.month_leaped(str: yaml_hash['src']),
|
361
|
+
dest: Operation::TypeParser.month_leaped(str: yaml_hash['dest'])
|
360
362
|
)
|
361
363
|
end
|
362
364
|
private_class_method :create_month_leaped
|
363
365
|
|
364
366
|
def self.create_month_day(yaml_hash: {})
|
365
367
|
Days.new(
|
366
|
-
|
367
|
-
|
368
|
+
src: yaml_hash['src'],
|
369
|
+
dest: yaml_hash['dest']
|
368
370
|
)
|
369
371
|
end
|
370
372
|
private_class_method :create_month_day
|
@@ -339,20 +339,20 @@ module Zakuro
|
|
339
339
|
# Number 月
|
340
340
|
#
|
341
341
|
class Number
|
342
|
-
# @return [Integer]
|
343
|
-
attr_reader :
|
344
|
-
# @return [Integer]
|
345
|
-
attr_reader :
|
342
|
+
# @return [Integer] 移動もと
|
343
|
+
attr_reader :src
|
344
|
+
# @return [Integer] 移動先
|
345
|
+
attr_reader :dest
|
346
346
|
|
347
347
|
#
|
348
348
|
# 初期化
|
349
349
|
#
|
350
|
-
# @param [Integer]
|
351
|
-
# @param [Integer]
|
350
|
+
# @param [Integer] src 移動元
|
351
|
+
# @param [Integer] dest 移動先
|
352
352
|
#
|
353
|
-
def initialize(
|
354
|
-
@
|
355
|
-
@
|
353
|
+
def initialize(src: -1, dest: -1)
|
354
|
+
@src = src
|
355
|
+
@dest = dest
|
356
356
|
end
|
357
357
|
|
358
358
|
#
|
@@ -362,7 +362,7 @@ module Zakuro
|
|
362
362
|
# @return [False] 有効
|
363
363
|
#
|
364
364
|
def invalid?
|
365
|
-
@
|
365
|
+
@src == -1 || @dest == -1
|
366
366
|
end
|
367
367
|
|
368
368
|
#
|
@@ -381,7 +381,7 @@ module Zakuro
|
|
381
381
|
# @return [Integer] 間隔
|
382
382
|
#
|
383
383
|
def interval
|
384
|
-
@
|
384
|
+
@src - @dest
|
385
385
|
end
|
386
386
|
|
387
387
|
#
|
@@ -428,22 +428,22 @@ module Zakuro
|
|
428
428
|
# Leaped 閏有無
|
429
429
|
#
|
430
430
|
class Leaped
|
431
|
-
# @return [True, False]
|
432
|
-
attr_reader :
|
433
|
-
# @return [True, False]
|
434
|
-
attr_reader :
|
431
|
+
# @return [True, False] 移動元
|
432
|
+
attr_reader :src
|
433
|
+
# @return [True, False] 移動先
|
434
|
+
attr_reader :dest
|
435
435
|
|
436
436
|
# :reek:BooleanParameter
|
437
437
|
|
438
438
|
#
|
439
439
|
# 初期化
|
440
440
|
#
|
441
|
-
# @param [True, False]
|
442
|
-
# @param [True, False]
|
441
|
+
# @param [True, False] src 移動元
|
442
|
+
# @param [True, False] dest 移動先
|
443
443
|
#
|
444
|
-
def initialize(
|
445
|
-
@
|
446
|
-
@
|
444
|
+
def initialize(src: false, dest: false)
|
445
|
+
@src = src
|
446
|
+
@dest = dest
|
447
447
|
end
|
448
448
|
|
449
449
|
#
|
@@ -453,7 +453,7 @@ module Zakuro
|
|
453
453
|
# @return [False] 有効
|
454
454
|
#
|
455
455
|
def invalid?
|
456
|
-
!@
|
456
|
+
!@src && !@dest
|
457
457
|
end
|
458
458
|
end
|
459
459
|
|
@@ -469,12 +469,12 @@ module Zakuro
|
|
469
469
|
#
|
470
470
|
# 初期化
|
471
471
|
#
|
472
|
-
# @param [String]
|
473
|
-
# @param [String]
|
472
|
+
# @param [String] src 移動元
|
473
|
+
# @param [String] dest 移動先
|
474
474
|
#
|
475
|
-
def initialize(
|
476
|
-
@
|
477
|
-
@
|
475
|
+
def initialize(src: '小', dest: '小')
|
476
|
+
@src = src
|
477
|
+
@dest = dest
|
478
478
|
end
|
479
479
|
|
480
480
|
#
|
@@ -483,8 +483,8 @@ module Zakuro
|
|
483
483
|
# @return [True] 大
|
484
484
|
# @return [False] 小
|
485
485
|
#
|
486
|
-
def
|
487
|
-
@
|
486
|
+
def src
|
487
|
+
@src == BIG
|
488
488
|
end
|
489
489
|
|
490
490
|
#
|
@@ -493,8 +493,8 @@ module Zakuro
|
|
493
493
|
# @return [True] 大
|
494
494
|
# @return [False] 小
|
495
495
|
#
|
496
|
-
def
|
497
|
-
@
|
496
|
+
def dest
|
497
|
+
@dest == BIG
|
498
498
|
end
|
499
499
|
|
500
500
|
#
|
@@ -504,7 +504,7 @@ module Zakuro
|
|
504
504
|
# @return [False] 有効
|
505
505
|
#
|
506
506
|
def invalid?
|
507
|
-
@
|
507
|
+
@src == @dest
|
508
508
|
end
|
509
509
|
end
|
510
510
|
end
|