class DeferredLoader::Executable
Public Class Methods
clear()
click to toggle source
# File lib/deferred_loader/executable.rb, line 53 def self.clear @@registry.clear end
execute_all()
click to toggle source
# File lib/deferred_loader/executable.rb, line 46 def self.execute_all while (@@registry.size > 0) do id, executable = @@registry.shift executable.execute end end
find_or_create(object, method)
click to toggle source
# File lib/deferred_loader/executable.rb, line 7 def self.find_or_create(object, method) loader_method = method.to_s + "_with_deferred" loader = nil if object.respond_to?(loader_method) then loader = object elsif object.class.respond_to?(loader_method) then loader = object.class else raise "#{object.class} or #{object.to_s} does not respond do #{loader_method}" end key = loader.object_id.to_s + "\#" + loader_method.to_s @@registry[key] ||= self.new(loader, loader_method) return @@registry[key] end
new(loader, method)
click to toggle source
# File lib/deferred_loader/executable.rb, line 23 def initialize(loader, method) @arguments = [] @defers = [] @loader = loader @method = method end
Public Instance Methods
execute()
click to toggle source
# File lib/deferred_loader/executable.rb, line 39 def execute @results = @loader.send(@method, @arguments) @results.dup.zip @defers.dup.each do|res, defer| defer.resolve(res) end end
push(object, argument, defer)
click to toggle source
# File lib/deferred_loader/executable.rb, line 30 def push(object, argument, defer) if @loader.instance_of?(Class) then @arguments.push(object) else @arguments.push(argument) end @defers.push(defer) end