class Hyalite::Updates
Attributes
reconcile_transaction[R]
Public Class Methods
new()
click to toggle source
# File lib/hyalite/updates.rb, line 42 def initialize @dirty_components = [] @is_batching_updates = false @callback_queue = CallbackQueue.new @asap_callback_queue = CallbackQueue.new @asap_enqueued = false @reconcile_transaction = ReconcileTransaction.new @flush_transaction = Transaction.new([NestedUpdate.new(@dirty_components), UpdateQueueing.new(@callback_queue), @reconcile_transaction]) end
Public Instance Methods
asap(&callback)
click to toggle source
# File lib/hyalite/updates.rb, line 116 def asap(&callback) @asap_callback_queue.enqueue(&callback) @asap_enqueued = true end
batched_updates() { || ... }
click to toggle source
# File lib/hyalite/updates.rb, line 65 def batched_updates already_batching_updates = @is_batching_updates @is_batching_updates = true if already_batching_updates yield else transaction = Transaction.new do flush_batched_updates @is_batching_updates = false end transaction.perform do yield end end end
enqueue_update(component)
click to toggle source
# File lib/hyalite/updates.rb, line 55 def enqueue_update(component) unless @is_batching_updates batched_updates do enqueue_update(component) end end @dirty_components << component end
flush_batched_updates()
click to toggle source
# File lib/hyalite/updates.rb, line 85 def flush_batched_updates while @dirty_components.length > 0 || @asap_enqueued if @dirty_components.length > 0 @flush_transaction.perform do |transaction| run_batched_updates(transaction) end end if @asap_enqueued @asap_enqueued = false @asap_callback_queue.notify_all next end end end
mount_ready()
click to toggle source
# File lib/hyalite/updates.rb, line 121 def mount_ready @reconcile_transaction.mount_ready end
run_batched_updates(transaction)
click to toggle source
# File lib/hyalite/updates.rb, line 101 def run_batched_updates(transaction) @dirty_components.sort{|c1, c2| c1.mount_order <=> c2.mount_order}.each do |component| callbacks = component.pending_callbacks component.pending_callbacks = nil Reconciler.perform_update_if_necessary(component, @reconcile_transaction.mount_ready) if callbacks callbacks.each do |callback| @callback_queue.enqueue(callback) end end end end