zakuro 0.6.1 → 0.7.0

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.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3 -0
  3. data/README.md +6 -4
  4. data/VERSION +1 -1
  5. data/doc/operation/transfer.rb +8 -8
  6. data/lib/zakuro/calculation/base/gengou.rb +46 -0
  7. data/lib/zakuro/calculation/era/gengou/{scroll.rb → abstract_scroll.rb} +6 -8
  8. data/lib/zakuro/calculation/era/gengou/dated_scroll.rb +30 -0
  9. data/lib/zakuro/calculation/era/gengou/internal/reserve/{list.rb → abstract_list.rb} +37 -51
  10. data/lib/zakuro/calculation/era/gengou/internal/reserve/{range.rb → abstract_range.rb} +17 -17
  11. data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_list.rb +48 -0
  12. data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_range.rb +30 -0
  13. data/lib/zakuro/calculation/era/gengou/internal/reserve/empty_link.rb +158 -0
  14. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_list.rb +125 -0
  15. data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +75 -0
  16. data/lib/zakuro/calculation/era/gengou/internal/reserve.rb +2 -3
  17. data/lib/zakuro/calculation/era/gengou/named_scroll.rb +30 -0
  18. data/lib/zakuro/calculation/monthly/month.rb +39 -0
  19. data/lib/zakuro/calculation/monthly/operated_month.rb +1 -1
  20. data/lib/zakuro/calculation/range/{full_range.rb → abstract_full_range.rb} +5 -4
  21. data/lib/zakuro/calculation/range/{operated_range.rb → abstract_operation_range.rb} +9 -11
  22. data/lib/zakuro/calculation/range/dated_full_range.rb +32 -0
  23. data/lib/zakuro/calculation/range/dated_operation_range.rb +33 -0
  24. data/lib/zakuro/calculation/range/named_full_range.rb +38 -0
  25. data/lib/zakuro/calculation/range/named_operation_range.rb +36 -0
  26. data/lib/zakuro/calculation/range/operated_solar_terms.rb +0 -2
  27. data/lib/zakuro/calculation/{specifier → summary}/internal/month.rb +1 -1
  28. data/lib/zakuro/calculation/summary/japan/range.rb +152 -0
  29. data/lib/zakuro/calculation/summary/japan/single.rb +118 -0
  30. data/lib/zakuro/calculation/summary/japan/specifier/single_day.rb +91 -0
  31. data/lib/zakuro/calculation/summary/western/range.rb +124 -0
  32. data/lib/zakuro/calculation/summary/western/single.rb +113 -0
  33. data/lib/zakuro/calculation/summary/western/specifier/multiple_day.rb +169 -0
  34. data/lib/zakuro/calculation/summary/western/specifier/single_day.rb +93 -0
  35. data/lib/zakuro/condition.rb +1 -2
  36. data/lib/zakuro/era/japan/gengou/alignment/aligner.rb +89 -74
  37. data/lib/zakuro/era/japan/gengou/alignment/division.rb +125 -122
  38. data/lib/zakuro/era/japan/gengou/alignment/line.rb +141 -122
  39. data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +171 -168
  40. data/lib/zakuro/era/japan/gengou/alignment.rb +38 -25
  41. data/lib/zakuro/era/japan/gengou/resource/parser.rb +183 -182
  42. data/lib/zakuro/era/japan/gengou/resource/type.rb +233 -232
  43. data/lib/zakuro/era/japan/gengou/resource/validator.rb +255 -254
  44. data/lib/zakuro/era/japan/gengou/resource.rb +23 -22
  45. data/lib/zakuro/era/japan/gengou.rb +5 -20
  46. data/lib/zakuro/era/western/calendar.rb +9 -9
  47. data/lib/zakuro/exception/case/pattern.rb +35 -0
  48. data/lib/zakuro/exception/case/preset.rb +51 -0
  49. data/lib/zakuro/exception/case/template.rb +48 -0
  50. data/lib/zakuro/exception/cause.rb +28 -0
  51. data/lib/zakuro/exception/exception.rb +37 -0
  52. data/lib/zakuro/exception/zakuro_error.rb +28 -0
  53. data/lib/zakuro/gateway/locale/date.rb +127 -0
  54. data/lib/zakuro/gateway/locale/range.rb +67 -0
  55. data/lib/zakuro/gateway/range.rb +99 -0
  56. data/lib/zakuro/gateway/single.rb +70 -0
  57. data/lib/zakuro/merchant.rb +8 -44
  58. data/lib/zakuro/operation/month/parser.rb +9 -9
  59. data/lib/zakuro/operation/month/type.rb +31 -31
  60. data/lib/zakuro/operation/month/validator.rb +49 -49
  61. data/lib/zakuro/operation/yaml/month.yaml +3736 -3736
  62. data/lib/zakuro/output/logger.rb +17 -3
  63. data/lib/zakuro/result/data/day.rb +43 -0
  64. data/lib/zakuro/result/data/gengou.rb +35 -0
  65. data/lib/zakuro/result/data/month.rb +63 -0
  66. data/lib/zakuro/result/data/single_day.rb +48 -0
  67. data/lib/zakuro/result/data/solar_term.rb +35 -0
  68. data/lib/zakuro/result/data/year.rb +45 -0
  69. data/lib/zakuro/result/operation/month/annotation.rb +40 -0
  70. data/lib/zakuro/result/operation/month/bundle.rb +36 -0
  71. data/lib/zakuro/result/operation/month/history.rb +54 -0
  72. data/lib/zakuro/result/operation/operation.rb +44 -0
  73. data/lib/zakuro/result/result.rb +4 -2
  74. metadata +46 -14
  75. data/lib/zakuro/calculation/specifier/multiple_day.rb +0 -162
  76. data/lib/zakuro/calculation/specifier/single_day.rb +0 -87
  77. data/lib/zakuro/calculation/summary/range.rb +0 -120
  78. data/lib/zakuro/calculation/summary/single.rb +0 -110
  79. data/lib/zakuro/result/data.rb +0 -187
  80. data/lib/zakuro/result/operation.rb +0 -114
