Module: Async::Await

Defined in:
lib/async/await.rb,
lib/async/await/methods.rb,
lib/async/await/version.rb,
lib/async/await/enumerable.rb

Defined Under Namespace

Modules: Enumerable, Methods

Constant Summary collapse

VERSION =
"0.5.0"

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(klass) ⇒ Object



28
29
30
31
# File 'lib/async/await.rb', line 28

def self.included(klass)
	klass.include(Methods)
	klass.extend(self)
end

Instance Method Details

#async(name) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/async/await.rb', line 51

def async(name)
	original_method = instance_method(name)
	
	remove_method(name)
	
	define_method(name) do |*arguments, &block|
		Async::Reactor.run do |task|
			original_method.bind(self).call(*arguments, &block)
		end
	end
	
	ruby2_keywords(name)
end

#sync(name) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/async/await.rb', line 33

def sync(name)
	original_method = instance_method(name)
	
	remove_method(name)
	
	define_method(name) do |*arguments, &block|
		if task = Task.current?
			original_method.bind(self).call(*arguments, &block)
		else
			Async::Reactor.run do
				original_method.bind(self).call(*arguments, &block)
			end.wait
		end
	end
	
	ruby2_keywords(name)
end