lib/zakuro/era/japan/gengou/resource/parser.rb in zakuro-0.6.1 vs lib/zakuro/era/japan/gengou/resource/parser.rb in zakuro-0.7.0

- old
+ new

@@ -5,238 +5,239 @@ require_relative './validator' require 'yaml' # :nodoc: module Zakuro - # - # Japan 和暦 - # + # :nodoc: module Japan - # - # Resource yaml解析結果 - # - module Resource - # :reek:TooManyInstanceVariables { max_instance_variables: 5 } - + # :nodoc: + module Gengou # - # Parser yaml解析 + # Resource yaml解析結果 # - module Parser - # - # GengouParser 元号情報の検証/展開を行う - # - class GengouParser - # @return [Integer] 要素位置 - attr_reader :index - # @return [String] 元号名 - attr_reader :name - # @return [Hash<String, String>] 開始年 - attr_reader :both_start_year - # @return [Hash<String, String>] 開始日 - attr_reader :both_start_date + module Resource + # :reek:TooManyInstanceVariables { max_instance_variables: 5 } - # - # 初期化 - # - # @param [Hash<String, Strin>] hash 元号情報 - # @param [Integer] index (元号セット内での)元号の要素位置 - # - def initialize(hash:, index:) - @index = index - @name = hash['name'] - @both_start_year = hash['start_year'] - @both_start_date = hash['start_date'] - end - - # - # 元号情報を生成する - # - # @return [Gengou] 元号情報 - # - def create - both_start_year = Both::YearParser.new(hash: @both_start_year).create - both_start_date = Both::DateParser.new(hash: @both_start_date).create - - Gengou.new(name: @name, both_start_year: both_start_year, - both_start_date: both_start_date) - end - end - # - # SetParser 元号セット情報の検証/展開 + # Parser yaml解析 # - class SetParser - # @return [String] 元号セットID - attr_reader :id - # @return [String] 元号セット名 - attr_reader :name - # @return [Hash<String, String>] 終了年 - attr_reader :both_last_year - # @return [Hash<String, String>] 終了日 - attr_reader :both_last_date - # @return [Array<Hash<String, String>>] 元号情報 - attr_reader :list - + module Parser # - # 初期化 + # GengouParser 元号情報の検証/展開を行う # - # @param [Hash<String, Object>] hash 元号セット情報 - # - def initialize(hash:) - @id = hash['id'] - @name = hash['name'] - @both_last_year = hash['last_year'] - @both_last_date = hash['last_date'] - @list = hash['list'] - end + class GengouParser + # @return [Integer] 要素位置 + attr_reader :index + # @return [String] 元号名 + attr_reader :name + # @return [Hash<String, String>] 開始年 + attr_reader :both_start_year + # @return [Hash<String, String>] 開始日 + attr_reader :both_start_date - # - # 元号セット情報を生成する - # - # @return [Set] 元号セット情報 - # - def create - both_last_date = Both::DateParser.new(hash: @both_last_date).create - list = create_list - Set.new( - id: @id, name: @name, both_last_date: both_last_date, list: list - ) - end - - # :reek:TooManyStatements { max_statements: 7 } - - # - # 元号情報を生成する - # - # @return [Array<Gengou>] 元号情報 - # - def create_list - result = [] - @list.each_with_index do |li, index| - gengou = GengouParser.new(hash: li, index: index).create - next_index = index + 1 - gengou = calc_last_date_on_gengou_data(next_index: next_index, - gengou: gengou) - result.push(gengou) + # + # 初期化 + # + # @param [Hash<String, Strin>] hash 元号情報 + # @param [Integer] index (元号セット内での)元号の要素位置 + # + def initialize(hash:, index:) + @index = index + @name = hash['name'] + @both_start_year = hash['start_year'] + @both_start_date = hash['start_date'] end - result - end + # + # 元号情報を生成する + # + # @return [Gengou] 元号情報 + # + def create + both_start_year = Both::YearParser.new(hash: @both_start_year).create + both_start_date = Both::DateParser.new(hash: @both_start_date).create - # :reek:TooManyStatements { max_statements: 6 } - - # - # 次の元号の開始日から、元号の終了日に変換する - # - # @param [Integer] next_index 次の元号の要素位置 - # @param [String] gengou 次回開始日 - # - # @return [Gengou] 元号情報 - # - def calc_last_date_on_gengou_data(next_index:, gengou:) - if next_index >= @list.size - gengou.write_last_year(last_year: @both_last_year['western']) - last_date = Western::Calendar.parse(str: @both_last_date['western']) - gengou.write_last_date(last_date: last_date) - return gengou + Gengou.new(name: @name, both_start_year: both_start_year, + both_start_date: both_start_date) end - next_item = @list[next_index] - gengou.convert_next_start_year_to_last_year( - next_start_year: next_item['start_year']['western'] - ) - gengou.convert_next_start_date_to_last_date( - next_start_date: next_item['start_date']['western'] - ) - gengou end - end - # - # 和暦/西暦 - # - module Both # - # YearParser 年 + # SetParser 元号セット情報の検証/展開 # - class YearParser - # @return [Integer] 和暦元号年 - attr_reader :japan - # @return [Integer] 西暦年 - attr_reader :western + class SetParser + # @return [String] 元号セットID + attr_reader :id + # @return [String] 元号セット名 + attr_reader :name + # @return [Hash<String, String>] 終了年 + attr_reader :both_last_year + # @return [Hash<String, String>] 終了日 + attr_reader :both_last_date + # @return [Array<Hash<String, String>>] 元号情報 + attr_reader :list # # 初期化 # - # @param [Hash<String, Object>] hash 年情報 + # @param [Hash<String, Object>] hash 元号セット情報 # def initialize(hash:) - @japan = hash['japan'] - @western = hash['western'] + @id = hash['id'] + @name = hash['name'] + @both_last_year = hash['last_year'] + @both_last_date = hash['last_date'] + @list = hash['list'] end # - # 年情報を生成する + # 元号セット情報を生成する # - # @return [Both::Year] 年情報 + # @return [Set] 元号セット情報 # def create - japan = @japan.to_i - western = @western.to_i + both_last_date = Both::DateParser.new(hash: @both_last_date).create + list = create_list + Set.new( + id: @id, name: @name, both_last_date: both_last_date, list: list + ) + end - Japan::Resource::Both::Year.new(japan: japan, western: western) + # :reek:TooManyStatements { max_statements: 7 } + + # + # 元号情報を生成する + # + # @return [Array<Gengou>] 元号情報 + # + def create_list + result = [] + @list.each_with_index do |li, index| + gengou = GengouParser.new(hash: li, index: index).create + next_index = index + 1 + gengou = calc_last_date_on_gengou_data(next_index: next_index, + gengou: gengou) + result.push(gengou) + end + + result end - end - # - # DateParser 日 - # - class DateParser - # @return [Japan::Calendar] 和暦日 - attr_reader :japan - # @return [Western::Calendar] 西暦日 - attr_reader :western + # :reek:TooManyStatements { max_statements: 6 } # - # 初期化 + # 次の元号の開始日から、元号の終了日に変換する # - # @param [Hash<String, Object>] hash 日情報 + # @param [Integer] next_index 次の元号の要素位置 + # @param [String] gengou 次回開始日 # - def initialize(hash:) - @japan = hash['japan'] - @western = hash['western'] + # @return [Gengou] 元号情報 + # + def calc_last_date_on_gengou_data(next_index:, gengou:) + if next_index >= @list.size + gengou.write_last_year(last_year: @both_last_year['western']) + last_date = Western::Calendar.parse(text: @both_last_date['western']) + gengou.write_last_date(last_date: last_date) + return gengou + end + next_item = @list[next_index] + gengou.convert_next_start_year_to_last_year( + next_start_year: next_item['start_year']['western'] + ) + gengou.convert_next_start_date_to_last_date( + next_start_date: next_item['start_date']['western'] + ) + gengou end + end + # + # 和暦/西暦 + # + module Both # - # 日情報を生成する + # YearParser 年 # - # @return [Both::Date] 日情報 + class YearParser + # @return [Integer] 和暦元号年 + attr_reader :japan + # @return [Integer] 西暦年 + attr_reader :western + + # + # 初期化 + # + # @param [Hash<String, Object>] hash 年情報 + # + def initialize(hash:) + @japan = hash['japan'] + @western = hash['western'] + end + + # + # 年情報を生成する + # + # @return [Both::Year] 年情報 + # + def create + japan = @japan.to_i + western = @western.to_i + + Japan::Gengou::Resource::Both::Year.new(japan: japan, western: western) + end + end + # - def create - japan = Japan::Calendar.parse(text: @japan) - western = Western::Calendar.parse(str: @western) + # DateParser 日 + # + class DateParser + # @return [Japan::Calendar] 和暦日 + attr_reader :japan + # @return [Western::Calendar] 西暦日 + attr_reader :western - Japan::Resource::Both::Date.new(japan: japan, western: western) + # + # 初期化 + # + # @param [Hash<String, Object>] hash 日情報 + # + def initialize(hash:) + @japan = hash['japan'] + @western = hash['western'] + end + + # + # 日情報を生成する + # + # @return [Both::Date] 日情報 + # + def create + japan = Japan::Calendar.parse(text: @japan) + western = Western::Calendar.parse(text: @western) + + Japan::Gengou::Resource::Both::Date.new(japan: japan, western: western) + end end end - end - # - # 解析/展開する - # - # @param [String] filepath 元号セットファイルパス - # - # @return [Set] 元号セット情報 - # - def self.run(filepath: '') - yaml = YAML.load_file(filepath) + # + # 解析/展開する + # + # @param [String] filepath 元号セットファイルパス + # + # @return [Set] 元号セット情報 + # + def self.run(filepath: '') + yaml = YAML.load_file(filepath) - failed = Validator.run(yaml_hash: yaml) + failed = Validator.run(yaml_hash: yaml) - raise ArgumentError, failed.join("\n") unless failed.empty? + raise ArgumentError, failed.join("\n") unless failed.empty? - parser = SetParser.new(hash: yaml) - parser.create + parser = SetParser.new(hash: yaml) + parser.create + end end end + end end -end end