Module: When::CalendarNote::NotesContainer
- Defined in:
- lib/when_exe/calendarnote.rb
Overview
暦注検索結果を保存するコンテナ
Class Method Summary collapse
-
.register(notes, persistence, sdn) ⇒ Object
永続データに暦注検索結果を登録する.
-
.retrieve(persistence, sdn) ⇒ Object
永続データから暦注検索結果を取り出す.
-
.verify(pattern, value) ⇒ Object
パターンの値の一致を判定する.
Instance Method Summary collapse
-
#[](symbol) ⇒ Array
暦注検索結果コンテナのハッシュ要素.
-
#simplify(compact = true) ⇒ NotesContainer
暦注検索結果コンテナの次元を下げる.
-
#subset(condition, compact = true) ⇒ Array
暦注検索結果コンテナの条件に合う要素を抽出する.
-
#value(compact = true, symbol = :value) ⇒ Array
暦注検索結果コンテナのハッシュ要素.
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 の場合は添え字とみなして元の配列の要素を取り出す
暦注検索結果コンテナのハッシュ要素
141 142 143 |
# File 'lib/when_exe/calendarnote.rb', line 141 def [](symbol) value(false, symbol) end |
#simplify(compact = true) ⇒ NotesContainer
暦注検索結果コンテナの次元を下げる
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
暦注検索結果コンテナの条件に合う要素を抽出する
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 でもない場合は添え字とみなして元の配列の要素を取り出す
暦注検索結果コンテナのハッシュ要素
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 |