module Hypostasis::Document::Findable::ClassMethods

Public Instance Methods

find(id) click to toggle source
# 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) click to toggle source
# 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) click to toggle source
# 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

Private Instance Methods

reconstitute_document(bson_value, id) click to toggle source
# File lib/hypostasis/document/findable.rb, line 41
def reconstitute_document(bson_value, id)
  document = self.new(Hash.from_bson(StringIO.new(bson_value)))
  document.set_id(id)
  document
end