zakuro 0.0.2 → 0.1.3

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/.rubocop.yml +3 -0
  3. data/README.md +102 -42
  4. data/doc/operation.md +25 -0
  5. data/doc/operation/csv/month.csv +202 -0
  6. data/doc/operation/operation.xlsx +0 -0
  7. data/doc/operation/transfer.rb +77 -0
  8. data/lib/zakuro/calculation/base/multi_gengou.rb +101 -0
  9. data/lib/zakuro/calculation/base/multi_gengou_roller.rb +218 -0
  10. data/lib/zakuro/calculation/base/year.rb +107 -0
  11. data/lib/zakuro/calculation/cycle/abstract_remainder.rb +459 -0
  12. data/lib/zakuro/calculation/cycle/abstract_solar_term.rb +151 -0
  13. data/lib/zakuro/calculation/cycle/zodiac.rb +106 -0
  14. data/lib/zakuro/calculation/monthly/first_day.rb +45 -0
  15. data/lib/zakuro/calculation/monthly/initialized_month.rb +120 -0
  16. data/lib/zakuro/calculation/monthly/month.rb +184 -0
  17. data/lib/zakuro/calculation/monthly/month_label.rb +88 -0
  18. data/lib/zakuro/calculation/monthly/operated_month.rb +201 -0
  19. data/lib/zakuro/calculation/range/full_range.rb +210 -0
  20. data/lib/zakuro/calculation/range/operated_range.rb +134 -0
  21. data/lib/zakuro/calculation/range/operated_solar_terms.rb +201 -0
  22. data/lib/zakuro/calculation/range/transfer/western_date_allocation.rb +76 -0
  23. data/lib/zakuro/calculation/range/transfer/year_boundary.rb +142 -0
  24. data/lib/zakuro/calculation/specifier/single_day.rb +109 -0
  25. data/lib/zakuro/calculation/summary/single.rb +129 -0
  26. data/lib/zakuro/condition.rb +17 -13
  27. data/lib/zakuro/era/japan/gengou.rb +106 -0
  28. data/lib/zakuro/era/japan/gengou/parser.rb +167 -0
  29. data/lib/zakuro/era/japan/gengou/type.rb +178 -0
  30. data/lib/zakuro/era/japan/gengou/validator.rb +236 -0
  31. data/lib/zakuro/era/japan/reki.rb +91 -0
  32. data/lib/zakuro/era/{gengou → japan/yaml}/set-001-until-south.yaml +0 -0
  33. data/lib/zakuro/era/{gengou → japan/yaml}/set-002-from-north.yaml +0 -0
  34. data/lib/zakuro/era/{gengou → japan/yaml}/set-003-modern.yaml +1 -1
  35. data/lib/zakuro/era/western.rb +1 -1
  36. data/lib/zakuro/merchant.rb +2 -2
  37. data/lib/zakuro/operation/month/parser.rb +373 -0
  38. data/lib/zakuro/operation/month/type.rb +453 -0
  39. data/lib/zakuro/operation/month/validator.rb +802 -0
  40. data/lib/zakuro/operation/operation.rb +66 -0
  41. data/lib/zakuro/operation/yaml/month.yaml +6452 -0
  42. data/lib/zakuro/output/error.rb +7 -4
  43. data/lib/zakuro/output/logger.rb +50 -47
  44. data/lib/zakuro/output/response.rb +146 -143
  45. data/lib/zakuro/result/core.rb +52 -0
  46. data/lib/zakuro/result/data.rb +187 -0
  47. data/lib/zakuro/result/operation.rb +114 -0
  48. data/lib/zakuro/result/result.rb +37 -0
  49. data/lib/zakuro/{output → tools}/stringifier.rb +16 -9
  50. data/lib/zakuro/tools/typeof.rb +33 -0
  51. data/lib/zakuro/version.rb +1 -1
  52. data/lib/zakuro/version/abstract_version.rb +1 -1
  53. data/lib/zakuro/version/context.rb +23 -0
  54. data/lib/zakuro/version/senmyou/cycle/remainder.rb +63 -0
  55. data/lib/zakuro/version/senmyou/cycle/solar_term.rb +31 -0
  56. data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +186 -182
  57. data/lib/zakuro/version/senmyou/range/annual_range.rb +164 -0
  58. data/lib/zakuro/version/senmyou/senmyou.rb +10 -4
  59. data/lib/zakuro/version/senmyou/stella/lunar_orbit.rb +7 -7
  60. data/lib/zakuro/version/senmyou/stella/solar_average.rb +103 -138
  61. data/lib/zakuro/version/senmyou/stella/solar_location.rb +213 -0
  62. data/lib/zakuro/version/senmyou/stella/solar_orbit.rb +6 -191
  63. data/lib/zakuro/version/senmyou/stella/winter_solstice.rb +4 -4
  64. data/lib/zakuro/version/version_class_resolver.rb +62 -0
  65. data/lib/zakuro/version_factory.rb +3 -3
  66. metadata +49 -20
  67. data/lib/zakuro/cycle/abstract_remainder.rb +0 -457
  68. data/lib/zakuro/cycle/zodiac.rb +0 -103
  69. data/lib/zakuro/era/japan.rb +0 -660
  70. data/lib/zakuro/output/result.rb +0 -219
  71. data/lib/zakuro/version/senmyou/base/era.rb +0 -83
  72. data/lib/zakuro/version/senmyou/base/multi_gengou.rb +0 -98
  73. data/lib/zakuro/version/senmyou/base/multi_gengou_roller.rb +0 -205
  74. data/lib/zakuro/version/senmyou/base/remainder.rb +0 -60
  75. data/lib/zakuro/version/senmyou/base/solar_term.rb +0 -66
  76. data/lib/zakuro/version/senmyou/base/year.rb +0 -104
  77. data/lib/zakuro/version/senmyou/monthly/month.rb +0 -122
  78. data/lib/zakuro/version/senmyou/summary/annual_range.rb +0 -186
  79. data/lib/zakuro/version/senmyou/summary/full_range.rb +0 -216
  80. data/lib/zakuro/version/senmyou/summary/specifier.rb +0 -100
