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:

  1. make the visitor visit each node

  2. fast version preload

Instance Method Summary collapse

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