Module: Zena::Acts::Secure::SecureResult
- Included in:
- Zena::Acts::Secure, Use::QueryNode::ClassMethods
- Defined in:
- lib/zena/acts/secure.rb
Overview
This module does two things:
-
make the visitor visit each node
-
fast version preload
Instance Method Summary collapse
-
#construct_id_map(records) ⇒ Object
Take an array of records and return a 2-tuple: a hash of version_id to record and a list of version ids.
- #secure_result(result) ⇒ Object
Instance Method Details
#construct_id_map(records) ⇒ Object
Take an array of records and return a 2-tuple: a hash of version_id to record and a list of version ids. This method also secures the node by calling visitor.visit(node).
277 278 279 280 281 282 283 284 285 286 287 |
# File 'lib/zena/acts/secure.rb', line 277 def construct_id_map(records) map = {} v_ids = [] records.each do |r| visitor.visit(r) v_id = r.version_id map[v_id] = r v_ids << v_id end [map, v_ids] end |
#secure_result(result) ⇒ Object
253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 |
# File 'lib/zena/acts/secure.rb', line 253 def secure_result(result) if result && result != [] if result.kind_of?(Array) if result.first.kind_of?(::Node) id_map, ids = construct_id_map(result) # FIXME: PERFORMANCE avoid selecting idx_... entries. ::Version.find(ids).each do |v| if r = id_map[v.id] r.version = v end end end elsif result.kind_of?(::Node) visitor.visit(result) end result else nil end end |