lib/zakuro/calculation/stella/solar/abstract_average.rb in zakuro-0.9.2 vs lib/zakuro/calculation/stella/solar/abstract_average.rb in zakuro-0.9.3

- old
+ new

@@ -1,7 +1,11 @@ # frozen_string_literal: true +require_relative '../../monthly/meta/meta_collector' + +require_relative '../../../tools/remainder_comparer' + # :nodoc: module Zakuro # :nodoc: module Calculation # :nodoc: @@ -40,40 +44,10 @@ end annual_range end - # :reek:TooManyStatements { max_statements: 7 } - - class << self - # - # 月内(当月朔日から当月末日(来月朔日の前日)の間)に二十四節気があるか - # @note 大余60で一巡するため 以下2パターンがある - # * current_month <= next_month : (二十四節気) >= current_month && (二十四節気) < next_month - # * current_month > next_month : (二十四節気) >= current_month || (二十四節気) < next_month - # - # @param [Cycle::AbstractRemainder] solar_term 二十四節気 - # @param [Cycle::AbstractRemainder] current_month 月初 - # @param [Cycle::AbstractRemainder] next_month 月末 - # - # @return [True] 対象の二十四節気がある - # @return [False] 対象の二十四節気がない - # - def in_solar_term?(solar_term:, current_month:, next_month:) - # 大余で比較する - target_time = solar_term.day - current_month_time = current_month.day - next_month_time = next_month.day - current_month_over = (target_time >= current_month_time) - next_month_under = (target_time < next_month_time) - - return current_month_over && next_month_under if current_month_time <= next_month_time - - current_month_over || next_month_under - end - end - private # :reek:TooManyStatements { max_statements: 8 } # @@ -85,13 +59,13 @@ def set_solar_term(current_month:, next_month:) # 安全策として無限ループは回避する # * 最大試行回数:4回(設定なし => 設定あり => 設定あり => 設定なし) # * 閏月は1回しか設定しない # * 最大2回設定する(中気・節気) - (0..3).each do |_index| - in_range = self.class.in_solar_term?( - solar_term: solar_term.remainder, current_month: current_month.remainder, - next_month: next_month.remainder + 4.times.each do |_index| + in_range = Tools::RemainderComparer.in_range?( + target: solar_term.remainder, start: current_month.remainder, + last: next_month.remainder ) # 範囲外 unless in_range # 1つ以上設定されていれば切り上げる(一つ飛ばしで二十四節気を設定することはない)