Module: When::CalendarNote::NotesContainer

Defined in:
lib/when_exe/calendarnote.rb

Overview

暦注検索結果を保存するコンテナ

Instance Method Summary collapse

Instance Method Details

#[](symbol) ⇒ Array

Note:

引数 symbol が Integer の場合は添え字とみなして元の配列の要素を取り出す

暦注検索結果コンテナのハッシュ要素

Parameters:

  • symbol (Symbol)

    取り出したいハッシュ要素(:note, :value, etc.)

Returns:

  • (Array)

    ハッシュ要素からなる配列(元の構造が配列であった場合)



141
142
143
# File 'lib/when_exe/calendarnote.rb', line 141

def [](symbol)
  value(false, symbol)
end

#simplify(compact = true) ⇒ NotesContainer

暦注検索結果コンテナの次元を下げる

Parameters:

  • compact (Boolean) (defaults to: true)

    余分な nil や空配列を除去するか否か

Returns:



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/when_exe/calendarnote.rb', line 87

def simplify(compact=true)
  if kind_of?(Hash) && !key?(:note)
    # Persistent NotesContainer
    simplified = {}
    each_pair do |key, value|
      value = value.simplify(compact) if value.kind_of?(NotesContainer)
      simplified[key] = value if value
    end
  else
    # Non-Persistent NotesContainer
    simplified = self
    simplified = _compact(simplified) if compact
    simplified = simplified[0] while simplified.kind_of?(Array) && simplified.size <= 1
  end
   _bless(simplified)
end

#subset(condition, compact = true) ⇒ Array

暦注検索結果コンテナの条件に合う要素を抽出する

Parameters:

  • condition (Hash{Symbol=>String or Regexp})

    条件

  • compact (Boolean) (defaults to: true)

    余分な nil や空配列を除去するか否か

Returns:

  • (Array)

    ハッシュ要素からなる配列(元の構造が配列であった場合)



152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# File 'lib/when_exe/calendarnote.rb', line 152

def subset(condition, compact=true)
  if kind_of?(Hash) && !key?(:note)
    # Persistent NotesContainer
    result = {}
    each_pair do |key, value|
      value = value.subset(condition, compact) if value.kind_of?(NotesContainer)
      result[key] = value if value
    end
  else
    # Non-Persistent NotesContainer
    result = _dig(self) {|target|
      (condition.each_pair {|key, pattern| break nil unless NotesContainer.verify(pattern, target[key])}) ? target : nil
    }
    result = _compact(result) if compact
  end
  _bless(result)
end

#value(compact = true, symbol = :value) ⇒ Array

Note:

引数 symbol が Symbol でも String でもない場合は添え字とみなして元の配列の要素を取り出す

暦注検索結果コンテナのハッシュ要素

Parameters:

  • compact (Boolean) (defaults to: true)

    余分な nil や空配列を除去するか否か

  • symbol (Symbol) (defaults to: :value)

    取り出したいハッシュ要素(:note, :value, etc.)

Returns:

  • (Array)

    ハッシュ要素からなる配列(元の構造が配列であった場合)



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'lib/when_exe/calendarnote.rb', line 113

def value(compact=true, symbol=:value)
  if kind_of?(Hash) && !key?(:note)
    # Persistent NotesContainer
    sliced = {}
    each_pair do |key, val|
      sliced[key] = val[symbol]
    end
  else
    # Non-Persistent NotesContainer
    case symbol
    when Symbol, String
      sliced = _dig(self) {|target| target.fetch(symbol, nil)}
    else 
      return _bless(slice(symbol))
    end
  end
  sliced = _bless(sliced)
  compact ? sliced.simplify : sliced
end