lib/zakuro/calculation/stella/solar/abstract_average.rb in zakuro-0.7.2 vs lib/zakuro/calculation/stella/solar/abstract_average.rb in zakuro-0.8.0
- old
+ new
@@ -8,10 +8,13 @@
module Solar
#
# AbstractAverage 平気(太陽軌道平均)
#
class AbstractAverage
+ # @return [Cycle::AbstractSolarTerm] 入定気
+ attr_reader :solar_term
+
#
# 初期化
#
# @param [Cycle::AbstractSolarTerm] solar_term 入定気
#
@@ -39,34 +42,36 @@
annual_range
end
# :reek:TooManyStatements { max_statements: 7 }
- #
- # 月内(当月朔日から当月末日(来月朔日の前日)の間)に二十四節気があるか
- # @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 self.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)
+ 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
+ return current_month_over && next_month_under if current_month_time <= next_month_time
- current_month_over || next_month_under
+ current_month_over || next_month_under
+ end
end
private
# :reek:TooManyStatements { max_statements: 8 }
@@ -81,12 +86,12 @@
# 安全策として無限ループは回避する
# * 最大試行回数:4回(設定なし => 設定あり => 設定あり => 設定なし)
# * 閏月は1回しか設定しない
# * 最大2回設定する(中気・節気)
(0..3).each do |_index|
- in_range = AbstractAverage.in_solar_term?(
- solar_term: @solar_term.remainder, current_month: current_month.remainder,
+ in_range = self.class.in_solar_term?(
+ solar_term: solar_term.remainder, current_month: current_month.remainder,
next_month: next_month.remainder
)
# 範囲外
unless in_range
@@ -95,11 +100,11 @@
next_solar_term
next
end
- current_month.add_term(term: @solar_term.clone)
+ current_month.add_term(term: solar_term.clone)
next_solar_term
# 定気は最大2つまで
break if current_month.solar_term_size == 2
end
@@ -107,10 +112,10 @@
#
# 次の二十四節気に移る
#
def next_solar_term
- @solar_term.next_term!
+ solar_term.next_term!
end
end
end
end
end