zakuro 0.1.2 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/lib/zakuro/calculation/base/multi_gengou.rb +101 -0
 - data/lib/zakuro/calculation/base/multi_gengou_roller.rb +218 -0
 - data/lib/zakuro/calculation/base/year.rb +107 -0
 - data/lib/zakuro/calculation/cycle/abstract_remainder.rb +459 -0
 - data/lib/zakuro/calculation/cycle/abstract_solar_term.rb +151 -0
 - data/lib/zakuro/calculation/cycle/zodiac.rb +106 -0
 - data/lib/zakuro/calculation/monthly/first_day.rb +45 -0
 - data/lib/zakuro/calculation/monthly/initialized_month.rb +120 -0
 - data/lib/zakuro/calculation/monthly/month.rb +184 -0
 - data/lib/zakuro/calculation/monthly/month_label.rb +88 -0
 - data/lib/zakuro/calculation/monthly/operated_month.rb +201 -0
 - data/lib/zakuro/calculation/range/full_range.rb +210 -0
 - data/lib/zakuro/calculation/range/operated_range.rb +134 -0
 - data/lib/zakuro/calculation/range/operated_solar_terms.rb +201 -0
 - data/lib/zakuro/calculation/range/transfer/western_date_allocation.rb +76 -0
 - data/lib/zakuro/calculation/range/transfer/year_boundary.rb +142 -0
 - data/lib/zakuro/calculation/specifier/single_day.rb +109 -0
 - data/lib/zakuro/calculation/summary/single.rb +129 -0
 - data/lib/zakuro/merchant.rb +2 -2
 - data/lib/zakuro/output/error.rb +7 -6
 - data/lib/zakuro/output/logger.rb +50 -49
 - data/lib/zakuro/output/response.rb +145 -144
 - data/lib/zakuro/tools/typeof.rb +2 -2
 - data/lib/zakuro/version.rb +1 -1
 - data/lib/zakuro/version/abstract_version.rb +1 -1
 - data/lib/zakuro/version/context.rb +23 -0
 - data/lib/zakuro/version/senmyou/cycle/remainder.rb +63 -0
 - data/lib/zakuro/version/senmyou/cycle/solar_term.rb +31 -0
 - data/lib/zakuro/version/senmyou/monthly/lunar_phase.rb +186 -182
 - data/lib/zakuro/version/senmyou/range/annual_range.rb +134 -129
 - data/lib/zakuro/version/senmyou/senmyou.rb +10 -4
 - data/lib/zakuro/version/senmyou/stella/lunar_orbit.rb +5 -5
 - data/lib/zakuro/version/senmyou/stella/solar_average.rb +4 -4
 - data/lib/zakuro/version/senmyou/stella/solar_location.rb +27 -27
 - data/lib/zakuro/version/senmyou/stella/solar_orbit.rb +2 -2
 - data/lib/zakuro/version/senmyou/stella/winter_solstice.rb +4 -4
 - data/lib/zakuro/version/version_class_resolver.rb +62 -0
 - data/lib/zakuro/version_factory.rb +2 -2
 - metadata +24 -22
 - data/lib/zakuro/cycle/abstract_remainder.rb +0 -456
 - data/lib/zakuro/cycle/zodiac.rb +0 -103
 - data/lib/zakuro/version/senmyou/base/era.rb +0 -83
 - data/lib/zakuro/version/senmyou/base/multi_gengou.rb +0 -98
 - data/lib/zakuro/version/senmyou/base/multi_gengou_roller.rb +0 -217
 - data/lib/zakuro/version/senmyou/base/remainder.rb +0 -60
 - data/lib/zakuro/version/senmyou/base/solar_term.rb +0 -148
 - data/lib/zakuro/version/senmyou/base/year.rb +0 -104
 - data/lib/zakuro/version/senmyou/monthly/first_day.rb +0 -44
 - data/lib/zakuro/version/senmyou/monthly/initialized_month.rb +0 -119
 - data/lib/zakuro/version/senmyou/monthly/month.rb +0 -181
 - data/lib/zakuro/version/senmyou/monthly/month_label.rb +0 -87
 - data/lib/zakuro/version/senmyou/monthly/operated_month.rb +0 -196
 - data/lib/zakuro/version/senmyou/range/full_range.rb +0 -194
 - data/lib/zakuro/version/senmyou/range/operated_range.rb +0 -126
 - data/lib/zakuro/version/senmyou/range/operated_solar_terms.rb +0 -181
 - data/lib/zakuro/version/senmyou/range/western_date_allocation.rb +0 -68
 - data/lib/zakuro/version/senmyou/range/year_boundary.rb +0 -138
 - data/lib/zakuro/version/senmyou/specifier/single_day_specifier.rb +0 -102
 - data/lib/zakuro/version/senmyou/summary/single.rb +0 -125
 
| 
         @@ -1,181 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require_relative './first_day'
         
     | 
| 
       4 
     | 
    
         
            -
            require_relative './month_label'
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            # TODO: moduleでMonthly とする(全暦むけに共通化したあと)
         
     | 
| 
       7 
     | 
    
         
            -
             
     | 
| 
       8 
     | 
    
         
            -
            # :nodoc:
         
     | 
