async-websocket 0.6.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43b5ea223a245b0c44bef8fe73d22f9b4bade12a497fb5f39a2969aab171c338
4
- data.tar.gz: 81a2ec348b10c9df372e0f8f8291456e5b16420faf04ef3df5a50d2029309968
3
+ metadata.gz: da0bf747ee0c56a69b828547451fc478169ee13b8cf181a15af6ba5b7ab73b03
4
+ data.tar.gz: 4bb105f0a98f8b4f39020aa0882745d8915b1bec7155a5fb410f3ae985d06503
5
5
  SHA512:
6
- metadata.gz: 89453fabbcb746b608cfee446ef36ff295fe23f531b502e634c24688c1c30f4b82c1d833f682e9552da37cc7c03d7609aa8cd9f7566b1d3553ff8822a2fb13f8
7
- data.tar.gz: '084dd3cd3ada08ec5d46925943ab1d74800306d96c066a4d8cb3f32fd83f89df493b9fed3c50e4a000007b0f7312baf12dfef9dbfab2d4d8a37d9f639a920105'
6
+ metadata.gz: 8cb039babe87b956995754dbecf8ce5b93924359b86ff5b51676fa5b9bdc1a7f0f88a85b042e04cb52d8aac900991ed3ea49eb936c6ef66760f7a7179e4d077d
7
+ data.tar.gz: b6fe79b03396ff4b748436cbdaad3e5430b1890ec602c3cb1373e7a1ba04f84d4afdd625007991532aea1fa184275554e97fb4a27d1c6e70ae46c598560257c9
data/.editorconfig CHANGED
@@ -1,4 +1,6 @@
1
+ root = true
1
2
 
2
3
  [*]
3
4
  indent_style = tab
4
5
  indent_size = 2
6
+
data/README.md CHANGED
@@ -22,7 +22,44 @@ Or install it yourself as:
22
22
 
23
23
  ## Usage
24
24
 
25
- Here is how to use within `Rack`:
25
+ There are [examples](examples/) which include:
26
+
27
+ - [A command line chat client and application server](examples/chat/client.rb) which can read input from `stdin` and send messages to the server.
28
+ - [A utopia-based web application](examples/utopia) which uses a JavaScript client to connect to a web application server.
29
+
30
+ ### Client Side with Async
31
+
32
+ ```ruby
33
+ #!/usr/bin/env ruby
34
+
35
+ require 'async'
36
+ require 'async/io/stream'
37
+ require 'async/http/url_endpoint'
38
+ require 'async/websocket/client'
39
+
40
+ USER = ARGV.pop || "anonymous"
41
+ URL = ARGV.pop || "ws://localhost:9292"
42
+
43
+ Async do |task|
44
+ endpoint = Async::HTTP::URLEndpoint.parse(URL)
45
+ headers = {'token' => 'wubalubadubdub'}
46
+
47
+ endpoint.connect do |socket|
48
+ connection = Async::WebSocket::Client.new(socket, URL, headers)
49
+
50
+ connection.send_message({
51
+ user: USER,
52
+ status: "connected",
53
+ })
54
+
55
+ while message = connection.next_message
56
+ puts message.inspect
57
+ end
58
+ end
59
+ end
60
+ ```
61
+
62
+ ### Server Side with Rack & Falcon
26
63
 
27
64
  ```ruby
28
65
  #!/usr/bin/env falcon serve --concurrency 1 -c
@@ -46,8 +83,6 @@ run lambda {|env|
46
83
  }
47
84
  ```
48
85
 
49
- And [here is a client program](examples/chat/client.rb) which can read input from `stdin` and send messages to the server.
50
-
51
86
  ## Contributing
52
87
 
53
88
  1. Fork it
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
  spec.add_development_dependency "async-rspec"
23
23
  spec.add_development_dependency "falcon", "~> 0.17.0"
24
24
 
25
- spec.add_development_dependency "bundler", "~> 1.6"
25
+ spec.add_development_dependency "bundler"
26
26
  spec.add_development_dependency "rspec", "~> 3.6"
27
27
  spec.add_development_dependency "rake"
28
28
  end
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'async/reactor'
3
+ require 'async'
4
4
  require 'async/io/stream'
5
5
  require 'async/http/url_endpoint'
