Module: When::CalendarNote::NotesContainer

Defined in:
lib/when_exe/calendarnote.rb

Overview

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.register(notes, persistence, sdn) ⇒ Object

永続データに暦注検索結果を登録する



53
54
55
56
57
58
59
# File 'lib/when_exe/calendarnote.rb', line 53

def register(notes, persistence, sdn)
  if persistence
    persistence.store(sdn, notes)
    persistence.extend(self)
  end
  notes.extend(self)
end

.retrieve(persistence, sdn) ⇒ Object

永続データから暦注検索結果を取り出す



65
66
67
68
# File 'lib/when_exe/calendarnote.rb', line 65

def retrieve(persistence, sdn)
  return false unless persistence
  persistence.fetch(sdn, false)
end

.verify(pattern, value) ⇒ Object

パターンの値の一致を判定する



74
75
76
77
78
# File 'lib/when_exe/calendarnote.rb', line 74

def verify(pattern, value)
  value = value.label if !value.kind_of?(When::BasicTypes::M17n) && value.respond_to?(:label)
  pattern = When::EncodingConversion.to_internal_encoding(pattern)
  pattern.kind_of?(Regexp) ? value =~ pattern : value == pattern
end

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