@@ -9,174 +9,177 @@ module Zakuro
9
9
  # :nodoc:
10
10
  module Japan
11
11
  # :nodoc:
12
- module Alignment
13
- #
14
- # LinearGengou 直列元号
15
- #
16
- class LinearGengou
17
- INVALID_YEAR = -1
18
-
19
- # @return [Western::Calendar] 開始日
20
- attr_reader :start_date
21
- # @return [Western::Calendar] 終了日
22
- attr_reader :last_date
23
- # @return [Gengou] 元号
24
- attr_reader :gengou
25
-
26
- #
27
- # 初期化
28
- #
29
- # @param [Western::Calendar] start_date 開始日
30
- # @param [Western::Calendar] last_date 終了日
31
- # @param [Resource::Gengou] gengou 元号
32
- #
33
- def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new,
34
- gengou: Resource::Gengou.new)
35
- @gengou = gengou
36
- @start_date = start_date.invalid? ? native_start_date : start_date
37
- @last_date = last_date.invalid? ? native_last_date : last_date
38
- end
39
-
40
- #
41
- # 元号名を取得する
42
- #
43
- # @return [String] 元号名
44
- #
45
- def name
46
- @gengou.name
47
- end
48
-
49
- #
50
- # 不正か
51
- #
52
- # @return [True] 不正
53
- # @return [False] 不正なし
54
- #
55
- def invalid?
56
- @gengou.invalid?
57
- end
58
-
59
- #
60
- # 範囲内か
61
- #
62
- # @param [Western::Calendar] date 西暦日
63
- #
64
- # @return [True] 範囲内
65
- # @return [False] 範囲外
66
- #
67
- def include?(date: Western::Calendar.new)
68
- return false if invalid?
69
-
70
- return false if @start_date.invalid?
71
-
72
- return false if @last_date.invalid?
73
-
74
- return false if date < @start_date
75
-
76
- return false if date > @last_date
77
-
78
- true
79
- end
80
-
81
- #
82
- # 完全に範囲内か
83
- #
84
- # @param [Western::Calendar] start_date 開始日
85
- # @param [Western::Calendar] last_date 終了日
86
- #
87
- # @return [True] 範囲内
88
- # @return [False] 範囲外あり
89
- #
90
- def in?(start_date:, last_date:)
91
- @start_date <= start_date && last_date <= @last_date
92
- end
93
-
94
- #
95
- # 完全に範囲外か
96
- #
97
- # @param [Western::Calendar] start_date 開始日
98
- # @param [Western::Calendar] last_date 終了日
99
- #
100
- # @return [True] 範囲外
101
- # @return [False] 範囲内あり
102
- #
103
- def out?(start_date:, last_date:)
104
- # 範囲より前
105
- return true if start_date < @start_date && last_date < @start_date
106
-
107
- # 範囲より後
108
- return true if @last_date < start_date && @last_date < last_date
109
-
110
- false
111
- end
112
-
113
- #
114
- # 完全に範囲を超えているか
115
- #
116
- # @param [Western::Calendar] start_date 開始日
117
- # @param [Western::Calendar] last_date 終了日
118
- #
119
- # @return [True] 完全超過
120
- # @return [True] 完全超過せず
121
- #
122
- def covered?(start_date:, last_date:)
123
- start_date < @start_date && @last_date < last_date
124
- end
125
-
126
- #
127
- # 元は1繋ぎであった元号が別の行に存在するか(設定値から変更されているか)?
128
- #
129
- # @return [True] 存在する
130
- # @return [False] 存在しない
131
- #
132
- def changed?
133
- return true if change_start_date?
134
-
135
- return true if change_last_date?
136
-
137
- false
138
- end
139
-
140
- #
141
- # 開始日が設定された開始日と異なるか(行が変更されているか)
142
- #
143
- # @return [True] 異なる
144
- # @return [False] 同一
145
- #
146
- def change_start_date?
147
- return false if invalid?
148
-
149
- @start_date != native_start_date
150
- end
151
-
152
- #
153
- # 終了日が設定された終了日と異なるか(行が変更されているか)
154
- #
155
- # @return [True] 異なる
156
- # @return [False] 同一
157
- #
158
- def change_last_date?
159
- return false if invalid?
160
-
161
- @last_date != native_last_date
162
- end
163
-
164
- #
165
- # 設定された元号の開始日を取得する
166
- #
167
- # @return [Western::Calendar]設定された元号の開始日
168
- #
169
- def native_start_date
170
- @gengou.both_start_date.western
171
- end
172
-
173
- #
174
- # 設定された元号の終了日を取得する
175
- #
176
- # @return [Western::Calendar] 設定された元号の終了日
177
- #
178
- def native_last_date
179
- @gengou.last_date
12
+ module Gengou
13
+ # :nodoc:
14
+ module Alignment
15
+ #
16
+ # LinearGengou 直列元号
17
+ #
18
+ class LinearGengou
19
+ INVALID_YEAR = -1
20
+
21
+ # @return [Western::Calendar] 開始日
22
+ attr_reader :start_date
23
+ # @return [Western::Calendar] 終了日
24
+ attr_reader :last_date
25
+ # @return [Gengou] 元号
26
+ attr_reader :gengou
27
+
28
+ #
29
+ # 初期化
30
+ #
31
+ # @param [Western::Calendar] start_date 開始日
32
+ # @param [Western::Calendar] last_date 終了日
33
+ # @param [Resource::Gengou] gengou 元号
34
+ #
35
+ def initialize(start_date: Western::Calendar.new, last_date: Western::Calendar.new,
36
+ gengou: Resource::Gengou.new)
37
+ @gengou = gengou
38
+ @start_date = start_date.invalid? ? native_start_date : start_date
39
+ @last_date = last_date.invalid? ? native_last_date : last_date
40
+ end
41
+
42
+ #
43
+ # 元号名を取得する
44
+ #
45
+ # @return [String] 元号名
46
+ #
47
+ def name
48
+ @gengou.name
49
+ end
50
+
51
+ #
52
+ # 不正か
53
+ #
54
+ # @return [True] 不正
55
+ # @return [False] 不正なし
56
+ #
57
+ def invalid?
58
+ @gengou.invalid?
59
+ end
60
+
61
+ #
62
+ # 範囲内か
63
+ #
64
+ # @param [Western::Calendar] date 西暦日
65
+ #
66
+ # @return [True] 範囲内
67
+ # @return [False] 範囲外
68
+ #
69
+ def include?(date: Western::Calendar.new)
70
+ return false if invalid?
71
+
72
+ return false if @start_date.invalid?
73
+
74
+ return false if @last_date.invalid?
75
+
76
+ return false if date < @start_date
77
+
78
+ return false if date > @last_date
79
+
80
+ true
81
+ end
82
+
83
+ #
84
+ # 完全に範囲内か
85
+ #
86
+ # @param [Western::Calendar] start_date 開始日
87
+ # @param [Western::Calendar] last_date 終了日
88
+ #
89
+ # @return [True] 範囲内
90
+ # @return [False] 範囲外あり
91
+ #
92
+ def in?(start_date:, last_date:)
93
+ @start_date <= start_date && last_date <= @last_date
94
+ end
95
+
96
+ #
97
+ # 完全に範囲外か
98
+ #
99
+ # @param [Western::Calendar] start_date 開始日
100
+ # @param [Western::Calendar] last_date 終了日
101
+ #
102
+ # @return [True] 範囲外
103
+ # @return [False] 範囲内あり
104
+ #
105
+ def out?(start_date:, last_date:)
106
+ # 範囲より前
107
+ return true if start_date < @start_date && last_date < @start_date
108
+
109
+ # 範囲より後
110
+ return true if @last_date < start_date && @last_date < last_date
111
+
112
+ false
113
+ end
114
+
115
+ #
116
+ # 完全に範囲を超えているか
117
+ #
118
+ # @param [Western::Calendar] start_date 開始日
119
+ # @param [Western::Calendar] last_date 終了日
120
+ #
121
+ # @return [True] 完全超過
122
+ # @return [True] 完全超過せず
123
+ #
124
+ def covered?(start_date:, last_date:)
125
+ start_date < @start_date && @last_date < last_date
126
+ end
127
+
128
+ #
129
+ # 元は1繋ぎであった元号が別の行に存在するか(設定値から変更されているか)?
130
+ #
131
+ # @return [True] 存在する
132
+ # @return [False] 存在しない
133
+ #
134
+ def changed?
135
+ return true if change_start_date?
136
+
137
+ return true if change_last_date?
138
+
139
+ false
140
+ end
141
+
142
+ #
143
+ # 開始日が設定された開始日と異なるか(行が変更されているか)
144
+ #
145
+ # @return [True] 異なる
146
+ # @return [False] 同一
147
+ #
148
+ def change_start_date?
149
+ return false if invalid?
150
+
151
+ @start_date != native_start_date
152
+ end
153
+
154
+ #
155
+ # 終了日が設定された終了日と異なるか(行が変更されているか)
156
+ #
157
+ # @return [True] 異なる
158
+ # @return [False] 同一
159
+ #
160
+ def change_last_date?
161
+ return false if invalid?
162
+
163
+ @last_date != native_last_date
164
+ end
165
+
166
+ #
167
+ # 設定された元号の開始日を取得する
168
+ #
169
+ # @return [Western::Calendar]設定された元号の開始日
170
+ #
171
+ def native_start_date
172
+ @gengou.both_start_date.western
173
+ end
174
+
175
+ #
176
+ # 設定された元号の終了日を取得する
177
+ #
178
+ # @return [Western::Calendar] 設定された元号の終了日
179
+ #
180
+ def native_last_date
181
+ @gengou.last_date
182
+ end
180
183
  end