| 
       9 
     | 
    
         
            -
            module Zakuro
         
     | 
| 
       10 
     | 
    
         
            -
              # :nodoc:
         
     | 
| 
       11 
     | 
    
         
            -
              module Senmyou
         
     | 
| 
       12 
     | 
    
         
            -
                #
         
     | 
| 
       13 
     | 
    
         
            -
                # Month 月情報
         
     | 
| 
       14 
     | 
    
         
            -
                #
         
     | 
| 
       15 
     | 
    
         
            -
                class Month
         
     | 
| 
       16 
     | 
    
         
            -
                  # @return [MonthLabel] 月表示名
         
     | 
| 
       17 
     | 
    
         
            -
                  attr_reader :month_label
         
     | 
| 
       18 
     | 
    
         
            -
                  # @return [FirstDay] 月初日(朔日)
         
     | 
| 
       19 
     | 
    
         
            -
                  attr_reader :first_day
         
     | 
| 
       20 
     | 
    
         
            -
                  # @return [Array<SolarTerm>] 二十四節気
         
     | 
| 
       21 
     | 
    
         
            -
                  attr_reader :solar_terms
         
     | 
| 
       22 
     | 
    
         
            -
             
     | 
| 
       23 
     | 
    
         
            -
                  #
         
     | 
| 
       24 
     | 
    
         
            -
                  # 初期化
         
     | 
| 
       25 
     | 
    
         
            -
                  #
         
     | 
| 
       26 
     | 
    
         
            -
                  # @param [MonthLabel] month_label 月表示名
         
     | 
| 
       27 
     | 
    
         
            -
                  # @param [FirstDay] first_day 月初日(朔日)
         
     | 
| 
       28 
     | 
    
         
            -
                  # @param [Array<SolarTerm>] solar_terms 二十四節気
         
     | 
| 
       29 
     | 
    
         
            -
                  #
         
     | 
| 
       30 
     | 
    
         
            -
                  def initialize(month_label: MonthLabel.new, first_day: FirstDay.new, solar_terms: [])
         
     | 
| 
       31 
     | 
    
         
            -
                    @month_label = month_label
         
     | 
| 
       32 
     | 
    
         
            -
                    @first_day = first_day
         
     | 
| 
       33 
     | 
    
         
            -
                    @solar_terms = solar_terms
         
     | 
| 
       34 
     | 
    
         
            -
                  end
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
                  #
         
     | 
| 
       37 
     | 
    
         
            -
                  # 中気なしは閏月とする
         
     | 
| 
       38 
     | 
    
         
            -
                  #
         
     | 
| 
       39 
     | 
    
         
            -
                  def eval_leaped
         
     | 
| 
       40 
     | 
    
         
            -
                    leaped = even_term.invalid?
         
     | 
| 
       41 
     | 
    
         
            -
             
     | 
| 
       42 
     | 
    
         
            -
                    @month_label = MonthLabel.new(number: number, is_many_days: many_days?, leaped: leaped)
         
     | 
| 
       43 
     | 
    
         
            -
                  end
         
     | 
| 
       44 
     | 
    
         
            -
             
     | 
| 
       45 
     | 
    
         
            -
                  #
         
     | 
| 
       46 
     | 
    
         
            -
                  # 月初日の西暦日を返す
         
     | 
| 
       47 
     | 
    
         
            -
                  #
         
     | 
| 
       48 
     | 
    
         
            -
                  # @return [Western::Calendar] 西暦日
         
     | 
| 
       49 
     | 
    
         
            -
                  #
         
     | 
| 
       50 
     | 
    
         
            -
                  def western_date
         
     | 
| 
       51 
     | 
    
         
            -
                    @first_day.western_date
         
     | 
| 
       52 
     | 
    
         
            -
                  end
         
     | 
| 
       53 
     | 
    
         
            -
             
     | 
| 
       54 
     | 
    
         
            -
                  #
         
     | 
| 
       55 
     | 
    
         
            -
                  # 月初日の大余小余を返す
         
     | 
| 
       56 
     | 
    
         
            -
                  #
         
     | 
| 
       57 
     | 
    
         
            -
                  # @return [Remainder] 大余小余
         
     | 
| 
       58 
     | 
    
         
            -
                  #
         
     | 
| 
       59 
     | 
    
         
            -
                  def remainder
         
     | 
| 
       60 
     | 
    
         
            -
                    @first_day.remainder
         
     | 
| 
       61 
     | 
    
         
            -
                  end
         
     | 
| 
       62 
     | 
    
         
            -
             
     | 
| 
       63 
     | 
    
         
            -
                  #
         
     | 
| 
       64 
     | 
    
         
            -
                  # 月の大小を返す
         
     | 
| 
       65 
     | 
    
         
            -
                  #
         
     | 
| 
       66 
     | 
    
         
            -
                  # @return [True] 大の月(30日)
         
     | 
| 
       67 
     | 
    
         
            -
                  # @return [False] 小の月(29日)
         
     | 
| 
       68 
     | 
    
         
            -
                  #
         
     | 
| 
       69 
     | 
    
         
            -
                  def many_days?
         
     | 
| 
       70 
     | 
    
         
            -
                    @month_label.is_many_days
         
     | 
