lib/zakuro/calculation/specifier/single_day.rb in zakuro-0.5.0 vs lib/zakuro/calculation/specifier/single_day.rb in zakuro-0.6.0
- old
+ new
@@ -1,11 +1,10 @@
# frozen_string_literal: true
-require_relative '../base/multi_gengou_roller'
require_relative '../base/year'
-require_relative '../../era/western'
+require_relative '../../era/western/calendar'
require_relative '../../output/response'
require_relative '../../output/logger'
# :nodoc:
module Zakuro
@@ -27,15 +26,11 @@
# @param [Western::Calendar] date 西暦日
#
# @return [Result::Data::SingleDay] 和暦日
#
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)
+ year, month = specify(years: years, date: date)
first_date = month.western_date
Output::Response::SingleDay.save_single_day(
param: Output::Response::SingleDay::Param.new(
year: year, month: month,
@@ -48,40 +43,23 @@
# 年を特定する
#
# @param [Array<Year>] years 範囲
# @param [Western::Calendar] date 西暦日
#
- # @return [Year] 対象年
+ # @return [Base::Year] 対象年
+ # @return [Base::Month] 対象月
#
- def self.specify_year(years:, date:)
- years.reverse_each do |year|
- return year if date >= year.new_year_date
+ def self.specify(years:, date:)
+ years.each do |year|
+ month = specify_month(year: year, date: date)
+ return year, month unless month.invalid?
end
raise ArgumentError, "invalid year range. date: #{date.format}"
end
- private_class_method :specify_year
+ private_class_method :specify
- #
- # 改元する
- #
- # @param [Year] year 年
- # @param [Western::Calendar] date 西暦日
- #
- # @return [Year] 改元後の年
- #
- 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
- private_class_method :transfer
-
# :reek:TooManyStatements { max_statements: 7 }
#
# 月を特定する
#
@@ -91,17 +69,17 @@
# @return [Month] 対象月
#
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
+ western_date = month.western_date
+ next if western_date.invalid?
- current_month = month
+ return month if month.include?(date: date)
end
- current_month
+ Monthly::Month.new
end
private_class_method :specify_month
end
end
end