module Zakuro::Calculation::Range::Transfer::YearBoundary
YearBoundary
年境界
Public Class Methods
get(context:, annual_ranges:)
click to toggle source
年間範囲内の年データの開始月を変更する
@param [Context] context 暦コンテキスト @param [Array<Year>] annual_ranges 年データ(冬至基準)
@return [Array<Year>] 年データ(元旦基準)
# File lib/zakuro/calculation/range/transfer/year_boundary.rb, line 28 def self.get(context:, annual_ranges:) categorize(context: context, annual_ranges: annual_ranges) rearranged_years(annual_ranges: annual_ranges) end
Private Class Methods
categorize(context:, annual_ranges:)
click to toggle source
年間範囲を昨年/今年で分類する
@param [Context] context 暦コンテキスト @param [Array<Year>] annual_range 1年データ
# File lib/zakuro/calculation/range/transfer/year_boundary.rb, line 58 def self.categorize(context:, annual_ranges:) annual_ranges.each do |annual_range| categorize_year(context: context, annual_range: annual_range) end end
categorize_year(context:, annual_range:)
click to toggle source
各月を昨年/今年で分類する
@param [Context] context 暦コンテキスト @param [Array<Month>] annual_range 1年データ
# File lib/zakuro/calculation/range/transfer/year_boundary.rb, line 71 def self.categorize_year(context:, annual_range:) is_last_year = true annual_range.each_with_index do |month, index| is_last_year = false if month.number == 1 annual_range[index] = Monthly::InitializedMonth.new( context: context, month_label: month.month_label, first_day: month.first_day, solar_terms: month.solar_terms, phase_index: month.phase_index, is_last_year: is_last_year ) end end
push_current_year(annual_range:, year: Base::Year.new)
click to toggle source
当年データを生成する
@param [Array<Year>] annual_ranges 年データ(冬至基準) @param [Year] year 対象年
@return [Year] 当年月ありの対象年
# File lib/zakuro/calculation/range/transfer/year_boundary.rb, line 113 def self.push_current_year(annual_range:, year: Base::Year.new) annual_range.each do |month| next if month.is_last_year year.push(month: month) end year end
push_last_year(annual_range:, year: Base::Year.new)
click to toggle source
昨年データを生成する
@param [Array<Year>] annual_ranges 年データ(冬至基準) @param [Year] year 対象年
@return [Year] 昨年月ありの対象年
# File lib/zakuro/calculation/range/transfer/year_boundary.rb, line 132 def self.push_last_year(annual_range:, year: Base::Year.new) annual_range.each do |month| next unless month.is_last_year year.push(month: month) end year end
rearranged_year(annual_ranges:, index:)
click to toggle source
年データの開始月を変更する
@param [Array<Year>] annual_ranges 年データ(冬至基準) @param [Integer] index 対象年の要素番号
@return [Year] 年データ(元旦基準)
# File lib/zakuro/calculation/range/transfer/year_boundary.rb, line 94 def self.rearranged_year(annual_ranges:, index:) current_annual_range = annual_ranges[index] next_annual_range = annual_ranges[index + 1] year = push_current_year(annual_range: current_annual_range) push_last_year(annual_range: next_annual_range, year: year) year end
rearranged_years(annual_ranges:)
click to toggle source
年間範囲内の年データの開始月を変更する
@param [Array<Year>] annual_ranges 年データ(冬至基準)
@return [Array<Year>] 年データ(元旦基準)
# File lib/zakuro/calculation/range/transfer/year_boundary.rb, line 40 def self.rearranged_years(annual_ranges:) years = [] (0..(annual_ranges.size - 2)).each do |index| year = rearranged_year(annual_ranges: annual_ranges, index: index) years.push(year) end years end