module Hypostasis::ColumnGroup::Findable::ClassMethods

Public Instance Methods

find(id) click to toggle source
# File lib/hypostasis/column_group/findable.rb, line 6
def find(id)
  document_keys = namespace.transact do |tr|
    tr.get_range_start_with(namespace.for_column_group(self, id), {:streaming_mode => :want_all}).to_a
  end
  raise Hypostasis::Errors::ColumnGroupNotFound if document_keys.empty?
  reconstitute_column_group(document_keys)
end
find_where(field_value_pairs) click to toggle source
# File lib/hypostasis/column_group/findable.rb, line 14
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!
  results.collect! {|result| find(result) }
end

Private Instance Methods

parse_key(key) click to toggle source
# File lib/hypostasis/column_group/findable.rb, line 38
def parse_key(key)
  attribute_tuple = key.key.split('\\')[2]
  return {} if attribute_tuple.nil?
  unpacked_key = Hypostasis::Tuple.unpack(attribute_tuple)
  {unpacked_key.to_a[0].to_sym => reconstitute_value(unpacked_key, key.value)}
end
reconstitute_column_group(keys) click to toggle source
# File lib/hypostasis/column_group/findable.rb, line 30
def reconstitute_column_group(keys)
  attributes = {}
  keys.each {|key| attributes.merge(parse_key(key))}
  document = self.new(attributes)
  document.set_id(Hypostasis::Tuple.unpack(keys.first.key.split('\\')[1]).to_a[1])
  document
end