@@ -1,219 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'json'
4
-
5
- require_relative './stringifier'
6
-
7
- # :nodoc:
8
- module Zakuro
9
- #
10
- # Result 演算結果
11
- #
12
- module Result
13
- #
14
- # Gengou 元号
15
- #
16
- class Gengou
17
- # @return [String] 元号名
18
- attr_reader :name
19
- # @return [Integer] 元号年
20
- attr_reader :number
21
-
22
- #
23
- # 初期化
24
- #
25
- # @param [String] name 元号名
26
- # @param [Integer] number 元号年
27
- #
28
- def initialize(name:, number:)
29
- @name = name
30
- @number = number
31
- end
32
- end
33
-
34
- #
35
- # Year 年
36
- #
37
- class Year
38
- # @return [Gengou] 元号(1行目)
39
- attr_reader :first_gengou
40
- # @return [Gengou] 元号(2行目)
41
- attr_reader :second_gengou
42
- # @return [String] 十干十二支
43
- attr_reader :zodiac_name
44
- # @return [Integer] 日数
45
- attr_reader :total_days
46
-
47
- #
48
- # 初期化
49
- #
50
- # @param [Gengou] first_gengou 元号(1行目)
51
- # @param [Gengou] second_gengou 元号(2行目)
52
- # @param [String] zodiac_name 十干十二支
53
- # @param [Integer] total_days 日数
54
- #
55
- def initialize(first_gengou:, second_gengou:, zodiac_name:, total_days:)
56
- @first_gengou = first_gengou
57
- @second_gengou = second_gengou
58
- @zodiac_name = zodiac_name
59
- @total_days = total_days
60
- end
61
- end
62
-
63
- #
64
- # SolarTerm 二十四節気
65
- #
66
- class SolarTerm
67
- # @return [Integer] 連番
68
- attr_reader :index
69
- # @return [String] 大余小余
70
- attr_reader :remainder
71
-
72
- #
73
- # 初期化
74
- #
75
- # @param [Integer] index 連番
76
- # @param [String] remainder 大余小余
77
- #
78
- def initialize(index:, remainder:)
79
- @index = index
80
- @remainder = remainder
81
- end
82
- end
83
-
84
- # :reek:TooManyInstanceVariables { max_instance_variables: 6 }
85
-
86
- #
87
- # Month 月
88
- #
89
- class Month
90
- # TODO: days_name -> zodiac_name
91
-
92
- # @return [Integer] 月順(1-12)
93
- attr_reader :number
94
- # @return [True] 閏月
95
- # @return [False] 平月
96
- attr_reader :leaped
97
- # @return [String] 十干十二支
98
- attr_reader :days_name
99
- # @return [Day] 月初日データ
100
- attr_reader :first_day
101
- # @return [SolarTerm] 二十四節気(節気)
102
- attr_reader :odd_solar_terms
103
- # @return [SolarTerm] 二十四節気(中気)
104
- attr_reader :even_solar_terms
105
-
106
- # rubocop:disable Metrics/ParameterLists
107
- # :reek:LongParameterList { max_params: 6 }
108
-
109
- #
110
- # 初期化
111
- #
112
- # @param [Integer] number 月順(1-12)
113
- # @param [True, False] leaped 閏月/平月
114
- # @param [String] days_name 十干十二支
115
- # @param [Day] first_day 月初日データ
116
- # @param [SolarTerm] odd_solar_terms 二十四節気(節気)
117
- # @param [SolarTerm] even_solar_terms 二十四節気(中気)
118
- #
119
- def initialize(number:, leaped:, days_name:, first_day:,
120
- odd_solar_terms:, even_solar_terms:)
121
- @number = number
122
- @leaped = leaped
123
- @days_name = days_name
124
- @first_day = first_day
125
- @odd_solar_terms = odd_solar_terms
126
- @even_solar_terms = even_solar_terms
127
- end
128
- # rubocop:enable Metrics/ParameterLists
129
- end
130
-
131
- #
132
- # Day 日
133
- #
134
- class Day
135
- # @return [Integer] 月初日から数えた日(M月d日のdに相当)
136
- attr_reader :number
137
- # @return [String] 十干十二支
138
- attr_reader :zodiac_name
139
- # @return [String] 大余小余
140
- attr_reader :remainder
141
- # @return [String] 年月日
142
- attr_reader :western_date
143
-
144
- #
145
- # 初期化
146
- #
147
- # @param [Integer] number 月初日から数えた日(M月d日のdに相当)
148
- # @param [String] zodiac_name 十干十二支
149
- # @param [String] remainder 大余小余
150
- # @param [String] western_date 年月日
151
- #
152
- def initialize(number:, zodiac_name:, remainder:, western_date:)
153
- @number = number
154
- @zodiac_name = zodiac_name
155
- @remainder = remainder
156
- @western_date = western_date
157
- end
158
- end
159
-
160
- #
161
- # Core 共通処理
162
- #
163
- class Core
164
- #
165
- # ハッシュ化する
166
- #
167
- # @return [Hash<String, Object>] ハッシュ
168
- #
169
- def to_h
170
- Stringifier.to_h(obj: self, class_prefix: 'Zakuro::Result')
171
- end
172
-
173
- #
174
- # JSON化する
175
- #
176
- # @param [JSON::State] _args 引数( Struct#to_json )
177
- #
178
- # @return [String] JSON文字列
179
- #
180
- def to_json(*_args)
181
- JSON.generate(to_h)
182
- end
183
-
184
- #
185
- # JSON(整形)化する
186
- #
187
- # @return [String] JSON(整形)文字列
188
- #
189
- def to_pretty_json
190
- JSON.pretty_generate(to_h)
191
- end
192
- end
193
-
194
- #
195
- # SingleDay 1日分情報
196
- #
197
- class SingleDay < Core
198
- # @return [Year] 年
199
- attr_reader :year
200
- # @return [Month] 月
201
- attr_reader :month
202
- # @return [Day] 日
203
- attr_reader :day
204
-
205
- #
206
- # 初期化
207
- #
208
- # @param [Year] year 年
209
- # @param [Month] month 月
210
- # @param [Day] day 日
211
- #
212
- def initialize(year:, month:, day:)
213
- @year = year
214
- @month = month
215
- @day = day
216
- end
217
- end
218
- end
219
- end
@@ -1,83 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../../era/japan'
4
- require_relative '../../../era/western'
5
- require_relative '../../../cycle/zodiac'
6
-
7
- # :nodoc:
8
- module Zakuro
9
- # :nodoc:
10
- module Senmyou
11
- #
12
- # Era 宣明暦時代
13
- #
14
- module Era
15
- # FIXME: JOUGAN_START_DATE は不要。'貞観' かどうかだけで良い
16
-
17
- # @return [Western::Calendar] 貞観1年1月1日
18
- JOUGAN_START_DATE = Western::Calendar.new(year: 859, month: 2, day: 7)
19
- # @return [Western::Calendar] 貞観4年1月1日
20
- START_DATE = Western::Calendar.new(year: 862, month: 2, day: 3)
21
- # @return [Integer] (貞観)4年
22
- START_GENGOU_YEAR = 4
23
- # @return [Western::Calendar] 貞享2年12月29日
24
- END_DATE = Western::Calendar.new(year: 1686, month: 1, day: 23)
25
-
26
- #
27
- # 元号(1行目)を取得する
28
- #
29
- # @param [Western::Calendar] start_date 開始日
30
- #
31
- # @return [Japan::Gengou] 元号(1行目)
32
- #
33
- def self.first(start_date:)
34
- first_gengou = Japan::GengouResource.first_line(date: start_date)
35
- # 宣明暦の初めの元号であれば、起算年を4年とする
36
- if JOUGAN_START_DATE == first_gengou.start_date
37
- first_gengou = Japan::Gengou.new(
38
- name: first_gengou.name,
39
- start_date: START_DATE,
40
- end_date: first_gengou.end_date,
41
- year: START_GENGOU_YEAR
42
- )
43
- end
44
-
45
- first_gengou
46
- end
47
-
48
- #
49
- # 元号(2行目)を取得する
50
- #
51
- # @param [Western::Calendar] start_date 開始日
52
- #
53
- # @return [Japan::Gengou] 元号(2行目)
54
- #
55
- def self.second(start_date:)
56
- Japan::GengouResource.second_line(date: start_date)
57
- end
58
-
59
- #
60
- # 宣明暦に含まれるかを確認する
61
- #
62
- # @param [Western::Calendar] date 日付
63
- #
64
- # @return [True] 含まれる
65
- # @return [False] 含まれない
66
- #
67
- def self.include?(date:)
68
- (START_DATE <= date && date <= END_DATE)
69
- end
70
-
71
- #
72
- # 十干十二支を引き当てる
73
- #
74
- # @param [String] western_year 西暦年
75
- #
76
- # @return [String] 十干十二支
77
- #
78
- def self.zodiac_name(western_year: 0)
79
- Cycle::Zodiac.year_name(western_year: western_year)
80
- end
81
- end
82
- end
83
- end
@@ -1,98 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../../../era/japan'
4
- require_relative '../../../era/western'
5
-
6
- # :nodoc:
7
- module Zakuro
8
- # :nodoc:
9
- module Senmyou
10
- #
11
- # MultiGengou 複数元号
12
- #
13
- class MultiGengou
14
- # @return [Japan::Gengou] 元号(1行目)
15
- attr_reader :first_line
16
- # @return [Japan::Gengou] 元号(2行目)
17
- attr_reader :second_line
18
- # @return [Western::Calendar] 元旦
19
- attr_reader :new_year_date
20
-
21
- def initialize(first_line: Japan::Gengou.new, second_line: Japan::Gengou.new,
22
- new_year_date: Western::Calendar.new)
23
- @first_line = first_line
24
- @second_line = second_line
25
- @new_year_date = new_year_date
26
- end
27
-
28
- # :reek:TooManyStatements { max_statements: 7 }
29
-
30
- #
31
- # 改元する
32
- #
33
- # @param [Japan::Gengou] first_line 元号(1行目)
34
- # @param [Japan::Gengou] second_line 元号(2行目)
35
- #
36
- # @return [MultiGengou] 自身
37
- #
38
- def transfer(first_line: Japan::Gengou.new, second_line: Japan::Gengou.new)
39
- cloned_first_line = first_line.clone
40
- cloned_second_line = second_line.clone
41
-
42
- if integrated?(first_line: cloned_first_line, second_line: cloned_second_line)
43
- @first_line = @second_line.clone
44
- @second_line = cloned_second_line
45
- end
46
-
47
- @first_line = cloned_first_line if @first_line.name != first_line.name
48
- @second_line = cloned_second_line if @second_line.name != second_line.name
49
-
50
- self
51
- end
52
-
53
- #
54
- # 次年にする
55
- #
56
- # @param [Japan::Gengou] first_line 元号(1行目)
57
- # @param [Japan::Gengou] second_line 元号(2行目)
58
- #
59
- # @return [MultiGengou] 自身
60
- #
61
- def next_year
62
- @first_line.next_year
63
- @second_line.next_year
64
-
65
- self
66
- end
67
-
68
- #
69
- # ディープコピー
70
- #
71
- # @param [MultiGengou] obj 自身
72
- #
73
- def initialize_copy(obj)
74
- @first_line = obj.first_line.clone
75
- @second_line = obj.second_line.clone
76
- end
77
-
78
- private
79
-
80
- #
81
- # 複数元号を統一するかどうか
82
- #
83
- # @param [Japan::Gengou] first_line 元号(1行目)
84
- # @param [Japan::Gengou] second_line 元号(2行目)
85
- #
86
- # @return [True] 統一する
87
- # @return [False] 統一しない
88
- #
89
- def integrated?(first_line: Japan::Gengou.new, second_line: Japan::Gengou.new)
90
- return false if @second_line.name != first_line.name
91
-
92
- return false unless second_line.invalid?
93
-
94
- true
95
- end
96
- end
97
- end
98
- end
@@ -1,205 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative './era'
4
- require_relative './multi_gengou'
5
-
6
- require_relative '../../../era/japan'
7
-
8
- # :nodoc:
9
- module Zakuro
10
- # :nodoc:
11
- module Senmyou
12
- # FIXME: 宣明暦に依存しない共通処理にする
13
-
14
- #
15
- # MultiGengouRoller 改元処理
16
- #
17
- class MultiGengouRoller
18
- # @return [MultiGengou] 複数元号
19
- attr_reader :multi_gengou
20
- # @return [Western::Calendar] 元旦(元号が2つある場合は再過去の日付になる)
21
- attr_reader :oldest_date
22
- # @return [Western::Calendar] 元号内での最未来日(元号が2つある場合は再未来の日付になる)
23
- attr_reader :newest_date
24
- # @return [Western::Calendar] 現在日
25
- attr_reader :current_date
26
-
27
- def initialize(start_date: Era::START_DATE, end_date: Western::Calendar.new)
28
- end_date = start_date if end_date.invalid?
29
-
30
- @oldest_date = MultiGengouRoller.choise_oldest_gengou_date(
31
- first_line: Era.first(start_date: start_date),
32
- second_line: Era.second(start_date: start_date)
33
- )
34
- @current_date = @oldest_date.clone
35
- @newest_date = MultiGengouRoller.choise_newest_gengou_date(
36
- first_line: Era.first(start_date: end_date),
37
- second_line: Era.second(start_date: end_date)
38
- )
39
-
40
- @multi_gengou = MultiGengou.new(
41
- first_line: current_first_line,
42
- second_line: current_second_line,
43
- new_year_date: @oldest_date
44
- )
45
- end
46
-
47
- #
48
- # 現在日付を未来に進める
49
- #
50
- # @param [<Type>] days <description>
51
- #
52
- # @return [<Type>] <description>
53
- #
54
- def next(days: 0)
55
- @current_date += days
56
- end
57
-
58
- #
59
- # 現在日から元号(1行目)を取得する
60
- #
61
- # @return [Japan::Gengou] 元号(1行目)
62
- #
63
- def current_first_line
64
- MultiGengouRoller.first_line(date: @current_date)
65
- end
66
-
67
- #
68
- # 現在日から元号(2行目)を取得する
69
- #
70
- # @return [Japan::Gengou] 元号(2行目)
71
- #
72
- def current_second_line
73
- MultiGengouRoller.second_line(date: @current_date)
74
- end
75
-
76
- #
77
- # 改元する
78
- #
79
- # @return [MultiGengou] 複数元号
80
- #
81
- def transfer
82
- MultiGengouRoller.transfer(multi_gengou: @multi_gengou, date: @current_date)
83
- end
84
-
85
- #
86
- # 次年にする
87
- #
88
- # @return [MultiGengou] 複数元号
89
- #
90
- def next_year
91
- @multi_gengou.next_year
92
- end
93
-
94
- #
95
- # 元号(1行目)を取得する
96
- #
97
- # @return [Japan::Gengou] 元号(1行目)
98
- #
99
- def self.first_line(date: Western::Calender.new)
100
- Era.first(start_date: date)
101
- end
102
-
103
- #
104
- # 元号(2行目)を取得する
105
- #
106
- # @return [Japan::Gengou] 元号(2行目)
107
- #
108
- def self.second_line(date: Western::Calender.new)
109
- Era.second(start_date: date)
110
- end
111
-
112
- #
113
- # 改元する
114
- #
115
- # @param [MultiGengou] multi_gengou 複数元号
116
- # @param [Western::Calendar] date 対象日
117
- #
118
- # @return [MultiGengou] 改元済み複数元号
119
- #
120
- def self.transfer(multi_gengou:, date:)
121
- multi_gengou.transfer(
122
- first_line: first_line(date: date),
123
- second_line: second_line(date: date)
124
- )
125
-
126
- multi_gengou
127
- end
128
-
129
- #
130
- # 現在日からみて直近の未来に対する元号の切替前日を求める
131
- # @note 2つの元号が重複した場合はより過去の日となる
132
- #
133
- # @param [Japan::Gengou] first_line 元号(1行目)
134
- # @param [Japan::Gengou] second_line 元号(2行目)
135
- #
136
- # @return [Western::Calendar] 元号の切替前日
137
- #
138
- def choise_nearest_end_date
139
- condition = lambda do |first_date, second_date|
140
- first_date < second_date ? first_date : second_date
141
- end
142
-
143
- second_line = current_second_line
144
-
145
- MultiGengouRoller.choise_date(condition: condition, second_line: second_line,
146
- first_date: current_first_line.end_date.clone,
147
- second_date: second_line.end_date.clone)
148
- end
149
-
150
- #
151
- # 最過去の元旦を求める
152
- # @note 2つの元号が重複した場合はより過去の日となる
153
- #
154
- # @param [Japan::Gengou] first_line 元号(1行目)
155
- # @param [Japan::Gengou] second_line 元号(2行目)
156
- #
157
- # @return [Western::Calendar] 最過去の元旦
158
- #
159
- def self.choise_oldest_gengou_date(first_line:, second_line:)
160
- condition = lambda do |first_date, second_date|
161
- first_date < second_date ? first_date : second_date
162
- end
163
- choise_date(condition: condition, second_line: second_line,
164
- first_date: first_line.new_year_date.clone,
165
- second_date: second_line.new_year_date.clone)
166
- end
167
-
168
- #
169
- # 元号内での最未来日を求める
170
- # @note 2つの元号が重複した場合はより未来の日となる
171
- #
172
- # @param [Japan::Gengou] first_line 元号(1行目)
173
- # @param [Japan::Gengou] second_line 元号(2行目)
174
- #
175
- # @return [Western::Calendar] 最未来日
176
- #
177
- def self.choise_newest_gengou_date(first_line:, second_line:)
178
- condition = lambda do |first_date, second_date|
179
- first_date > second_date ? first_date : second_date
180
- end
181
- choise_date(condition: condition, second_line: second_line,
182
- first_date: first_line.end_date.clone, second_date: second_line.end_date.clone)
183
- end
184
-
185
- # :reek:LongParameterList {max_params: 4}
186
-
187
- #
188
- # 条件を元に日付を求める
189
- #
190
- # @param [Proc] condition 比較条件
191
- # @param [Japan::Gengou] second_line 元号(2行目)
192
- # @param [Western::Calendar] first_date 比較対象(1行目)
193
- # @param [Western::Calendar] second_date 比較対象(2行目)
194
- #
195
- # @return [Western::Calendar] 比較結果
196
- #
197
- def self.choise_date(condition:, second_line:, first_date:, second_date:)
198
- # first_lineは常に存在する
199
- return first_date if second_line.invalid?
200
-
201
- condition.call(first_date, second_date)
202
- end
203
- end
204
- end
205
- end