class Zakuro::Calculation::Cycle::AbstractSolarTerm

AbstractSolarTerm 二十四節気

Constants

ORDER

@return [Hash<Integer, Symbol>] 順序

Attributes

average[R]

@return [AbstractRemainder] 気策(24分の1年)

index[R]

@return [Integer] 連番

remainder[R]

@return [AbstractRemainder] 時刻情報(大余小余)

Public Class Methods

index?(index) click to toggle source

有効な二十四節気番号か

@param [Integer] index 連番

@return [True] 有効 @return [False] 無効

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 91
def self.index?(index)
  result = ORDER.fetch(index, -1)

  result != -1
end
new(index: -1, remainder: AbstractRemainder.new, average: AbstractRemainder.new) click to toggle source

初期化

@param [Integer] index 連番 @param [AbstractRemainder] remainder 時刻情報(大余小余)

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 56
def initialize(index: -1, remainder: AbstractRemainder.new,
               average: AbstractRemainder.new)
  @index = index
  @remainder = remainder
  @average = average
end

Public Instance Methods

empty?() click to toggle source

データなしかを検証する

@return [True] データなし @return [False] データあり

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 79
def empty?
  (@index == -1 && @remainder.invalid?)
end
initialize_copy(obj) click to toggle source

ディープコピー

@param [SolarTerm] obj 自身

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 166
def initialize_copy(obj)
  @index = obj.index.clone
  @remainder = obj.remainder.clone
end
invalid?() click to toggle source

不正かどうか検証する

@return [True] 正しくない @return [False] 正しい

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 69
def invalid?
  (@index == -1 || @remainder.invalid?)
end
next_by_index(index) click to toggle source

指定した連番の二十四節気まで進める

@param [Integer] index 連番

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 119
def next_by_index(index)
  return ArgumentError.new, 'invalid index' unless AbstractSolarTerm.index?(index)

  loop do
    return if @index == index

    next!
  end
end
next_term() click to toggle source

次の二十四節気に進める

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 107
def next_term
  @index += 1
  @index = 0 if @index >= ORDER.size

  @remainder.add(@average)
end
next_term!() click to toggle source

次の二十四節気に進める

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 100
def next_term!
  @remainder = next_term
end
prev_by_index(index) click to toggle source

指定した連番の二十四節気まで戻す

@param [Integer] index 連番

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 134
def prev_by_index(index)
  return ArgumentError.new, 'invalid index' unless AbstractSolarTerm.index?(index)

  loop do
    return if @index == index

    prev_term!
  end
end
prev_term() click to toggle source

前の二十四節気に戻る

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 154
def prev_term
  @index -= 1
  @index = 23 if @index.negative?

  @remainder.sub(@average)
end
prev_term!() click to toggle source

前の二十四節気に戻る

# File lib/zakuro/calculation/cycle/abstract_solar_term.rb, line 147
def prev_term!
  @remainder = prev_term
end