diff --git a/lib/datasets/house-of-representative.rb b/lib/datasets/house-of-representative.rb index 8ccdc14e..e42c652b 100644 --- a/lib/datasets/house-of-representative.rb +++ b/lib/datasets/house-of-representative.rb @@ -76,10 +76,11 @@ def open_data data_path = cache_dir_path + "gian.csv" download(data_path, data_url) + parser = JapaneseDateParser.new japanese_date_converter = lambda do |field, info| case info.header when /年月日\z/ - JapaneseDateParser.new(field).parse + parser.parse(field) else field end diff --git a/lib/datasets/japanese-date-parser.rb b/lib/datasets/japanese-date-parser.rb index 46b27963..2d596e4b 100644 --- a/lib/datasets/japanese-date-parser.rb +++ b/lib/datasets/japanese-date-parser.rb @@ -7,12 +7,8 @@ class UnsupportedEraInitialRange < Error; end "令和" => "R", }.freeze - def initialize(string) - @string = string - end - - def parse - case @string + def parse(string) + case string when nil nil when /\A(平成|令和|..)\s*(\d{1,2}|元)年\s*(\d{1,2})月\s*(\d{1,2})日\z/ @@ -35,7 +31,7 @@ def parse day = match_data[4].rjust(2, "0") Date.jisx0301("#{era_initial}#{year}.#{month}.#{day}") else - @string + string end end end diff --git a/test/japanese-date-parser-test.rb b/test/japanese-date-parser-test.rb index 88b062b4..7004db16 100644 --- a/test/japanese-date-parser-test.rb +++ b/test/japanese-date-parser-test.rb @@ -1,4 +1,8 @@ class JapaneseDateParserTest < Test::Unit::TestCase + def setup + @parser = Datasets::JapaneseDateParser.new + end + data("month and day with leading a space in Heisei", ["H10.01.01", "平成10年 1月 1日"]) data("month with leading a space in Heisei", ["H10.01.10", "平成10年 1月10日"]) data(" day with leading a space in Heisei", ["H10.10.01", "平成10年10月 1日"]) @@ -11,13 +15,13 @@ class JapaneseDateParserTest < Test::Unit::TestCase data("boundary within Reiwa", ["R01.05.01", "令和元年 5月 1日"]) test("#parse") do expected_jisx0301, japanese_date_string = data - assert_equal(expected_jisx0301, Datasets::JapaneseDateParser.new(japanese_date_string).parse.jisx0301) + assert_equal(expected_jisx0301, @parser.parse(japanese_date_string).jisx0301) end test("unsupported era initial range") do expected_message = "era must be one of [平成, 令和]: 昭和" assert_raise(Datasets::JapaneseDateParser::UnsupportedEraInitialRange.new(expected_message)) do - Datasets::JapaneseDateParser.new("昭和元年 1月 1日").parse + @parser.parse(("昭和元年 1月 1日")) end end end