Method: When::TM::CalendarEra._instance

Defined in:
lib/when_exe/tmreference.rb

._instance(key, epoch = nil, reverse = nil, options = {}) ⇒ Object

Note:

検索用のインデクスはインスタンスの生成時に作成する。作成後にキーワードとなる年号(M17nクラス)にローケールが追加されても反映されない。

When::TM::CalendarEra オブジェクトを検索し取得する

Parameters:

  • key (String, Regexp)

    検索する暦年代または、暦年代にマッチする正規表現

  • epoch (Integer) (defaults to: nil)

    年数を昇順にカウントする方式での暦元(0年)の通年(デフォルトは nil - 指定なし)

  • reverse (Integer) (defaults to: nil)

    年数を降順にカウントする方式での暦元(0年)の通年(デフォルトは nil - 指定なし)

  • options (Hash) (defaults to: {})

    以下の通り

Options Hash (options):

  • :area (String)

    暦年代の使用地域の指定(デフォルトは nil - 指定なし)

  • :period (String)

    暦年代の使用時代の指定(デフォルトは nil - 指定なし)

  • :count (Integer)

    何件ヒットするまで検索するかを指定(デフォルトは 1件)

  • the_others (String)

    例えば When::TM::CalendarEra オブジェクトの epoch_of_use に ‘name’ などの指定がある場合、:name に指定しておけば、検索での絞り込みに使用できる。



1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
# File 'lib/when_exe/tmreference.rb', line 1026

def _instance(*args)
  # パラメータ
  args    = args.dup
  options = (args[-1].kind_of?(Hash)) ? args.pop.dup : {}
  key, epoch, reverse = options.delete(:label) || args
  key = When::Locale.ideographic_unification(key)
  if key.kind_of?(String)
    key.gsub!(When::Parts::Resource::IRIDecode) {|c| When::Parts::Resource::IRIDecodeTable[c]}
    key, *parents = key.split(/::/).reverse
  else
    parents = []
  end
  area    = options.delete(:area)
  period  = options.delete(:period)
  count   = options.delete(:count) || 1

  # 候補
  _setup_ unless @_pool
  pool = _candidates(options, area, period, key, epoch,  false) +
         _candidates(options, area, period, key, reverse, true)
  _compact(pool, parents)
  return pool unless pool.size < count

  order = @order
  if /\?.+?=/ =~ parents[-1]
    begin
      head  = When.CalendarEra(parents[-1])
      order = order.dup.unshift(head)
    rescue
    end
  end
  order.each do |iri|
    When.CalendarEra(iri)
    pool = _candidates(options, area, period, key, epoch,  false) +
           _candidates(options, area, period, key, reverse, true)
    _compact(pool, parents)
    return pool unless pool.size < count
  end

  return []
end