Sha256: 734185818c72af998f1fc047ef188fbf719a385caa0837d57daaa412fbacb4ed
Contents?: true
Size: 1.71 KB
Versions: 3
Compression:
Stored size: 1.71 KB
Contents
require 'mongo' require 'query_tasks' class StoreTasks def initialize(channel=nil, dispatcher=nil) @@mongo_db ||= Mongo::MongoClient.new("localhost", 27017) @@db ||= @@mongo_db.db("development") @channel = channel @dispatcher = dispatcher end def db @@db end def model_errors(collection, data) model_name = collection[1..-1].singularize.camelize # TODO: Security check to make sure we have a valid model begin model_class = Object.send(:const_get, model_name) rescue NameError => e model_class = nil end if model_class return model_class.new(data).errors end return {} end def save(collection, data) puts "Insert: #{data.inspect} on #{collection.inspect}" data = data.symbolize_keys errors = model_errors(collection, data) if errors.size == 0 id = data[:_id] # Try to create # TODO: Seems mongo is dumb and doesn't let you upsert with custom id's begin @@db[collection].insert(data) rescue Mongo::OperationFailure => error # Really mongo client? if error.message[/^11000[:]/] # Update because the id already exists update_data = data.dup update_data.delete(:_id) @@db[collection].update({:_id => id}, update_data) else raise end end puts "SAVE: #{@channel.inspect}" QueryTasks.live_query_pool.updated_collection(collection, @channel) return {} else return errors end end def delete(collection, id) puts "DELETE: #{collection.inspect} - #{id.inspect}" @@db[collection].remove('_id' => id) QueryTasks.live_query_pool.updated_collection(collection, @channel) end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
volt-0.7.4 | app/volt/tasks/store_tasks.rb |
volt-0.7.3 | app/volt/tasks/store_tasks.rb |
volt-0.7.2 | app/volt/tasks/store_tasks.rb |