| 
       71 
     | 
    
         
            -
                  end
         
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
                  #
         
     | 
| 
       74 
     | 
    
         
            -
                  # 月の日数を返す
         
     | 
| 
       75 
     | 
    
         
            -
                  #
         
     | 
| 
       76 
     | 
    
         
            -
                  # @return [Integer] 日数
         
     | 
| 
       77 
     | 
    
         
            -
                  #
         
     | 
| 
       78 
     | 
    
         
            -
                  def days
         
     | 
| 
       79 
     | 
    
         
            -
                    @month_label.days
         
     | 
| 
       80 
     | 
    
         
            -
                  end
         
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
       82 
     | 
    
         
            -
                  #
         
     | 
| 
       83 
     | 
    
         
            -
                  # 月の名前(大小)を返す
         
     | 
| 
       84 
     | 
    
         
            -
                  #
         
     | 
| 
       85 
     | 
    
         
            -
                  # @return [String] 月の名前(大小)
         
     | 
| 
       86 
     | 
    
         
            -
                  #
         
     | 
| 
       87 
     | 
    
         
            -
                  def days_name
         
     | 
| 
       88 
     | 
    
         
            -
                    @month_label.days_name
         
     | 
| 
       89 
     | 
    
         
            -
                  end
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                  #
         
     | 
| 
       92 
     | 
    
         
            -
                  # 月を返す
         
     | 
| 
       93 
     | 
    
         
            -
                  #
         
     | 
| 
       94 
     | 
    
         
            -
                  # @return [Integer] 月(xx月のxx)
         
     | 
| 
       95 
     | 
    
         
            -
                  #
         
     | 
| 
       96 
     | 
    
         
            -
                  def number
         
     | 
| 
       97 
     | 
    
         
            -
                    @month_label.number
         
     | 
| 
       98 
     | 
    
         
            -
                  end
         
     | 
| 
       99 
     | 
    
         
            -
             
     | 
| 
       100 
     | 
    
         
            -
                  #
         
     | 
| 
       101 
     | 
    
         
            -
                  # 閏を返す
         
     | 
| 
       102 
     | 
    
         
            -
                  #
         
     | 
| 
       103 
     | 
    
         
            -
                  # @return [True] 閏月
         
     | 
| 
       104 
     | 
    
         
            -
                  # @return [False] 平月
         
     | 
| 
       105 
     | 
    
         
            -
                  #
         
     | 
| 
       106 
     | 
    
         
            -
                  def leaped?
         
     | 
| 
       107 
     | 
    
         
            -
                    @month_label.leaped
         
     | 
| 
       108 
     | 
    
         
            -
                  end
         
     | 
| 
       109 
     | 
    
         
            -
             
     | 
| 
       110 
     | 
    
         
            -
                  #
         
     | 
| 
       111 
     | 
    
         
            -
                  # 次月の大余から月の日数を定める
         
     | 
| 
       112 
     | 
    
         
            -
                  #
         
     | 
| 
       113 
     | 
    
         
            -
                  # @param [Integer] next_month_day 次月の大余
         
     | 
| 
       114 
     | 
    
         
            -
                  #
         
     | 
| 
       115 
     | 
    
         
            -
                  def eval_many_days(next_month_day:)
         
     | 
| 
       116 
     | 
    
         
            -
                    is_many_days = remainder.same_remainder_divided_by_ten?(other: next_month_day)
         
     | 
| 
       117 
     | 
    
         
            -
             
     | 
| 
       118 
     | 
    
         
            -
                    @month_label = MonthLabel.new(
         
     | 
| 
       119 
     | 
    
         
            -
                      number: number, is_many_days: is_many_days, leaped: leaped?
         
     | 
| 
       120 
     | 
    
         
            -
                    )
         
     | 
| 
       121 
     | 
    
         
            -
                  end
         
     | 
| 
       122 
     | 
    
         
            -
             
     | 
| 
       123 
     | 
    
         
            -
                  #
         
     | 
| 
       124 
     | 
    
         
            -
                  # 二十四節気が未設定かどうかを検証する
         
     | 
| 
       125 
     | 
    
         
            -
                  #
         
     | 
| 
       126 
     | 
    
         
            -
                  # @return [True] 設定なし
         
     | 
| 
       127 
     | 
    
         
            -
                  # @return [False] 設定あり
         
     | 
| 
       128 
     | 
    
         
            -
                  #
         
     | 
| 
       129 
     | 
    
         
            -
                  def empty_solar_term?
         
     | 
| 
       130 
     | 
    
         
            -
                    @solar_terms.empty?
         
     | 
| 
       131 
     | 
    
         
            -
                  end
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                  #
         
     | 
| 
       134 
     | 
    
         
            -
                  # 中気を返す
         
     | 
| 
       135 
     | 
    
         
            -
                  #
         
     | 
| 
       136 
     | 
    
         
            -
                  # @return [SolarTerm] 中気
         
     | 
| 
       137 
     | 
    
         
            -
                  #
         
     | 
| 
       138 
     | 
    
         
            -
                  def even_term
         
     | 
| 
       139 
     | 
    
         
            -
                    @solar_terms.each do |term|
         
     | 
| 
       140 
     | 
    
         
            -
                      return term if term.index.even?
         
     | 
