Module: Sekki24::KouNames

Defined in:
lib/sekki24/kou_names.rb

Defined Under Namespace

Classes: Definition

Constant Summary collapse

NAMES =
[
  ["東風解凍", "はるかぜこおりをとく"], ["黄鶯睍睆", "うぐいすなく"], ["魚上氷", "うおこおりをいずる"],
  ["土脉潤起", "つちのしょううるおいおこる"], ["霞始靆", "かすみはじめてたなびく"], ["草木萌動", "そうもくめばえいずる"],
  ["蟄虫啓戸", "すごもりむしとをひらく"], ["桃始笑", "ももはじめてさく"], ["菜虫化蝶", "なむしちょうとなる"],
  ["雀始巣", "すずめはじめてすくう"], ["桜始開", "さくらはじめてひらく"], ["雷乃発声", "かみなりすなわちこえをはっす"],
  ["玄鳥至", "つばめきたる"], ["鴻雁北", "こうがんかえる"], ["虹始見", "にじはじめてあらわる"],
  ["葭始生", "あしはじめてしょうず"], ["霜止出苗", "しもやみてなえいずる"], ["牡丹華", "ぼたんはなさく"],
  ["蛙始鳴", "かわずはじめてなく"], ["蚯蚓出", "みみずいずる"], ["竹笋生", "たけのこしょうず"],
  ["蚕起食桑", "かいこおきてくわをはむ"], ["紅花栄", "べにばなさかう"], ["麦秋至", "むぎのときいたる"],
  ["螳螂生", "かまきりしょうず"], ["腐草為螢", "くされたるくさほたるとなる"], ["梅子黄", "うめのみきばむ"],
  ["乃東枯", "なつかれくさかるる"], ["菖蒲華", "あやめはなさく"], ["半夏生", "はんげしょうず"],
  ["温風至", "あつかぜいたる"], ["蓮始開", "はすはじめてひらく"], ["鷹乃学習", "たかすなわちわざをならう"],
  ["桐始結花", "きりはじめてはなをむすぶ"], ["土潤溽暑", "つちうるおうてむしあつし"], ["大雨時行", "たいうときどきふる"],
  ["涼風至", "すずかぜいたる"], ["寒蝉鳴", "ひぐらしなく"], ["蒙霧升降", "ふかききりまとう"],
  ["綿柎開", "わたのはなしべひらく"], ["天地始粛", "てんちはじめてさむし"], ["禾乃登", "こくものすなわちみのる"],
  ["草露白", "くさのつゆしろし"], ["鶺鴒鳴", "せきれいなく"], ["玄鳥去", "つばめさる"],
  ["雷乃収声", "かみなりすなわちこえをおさむ"], ["蟄虫坏戸", "むしかくれてとをふさぐ"], ["水始涸", "みずはじめてかるる"],
  ["鴻雁来", "こうがんきたる"], ["菊花開", "きくのはなひらく"], ["蟋蟀在戸", "きりぎりすとにあり"],
  ["霜始降", "しもはじめてふる"], ["霎時施", "こさめときどきふる"], ["楓蔦黄", "もみじつたきばむ"],
  ["山茶始開", "つばきはじめてひらく"], ["地始凍", "ちはじめてこおる"], ["金盞香", "きんせんかさく"],
  ["虹蔵不見", "にじかくれてみえず"], ["朔風払葉", "きたかぜこのはをはらう"], ["橘始黄", "たちばなはじめてきばむ"],
  ["閉塞成冬", "そらさむくふゆとなる"], ["熊蟄穴", "くまあなにこもる"], ["鱖魚群", "さけのうおむらがる"],
  ["乃東生", "なつかれくさしょうず"], ["麋角解", "さわしかのつのおつる"], ["雪下出麦", "ゆきわたりてむぎのびる"],
  ["芹乃栄", "せりすなわちさかう"], ["水泉動", "しみずあたたかをふくむ"], ["雉始雊", "きじはじめてなく"],
  ["款冬華", "ふきのはなさく"], ["水沢腹堅", "さわみずこおりつめる"], ["鶏始乳", "にわとりはじめてとやにつく"]
].map(&:freeze).freeze
POSITIONS =
%i[initial secondary final].freeze
TERMS =
Names::TERMS.each_with_index.flat_map do |term, term_index|
  3.times.map do |position_index|
    ordinal = (term_index * 3) + position_index + 1
    name_ja, reading = NAMES.fetch(ordinal - 1)
    Definition.new(
      ordinal: ordinal,
      name_ja: name_ja,
      reading: reading,
      longitude: (term.longitude + (position_index * 5)) % 360,
      term_key: term.key,
      position: POSITIONS.fetch(position_index)
    ).freeze
  end
end.freeze
BY_ORDINAL =
TERMS.to_h { |definition| [definition.ordinal, definition] }.freeze

Class Method Summary collapse

Class Method Details

.fetch(ordinal) ⇒ Object



54
55
56
57
58
# File 'lib/sekki24/kou_names.rb', line 54

def fetch(ordinal)
  BY_ORDINAL.fetch(Integer(ordinal))
rescue ArgumentError, TypeError, KeyError
  raise ArgumentError, "kou ordinal must be between 1 and 72"
end