zakuro 0.9.1 → 0.9.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/README.md +20 -18
 - data/VERSION +1 -1
 - data/doc/condition.md +3 -1
 - data/doc/dropped_date.md +25 -0
 - data/doc/expection.md +11 -0
 - data/doc/operation/csv/month.csv +5 -5
 - data/doc/operation/operation.xlsx +0 -0
 - data/doc/vanished_date.md +26 -0
 - data/lib/zakuro/calculation/cycle/abstract_remainder.rb +26 -0
 - data/lib/zakuro/calculation/cycle/abstract_solar_term.rb +1 -1
 - data/lib/zakuro/calculation/era/gengou/abstract_scroll.rb +2 -2
 - data/lib/zakuro/calculation/era/gengou/dated_scroll.rb +6 -2
 - data/lib/zakuro/calculation/era/gengou/internal/counter.rb +5 -5
 - data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_list.rb +12 -5
 - data/lib/zakuro/calculation/era/gengou/internal/reserve/abstract_range.rb +14 -8
 - data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_list.rb +3 -2
 - data/lib/zakuro/calculation/era/gengou/internal/reserve/dated_range.rb +4 -2
 - data/lib/zakuro/calculation/era/gengou/internal/reserve/named_list.rb +5 -3
 - data/lib/zakuro/calculation/era/gengou/internal/reserve/named_range.rb +10 -5
 - data/lib/zakuro/calculation/era/gengou/named_scroll.rb +5 -2
 - data/lib/zakuro/calculation/monthly/initialized_month.rb +4 -2
 - data/lib/zakuro/calculation/monthly/meta/all_solar_term.rb +64 -0
 - data/lib/zakuro/calculation/monthly/meta/meta_collector.rb +80 -0
 - data/lib/zakuro/calculation/monthly/meta.rb +60 -0
 - data/lib/zakuro/calculation/monthly/month.rb +60 -5
 - data/lib/zakuro/calculation/monthly/operated_month.rb +6 -3
 - data/lib/zakuro/calculation/option/dropped_date/location.rb +12 -23
 - data/lib/zakuro/calculation/option/vanished_date/location.rb +9 -2
 - data/lib/zakuro/calculation/range/abstract_full_range.rb +19 -2
 - data/lib/zakuro/calculation/range/abstract_operation_range.rb +20 -2
 - data/lib/zakuro/calculation/range/dated_full_range.rb +3 -1
 - data/lib/zakuro/calculation/range/dated_operation_range.rb +3 -1
 - data/lib/zakuro/calculation/range/medieval_annual_range.rb +1 -1
 - data/lib/zakuro/calculation/range/named_full_range.rb +3 -1
 - data/lib/zakuro/calculation/range/named_operation_range.rb +3 -1
 - data/lib/zakuro/calculation/range/transfer/gengou_scroller.rb +2 -1
 - data/lib/zakuro/calculation/range/transfer/year_boundary.rb +10 -8
 - data/lib/zakuro/calculation/stella/solar/abstract_average.rb +8 -34
 - data/lib/zakuro/calculation/summary/internal/option.rb +51 -25
 - data/lib/zakuro/calculation/summary/western/specifier/single_day.rb +1 -1
 - data/lib/zakuro/era/japan/calendar.rb +2 -2
 - data/lib/zakuro/era/japan/gengou/alignment/linear_gengou.rb +1 -1
 - data/lib/zakuro/era/japan/gengou/alignment.rb +14 -2
 - data/lib/zakuro/era/japan/gengou/resource/parser.rb +83 -25
 - data/lib/zakuro/era/japan/gengou/resource/type.rb +81 -26
 - data/lib/zakuro/era/japan/gengou/resource/validator.rb +102 -23
 - data/lib/zakuro/era/japan/gengou/resource/yaml/set-001-until-south.yaml +1123 -375
 - data/lib/zakuro/era/japan/gengou/resource/yaml/set-002-from-north.yaml +487 -163
 - data/lib/zakuro/era/japan/gengou/resource/yaml/set-003-modern.yaml +30 -10
 - data/lib/zakuro/era/japan/gengou/resource.rb +16 -0
 - data/lib/zakuro/era/japan/gengou.rb +7 -4
 - data/lib/zakuro/era/western/calendar.rb +5 -11
 - data/lib/zakuro/era/western/date_text.rb +40 -0
 - data/lib/zakuro/gateway/locale/date.rb +2 -2
 - data/lib/zakuro/operation/month/validator.rb +7 -1
 - data/lib/zakuro/operation/yaml/month.yaml +15 -15
 - data/lib/zakuro/output/logger.rb +21 -3
 - data/lib/zakuro/tools/remainder_comparer.rb +97 -0
 - metadata +7 -2
 
| 
         @@ -1,5 +1,9 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            # frozen_string_literal: true
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
            require_relative '../../monthly/meta/meta_collector'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            require_relative '../../../tools/remainder_comparer'
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
       3 
7 
     | 
    
         
             
            # :nodoc:
         
     | 
| 
       4 
8 
     | 
    
         
             
            module Zakuro
         
     | 
| 
       5 
9 
     | 
    
         
             
              # :nodoc:
         
     | 
| 
         @@ -42,36 +46,6 @@ module Zakuro 
     | 
|
| 
       42 
46 
     | 
    
         
             
                      annual_range
         
     | 
| 
       43 
47 
     | 
    
         
             
                    end
         
     | 
| 
       44 
48 
     | 
    
         | 
| 
       45 
     | 
    
         
            -
                    # :reek:TooManyStatements { max_statements: 7 }
         
     | 
| 
       46 
     | 
    
         
            -
             
     | 
| 
       47 
     | 
    
         
            -
                    class << self
         
     | 
| 
       48 
     | 
    
         
            -
                      #
         
     | 
| 
       49 
     | 
    
         
            -
                      # 月内(当月朔日から当月末日(来月朔日の前日)の間)に二十四節気があるか
         
     | 
| 
       50 
     | 
    
         
            -
                      # @note 大余60で一巡するため 以下2パターンがある
         
     | 