| 
       141 
     | 
    
         
            -
                    end
         
     | 
| 
       142 
     | 
    
         
            -
             
     | 
| 
       143 
     | 
    
         
            -
                    SolarTerm.new
         
     | 
| 
       144 
     | 
    
         
            -
                  end
         
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
                  #
         
     | 
| 
       147 
     | 
    
         
            -
                  # 節気を返す
         
     | 
| 
       148 
     | 
    
         
            -
                  #
         
     | 
| 
       149 
     | 
    
         
            -
                  # @return [SolarTerm] 節気
         
     | 
| 
       150 
     | 
    
         
            -
                  #
         
     | 
| 
       151 
     | 
    
         
            -
                  def odd_term
         
     | 
| 
       152 
     | 
    
         
            -
                    @solar_terms.each do |term|
         
     | 
| 
       153 
     | 
    
         
            -
                      return term if term.index.odd?
         
     | 
| 
       154 
     | 
    
         
            -
                    end
         
     | 
| 
       155 
     | 
    
         
            -
             
     | 
| 
       156 
     | 
    
         
            -
                    SolarTerm.new
         
     | 
| 
       157 
     | 
    
         
            -
                  end
         
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
                  #
         
     | 
| 
       160 
     | 
    
         
            -
                  # 二十四節気を追加する
         
     | 
| 
       161 
     | 
    
         
            -
                  #
         
     | 
| 
       162 
     | 
    
         
            -
                  # @param [SolarTerm] term 二十四節気
         
     | 
| 
       163 
     | 
    
         
            -
                  #
         
     | 
| 
       164 
     | 
    
         
            -
                  def add_term(term:)
         
     | 
| 
       165 
     | 
    
         
            -
                    @solar_terms.push(term)
         
     | 
| 
       166 
     | 
    
         
            -
                  end
         
     | 
| 
       167 
     | 
    
         
            -
             
     | 
| 
       168 
     | 
    
         
            -
                  #
         
     | 
| 
       169 
     | 
    
         
            -
                  # 同一の月情報かを検証する
         
     | 
| 
       170 
     | 
    
         
            -
                  #
         
     | 
| 
       171 
     | 
    
         
            -
                  # @param [Month] other 他の月情報
         
     | 
| 
       172 
     | 
    
         
            -
                  #
         
     | 
| 
       173 
     | 
    
         
            -
                  # @return [True] 同一の月
         
     | 
| 
       174 
     | 
    
         
            -
                  # @return [False] 異なる月
         
     | 
| 
       175 
     | 
    
         
            -
                  #
         
     | 
| 
       176 
     | 
    
         
            -
                  def same?(other:)
         
     | 
| 
       177 
     | 
    
         
            -
                    number == other.number && leaped? == other.leaped?
         
     | 
| 
       178 
     | 
    
         
            -
                  end
         
     | 
| 
       179 
     | 
    
         
            -
                end
         
     | 
| 
       180 
     | 
    
         
            -
              end
         
     | 
| 
       181 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,87 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            # TODO: moduleでMonthly とする(全暦むけに共通化したあと)
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            # :nodoc:
         
     | 
| 
       6 
     | 
    
         
            -
            module Zakuro
         
     | 
| 
       7 
     | 
    
         
            -
              # :nodoc:
         
     | 
| 
       8 
     | 
    
         
            -
              module Senmyou
         
     | 
| 
       9 
     | 
    
         
            -
                #
         
     | 
| 
       10 
     | 
    
         
            -
                # MonthLabel 月表示情報
         
     | 
| 
       11 
     | 
    
         
            -
                #
         
     | 
| 
       12 
     | 
    
         
            -
                class MonthLabel
         
     | 
| 
       13 
     | 
    
         
            -
                  # @return [True] 大の月(30日)
         
     | 
| 
       14 
     | 
    
         
            -
                  # @return [False] 小の月(29日)
         
     | 
| 
       15 
     | 
    
         
            -
                  attr_reader :is_many_days
         
     | 
| 
       16 
     | 
    
         
            -
                  # @return [Integer] 月(xx月のxx)
         
     | 
| 
       17 
     | 
    
         
            -
                  attr_reader :number
         
     | 
| 
       18 
     | 
    
         
            -
                  # @return [True] 閏月
         
     | 
| 
       19 
     | 
    
         
            -
                  # @return [False] 平月
         
     | 
| 
       20 
     | 
    
         
            -
                  attr_reader :leaped
         
     | 
| 
       21 
     | 
    
         
            -
             
     | 
| 
       22 
     | 
    
         
            -
                  # :reek:ControlParameter and :reek:BooleanParameter
         
     | 
| 
       23 
     | 
    
         
            -
             
     | 
| 
       24 
     | 
    
         
            -
                  #
         
     | 
| 
       25 
     | 
    
         
            -
                  # 初期化
         
     | 
| 
       26 
     | 
    
         
            -
                  #
         
     | 
| 
       27 
     | 
    
         
            -
                  # @param [Integer] number 月(xx月のxx)
         
     | 
| 
       28 
     | 
    
         
            -
                  # @param [True, False] is_many_days 月の大小
         
     | 
