Class: DeferredLoader::Executable

Inherits:
Object
  • Object
show all
Defined in:
lib/deferred_loader/executable.rb

Constant Summary collapse

@@registry =
{}

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(loader, method) ⇒ Executable

Returns a new instance of Executable.



23
24
25
26
27
28
# File 'lib/deferred_loader/executable.rb', line 23

def initialize(loader, method)
  @arguments = []
  @defers = []
  @loader = loader
  @method = method
end

Class Method Details

.clearObject



53
54
55
# File 'lib/deferred_loader/executable.rb', line 53

def self.clear
  @@registry.clear
end

.execute_allObject



46
47
48
49
50
51
# 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) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 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

Instance Method Details

#executeObject



39
40
41
42
43
44
# 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) ⇒ Object



30
31
32
33
34
35
36
37
# 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