181
184
  end
182
185
  end
@@ -6,36 +6,49 @@ require_relative './resource'
6
6
 
7
7
  # :nodoc:
8
8
  module Zakuro
9
- #
10
- # Japan 和暦
11
- #
9
+ # :nodoc:
12
10
  module Japan
13
- #
14
- # Alignment 整列
15
- #
16
- module Alignment
17
- # @return [Integer] 1行目元号
18
- FIRST_LINE = Aligner::FIRST_LINE
11
+ # :nodoc:
12
+ module Gengou
13
+ #
14
+ # Alignment 整列
15
+ #
16
+ module Alignment
17
+ # @return [Integer] 1行目元号
18
+ FIRST_LINE = Aligner::FIRST_LINE
19
19
 
20
- # @return [Integer] 2行目元号
21
- SECOND_LINE = Aligner::SECOND_LINE
20
+ # @return [Integer] 2行目元号
21
+ SECOND_LINE = Aligner::SECOND_LINE
22
22
 
23
- # @return [Aligner] 整列結果
24
- SUMMARY = Aligner.new(resources: Resource::LIST)
23
+ # @return [Aligner] 整列結果
24
+ SUMMARY = Aligner.new(resources: Resource::LIST)
25
25
 
26
- #
27
- # 指定した範囲内の元号を取得する
28
- #
29
- # @param [Integer] line 行
30
- # @param [Western::Calendar] start_date 開始日
31
- # @param [Western::Calendar] last_date 終了日
32
- #
33
- # @return [Array<LinearGengou>] 元号
34
- #
35
- def self.get(line: FIRST_LINE,
36
- start_date: Western::Calendar.new, last_date: Western::Calendar.new)
26
+ #
27
+ # 指定した範囲内の元号を取得する
28
+ #
29
+ # @param [Integer] line 行
30
+ # @param [Western::Calendar] start_date 開始日
31
+ # @param [Western::Calendar] last_date 終了日
32
+ #
33
+ # @return [Array<LinearGengou>] 元号
34
+ #
35
+ def self.get(line: FIRST_LINE,
36
+ start_date: Western::Calendar.new, last_date: Western::Calendar.new)
37
+
38
+ SUMMARY.get(line: line, start_date: start_date, last_date: last_date)
39
+ end
37
40
 
38
- SUMMARY.get(line: line, start_date: start_date, last_date: last_date)
41
+ #
42
+ # 指定した範囲内の元号を取得する(元号名)
43
+ #
44
+ # @param [Integer] line 行
45
+ # @param [String] name 元号名
46
+ #
47
+ # @return [Array<LinearGengou>] 元号
48
+ #
49
+ def self.get_by_name(line: FIRST_LINE, name:)
50
+ SUMMARY.get_by_name(line: line, name: name)
51
+ end
39
52
  end
40
53
  end
41
54
  end