| 
       29 
     | 
    
         
            -
                  # @param [True, False] leaped 閏月/平月
         
     | 
| 
       30 
     | 
    
         
            -
                  #
         
     | 
| 
       31 
     | 
    
         
            -
                  def initialize(number: -1, is_many_days: false, leaped: false)
         
     | 
| 
       32 
     | 
    
         
            -
                    # 月の大小
         
     | 
| 
       33 
     | 
    
         
            -
                    @is_many_days = is_many_days
         
     | 
| 
       34 
     | 
    
         
            -
                    # 月
         
     | 
| 
       35 
     | 
    
         
            -
                    @number = number
         
     | 
| 
       36 
     | 
    
         
            -
                    # 閏
         
     | 
| 
       37 
     | 
    
         
            -
                    @leaped = leaped
         
     | 
| 
       38 
     | 
    
         
            -
                  end
         
     | 
| 
       39 
     | 
    
         
            -
             
     | 
| 
       40 
     | 
    
         
            -
                  #
         
     | 
| 
       41 
     | 
    
         
            -
                  # 月の日数を返す
         
     | 
| 
       42 
     | 
    
         
            -
                  #
         
     | 
| 
       43 
     | 
    
         
            -
                  # @return [Integer] 日数
         
     | 
| 
       44 
     | 
    
         
            -
                  #
         
     | 
| 
       45 
     | 
    
         
            -
                  def days
         
     | 
| 
       46 
     | 
    
         
            -
                    @is_many_days ? 30 : 29
         
     | 
| 
       47 
     | 
    
         
            -
                  end
         
     | 
| 
       48 
     | 
    
         
            -
             
     | 
| 
       49 
     | 
    
         
            -
                  #
         
     | 
| 
       50 
     | 
    
         
            -
                  # 月の名前(大小)を返す
         
     | 
| 
       51 
     | 
    
         
            -
                  #
         
     | 
| 
       52 
     | 
    
         
            -
                  # @return [String] 月の名前(大小)
         
     | 
| 
       53 
     | 
    
         
            -
                  #
         
     | 
| 
       54 
     | 
    
         
            -
                  def days_name
         
     | 
| 
       55 
     | 
    
         
            -
                    @is_many_days ? '大' : '小'
         
     | 
| 
       56 
     | 
    
         
            -
                  end
         
     | 
| 
       57 
     | 
    
         
            -
             
     | 
| 
       58 
     | 
    
         
            -
                  #
         
     | 
| 
       59 
     | 
    
         
            -
                  # 一ヶ月戻す
         
     | 
| 
       60 
     | 
    
         
            -
                  #
         
     | 
| 
       61 
     | 
    
         
            -
                  # @return [True] 昨年
         
     | 
| 
       62 
     | 
    
         
            -
                  # @return [False] 今年
         
     | 
| 
       63 
     | 
    
         
            -
                  #
         
     | 
| 
       64 
     | 
    
         
            -
                  def back_to_last_month
         
     | 
| 
       65 
     | 
    
         
            -
                    @number -= 1
         
     | 
| 
       66 
     | 
    
         
            -
             
     | 
| 
       67 
     | 
    
         
            -
                    return false if @number.positive?
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                    @number = 12
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
                    true
         
     | 
| 
       72 
     | 
    
         
            -
                  end
         
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
                  #
         
     | 
| 
       75 
     | 
    
         
            -
                  # 同一の月情報かを検証する
         
     | 
| 
       76 
     | 
    
         
            -
                  #
         
     | 
| 
       77 
     | 
    
         
            -
                  # @param [Month] other 他の月情報
         
     | 
| 
       78 
     | 
    
         
            -
                  #
         
     | 
| 
       79 
     | 
    
         
            -
                  # @return [True] 同一の月
         
     | 
| 
       80 
     | 
    
         
            -
                  # @return [False] 異なる月
         
     | 
| 
       81 
     | 
    
         
            -
                  #
         
     | 
| 
       82 
     | 
    
         
            -
                  def same?(other:)
         
     | 
| 
       83 
     | 
    
         
            -
                    @number == other.number && @leaped == other.leaped
         
     | 
| 
       84 
     | 
    
         
            -
                  end
         
     | 
| 
       85 
     | 
    
         
            -
                end
         
     | 
| 
       86 
     | 
    
         
            -
              end
         
     | 
| 
       87 
     | 
    
         
            -
            end
         
     | 
| 
         @@ -1,196 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require_relative './month'
         
     | 
| 
       4 
     | 
    
         
            -
            require_relative '../../../operation/operation'
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
            # :nodoc:
         
     | 
| 
       7 
     | 
    
         
            -
            module Zakuro
         
     | 
| 
       8 
     | 
    
         
            -
              # :nodoc:
         
     | 
| 
       9 
     | 
    
         
            -
              module Senmyou
         
     | 
| 
       10 
     | 
    
         
            -
                # :reek:TooManyInstanceVariables { max_instance_variables: 5 }
         
     | 
| 
       11 
     | 
    
         
            -
             
     | 
| 
       12 
     | 
    
         
            -
                #
         
     | 
| 
       13 
     | 
    
         
            -
                # OperatedMonth 月情報(運用)
         
     | 
| 
       14 
     | 
    
         
            -
                #
         
     | 