6
6
  require 'async/websocket/client'
@@ -8,7 +8,7 @@ require 'async/websocket/client'
8
8
  USER = ARGV.pop || "anonymous"
9
9
  URL = ARGV.pop || "ws://localhost:9292"
10
10
 
11
- Async::Reactor.run do |task|
11
+ Async do |task|
12
12
  stdin = Async::IO::Stream.new(
13
13
  Async::IO::Generic.new($stdin)
14
14
  )
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'async/reactor'
3
+ require 'async'
4
4
  require 'async/io/stream'
5
5
  require 'async/http/url_endpoint'
6
6
  require 'async/websocket/client'
@@ -8,7 +8,7 @@ require 'async/websocket/client'
8
8
  USER = ARGV.pop || "anonymous"
9
9
  URL = ARGV.pop || "ws://localhost:9292"
10
10
 
11
- Async::Reactor.run do |task|
11
+ Async do |task|
12
12
  stdin = Async::IO::Stream.new(
13
13
  Async::IO::Generic.new($stdin)
14
14
  )
@@ -24,10 +24,18 @@ module Async
24
24
  module WebSocket
25
25
  # This is a basic synchronous websocket client:
26
26
  class Client < Connection
27
- def initialize(socket, url = "ws://.")
27
+ def initialize(socket, url = "ws://.", headers = {})
28
28
  @url = url
29
-
30
- super socket, ::WebSocket::Driver.client(self)
29
+
30
+ super socket, build_client(headers)
31
+ end
32
+
33
+ def build_client(headers)
34
+ ::WebSocket::Driver.client(self).tap do |client|
35
+ headers.each do |key, value|
36
+ client.set_header(key, value)
37
+ end
38
+ end
31
39
  end
32
40
  end
33
41
  end
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module WebSocket
23
- VERSION = "0.6.1"
23
+ VERSION = "0.7.0"
24
24
  end
25
25
  end
@@ -0,0 +1,32 @@
1
+ require "async/websocket/client"
2
+
3
+ RSpec.describe Async::WebSocket::Client do
4
+ let(:client_double) {
5
+ instance_double(WebSocket::Driver::Client, on: nil, start: nil)
6
+ }
7
+
8
+ before do
9
+ allow(WebSocket::Driver).to receive(:client).and_return(client_double)
10
+ end
11
+
12
+ it "sets headers on the driver" do
13
+ headers = {
14
+ "Foo" => "Bar",
15
+ "Baz" => "Qux"
16
+ }
17
+
18
+ headers.each do |key, value|
19
+ expect(client_double).to receive(:set_header).with(key, value)
20
+ end
21
+
22
+ described_class.new(double(write: nil), "", headers)
23
+ end
24
+
25
+ context "without passing headers" do
26
+ it "does not fail" do
27
+ expect {
28
+ described_class.new(double(write: nil))
29
+ }.not_to raise_error
30
+ end
31
+ end
32
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-websocket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.7.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-07-05 00:00:00.000000000 Z
11
+ date: 2019-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: websocket-driver
@@ -70,16 +70,16 @@ dependencies:
70
70
  name: bundler
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '1.6'
75
+ version: '0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: '1.6'
82
+ version: '0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rspec
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -166,6 +166,7 @@ files:
166
166
  - lib/async/websocket/connection.rb
167
167
  - lib/async/websocket/server.rb
168
168
  - lib/async/websocket/version.rb
169
+ - spec/async/websocket/client_spec.rb
169
170
  - spec/async/websocket/connection_spec.rb
170
171
  - spec/async/websocket/connection_spec.ru
171
172
  - spec/spec_helper.rb
@@ -188,12 +189,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
189
  - !ruby/object:Gem::Version
189
190
  version: '0'
190
191
  requirements: []
191
- rubyforge_project:
192
- rubygems_version: 2.7.6
192
+ rubygems_version: 3.0.2
193
193
  signing_key:
194
194
  specification_version: 4
195
195
  summary: An async websocket library on top of websocket-driver.
196
196
  test_files:
197
+ - spec/async/websocket/client_spec.rb
197
198
  - spec/async/websocket/connection_spec.rb
198
199
  - spec/async/websocket/connection_spec.ru
199
200
  - spec/spec_helper.rb