async-await 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|