module ReactiveRecord
Public Class Methods
check_loads_pending()
click to toggle source
# File lib/reactive_record/active_record/reactive_record/while_loading.rb, line 34 def self.check_loads_pending if @loads_pending if Base.pending_fetches.count > 0 true else # this happens when for example loading foo.x results in somebody looking at foo.y while foo.y is still being loaded ReactiveRecord::WhileLoading.loaded_at Base.last_fetch_at ReactiveRecord::WhileLoading.quiet! false end end end
load(&block)
click to toggle source
will repeatedly execute the block until it is loaded immediately returns a promise that will resolve once the block is loaded
# File lib/reactive_record/active_record/reactive_record/while_loading.rb, line 12 def self.load(&block) promise = Promise.new @load_stack ||= [] @load_stack << @loads_pending @loads_pending = nil result = block.call.itself if @loads_pending @blocks_to_load ||= [] @blocks_to_load << [Base.last_fetch_at, promise, block] else promise.resolve result end @loads_pending = @load_stack.pop promise rescue Exception => e React::IsomorphicHelpers.log "ReactiveRecord.load exception raised during initial load: #{e}", :error end
loads_pending!()
click to toggle source
# File lib/reactive_record/active_record/reactive_record/while_loading.rb, line 30 def self.loads_pending! @loads_pending = true end
run_blocks_to_load(fetch_id, failure = nil)
click to toggle source
# File lib/reactive_record/active_record/reactive_record/while_loading.rb, line 46 def self.run_blocks_to_load(fetch_id, failure = nil) if @blocks_to_load blocks_to_load_now = @blocks_to_load.select { |data| data.first == fetch_id } @blocks_to_load = @blocks_to_load.reject { |data| data.first == fetch_id } @load_stack ||= [] blocks_to_load_now.each do |data| id, promise, block = data @load_stack << @loads_pending @loads_pending = nil result = block.call(failure) if check_loads_pending and !failure @blocks_to_load << [Base.last_fetch_at, promise, block] else promise.resolve result end @loads_pending = @load_stack.pop end end rescue Exception => e React::IsomorphicHelpers.log "ReactiveRecord.load exception raised during retry: #{e}", :error end