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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 398571ced4108922b98d708046659830492d51ba7846f9ce5ae91166986fdfe7
4
- data.tar.gz: '09bd9a8c418d7fe0414c278df43eb67dd801048d2d9fa6d32d5df50af78724bd'
3
+ metadata.gz: 452fef45e2da9f4b5f6a48102304e5a06ad501ca084fedba246cff271687828e
4
+ data.tar.gz: 3d909df655b718a64d0a9b743e0ffe6c2dad06f9481ce22f60ec464ced45eec7
5
5
  SHA512:
6
- metadata.gz: 9682a9abf5b336acd4b201a020ec4247701fb90ed505ffdad3cf315334719fe261cdaf2bb7df1d98b6a112c39aa30582058dc2c7a0ea5678f20eb66256d49b84
7
- data.tar.gz: 55f7314d172c4ebe1eaea3afc142628cd402ddcd20e7b210bc733f38830d169c9e4da518327b1cffe60dbda109734519d56f9f6aee9d7316ac46fedac4f7e3d9
6
+ metadata.gz: afe87a31cf9cbc63727362839868a7575532f824bae986643bce644e0a04116f7fe44a09049f1e373d537e768105b837575bd011ec1b5dd2983a04453977df37
7
+ data.tar.gz: 2a67e3c5d77f9290a9372107ed03d55d074f0a66be4af217255534ae59085100e3ecd88485f07f5a45bd4e9109f0160a7391bd56e5cdaebb47dac7ee04bcd34d
@@ -0,0 +1,5 @@
1
+ root = true
2
+
3
+ [*]
4
+ indent_style = tab
5
+ indent_size = 4
data/Gemfile CHANGED
@@ -4,6 +4,7 @@ gemspec
4
4
 
5
5
  group :development do
6
6
  gem 'pry'
7
+ gem 'async-io', '~> 1.4'
7
8
  end
8
9
 
9
10
  group :test do
data/README.md CHANGED
@@ -31,9 +31,6 @@ In any asynchronous context (e.g. a reactor), simply use the `await` function li
31
31
  ```ruby
32
32
  require 'async/await'
33
33
 
34
-
35
- require_relative '../lib/async/await'
36
-
37
34
  class Coop
38
35
  include Async::Await
39
36
 
@@ -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
@@ -23,16 +23,20 @@ require 'async/reactor'
23
23
  module Async
24
24
  module Await
25
25
  module Methods
26
- def sleep(*args)
27
- Async::Task.current.sleep(*args)
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
- Async::Task.current.children.each(&:wait)
39
+ task.children.each(&:wait)
36
40
  end
37
41
  end
38
42
  end
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module Await
23
- VERSION = "0.1.0"
23
+ VERSION = "0.2.0"
24
24
  end
25
25
  end
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.1.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-16 00:00:00.000000000 Z
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