| 
       51 
     | 
    
         
            -
                      #   * current_month <= next_month : (二十四節気) >= current_month && (二十四節気) < next_month
         
     | 
| 
       52 
     | 
    
         
            -
                      #   * current_month > next_month  : (二十四節気) >= current_month || (二十四節気) < next_month
         
     | 
| 
       53 
     | 
    
         
            -
                      #
         
     | 
| 
       54 
     | 
    
         
            -
                      # @param [Cycle::AbstractRemainder] solar_term 二十四節気
         
     | 
| 
       55 
     | 
    
         
            -
                      # @param [Cycle::AbstractRemainder] current_month 月初
         
     | 
| 
       56 
     | 
    
         
            -
                      # @param [Cycle::AbstractRemainder] next_month 月末
         
     | 
| 
       57 
     | 
    
         
            -
                      #
         
     | 
| 
       58 
     | 
    
         
            -
                      # @return [True] 対象の二十四節気がある
         
     | 
| 
       59 
     | 
    
         
            -
                      # @return [False] 対象の二十四節気がない
         
     | 
| 
       60 
     | 
    
         
            -
                      #
         
     | 
| 
       61 
     | 
    
         
            -
                      def in_solar_term?(solar_term:, current_month:, next_month:)
         
     | 
| 
       62 
     | 
    
         
            -
                        # 大余で比較する
         
     | 
| 
       63 
     | 
    
         
            -
                        target_time = solar_term.day
         
     | 
| 
       64 
     | 
    
         
            -
                        current_month_time = current_month.day
         
     | 
| 
       65 
     | 
    
         
            -
                        next_month_time = next_month.day
         
     | 
| 
       66 
     | 
    
         
            -
                        current_month_over = (target_time >= current_month_time)
         
     | 
| 
       67 
     | 
    
         
            -
                        next_month_under = (target_time < next_month_time)
         
     | 
| 
       68 
     | 
    
         
            -
             
     | 
| 
       69 
     | 
    
         
            -
                        return current_month_over && next_month_under if current_month_time <= next_month_time
         
     | 
| 
       70 
     | 
    
         
            -
             
     | 
| 
       71 
     | 
    
         
            -
                        current_month_over || next_month_under
         
     | 
| 
       72 
     | 
    
         
            -
                      end
         
     | 
| 
       73 
     | 
    
         
            -
                    end
         
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
49 
     | 
    
         
             
                    private
         
     | 
| 
       76 
50 
     | 
    
         | 
| 
       77 
51 
     | 
    
         
             
                    # :reek:TooManyStatements { max_statements: 8 }
         
     | 
| 
         @@ -87,10 +61,10 @@ module Zakuro 
     | 
|
| 
       87 
61 
     | 
    
         
             
                      # * 最大試行回数:4回(設定なし => 設定あり => 設定あり => 設定なし)
         
     | 
| 
       88 
62 
     | 
    
         
             
                      # * 閏月は1回しか設定しない
         
     | 
| 
       89 
63 
     | 
    
         
             
                      # * 最大2回設定する(中気・節気)
         
     | 
| 
       90 
     | 
    
         
            -
                       
     | 
| 
       91 
     | 
    
         
            -
                        in_range =  
     | 
| 
       92 
     | 
    
         
            -
                           
     | 
| 
       93 
     | 
    
         
            -
                           
     | 
| 
      
 64 
     | 
    
         
            +
                      4.times.each do |_index|
         
     | 
| 
      
 65 
     | 
    
         
            +
                        in_range = Tools::RemainderComparer.in_range?(
         
     | 
| 
      
 66 
     | 
    
         
            +
                          target: solar_term.remainder, start: current_month.remainder,
         
     | 
| 
      
 67 
     | 
    
         
            +
                          last: next_month.remainder
         
     | 
| 
       94 
68 
     | 
    
         
             
                        )
         
     | 
| 
       95 
69 
     | 
    
         | 
| 
       96 
70 
     | 
    
         
             
                        # 範囲外
         
     | 
| 
         @@ -34,17 +34,32 @@ module Zakuro 
     | 
|
| 
       34 
34 
     | 
    
         
             
                        context = month.context
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
                        if context.option.dropped_date?
         
     | 
| 
      
 37 
     | 
    
         
            +
                          solar_term = month.solar_term_by_day(day: day.remainder.day)
         
     | 
| 
      
 38 
     | 
    
         
            +
             
     | 
| 
       37 
39 
     | 
    
         
             
                          remainder = day.remainder
         
     | 
| 
       38 
     | 
    
         
            -
                          solar_terms = month.solar_terms
         
     | 
| 
       39 
40 
     | 
    
         
             
                          option = dropped_date(
         
     | 
| 
       40 
     | 
    
         
            -
                            context: context, remainder: remainder,  
     | 
| 
      
 41 
     | 
    
         
            +
                            context: context, remainder: remainder, solar_term: solar_term
         
     | 
| 
       41 
42 
     | 
    
         
             
                          )
         
     | 
| 
       42 
43 
     | 
    
         
             
                          options[Context::Option::DROPPED_DATE_KEY] = option
         
     | 
| 
       43 
44 
     | 
    
         
             
                        end
         
     | 
| 
       44 
45 
     | 
    
         | 
| 
      
 46 
     | 
    
         
            +
                        # TODO: refactor
         
     | 
| 
       45 
47 
     | 
    
         
             
                        if context.option.vanished_date?
         
     | 
| 
       46 
48 
     | 
    
         
             
                          remainder = day.remainder
         
     | 
| 
       47 
49 
     | 
    
         
             
                          average_remainder = month.first_day.average_remainder
         
     | 
| 
      
 50 
     | 
    
         
            +
                          # p "remainder: #{remainder.format}"
         
     | 
| 
      
 51 
     | 
    
         
            +
                          # p "last_average_remainder: #{month.meta.last_average_remainder.format}"
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                          if day.number == 1
         
     | 
