Class: QME::Database::Loader

Inherits:
Object
  • Object
show all
Includes:
QME::DatabaseAccess
Defined in:
lib/qme/measure/database_loader.rb

Overview

Utility class for working with JSON files and the database

Instance Method Summary collapse

Methods included from QME::DatabaseAccess

#determine_connection_information, #get_db, #inject_db

Constructor Details

#initialize(db_name = nil) ⇒ Loader

Create a new Loader.



11
12
13
# File 'lib/qme/measure/database_loader.rb', line 11

def initialize(db_name = nil)
  determine_connection_information(db_name)
end

Instance Method Details

#drop_collection(collection_name) ⇒ Object

Drop a database collection



37
38
39
# File 'lib/qme/measure/database_loader.rb', line 37

def drop_collection(collection_name)
  get_db.drop_collection(collection_name)
end

#remove_bundle(bundle_id, bundle_collection = 'bundles', measure_collection = 'measures') ⇒ Object



73
74
75
76
77
78
79
80
# File 'lib/qme/measure/database_loader.rb', line 73

def remove_bundle(bundle_id, bundle_collection = 'bundles', measure_collection = 'measures')
  bundle = get_db[bundle_collection].find_one(bundle_id)
  bundle['measures'].each do |measure|
    mes = get_db[measure_collection].find_one(measure)
    get_db[measure_collection].remove(mes)
  end
  get_db[bundle_collection].remove(bundle)
end

#save(collection_name, json) ⇒ Object

Save a JSON hash to the specified collection, creates the collection if it doesn’t already exist.



31
32
33
# File 'lib/qme/measure/database_loader.rb', line 31

def save(collection_name, json)
  get_db[collection_name].save(json)
end

#save_bundle(bundle_dir, measure_dir, bundle_collection = 'bundles', measure_collection = 'measures') ⇒ Object

Save a bundle to the db, this will save the bundle meta data, javascript extension functions and measures to the db in their respective locations



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/qme/measure/database_loader.rb', line 55

def save_bundle(bundle_dir, measure_dir, bundle_collection='bundles', measure_collection = 'measures')
  bundle = QME::Measure::Loader.load_bundle(bundle_dir, measure_dir)
  bundle[:bundle_data][:measures] = []
  b_id = save(bundle_collection,bundle[:bundle_data])
  measures = bundle[:measures]
  measures.each do |measure|
     measure[:bundle] = b_id
     m_id = save(measure_collection,measure)
     bundle[:bundle_data][:measures] << m_id
  end
  save(bundle_collection,bundle[:bundle_data])
  bundle[:extensions].each do |name, fn|
    save_system_js_fn(name, fn)
  end
  bundle
end

#save_measure(measure_dir, collection_name) ⇒ Array

Load a measure from the filesystem and save it in the database.



19
20
21
22
23
24
25
# File 'lib/qme/measure/database_loader.rb', line 19

def save_measure(measure_dir, collection_name)
  measures = QME::Measure::Loader.load_measure(measure_dir)
  measures.each do |measure|
    save(collection_name, measure)
  end
  measures
end

#save_system_js_fn(name, fn) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/qme/measure/database_loader.rb', line 41

def save_system_js_fn(name, fn)
  get_db['system.js'].save(
    {
      "_id" => name,
      "value" => BSON::Code.new(fn)
    }
  )
end