Class: DeferredLoader::Executable
- Inherits:
-
Object
- Object
- DeferredLoader::Executable
- Defined in:
- lib/deferred_loader/executable.rb
Constant Summary collapse
- @@registry =
{}
Class Method Summary collapse
Instance Method Summary collapse
- #execute ⇒ Object
-
#initialize(loader, method) ⇒ Executable
constructor
A new instance of Executable.
- #push(object, argument, defer) ⇒ Object
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
.clear ⇒ Object
53 54 55 |
# File 'lib/deferred_loader/executable.rb', line 53 def self.clear @@registry.clear end |
.execute_all ⇒ Object
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
#execute ⇒ Object
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 |