| 
      
 54 
     | 
    
         
            +
                            option = vanished_date(
         
     | 
| 
      
 55 
     | 
    
         
            +
                              context: context, remainder: remainder,
         
     | 
| 
      
 56 
     | 
    
         
            +
                              average_remainder: month.meta.last_average_remainder
         
     | 
| 
      
 57 
     | 
    
         
            +
                            )
         
     | 
| 
      
 58 
     | 
    
         
            +
                            options[Context::Option::VANISHED_DATE_KEY] = option
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
                            return options if option.matched
         
     | 
| 
      
 61 
     | 
    
         
            +
                          end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       48 
63 
     | 
    
         
             
                          option = vanished_date(
         
     | 
| 
       49 
64 
     | 
    
         
             
                            context: context, remainder: remainder, average_remainder: average_remainder
         
     | 
| 
       50 
65 
     | 
    
         
             
                          )
         
     | 
| 
         @@ -61,40 +76,43 @@ module Zakuro 
     | 
|
| 
       61 
76 
     | 
    
         
             
                      #
         
     | 
| 
       62 
77 
     | 
    
         
             
                      # @param [Context::Context] context 暦コンテキスト
         
     | 
| 
       63 
78 
     | 
    
         
             
                      # @param [Cycle::AbstractRemainder] remainder 当日和暦日
         
     | 
| 
       64 
     | 
    
         
            -
                      # @param [ 
     | 
| 
      
 79 
     | 
    
         
            +
                      # @param [Cycle::AbstractSolarTerm] solar_terms 二十四節気
         
     | 
| 
       65 
80 
     | 
    
         
             
                      #
         
     | 
| 
       66 
81 
     | 
    
         
             
                      # @return [Result::Data::Option::DroppedDate::Option] 没日
         
     | 
| 
       67 
82 
     | 
    
         
             
                      #
         
     | 