| 
       15 
     | 
    
         
            -
                class OperatedMonth < Month
         
     | 
| 
       16 
     | 
    
         
            -
                  # @return [Operation::MonthHistory] 変更履歴(月)
         
     | 
| 
       17 
     | 
    
         
            -
                  attr_reader :history
         
     | 
| 
       18 
     | 
    
         
            -
                  # @return [OperatedSolarTerms] 運用時二十四節気
         
     | 
| 
       19 
     | 
    
         
            -
                  attr_reader :operated_solar_terms
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
                  #
         
     | 
| 
       22 
     | 
    
         
            -
                  # 初期化
         
     | 
| 
       23 
     | 
    
         
            -
                  #
         
     | 
| 
       24 
     | 
    
         
            -
                  # @param [OperatedSolarTerms] operated_solar_terms 運用時二十四節気
         
     | 
| 
       25 
     | 
    
         
            -
                  # @param [MonthLabel] month_label 月表示名
         
     | 
| 
       26 
     | 
    
         
            -
                  # @param [FirstDay] first_day 月初日(朔日)
         
     | 
| 
       27 
     | 
    
         
            -
                  # @param [Array<SolarTerm>] solar_terms 二十四節気
         
     | 
| 
       28 
     | 
    
         
            -
                  # @param [Operation::MonthHistory] history 変更履歴(月)
         
     | 
| 
       29 
     | 
    
         
            -
                  #
         
     | 
| 
       30 
     | 
    
         
            -
                  def initialize(operated_solar_terms:, month_label: MonthLabel.new, first_day: FirstDay.new,
         
     | 
| 
       31 
     | 
    
         
            -
                                 solar_terms: [], history: Operation::MonthHistory.new)
         
     | 
| 
       32 
     | 
    
         
            -
                    super(month_label: month_label, first_day: first_day, solar_terms: solar_terms)
         
     | 
| 
       33 
     | 
    
         
            -
                    @history = history
         
     | 
| 
       34 
     | 
    
         
            -
                    @operated_solar_terms = operated_solar_terms
         
     | 
| 
       35 
     | 
    
         
            -
                  end
         
     | 
| 
       36 
     | 
    
         
            -
             
     | 
| 
       37 
     | 
    
         
            -
                  #
         
     | 
| 
       38 
     | 
    
         
            -
                  # 書き換える
         
     | 
| 
       39 
     | 
    
         
            -
                  #
         
     | 
| 
       40 
     | 
    
         
            -
                  def rewrite
         
     | 
| 
       41 
     | 
    
         
            -
                    rewrite_month
         
     | 
| 
       42 
     | 
    
         
            -
                    rewrite_solar_terms
         
     | 
| 
       43 
     | 
    
         
            -
                    rewrite_first_day
         
     | 
| 
       44 
     | 
    
         
            -
                  end
         
     | 
| 
       45 
     | 
    
         
            -
             
     | 
| 
       46 
     | 
    
         
            -
                  #
         
     | 
| 
       47 
     | 
    
         
            -
                  # 月ごとの差分で書き換える
         
     | 
| 
       48 
     | 
    
         
            -
                  #
         
     | 
| 
       49 
     | 
    
         
            -
                  def rewrite_month
         
     | 
| 
       50 
     | 
    
         
            -
                    diff = history.diffs.month
         
     | 
| 
       51 
     | 
    
         
            -
             
     | 
| 
       52 
     | 
    
         
            -
                    @month_label = MonthLabel.new(
         
     | 
| 
       53 
     | 
    
         
            -
                      number: OperatedMonth.rewrite_month_fields(
         
     | 
| 
       54 
     | 
    
         
            -
                        month_diff: diff, month_label: month_label, name: 'number'
         
     | 
| 
       55 
     | 
    
         
            -
                      ),
         
     | 
| 
       56 
     | 
    
         
            -
                      is_many_days: OperatedMonth.rewrite_month_fields(
         
     | 
| 
       57 
     | 
    
         
            -
                        month_diff: diff, month_label: month_label, name: 'is_many_days'
         
     | 
| 
       58 
     | 
    
         
            -
                      ),
         
     | 
| 
       59 
     | 
    
         
            -
                      leaped: OperatedMonth.rewrite_month_fields(
         
     | 
| 
       60 
     | 
    
         
            -
                        month_diff: diff, month_label: month_label, name: 'leaped'
         
     | 
| 
       61 
     | 
    
         
            -
                      )
         
     | 
| 
       62 
     | 
    
         
            -
                    )
         
     | 
| 
       63 
     | 
    
         
            -
                  end
         
     | 
| 
       64 
     | 
    
         
            -
             
     | 
| 
       65 
     | 
    
         
            -
                  def self.rewrite_month_fields(month_diff:, month_label:, name:)
         
     | 
| 
       66 
     | 
    
         
            -
                    method_name = name.intern
         
     | 
| 
       67 
     | 
    
         
            -
             
     | 
| 
       68 
     | 
    
         
            -
                    diff = month_diff.send(method_name)
         
     | 
| 
       69 
     | 
    
         
            -
                    default = month_label.send(method_name)
         
     | 
| 
       70 
     | 
    
         
            -
                    return default if diff.invalid?
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
                    diff.actual
         
     | 
