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