| 
       68 
     | 
    
         
            -
                      def dropped_date(context:, remainder:,  
     | 
| 
      
 83 
     | 
    
         
            +
                      def dropped_date(context:, remainder:, solar_term:)
         
     | 
| 
       69 
84 
     | 
    
         
             
                        option = Result::Data::Option::DroppedDate::Option.new
         
     | 
| 
       70 
85 
     | 
    
         | 
| 
       71 
86 
     | 
    
         
             
                        return option if remainder.invalid?
         
     | 
| 
       72 
87 
     | 
    
         | 
| 
       73 
88 
     | 
    
         
             
                        location = Calculation::Option::DroppedDate::Location.new(
         
     | 
| 
       74 
     | 
    
         
            -
                          context: context,  
     | 
| 
      
 89 
     | 
    
         
            +
                          context: context, solar_term: solar_term
         
     | 
| 
       75 
90 
     | 
    
         
             
                        )
         
     | 
| 
       76 
91 
     | 
    
         | 
| 
      
 92 
     | 
    
         
            +
                        return option if location.invalid?
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
       77 
94 
     | 
    
         
             
                        return option unless location.exist?
         
     | 
| 
       78 
95 
     | 
    
         | 
| 
       79 
96 
     | 
    
         
             
                        dropped_date = location.get
         
     | 
| 
       80 
97 
     | 
    
         | 
| 
       81 
     | 
    
         
            -
                         
     | 
| 
       82 
     | 
    
         
            -
             
     | 
| 
       83 
     | 
    
         
            -
                         
     | 
| 
      
 98 
     | 
    
         
            +
                        dropped_date_option(
         
     | 
| 
      
 99 
     | 
    
         
            +
                          matched: remainder.day == dropped_date.day, location: location
         
     | 
| 
      
 100 
     | 
    
         
            +
                        )
         
     | 
| 
       84 
101 
     | 
    
         
             
                      end
         
     | 
| 
       85 
102 
     | 
    
         | 
| 
       86 
103 
     | 
    
         
             
                      #
         
     | 
| 
       87 
104 
     | 
    
         
             
                      # 没日オプション値を生成する
         
     | 
| 
       88 
105 
     | 
    
         
             
                      #
         
     | 
| 
      
 106 
     | 
    
         
            +
                      # @param [True, False] matched 没日有無
         
     | 
| 
       89 
107 
     | 
    
         
             
                      # @param [Calculation::Option::DroppedDate::Location] location 没日位置
         
     | 
| 
       90 
108 
     | 
    
         
             
                      #
         
     | 
| 
       91 
109 
     | 
    
         
             
                      # @return [Result::Data::Option::DroppedDate::Option] 没日オプション値
         
     | 
| 
       92 
110 
     | 
    
         
             
                      #
         
     | 
| 
       93 
     | 
    
         
            -
                      def dropped_date_option(location:)
         
     | 
| 
      
 111 
     | 
    
         
            +
                      def dropped_date_option(matched:, location:)
         
     | 
| 
       94 
112 
     | 
    
         
             
                        dropped_date = location.get
         
     | 
| 
       95 
113 
     | 
    
         
             
                        solar_term = location.solar_term
         
     | 
| 
       96 
114 
     | 
    
         
             
                        Result::Data::Option::DroppedDate::Option.new(
         
     | 
| 
       97 
     | 
    
         
            -
                          matched:  
     | 
| 
      
 115 
     | 
    
         
            +
                          matched: matched,
         
     | 
| 
       98 
116 
     | 
    
         
             
                          calculation: Result::Data::Option::DroppedDate::Calculation.new(
         
     | 
| 
       99 
117 
     | 
    
         
             
                            remainder: dropped_date.format,
         
     | 
| 
       100 
118 
     | 
    
         
             
                            solar_term: Result::Data::SolarTerm.new(
         
     | 
| 
         @@ -108,41 +126,49 @@ module Zakuro 
     | 
|
| 
       108 
126 
     | 
    
         
             
                      #
         
     | 
| 
       109 
127 
     | 
    
         
             
                      # 滅日を求める
         
     | 
| 
       110 
128 
     | 
    
         
             
                      #
         
     | 
| 
       111 
     | 
    
         
            -
                      # @param [ 
     | 
| 
       112 
     | 
    
         
            -
                      # @param [ 
     | 
| 
       113 
     | 
    
         
            -
                      # @param [ 
     | 
| 
      
 129 
     | 
    
         
            +
                      # @param [Context::Context] context 暦コンテキスト
         
     | 
| 
      
 130 
     | 
    
         
            +
                      # @param [Cycle::AbstractRemainder] remainder 当日和暦日
         
     | 
| 
      
 131 
     | 
    
         
            +
                      # @param [Cycle::AbstractRemainder] average_remainder 経朔
         
     | 
| 
       114 
132 
     | 
    
         
             
                      #
         
     | 
| 
       115 
     | 
    
         
            -
                      # @return [ 
     | 
| 
      
 133 
     | 
    
         
            +
                      # @return [Result::Data::Option::VanishedDate::Option] 滅日オプション値
         
     | 
| 
       116 
134 
     | 
    
         
             
                      #
         
     | 
| 
       117 
135 
     | 
    
         
             
                      def vanished_date(context:, remainder:, average_remainder:)
         
     | 
| 
       118 
     | 
    
         
            -
                         
     | 
| 
       119 
     | 
    
         
            -
             
     | 
| 
       120 
     | 
    
         
            -
                        return option if average_remainder.invalid?
         
     | 
| 
      
 136 
     | 
    
         
            +
                        return Result::Data::Option::VanishedDate::Option.new if average_remainder.invalid?
         
     | 
| 
       121 
137 
     | 
    
         | 
| 
       122 
138 
     | 
    
         
             
                        location = Calculation::Option::VanishedDate::Location.new(
         
     | 
| 
       123 
139 
     | 
    
         
             
                          context: context, average_remainder: average_remainder
         
     | 
| 
       124 
140 
     | 
    
         
             
                        )
         
     | 
| 
       125 
141 
     | 
    
         | 
| 
       126 
     | 
    
         
            -
                        return  
     | 
| 
      
 142 
     | 
    
         
            +
                        return Result::Data::Option::VanishedDate::Option.new if location.invalid?
         
     | 
| 
       127 
143 
     | 
    
         | 
| 
       128 
     | 
    
         
            -
                         
     | 
| 
      
 144 
     | 
    
         
            +
                        unless location.exist?
         
     | 
| 
      
 145 
     | 
    
         
            +
                          # 結果確認のため経朔だけは設定する
         
     | 
| 
      
 146 
     | 
    
         
            +
                          return Result::Data::Option::VanishedDate::Option.new(
         
     | 
| 
      
 147 
     | 
    
         
            +
                            calculation: Result::Data::Option::VanishedDate::Calculation.new(
         
     | 
| 
      
 148 
     | 
    
         
            +
                              average_remainder: average_remainder
         
     | 
| 
      
 149 
     | 
    
         
            +
                            )
         
     | 
| 
      
 150 
     | 
    
         
            +
                          )
         
     | 
| 
      
 151 
     | 
    
         
            +
                        end
         
     | 
| 
       129 
152 
     | 
    
         | 
| 
       130 
     | 
    
         
            -
                         
     | 
| 
      
 153 
     | 
    
         
            +
                        vanished_date = location.get
         
     | 
| 
       131 
154 
     | 
    
         | 
| 
       132 
     | 
    
         
            -
                        vanished_date_option( 
     | 
| 
      
 155 
     | 
    
         
            +
                        vanished_date_option(
         
     | 
| 
      
 156 
     | 
    
         
            +
                          matched: remainder.day == vanished_date.day, location: location
         
     | 
| 
      
 157 
     | 
    
         
            +
                        )
         
     | 
| 
       133 
158 
     | 
    
         
             
                      end
         
     | 
| 
       134 
159 
     | 
    
         | 
| 
       135 
160 
     | 
    
         
             
                      #
         
     | 
| 
       136 
161 
     | 
    
         
             
                      # 滅日オプション値を生成する
         
     | 
| 
       137 
162 
     | 
    
         
             
                      #
         
     | 
| 
       138 
     | 
    
         
            -
                      # @param [ 
     | 
| 
      
 163 
     | 
    
         
            +
                      # @param [True, False] matched 滅日有無
         
     | 
| 
      
 164 
     | 
    
         
            +
                      # @param [Calculation::Option::VanishedDate::Location] location 滅日位置
         
     | 
| 
       139 
165 
     | 
    
         
             
                      #
         
     | 
| 
       140 
     | 
    
         
            -
                      # @return [Result::Data::Option:: 
     | 
| 
      
 166 
     | 
    
         
            +
                      # @return [Result::Data::Option::VanishedDate::Option] 滅日オプション値
         
     | 
| 
       141 
167 
     | 
    
         
             
                      #
         
     | 
| 
       142 
     | 
    
         
            -
                      def vanished_date_option(location:)
         
     | 
| 
      
 168 
     | 
    
         
            +
                      def vanished_date_option(matched:, location:)
         
     | 
| 
       143 
169 
     | 
    
         
             
                        vanished_date = location.get
         
     | 
| 
       144 
170 
     | 
    
         
             
                        Result::Data::Option::VanishedDate::Option.new(
         
     | 
| 
       145 
     | 
    
         
            -
                          matched:  
     | 
| 
      
 171 
     | 
    
         
            +
                          matched: matched,
         
     | 
| 
       146 
172 
     | 
    
         
             
                          calculation: Result::Data::Option::VanishedDate::Calculation.new(
         
     | 
| 
       147 
173 
     | 
    
         
             
                            remainder: vanished_date.format,
         
     | 
| 
       148 
174 
     | 
    
         
             
                            average_remainder: location.average_remainder
         
     | 
| 
         @@ -98,7 +98,7 @@ module Zakuro 
     | 
|
| 
       98 
98 
     | 
    
         
             
                    # @return [Calendar] 年月日情報(和暦)
         
     | 
| 
       99 
99 
     | 
    
         
             
                    #
         
     | 
| 
       100 
100 
     | 
    
         
             
                    def parse(regex: FORMAT, text: '')
         
     | 
| 
       101 
     | 
    
         
            -
                      return Calendar.new unless  
     | 
| 
      
 101 
     | 
    
         
            +
                      return Calendar.new unless valid_date_text(regex: regex, text: text)
         
     | 
| 
       102 
102 
     | 
    
         | 
| 
       103 
103 
     | 
    
         
             
                      matched = text.match(regex)
         
     | 
| 
       104 
104 
     | 
    
         | 
| 
         @@ -120,7 +120,7 @@ module Zakuro 
     | 
|
| 
       120 
120 
     | 
    
         
             
                    # @return [True] 正しい
         
     | 
| 
       121 
121 
     | 
    
         
             
                    # @return [True] 正しくない
         
     | 
| 
       122 
122 
     | 
    
         
             
                    #
         
     | 
| 
       123 
     | 
    
         
            -
                    def  
     | 
| 
      
 123 
     | 
    
         
            +
                    def valid_date_text(regex: FORMAT, text: '')
         
     | 
| 
       124 
124 
     | 
    
         
             
                      return false unless text
         
     | 
| 
       125 
125 
     | 
    
         | 
| 
       126 
126 
     | 
    
         
             
                      matched = text.match(regex)
         
     | 
| 
         @@ -23,6 +23,9 @@ module Zakuro 
     | 
|
| 
       23 
23 
     | 
    
         
             
                    # @return [Aligner] 整列結果
         
     | 
| 
       24 
24 
     | 
    
         
             
                    SUMMARY = Aligner.new(resources: Resource::LIST)
         
     | 
| 
       25 
25 
     | 
    
         | 
| 
      
 26 
     | 
    
         
            +
                    # @return [Aligner] 整列結果(運用値)
         
     | 
| 
      
 27 
     | 
    
         
            +
                    OPERATED_SUMMARY = Aligner.new(resources: Resource::OPERATED_LIST)
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
       26 
29 
     | 
    
         
             
                    class << self
         
     | 
| 
       27 
30 
     | 
    
         
             
                      #
         
     | 
| 
       28 
31 
     | 
    
         
             
                      # 指定した範囲内の元号を取得する
         
     | 
| 
         @@ -30,11 +33,17 @@ module Zakuro 
     | 
|
| 
       30 
33 
     | 
    
         
             
                      # @param [Integer] line 行
         
     | 
| 
       31 
34 
     | 
    
         
             
                      # @param [Western::Calendar] start_date 開始日
         
     | 
| 
       32 
35 
     | 
    
         
             
                      # @param [Western::Calendar] last_date 終了日
         
     | 
| 
      
 36 
     | 
    
         
            +
                      # @param [True, False] operated 運用値設定
         
     | 
| 
       33 
37 
     | 
    
         
             
                      #
         
     | 
| 
       34 
38 
     | 
    
         
             
                      # @return [Array<LinearGengou>] 元号
         
     | 
| 
       35 
39 
     | 
    
         
             
                      #
         
     | 
| 
       36 
40 
     | 
    
         
             
                      def get(line: FIRST_LINE,
         
     | 
| 
       37 
     | 
    
         
            -
                              start_date: Western::Calendar.new, last_date: Western::Calendar.new 
     | 
| 
      
 41 
     | 
    
         
            +
                              start_date: Western::Calendar.new, last_date: Western::Calendar.new,
         
     | 
| 
      
 42 
     | 
    
         
            +
                              operated: false)
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
                        if operated
         
     | 
| 
      
 45 
     | 
    
         
            +
                          return OPERATED_SUMMARY.get(line: line, start_date: start_date, last_date: last_date)
         
     | 
| 
      
 46 
     | 
    
         
            +
                        end
         
     | 
| 
       38 
47 
     | 
    
         | 
| 
       39 
48 
     | 
    
         
             
                        SUMMARY.get(line: line, start_date: start_date, last_date: last_date)
         
     | 
| 
       40 
49 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -44,10 +53,13 @@ module Zakuro 
     | 
|
| 
       44 
53 
     | 
    
         
             
                      #
         
     | 
| 
       45 
54 
     | 
    
         
             
                      # @param [Integer] line 行
         
     | 
| 
       46 
55 
     | 
    
         
             
                      # @param [String] name 元号名
         
     | 
| 
      
 56 
     | 
    
         
            +
                      # @param [True, False] operated 運用値設定
         
     | 
| 
       47 
57 
     | 
    
         
             
                      #
         
     | 
| 
       48 
58 
     | 
    
         
             
                      # @return [Array<LinearGengou>] 元号
         
     | 
| 
       49 
59 
     | 
    
         
             
                      #
         
     | 
| 
       50 
     | 
    
         
            -
                      def get_by_name(line: FIRST_LINE, name:)
         
     | 
| 
      
 60 
     | 
    
         
            +
                      def get_by_name(line: FIRST_LINE, name:, operated: false)
         
     | 
| 
      
 61 
     | 
    
         
            +
                        return OPERATED_SUMMARY.get_by_name(line: line, name: name) if operated
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
       51 
63 
     | 
    
         
             
                        SUMMARY.get_by_name(line: line, name: name)
         
     | 
| 
       52 
64 
     | 
    
         
             
                      end
         
     | 
| 
       53 
65 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -30,9 +30,11 @@ module Zakuro 
     | 
|
| 
       30 
30 
     | 
    
         
             
                        # @return [String] 元号名
         
     | 
| 
       31 
31 
     | 
    
         
             
                        attr_reader :name
         
     | 
| 
       32 
32 
     | 
    
         
             
                        # @return [Hash<String, String>] 開始年
         
     | 
| 
       33 
     | 
    
         
            -
                        attr_reader : 
     | 
| 
      
 33 
     | 
    
         
            +
                        attr_reader :start_year
         
     | 
| 
       34 
34 
     | 
    
         
             
                        # @return [Hash<String, String>] 開始日
         
     | 
| 
       35 
     | 
    
         
            -
                        attr_reader : 
     | 
| 
      
 35 
     | 
    
         
            +
                        attr_reader :start_date
         
     | 
| 
      
 36 
     | 
    
         
            +
                        # @return [True, False] 運用値
         
     | 
| 
      
 37 
     | 
    
         
            +
                        attr_reader :operated
         
     | 
| 
       36 
38 
     | 
    
         | 
| 
       37 
39 
     | 
    
         
             
                        #
         
     | 
| 
       38 
40 
     | 
    
         
             
                        # 初期化
         
     | 
| 
         @@ -40,11 +42,12 @@ module Zakuro 
     | 
|
| 
       40 
42 
     | 
    
         
             
                        # @param [Hash<String, Strin>] hash 元号情報
         
     | 
| 
       41 
43 
     | 
    
         
             
                        # @param [Integer] index (元号セット内での)元号の要素位置
         
     | 
| 
       42 
44 
     | 
    
         
             
                        #
         
     | 
| 
       43 
     | 
    
         
            -
                        def initialize(hash:, index:)
         
     | 
| 
      
 45 
     | 
    
         
            +
                        def initialize(hash:, index:, operated: false)
         
     | 
| 
       44 
46 
     | 
    
         
             
                          @index = index
         
     | 
| 
       45 
47 
     | 
    
         
             
                          @name = hash['name']
         
     | 
| 
       46 
     | 
    
         
            -
                          @ 
     | 
| 
       47 
     | 
    
         
            -
                          @ 
     | 
| 
      
 48 
     | 
    
         
            +
                          @start_year = hash['start_year']
         
     | 
| 
      
 49 
     | 
    
         
            +
                          @start_date = hash['start_date']
         
     | 
| 
      
 50 
     | 
    
         
            +
                          @operated = operated
         
     | 
| 
       48 
51 
     | 
    
         
             
                        end
         
     | 
| 
       49 
52 
     | 
    
         | 
| 
       50 
53 
     | 
    
         
             
                        #
         
     | 
| 
         @@ -53,11 +56,11 @@ module Zakuro 
     | 
|
| 
       53 
56 
     | 
    
         
             
                        # @return [Gengou] 元号情報
         
     | 
| 
       54 
57 
     | 
    
         
             
                        #
         
     | 
| 
       55 
58 
     | 
    
         
             
                        def create
         
     | 
| 
       56 
     | 
    
         
            -
                           
     | 
| 
       57 
     | 
    
         
            -
                           
     | 
| 
      
 59 
     | 
    
         
            +
                          year = Both::YearParser.new(hash: start_year).create
         
     | 
| 
      
 60 
     | 
    
         
            +
                          date = SwitchDateParser.new(hash: start_date, operated: operated).create
         
     | 
| 
       58 
61 
     | 
    
         | 
| 
       59 
     | 
    
         
            -
                          Gengou.new(name: name,  
     | 
| 
       60 
     | 
    
         
            -
                                      
     | 
| 
      
 62 
     | 
    
         
            +
                          Gengou.new(name: name, start_year: year,
         
     | 
| 
      
 63 
     | 
    
         
            +
                                     start_date: date)
         
     | 
| 
       61 
64 
     | 
    
         
             
                        end
         
     | 
| 
       62 
65 
     | 
    
         
             
                      end
         
     | 
| 
       63 
66 
     | 
    
         | 
| 
         @@ -70,23 +73,27 @@ module Zakuro 
     | 
|
| 
       70 
73 
     | 
    
         
             
                        # @return [String] 元号セット名
         
     | 
| 
       71 
74 
     | 
    
         
             
                        attr_reader :name
         
     | 
| 
       72 
75 
     | 
    
         
             
                        # @return [Hash<String, String>] 終了年
         
     | 
| 
       73 
     | 
    
         
            -
                        attr_reader : 
     | 
| 
      
 76 
     | 
    
         
            +
                        attr_reader :last_year
         
     | 
| 
       74 
77 
     | 
    
         
             
                        # @return [Hash<String, String>] 終了日
         
     | 
| 
       75 
     | 
    
         
            -
                        attr_reader : 
     | 
| 
      
 78 
     | 
    
         
            +
                        attr_reader :last_date
         
     | 
| 
       76 
79 
     | 
    
         
             
                        # @return [Array<Hash<String, String>>] 元号情報
         
     | 
| 
       77 
80 
     | 
    
         
             
                        attr_reader :list
         
     | 
| 
      
 81 
     | 
    
         
            +
                        # @return [True, False] 運用値
         
     | 
| 
      
 82 
     | 
    
         
            +
                        attr_reader :operated
         
     | 
| 
       78 
83 
     | 
    
         | 
| 
       79 
84 
     | 
    
         
             
                        #
         
     | 
| 
       80 
85 
     | 
    
         
             
                        # 初期化
         
     | 
| 
       81 
86 
     | 
    
         
             
                        #
         
     | 
| 
       82 
87 
     | 
    
         
             
                        # @param [Hash<String, Object>] hash 元号セット情報
         
     | 
| 
      
 88 
     | 
    
         
            +
                        # @param [True, False] operated 運用値設定
         
     | 
| 
       83 
89 
     | 
    
         
             
                        #
         
     | 
| 
       84 
     | 
    
         
            -
                        def initialize(hash:)
         
     | 
| 
      
 90 
     | 
    
         
            +
                        def initialize(hash:, operated: false)
         
     | 
| 
       85 
91 
     | 
    
         
             
                          @id = hash['id']
         
     | 
| 
       86 
92 
     | 
    
         
             
                          @name = hash['name']
         
     | 
| 
       87 
     | 
    
         
            -
                          @ 
     | 
| 
       88 
     | 
    
         
            -
                          @ 
     | 
| 
      
 93 
     | 
    
         
            +
                          @last_year = hash['last_year']
         
     | 
| 
      
 94 
     | 
    
         
            +
                          @last_date = hash['last_date']
         
     | 
| 
       89 
95 
     | 
    
         
             
                          @list = hash['list']
         
     | 
| 
      
 96 
     | 
    
         
            +
                          @operated = operated
         
     | 
| 
       90 
97 
     | 
    
         
             
                        end
         
     | 
| 
       91 
98 
     | 
    
         | 
| 
       92 
99 
     | 
    
         
             
                        #
         
     | 
| 
         @@ -95,10 +102,10 @@ module Zakuro 
     | 
|
| 
       95 
102 
     | 
    
         
             
                        # @return [Set] 元号セット情報
         
     | 
| 
       96 
103 
     | 
    
         
             
                        #
         
     | 
| 
       97 
104 
     | 
    
         
             
                        def create
         
     | 
| 
       98 
     | 
    
         
            -
                           
     | 
| 
      
 105 
     | 
    
         
            +
                          date = SwitchDateParser.new(hash: last_date, operated: operated).create
         
     | 
| 
       99 
106 
     | 
    
         
             
                          list = create_list
         
     | 
| 
       100 
107 
     | 
    
         
             
                          Set.new(
         
     | 
| 
       101 
     | 
    
         
            -
                            id: id, name: name,  
     | 
| 
      
 108 
     | 
    
         
            +
                            id: id, name: name, last_date: date, list: list
         
     | 
| 
       102 
109 
     | 
    
         
             
                          )
         
     | 
| 
       103 
110 
     | 
    
         
             
                        end
         
     | 
| 
       104 
111 
     | 
    
         | 
| 
         @@ -112,7 +119,9 @@ module Zakuro 
     | 
|
| 
       112 
119 
     | 
    
         
             
                        def create_list
         
     | 
| 
       113 
120 
     | 
    
         
             
                          result = []
         
     | 
| 
       114 
121 
     | 
    
         
             
                          list.each_with_index do |li, index|
         
     | 
| 
       115 
     | 
    
         
            -
                            gengou = GengouParser.new( 
     | 
| 
      
 122 
     | 
    
         
            +
                            gengou = GengouParser.new(
         
     | 
| 
      
 123 
     | 
    
         
            +
                              hash: li, index: index, operated: operated
         
     | 
| 
      
 124 
     | 
    
         
            +
                            ).create
         
     | 
| 
       116 
125 
     | 
    
         
             
                            next_index = index + 1
         
     | 
| 
       117 
126 
     | 
    
         
             
                            gengou = calc_last_date_on_gengou_data(next_index: next_index,
         
     | 
| 
       118 
127 
     | 
    
         
             
                                                                   gengou: gengou)
         
     | 
| 
         @@ -136,11 +145,15 @@ module Zakuro 
     | 
|
| 
       136 
145 
     | 
    
         
             
                            return gengou
         
     | 
| 
       137 
146 
     | 
    
         
             
                          end
         
     | 
| 
       138 
147 
     | 
    
         
             
                          next_item = list[next_index]
         
     | 
| 
      
 148 
     | 
    
         
            +
                          next_start_date = SwitchDateParser.new(
         
     | 
| 
      
 149 
     | 
    
         
            +
                            hash: next_item['start_date'], operated: operated
         
     | 
| 
      
 150 
     | 
    
         
            +
                          ).create
         
     | 
| 
      
 151 
     | 
    
         
            +
             
     | 
| 
       139 
152 
     | 
    
         
             
                          gengou.convert_next_start_year_to_last_year(
         
     | 
| 
       140 
153 
     | 
    
         
             
                            next_start_year: next_item['start_year']['western']
         
     | 
| 
       141 
154 
     | 
    
         
             
                          )
         
     | 
| 
       142 
155 
     | 
    
         
             
                          gengou.convert_next_start_date_to_last_date(
         
     | 
| 
       143 
     | 
    
         
            -
                            next_start_date:  
     | 
| 
      
 156 
     | 
    
         
            +
                            next_start_date: next_start_date.western
         
     | 
| 
       144 
157 
     | 
    
         
             
                          )
         
     | 
| 
       145 
158 
     | 
    
         
             
                          gengou
         
     | 
| 
       146 
159 
     | 
    
         
             
                        end
         
     | 
| 
         @@ -153,9 +166,50 @@ module Zakuro 
     | 
|
| 
       153 
166 
     | 
    
         
             
                        # @param [GengouParser] gengou 元号
         
     | 
| 
       154 
167 
     | 
    
         
             
                        #
         
     | 
| 
       155 
168 
     | 
    
         
             
                        def last_gengou_data(gengou:)
         
     | 
| 
       156 
     | 
    
         
            -
                          gengou.write_last_year(last_year:  
     | 
| 
       157 
     | 
    
         
            -
             
     | 
| 
       158 
     | 
    
         
            -
                           
     | 
| 
      
 169 
     | 
    
         
            +
                          gengou.write_last_year(last_year: last_year['western'])
         
     | 
| 
      
 170 
     | 
    
         
            +
             
     | 
| 
      
 171 
     | 
    
         
            +
                          date = SwitchDateParser.new(hash: last_date, operated: operated).create
         
     | 
| 
      
 172 
     | 
    
         
            +
             
     | 
| 
      
 173 
     | 
    
         
            +
                          gengou.write_last_date(last_date: date.western)
         
     | 
| 
      
 174 
     | 
    
         
            +
                        end
         
     | 
| 
      
 175 
     | 
    
         
            +
                      end
         
     | 
| 
      
 176 
     | 
    
         
            +
             
     | 
| 
      
 177 
     | 
    
         
            +
                      #
         
     | 
| 
      
 178 
     | 
    
         
            +
                      # SwitchDateParser 切替日(運用/計算)
         
     | 
| 
      
 179 
     | 
    
         
            +
                      #
         
     | 
| 
      
 180 
     | 
    
         
            +
                      class SwitchDateParser
         
     | 
| 
      
 181 
     | 
    
         
            +
                        # @return [Hash<String, Strin>] 計算値
         
     | 
| 
      
 182 
     | 
    
         
            +
                        attr_reader :calculation
         
     | 
| 
      
 183 
     | 
    
         
            +
                        # @return [Hash<String, Strin>] 運用値
         
     | 
| 
      
 184 
     | 
    
         
            +
                        attr_reader :operation
         
     | 
| 
      
 185 
     | 
    
         
            +
                        # @return [True, False] 運用値
         
     | 
| 
      
 186 
     | 
    
         
            +
                        attr_reader :operated
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                        #
         
     | 
| 
      
 189 
     | 
    
         
            +
                        # 初期化
         
     | 
| 
      
 190 
     | 
    
         
            +
                        #
         
     | 
| 
      
 191 
     | 
    
         
            +
                        # @param [Hash<String, Strin>] hash 切替日(運用/計算)
         
     | 
| 
      
 192 
     | 
    
         
            +
                        # @param [True, False] operated 運用値設定
         
     | 
| 
      
 193 
     | 
    
         
            +
                        #
         
     | 
| 
      
 194 
     | 
    
         
            +
                        def initialize(hash:, operated: false)
         
     | 
| 
      
 195 
     | 
    
         
            +
                          @calculation = hash['calculation']
         
     | 
| 
      
 196 
     | 
    
         
            +
                          @operation = hash['operation']
         
     | 
| 
      
 197 
     | 
    
         
            +
                          @operated = operated
         
     | 
| 
      
 198 
     | 
    
         
            +
                        end
         
     | 
| 
      
 199 
     | 
    
         
            +
             
     | 
| 
      
 200 
     | 
    
         
            +
                        #
         
     | 
| 
      
 201 
     | 
    
         
            +
                        # 切替日(運用/計算)情報を生成する
         
     | 
| 
      
 202 
     | 
    
         
            +
                        #
         
     | 
| 
      
 203 
     | 
    
         
            +
                        # @return [SwitchDate] 切替日(運用/計算)情報
         
     | 
| 
      
 204 
     | 
    
         
            +
                        #
         
     | 
| 
      
 205 
     | 
    
         
            +
                        def create
         
     | 
| 
      
 206 
     | 
    
         
            +
                          calculation_date = Both::DateParser.new(hash: calculation).create
         
     | 
| 
      
 207 
     | 
    
         
            +
                          operation_date = Both::DateParser.new(hash: operation).create
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
                          Japan::Gengou::Resource::SwitchDate.new(
         
     | 
| 
      
 210 
     | 
    
         
            +
                            calculation: calculation_date, operation: operation_date,
         
     | 
| 
      
 211 
     | 
    
         
            +
                            operated: operated
         
     | 
| 
      
 212 
     | 
    
         
            +
                          )
         
     | 
| 
       159 
213 
     | 
    
         
             
                        end
         
     | 
| 
       160 
214 
     | 
    
         
             
                      end
         
     | 
| 
       161 
215 
     | 
    
         | 
| 
         @@ -222,8 +276,11 @@ module Zakuro 
     | 
|
| 
       222 
276 
     | 
    
         
             
                          # @return [Both::Date] 日情報
         
     | 
| 
       223 
277 
     | 
    
         
             
                          #
         
     | 
| 
       224 
278 
     | 
    
         
             
                          def create
         
     | 
| 
       225 
     | 
    
         
            -
                            japan_date = Japan::Calendar. 
     | 
| 
       226 
     | 
    
         
            -
                            western_date = Western::Calendar. 
     | 
| 
      
 279 
     | 
    
         
            +
                            japan_date = Japan::Calendar.new
         
     | 
| 
      
 280 
     | 
    
         
            +
                            western_date = Western::Calendar.new
         
     | 
| 
      
 281 
     | 
    
         
            +
             
     | 
| 
      
 282 
     | 
    
         
            +
                            japan_date = Japan::Calendar.parse(text: japan) unless japan == ''
         
     | 
| 
      
 283 
     | 
    
         
            +
                            western_date = Western::Calendar.parse(text: western) unless western == ''
         
     | 
| 
       227 
284 
     | 
    
         | 
| 
       228 
285 
     | 
    
         
             
                            Japan::Gengou::Resource::Both::Date.new(
         
     | 
| 
       229 
286 
     | 
    
         
             
                              japan: japan_date, western: western_date
         
     | 
| 
         @@ -237,19 +294,20 @@ module Zakuro 
     | 
|
| 
       237 
294 
     | 
    
         
             
                        # 解析/展開する
         
     | 
| 
       238 
295 
     | 
    
         
             
                        #
         
     | 
| 
       239 
296 
     | 
    
         
             
                        # @param [String] filepath 元号セットファイルパス
         
     | 
| 
      
 297 
     | 
    
         
            +
                        # @param [True, False] operated 運用値設定
         
     | 
| 
       240 
298 
     | 
    
         
             
                        #
         
     | 
| 
       241 
299 
     | 
    
         
             
                        # @return [Set] 元号セット情報
         
     | 
| 
       242 
300 
     | 
    
         
             
                        #
         
     | 
| 
       243 
301 
     | 
    
         
             
                        # @raise [ArgumentError] 引数エラー
         
     | 
| 
       244 
302 
     | 
    
         
             
                        #
         
     | 
| 
       245 
     | 
    
         
            -
                        def run(filepath: '')
         
     | 
| 
      
 303 
     | 
    
         
            +
                        def run(filepath: '', operated: false)
         
     | 
| 
       246 
304 
     | 
    
         
             
                          yaml = YAML.load_file(filepath)
         
     | 
| 
       247 
305 
     | 
    
         | 
| 
       248 
306 
     | 
    
         
             
                          failed = Validator.run(yaml_hash: yaml)
         
     | 
| 
       249 
307 
     | 
    
         | 
| 
       250 
308 
     | 
    
         
             
                          raise ArgumentError, failed.join("\n") unless failed.empty?
         
     | 
| 
       251 
309 
     | 
    
         | 
| 
       252 
     | 
    
         
            -
                          parser = SetParser.new(hash: yaml)
         
     | 
| 
      
 310 
     | 
    
         
            +
                          parser = SetParser.new(hash: yaml, operated: operated)
         
     | 
| 
       253 
311 
     | 
    
         
             
                          parser.create
         
     | 
| 
       254 
312 
     | 
    
         
             
                        end
         
     | 
| 
       255 
313 
     | 
    
         
             
                      end
         
     |