| 
       73 
     | 
    
         
            -
                  end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
                  #
         
     | 
| 
       76 
     | 
    
         
            -
                  # 二十四節気ごとの差分で書き換える
         
     | 
| 
       77 
     | 
    
         
            -
                  #
         
     | 
| 
       78 
     | 
    
         
            -
                  def rewrite_solar_terms
         
     | 
| 
       79 
     | 
    
         
            -
                    matched, operated_solar_term = @operated_solar_terms.get(
         
     | 
| 
       80 
     | 
    
         
            -
                      western_date: first_day.western_date
         
     | 
| 
       81 
     | 
    
         
            -
                    )
         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                    return unless matched
         
     | 
| 
       84 
     | 
    
         
            -
             
     | 
| 
       85 
     | 
    
         
            -
                    @solar_terms = OperatedMonth.create_operated_solar_terms(
         
     | 
| 
       86 
     | 
    
         
            -
                      operated_solar_term: operated_solar_term,
         
     | 
| 
       87 
     | 
    
         
            -
                      solar_terms: solar_terms
         
     | 
| 
       88 
     | 
    
         
            -
                    )
         
     | 
| 
       89 
     | 
    
         
            -
                  end
         
     | 
| 
       90 
     | 
    
         
            -
             
     | 
| 
       91 
     | 
    
         
            -
                  #
         
     | 
| 
       92 
     | 
    
         
            -
                  # <Description>
         
     | 
| 
       93 
     | 
    
         
            -
                  #
         
     | 
| 
       94 
     | 
    
         
            -
                  # @param [<Type>] operated_solar_term <description>
         
     | 
| 
       95 
     | 
    
         
            -
                  # @param [Array<SolarTerm>] solar_terms 二十四節気
         
     | 
| 
       96 
     | 
    
         
            -
                  #
         
     | 
| 
       97 
     | 
    
         
            -
                  # @return [Array<SolarTerm>] 二十四節気
         
     | 
| 
       98 
     | 
    
         
            -
                  #
         
     | 
| 
       99 
     | 
    
         
            -
                  def self.create_operated_solar_terms(operated_solar_term:, solar_terms:)
         
     | 
| 
       100 
     | 
    
         
            -
                    index = operated_solar_term.index
         
     | 
| 
       101 
     | 
    
         
            -
             
     | 
| 
       102 
     | 
    
         
            -
                    # 別の月に移動する二十四節気。割り当てない。
         
     | 
| 
       103 
     | 
    
         
            -
                    result = remove_solar_term(index: index, solar_terms: solar_terms)
         
     | 
| 
       104 
     | 
    
         
            -
             
     | 
| 
       105 
     | 
    
         
            -
                    return result if used_solar_term?(index: index, solar_terms: solar_terms)
         
     | 
| 
       106 
     | 
    
         
            -
             
     | 
| 
       107 
     | 
    
         
            -
                    result.push(operated_solar_term)
         
     | 
| 
       108 
     | 
    
         
            -
             
     | 
| 
       109 
     | 
    
         
            -
                    result
         
     | 
| 
       110 
     | 
    
         
            -
                  end
         
     | 
| 
       111 
     | 
    
         
            -
             
     | 
| 
       112 
     | 
    
         
            -
                  # :reek:ControlParameter
         
     | 
| 
       113 
     | 
    
         
            -
             
     | 
| 
       114 
     | 
    
         
            -
                  #
         
     | 
| 
       115 
     | 
    
         
            -
                  # 二十四節気が使用されているか
         
     | 
| 
       116 
     | 
    
         
            -
                  #
         
     | 
| 
       117 
     | 
    
         
            -
                  # @param [Integer] index 二十四節気番号
         
     | 
| 
       118 
     | 
    
         
            -
                  # @param [Array<SolarTerm>] solar_terms 二十四節気
         
     | 
| 
       119 
     | 
    
         
            -
                  #
         
     | 
| 
       120 
     | 
    
         
            -
                  # @return [True] 使用
         
     | 
| 
       121 
     | 
    
         
            -
                  # @return [False] 未使用
         
     | 
| 
       122 
     | 
    
         
            -
                  #
         
     | 
| 
       123 
     | 
    
         
            -
                  def self.used_solar_term?(index:, solar_terms:)
         
     | 
| 
       124 
     | 
    
         
            -
                    solar_terms.each do |solar_term|
         
     | 
| 
       125 
     | 
    
         
            -
                      return true if index == solar_term.index
         
     | 
| 
       126 
     | 
    
         
            -
                    end
         
     | 
| 
       127 
     | 
    
         
            -
             
     | 
| 
       128 
     | 
    
         
            -
                    false
         
     | 
| 
       129 
     | 
    
         
            -
                  end
         
     | 
| 
       130 
     | 
    
         
            -
             
     | 
| 
       131 
     | 
    
         
            -
                  # :reek:ControlParameter
         
     | 
| 
       132 
     | 
    
         
            -
             
     | 
| 
       133 
     | 
    
         
            -
                  #
         
     | 
| 
       134 
     | 
    
         
            -
                  # 対象の二十四節気を除外する
         
     | 
| 
       135 
     | 
    
         
            -
                  #
         
     | 
