lib/zakuro/calculation/range/operated_solar_terms.rb in zakuro-0.5.0 vs lib/zakuro/calculation/range/operated_solar_terms.rb in zakuro-0.6.0
- old
+ new
@@ -55,10 +55,12 @@
# @return [True] 対象あり
# @return [False] 対象なし
# @return [SolarTerm] 二十四節気
#
def get(western_date: Western::Calendar.new)
+ context = current_context(western_date: western_date)
+
solar_term_class = context.resolver.solar_term
solar_term = @directions.fetch(western_date.format, solar_term_class.new)
# 合致しない場合
return false, solar_term_class.new if solar_term.empty?
@@ -66,27 +68,10 @@
# 合致した上で、二十四節気が移動元(削除対象)の場合
# 合致した上で、二十四節気が移動先(追加対象)の場合
[true, solar_term]
end
- #
- # 二十四節気の移動元/移動先を生成する
- #
- # @return [Hash<String, SolarTerm>] 二十四節気の移動元/移動先(西暦日 -> 対応する二十四節気)
- #
- def create_directions
- directions = {}
-
- years.each do |year|
- OperatedSolarTerms.create_directions_with_months(
- context: context, directions: directions, months: year.months
- )
- end
-
- directions
- end
-
# :reek:TooManyStatements { max_statements: 6 }
#
# 年内の全ての月の移動方向を作成する
#
@@ -192,9 +177,43 @@
solar_term_class = context.resolver.solar_term
directions[destination.from.format] = solar_term_class.new(
index: destination.index
)
+ end
+
+ private
+
+ #
+ # 日付に対応する暦コンテキストを取得する
+ #
+ # @param [Western::Calendar] western_date 西暦日
+ #
+ # @return [Context] 暦コンテキスト
+ #
+ def current_context(western_date: Western::Calendar.new)
+ @years.each do |year|
+ return year.context if western_date >= year.new_year_date
+ end
+
+ Context.new
+ end
+
+ #
+ # 二十四節気の移動元/移動先を生成する
+ #
+ # @return [Hash<String, SolarTerm>] 二十四節気の移動元/移動先(西暦日 -> 対応する二十四節気)
+ #
+ def create_directions
+ directions = {}
+
+ years.each do |year|
+ OperatedSolarTerms.create_directions_with_months(
+ context: year.context, directions: directions, months: year.months
+ )
+ end
+
+ directions
end
end
end
end
end