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
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/hypostasis/document/findable.rb', line 6

def find(id)
  document_keys = []
  namespace.transact do |tr|
    document_keys = tr.get_range_start_with(namespace.for_document(self, id)).to_a
  end
  raise Hypostasis::Errors::DocumentNotFound if document_keys.empty?
  attributes = {}
  id = Hypostasis::Tuple.unpack(document_keys.first.key.split('\\')[1]).to_a[1]
  document_keys.each do |key|
    attribute_tuple = key.key.split('\\')[2]
    next if attribute_tuple.nil?
    unpacked_key = Hypostasis::Tuple.unpack(attribute_tuple)
    raw_value = key.value
    attributes[unpacked_key.to_a[0].to_sym] = reconstitute_value(unpacked_key, raw_value)
  end
  document = self.new(attributes)
  document.set_id(id)
  document
end

#find_where(field_value_pairs) ⇒ Object



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

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)).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!
  results.collect! {|result| find(result) }
end