| 
       136 
     | 
    
         
            -
                  # @param [Integer] index 二十四節気番号
         
     | 
| 
       137 
     | 
    
         
            -
                  # @param [Array<SolarTerm>] solar_terms 二十四節気
         
     | 
| 
       138 
     | 
    
         
            -
                  #
         
     | 
| 
       139 
     | 
    
         
            -
                  # @return [Array<SolarTerm>] 二十四節気(対象除外済)
         
     | 
| 
       140 
     | 
    
         
            -
                  #
         
     | 
| 
       141 
     | 
    
         
            -
                  def self.remove_solar_term(index:, solar_terms:)
         
     | 
| 
       142 
     | 
    
         
            -
                    result = []
         
     | 
| 
       143 
     | 
    
         
            -
                    solar_terms.each do |solar_term|
         
     | 
| 
       144 
     | 
    
         
            -
                      next if index == solar_term.index
         
     | 
| 
       145 
     | 
    
         
            -
             
     | 
| 
       146 
     | 
    
         
            -
                      result.push(solar_term)
         
     | 
| 
       147 
     | 
    
         
            -
                    end
         
     | 
| 
       148 
     | 
    
         
            -
             
     | 
| 
       149 
     | 
    
         
            -
                    result
         
     | 
| 
       150 
     | 
    
         
            -
                  end
         
     | 
| 
       151 
     | 
    
         
            -
             
     | 
| 
       152 
     | 
    
         
            -
                  #
         
     | 
| 
       153 
     | 
    
         
            -
                  # 月初日ごとの差分で書き換える
         
     | 
| 
       154 
     | 
    
         
            -
                  #
         
     | 
| 
       155 
     | 
    
         
            -
                  def rewrite_first_day
         
     | 
| 
       156 
     | 
    
         
            -
                    diffs = @history.diffs
         
     | 
| 
       157 
     | 
    
         
            -
                    return if diffs.invalid_days?
         
     | 
| 
       158 
     | 
    
         
            -
             
     | 
| 
       159 
     | 
    
         
            -
                    days = diffs.days
         
     | 
| 
       160 
     | 
    
         
            -
             
     | 
| 
       161 
     | 
    
         
            -
                    @first_day = FirstDay.new(
         
     | 
| 
       162 
     | 
    
         
            -
                      western_date: rewrite_western_date(days: days),
         
     | 
| 
       163 
     | 
    
         
            -
                      remainder: rewrite_remainder(days: days)
         
     | 
| 
       164 
     | 
    
         
            -
                    )
         
     | 
| 
       165 
     | 
    
         
            -
                  end
         
     | 
| 
       166 
     | 
    
         
            -
             
     | 
| 
       167 
     | 
    
         
            -
                  #
         
     | 
| 
       168 
     | 
    
         
            -
                  # 月初日の大余小余を日差分で書き換える
         
     | 
| 
       169 
     | 
    
         
            -
                  #
         
     | 
| 
       170 
     | 
    
         
            -
                  # @param [Integer] days 日差分
         
     | 
| 
       171 
     | 
    
         
            -
                  #
         
     | 
| 
       172 
     | 
    
         
            -
                  # @return [Remainder] 月初日の大余小余
         
     | 
| 
       173 
     | 
    
         
            -
                  #
         
     | 
| 
       174 
     | 
    
         
            -
                  def rewrite_remainder(days:)
         
     | 
| 
       175 
     | 
    
         
            -
                    remainder = first_day.remainder.clone
         
     | 
| 
       176 
     | 
    
         
            -
                    remainder.add!(Remainder.new(day: days, minute: 0, second: 0))
         
     | 
| 
       177 
     | 
    
         
            -
             
     | 
| 
       178 
     | 
    
         
            -
                    remainder
         
     | 
| 
       179 
     | 
    
         
            -
                  end
         
     | 
| 
       180 
     | 
    
         
            -
             
     | 
| 
       181 
     | 
    
         
            -
                  #
         
     | 
| 
       182 
     | 
    
         
            -
                  # 月初日の西暦日を日差分で書き換える
         
     | 
| 
       183 
     | 
    
         
            -
                  #
         
     | 
| 
       184 
     | 
    
         
            -
                  # @param [Integer] days 日差分
         
     | 
| 
       185 
     | 
    
         
            -
                  #
         
     | 
| 
       186 
     | 
    
         
            -
                  # @return [Western::Calendar] 月初日の西暦日
         
     | 
| 
       187 
     | 
    
         
            -
                  #
         
     | 
| 
       188 
     | 
    
         
            -
                  def rewrite_western_date(days:)
         
     | 
| 
       189 
     | 
    
         
            -
                    western_date = first_day.western_date.clone
         
     | 
| 
       190 
     | 
    
         
            -
                    western_date += days
         
     | 
| 
       191 
     | 
    
         
            -
             
     | 
| 
       192 
     | 
    
         
            -
                    western_date
         
     | 
| 
       193 
     | 
    
         
            -
                  end
         
     | 
| 
       194 
     | 
    
         
            -
                end
         
     | 
| 
       195 
     | 
    
         
            -
              end
         
     | 
| 
       196 
     | 
    
         
            -
            end
         
     |