lib/zakuro/version/senmyou/range/annual_range.rb in zakuro-0.1.5 vs lib/zakuro/version/senmyou/range/annual_range.rb in zakuro-0.2.0

- old
+ new

@@ -1,19 +1,10 @@ # frozen_string_literal: true -require_relative '../../../output/logger' -require_relative '../cycle/remainder' -require_relative '../cycle/solar_term' -require_relative '../../../calculation/monthly/initialized_month' +require_relative '../../../calculation/range/medieval_annual_range' require_relative '../monthly/lunar_phase' -require_relative '../stella/lunar/location' -require_relative '../stella/lunar/value' require_relative '../stella/solar/average' -require_relative '../stella/solar/location' -require_relative '../stella/solar/value' -require_relative '../stella/origin/lunar_age' -require_relative '../stella/origin/average_november' # :nodoc: module Zakuro # :nodoc: module Senmyou @@ -21,15 +12,10 @@ module Range # # AnnualRange 年間範囲 # module AnnualRange - # @return [Output::Logger] ロガー - LOGGER = Output::Logger.new(location: 'annual_range') - - # :reek:TooManyStatements { max_statements: 6 } - # # 一覧取得する # # * 対象年に対して、前年11月-当年11月までを出力する # * 対象年(西暦)と計算年(元号x年)の紐付けは行わない @@ -38,74 +24,16 @@ # @param [Integer] western_year 西暦年 # # @return [Array<Month>] 1年データ # def self.get(context:, western_year:) - annual_range = initialized_annual_range(context: context, western_year: western_year) - - apply_big_and_small_of_the_month(annual_range: annual_range) - + lunar_phase = Monthly::LunarPhase.new(western_year: western_year) solar_average = Solar::Average.new(western_year: western_year) - solar_average.set(annual_range: annual_range) - # 月間隔を取得するためだけの末尾要素を削除 - annual_range.pop - - initialize_month_label(annual_range: annual_range) + Calculation::Range::MedievalAnnualRange.get( + context: context, lunar_phase: lunar_phase, solar_average: solar_average + ) end - - # - # 1年データを取得する - # - # @param [Context] context 暦コンテキスト - # @param [Integer] western_year 西暦年 - # - # @return [Array<Month>] 1年データ - # - def self.initialized_annual_range(context:, western_year:) - result = [] - lunar_phase = Monthly::LunarPhase.new(western_year: western_year) - - # 14ヶ月分を生成する(閏年で最大13ヶ月 + 末月の大小/二十四節気を求めるために必要な月) - (0..13).each do |_index| - adjusted = lunar_phase.next_month - - result.push( - Calculation::Monthly::InitializedMonth.new( - context: context, - month_label: Calculation::Monthly::MonthLabel.new, - first_day: Calculation::Monthly::FirstDay.new(remainder: adjusted), - phase_index: 0 - ) - ) - end - - result - end - private_class_method :initialized_annual_range - - # - # 1年データの各月に月の大小を設定する - # - # @param [Array<Month>] annual_range 1年データ - # - def self.apply_big_and_small_of_the_month(annual_range:) - # NOTE: 最後の月は処理できない(=計算外の余分な月が最後に必要である) - annual_range.each_cons(2) do |(current_month, next_month)| - current_month.eval_many_days(next_month_day: next_month.remainder.day) - end - end - private_class_method :apply_big_and_small_of_the_month - - # - # 月表示情報を更新する - # - # @param [Array<Month>] annual_range 1年データ - # - def self.initialize_month_label(annual_range:) - annual_range.each(&:rename_month_label_by_solar_term) - end - private_class_method :initialize_month_label end end end end