module Zakuro::Calculation::Specifier::SingleDay

SingleDay 一日検索

Constants

LOGGER

@return [Output::Logger] ロガー

Public Class Methods

get(years: [], date: Western::Calendar.new) click to toggle source

取得する

@param [Array<Year>] yeas 範囲 @param [Western::Calendar] date 西暦日

@return [Result::Data::SingleDay] 和暦日

# File lib/zakuro/calculation/specifier/single_day.rb, line 31
def self.get(years: [], date: Western::Calendar.new)
  year = specify_year(years: years, date: date)

  year = transfer(year: year, date: date)

  month = specify_month(year: year, date: date)
  first_date = month.western_date

  Output::Response::SingleDay.save_single_day(
    param: Output::Response::SingleDay::Param.new(
      year: year, month: month,
      date: date, days: date - first_date
    )
  )
end

Private Class Methods

specify_month(year:, date:) click to toggle source

月を特定する

@param [Year] year 年 @param [Western::Calendar] date 西暦日

@return [Month] 対象月

# File lib/zakuro/calculation/specifier/single_day.rb, line 93
def self.specify_month(year:, date:)
  months = year.months

  current_month = months[0]
  months.each do |month|
    return current_month if month.western_date > date

    current_month = month
  end

  current_month
end
specify_year(years:, date:) click to toggle source

年を特定する

@param [Array<Year>] years 範囲 @param [Western::Calendar] date 西暦日

@return [Year] 対象年

# File lib/zakuro/calculation/specifier/single_day.rb, line 55
def self.specify_year(years:, date:)
  years.reverse_each do |year|
    return year if date >= year.new_year_date
  end

  raise ArgumentError, "invalid year range. date: #{date.format}"
end
transfer(year:, date:) click to toggle source

改元する

@param [Year] year 年 @param [Western::Calendar] date 西暦日

@return [Year] 改元後の年

# File lib/zakuro/calculation/specifier/single_day.rb, line 72
def self.transfer(year:, date:)
  multi_gengou = Calculation::Base::MultiGengouRoller.transfer(
    multi_gengou: year.multi_gengou, date: date
  )
  Calculation::Base::Year.new(
    multi_gengou: multi_gengou, new_year_date: year.new_year_date,
    months: year.months, total_days: year.total_days
  )
end