Module: Hypostasis::Document::Findable::ClassMethods

Defined in:
lib/hypostasis/document/findable.rb

Instance Method Summary collapse

Instance Method Details

#find(id) ⇒ Object



6
7
8
9
10
11
12
13
# File 'lib/hypostasis/document/findable.rb', line 6

def find(id)
  fdb_key = nil
  namespace.transact do |tr|
    fdb_key = tr.get(namespace.for_document(self, id))
  end
  raise Hypostasis::Errors::DocumentNotFound if fdb_key.nil?
  reconstitute_document(fdb_key.value, id)
end

#find_many(ids) ⇒ Object



29
30
31
32
33
34
35
36
37
# File 'lib/hypostasis/document/findable.rb', line 29

def find_many(ids)
  results = []
  namespace.transact do |tr|
    ids.each {|id| results << [tr.get(namespace.for_document(self, id)), id]}
  end
  results.collect! do |result|
    reconstitute_document(result[0], result[1])
  end
end

#find_where(field_value_pairs) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/hypostasis/document/findable.rb', line 15

def find_where(field_value_pairs)
  results = []
  namespace.transact do |tr|
    field_value_pairs.each do |field, value|
      results << tr.get_range_start_with(namespace.for_index(self, field, value), {:streaming_mode => :want_all}).to_a
    end
  end
  results.flatten!
  results.collect! {|result| Hypostasis::Tuple.unpack(result.key.split('\\').last).to_a.last }.compact!
  results.select! {|e| results.count(e) == field_value_pairs.size}
  results.uniq!
  find_many(results)
end