Class: Volt::Tasks
Overview
The tasks class provides an interface to call tasks on the backend server. This class is setup as page.task (as a singleton)
Instance Method Summary collapse
- #call(class_name, method_name, meta_data, *args) ⇒ Object
-
#initialize(page) ⇒ Tasks
constructor
A new instance of Tasks.
-
#notify_query(method_name, collection, query, *args) ⇒ Object
Called when the backend sends a notification to change the results of a query.
- #received_message(name, promise_id, *args) ⇒ Object
- #reload ⇒ Object
-
#response(promise_id, result, error) ⇒ Object
When a request is sent to the backend, it can attach a callback, this is called from the backend to pass to the callback.
Constructor Details
#initialize(page) ⇒ Tasks
Returns a new instance of Tasks.
7 8 9 10 11 12 13 14 15 |
# File 'lib/volt/page/tasks.rb', line 7 def initialize(page) @page = page @promise_id = 0 @promises = {} page.channel.on('message') do |*args| (*args) end end |
Instance Method Details
#call(class_name, method_name, meta_data, *args) ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/volt/page/tasks.rb', line 17 def call(class_name, method_name, , *args) promise_id = @promise_id @promise_id += 1 # Track the callback promise = Promise.new @promises[promise_id] = promise # TODO: Timeout on these callbacks @page.channel.([promise_id, class_name, method_name, , *args]) promise end |
#notify_query(method_name, collection, query, *args) ⇒ Object
Called when the backend sends a notification to change the results of a query.
61 62 63 64 |
# File 'lib/volt/page/tasks.rb', line 61 def notify_query(method_name, collection, query, *args) query_obj = Persistors::ArrayStore.query_pool.lookup(collection, query) query_obj.send(method_name, *args) end |
#received_message(name, promise_id, *args) ⇒ Object
31 32 33 34 35 36 37 38 39 40 |
# File 'lib/volt/page/tasks.rb', line 31 def (name, promise_id, *args) case name when 'added', 'removed', 'updated', 'changed' notify_query(name, *args) when 'response' response(promise_id, *args) when 'reload' reload end end |
#reload ⇒ Object
66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/volt/page/tasks.rb', line 66 def reload # Stash the current page value value = EJSON.stringify($page.page.to_h) # If this browser supports session storage, store the page, so it will # be in the same state when we reload. `sessionStorage.setItem('___page', value);` if `sessionStorage` $page.page._reloading = true `window.location.reload(false);` end |
#response(promise_id, result, error) ⇒ Object
When a request is sent to the backend, it can attach a callback, this is called from the backend to pass to the callback.
44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/volt/page/tasks.rb', line 44 def response(promise_id, result, error) promise = @promises.delete(promise_id) if promise if error # TODO: full error handling Volt.logger.error('Task Response:') Volt.logger.error(error.inspect) promise.reject(error) else promise.resolve(result) end end end |