async-await 0.1.0 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.editorconfig +5 -0
- data/Gemfile +1 -0
- data/README.md +0 -3
- data/examples/echo.rb +55 -0
- data/examples/sleep_sort.rb +29 -0
- data/lib/async/await/methods.rb +7 -3
- data/lib/async/await/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 452fef45e2da9f4b5f6a48102304e5a06ad501ca084fedba246cff271687828e
|
4
|
+
data.tar.gz: 3d909df655b718a64d0a9b743e0ffe6c2dad06f9481ce22f60ec464ced45eec7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afe87a31cf9cbc63727362839868a7575532f824bae986643bce644e0a04116f7fe44a09049f1e373d537e768105b837575bd011ec1b5dd2983a04453977df37
|
7
|
+
data.tar.gz: 2a67e3c5d77f9290a9372107ed03d55d074f0a66be4af217255534ae59085100e3ecd88485f07f5a45bd4e9109f0160a7391bd56e5cdaebb47dac7ee04bcd34d
|
data/.editorconfig
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
data/examples/echo.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
|
2
|
+
require_relative '../lib/async/await'
|
3
|
+
|
4
|
+
require 'async/io'
|
5
|
+
require 'async/io/tcp_socket'
|
6
|
+
|
7
|
+
require 'pry'
|
8
|
+
|
9
|
+
class Echo
|
10
|
+
include Async::Await
|
11
|
+
include Async::IO
|
12
|
+
|
13
|
+
async def handle(peer, address)
|
14
|
+
data = peer.gets
|
15
|
+
peer.puts("#{data} #{Time.now}")
|
16
|
+
ensure
|
17
|
+
peer.close
|
18
|
+
end
|
19
|
+
|
20
|
+
async def server
|
21
|
+
puts "Binding server..."
|
22
|
+
server = TCPServer.new("127.0.0.1", 9009)
|
23
|
+
|
24
|
+
handle(*server.accept)
|
25
|
+
ensure
|
26
|
+
server.close rescue nil
|
27
|
+
end
|
28
|
+
|
29
|
+
async def client
|
30
|
+
puts "Client connecting..."
|
31
|
+
client = TCPSocket.new("127.0.0.1", 9009)
|
32
|
+
|
33
|
+
client.puts("Hello World!")
|
34
|
+
response = client.gets
|
35
|
+
|
36
|
+
puts "Server said: #{response}"
|
37
|
+
ensure
|
38
|
+
client.close rescue nil
|
39
|
+
end
|
40
|
+
|
41
|
+
async def run
|
42
|
+
puts "Creating server..."
|
43
|
+
server
|
44
|
+
|
45
|
+
puts "Creating client..."
|
46
|
+
client
|
47
|
+
|
48
|
+
puts "Run returning..."
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
puts "Starting echo..."
|
53
|
+
echo = Echo.new
|
54
|
+
echo.run
|
55
|
+
puts "Echo finished :)"
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
require_relative '../lib/async/await'
|
3
|
+
|
4
|
+
class << self
|
5
|
+
include Async::Await
|
6
|
+
|
7
|
+
async def sort_one(item, into)
|
8
|
+
sleep(item.to_f)
|
9
|
+
into << item
|
10
|
+
|
11
|
+
puts "I've sorted #{item} for you."
|
12
|
+
end
|
13
|
+
|
14
|
+
async def sort(items)
|
15
|
+
result = []
|
16
|
+
|
17
|
+
items.each do |item|
|
18
|
+
sort_one(item, result)
|
19
|
+
end
|
20
|
+
|
21
|
+
# Wait until all previous async method calls have finished executing.
|
22
|
+
barrier!
|
23
|
+
|
24
|
+
return result
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
puts "Hold on, sorting..."
|
29
|
+
puts sort([5, 2, 3, 4, 9, 2, 5, 7, 8]).result.inspect
|
data/lib/async/await/methods.rb
CHANGED
@@ -23,16 +23,20 @@ require 'async/reactor'
|
|
23
23
|
module Async
|
24
24
|
module Await
|
25
25
|
module Methods
|
26
|
-
|
27
|
-
|
26
|
+
extend Forwardable
|
27
|
+
|
28
|
+
def task
|
29
|
+
Async::Task.current
|
28
30
|
end
|
29
31
|
|
32
|
+
def_delegators :task, :timeout, :sleep, :async
|
33
|
+
|
30
34
|
def await(&block)
|
31
35
|
block.call.wait
|
32
36
|
end
|
33
37
|
|
34
38
|
def barrier!
|
35
|
-
|
39
|
+
task.children.each(&:wait)
|
36
40
|
end
|
37
41
|
end
|
38
42
|
end
|
data/lib/async/await/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: async-await
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|
@@ -87,6 +87,7 @@ executables: []
|
|
87
87
|
extensions: []
|
88
88
|
extra_rdoc_files: []
|
89
89
|
files:
|
90
|
+
- ".editorconfig"
|
90
91
|
- ".gitignore"
|
91
92
|
- ".rspec"
|
92
93
|
- ".travis.yml"
|
@@ -95,6 +96,8 @@ files:
|
|
95
96
|
- Rakefile
|
96
97
|
- async-await.gemspec
|
97
98
|
- examples/chickens.rb
|
99
|
+
- examples/echo.rb
|
100
|
+
- examples/sleep_sort.rb
|
98
101
|
- lib/async/await.rb
|
99
102
|
- lib/async/await/methods.rb
|
100
103
|
- lib/async/await/version.rb
|