Sha256: 1fec2e0f5556737be9c1282b906d8b4e3b8df49b15b3ccf6a2fb81457175a3db
Contents?: true
Size: 1.87 KB
Versions: 12
Compression:
Stored size: 1.87 KB
Contents
require 'volt/models' class StoreTasks < Volt::Task def db @@db ||= Volt::DataStore.fetch end def load_model(collection, path, data) model_name = collection.singularize.camelize # Fetch the model collection = store.get(path[-2]) # See if the model has already been made model_promise = collection.where(id: data[:id]).first return collection, model_promise end def save(collection, path, data) data = data.symbolize_keys model_promise = nil Volt.skip_permissions do Volt::Model.no_validate do collection, model_promise = load_model(collection, path, data) end end # On the backend, the promise is resolved before its returned, so we can # return from within it. # # Pass the channel as a thread-local so that we don't update the client # who sent the update. # # return another promise model_promise.then do |model| Thread.current['in_channel'] = @channel result = if model model.update(data) else collection.create(data) end save_promise = result.then do |result| next nil end.fail do |err| # An error object, convert to hash Promise.new.reject(err.to_h) end Thread.current['in_channel'] = nil next save_promise end end def delete(collection, id) # Load the model, then call .destroy on it query = nil Volt.skip_permissions do query = store.get(collection).where(id: id) end query.first.then do |model| if model if model.can_delete? db.delete(collection, 'id' => id) else fail "Permissions did not allow #{collection} #{id} to be deleted." end @volt_app.live_query_pool.updated_collection(collection, @channel) else fail "Could not find #{id} in #{collection}" end end end end
Version data entries
12 entries across 12 versions & 1 rubygems