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