class Prolly::Ps::Storage::Mongodb

Attributes

session[R]

Public Class Methods

new() click to toggle source
Calls superclass method Prolly::Ps::Storage::Base::new
# File lib/prolly/ps/storage/mongodb.rb, line 14
def initialize
  @session ||= Moped::Session.new(["127.0.0.1:27017", "127.0.0.1:27018"])
  @session.use 'pspace'

  super
  @rand_vars = []
end

Public Instance Methods

add(datum) click to toggle source
# File lib/prolly/ps/storage/mongodb.rb, line 27
def add(datum)
  # create an index for each new datum key
  #new_rvs(datum).each do |rv|
  #  @session.indexes.create(rv.to_sym => 1)
  #end

  record_new_rand_vars(datum)

  @session[:samples].insert(datum)
end
count(rvs, options = {}) click to toggle source
# File lib/prolly/ps/storage/mongodb.rb, line 38
def count(rvs, options = {})
  reload = options["reload"] || false
  if rvs.kind_of?(Array)
    @session[:samples].find(
      Hash[*rvs.flat_map { |rv| [rv, { '$exists' => true }] }]
    ).count
  elsif rvs.kind_of?(Hash)
    @session[:samples].find(to_query_hash(rvs)).count
  end
end
rand_vars() click to toggle source
# File lib/prolly/ps/storage/mongodb.rb, line 49
def rand_vars
  @session[:rand_vars].find.map { |rv| rv[:name] }
end
reset() click to toggle source
Calls superclass method Prolly::Ps::Storage::Base#reset
# File lib/prolly/ps/storage/mongodb.rb, line 22
def reset
  super
  @session['samples'].drop
end
uniq_vals(name) click to toggle source
# File lib/prolly/ps/storage/mongodb.rb, line 53
def uniq_vals(name)
  @session[:samples].aggregate([
    { "$match" => { name.to_sym => { "$exists" => true } } },
    { "$group" => { "_id": "$#{name}" } }
  ]).map { |e| e["_id"] }
end

Private Instance Methods

new_rvs(datum) click to toggle source
# File lib/prolly/ps/storage/mongodb.rb, line 62
def new_rvs(datum)
  return datum.keys - rand_vars 
end
record_new_rand_vars(datum) click to toggle source
# File lib/prolly/ps/storage/mongodb.rb, line 66
def record_new_rand_vars(datum)
  new_rvs(datum).each do |rv|
    @session[:rand_vars].insert({ name: rv })
  end
end
to_query_hash(rvs) click to toggle source
# File lib/prolly/ps/storage/mongodb.rb, line 72
def to_query_hash(rvs)
  Hash[*rvs.flat_map { |k, v|
    [k, v.kind_of?(Array) ? { "$in" => v } : v]
  }]
end