async-websocket 0.13.0 → 0.17.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +4 -4
  2. data/lib/async/websocket/adapters/rack.rb +7 -1
  3. data/lib/async/websocket/client.rb +39 -17
  4. data/lib/async/websocket/connect_request.rb +35 -17
  5. data/lib/async/websocket/connect_response.rb +2 -2
  6. data/lib/async/websocket/connection.rb +21 -2
  7. data/lib/async/websocket/request.rb +1 -1
  8. data/lib/async/websocket/response.rb +1 -1
  9. data/lib/async/websocket/server.rb +2 -0
  10. data/lib/async/websocket/upgrade_request.rb +9 -9
  11. data/lib/async/websocket/upgrade_response.rb +3 -3
  12. data/lib/async/websocket/version.rb +1 -1
  13. metadata +35 -102
  14. data/.editorconfig +0 -6
  15. data/.gitignore +0 -13
  16. data/.rspec +0 -3
  17. data/.travis.yml +0 -18
  18. data/Gemfile +0 -12
  19. data/README.md +0 -129
  20. data/Rakefile +0 -6
  21. data/async-websocket.gemspec +0 -29
  22. data/examples/chat/client.rb +0 -32
  23. data/examples/chat/config.ru +0 -113
  24. data/examples/chat/multi-client.rb +0 -81
  25. data/examples/mud/client.rb +0 -34
  26. data/examples/mud/config.ru +0 -142
  27. data/examples/rack/client.rb +0 -20
  28. data/examples/rack/config.ru +0 -14
  29. data/examples/utopia/.bowerrc +0 -4
  30. data/examples/utopia/.gitignore +0 -9
  31. data/examples/utopia/.rspec +0 -4
  32. data/examples/utopia/Gemfile +0 -33
  33. data/examples/utopia/Guardfile +0 -29
  34. data/examples/utopia/README.md +0 -16
  35. data/examples/utopia/Rakefile +0 -8
  36. data/examples/utopia/config.ru +0 -47
  37. data/examples/utopia/config/README.md +0 -7
  38. data/examples/utopia/config/environment.rb +0 -8
  39. data/examples/utopia/lib/readme.txt +0 -1
  40. data/examples/utopia/pages/_heading.xnode +0 -2
  41. data/examples/utopia/pages/_page.xnode +0 -30
  42. data/examples/utopia/pages/client/client.js +0 -28
  43. data/examples/utopia/pages/client/index.xnode +0 -8
  44. data/examples/utopia/pages/errors/exception.xnode +0 -5
  45. data/examples/utopia/pages/errors/file-not-found.xnode +0 -5
  46. data/examples/utopia/pages/links.yaml +0 -2
  47. data/examples/utopia/pages/server/controller.rb +0 -26
  48. data/examples/utopia/public/_static/icon.png +0 -0
  49. data/examples/utopia/public/_static/site.css +0 -205
  50. data/examples/utopia/public/_static/utopia-background.svg +0 -1
  51. data/examples/utopia/public/_static/utopia.svg +0 -1
  52. data/examples/utopia/public/readme.txt +0 -1
  53. data/examples/utopia/spec/spec_helper.rb +0 -31
  54. data/examples/utopia/spec/website_context.rb +0 -11
  55. data/examples/utopia/spec/website_spec.rb +0 -56
  56. data/examples/utopia/tasks/bower.rake +0 -45
  57. data/examples/utopia/tasks/deploy.rake +0 -13
  58. data/examples/utopia/tasks/development.rake +0 -34
  59. data/examples/utopia/tasks/environment.rake +0 -17
  60. data/examples/utopia/tasks/log.rake +0 -17
  61. data/examples/utopia/tasks/static.rake +0 -43
  62. data/spec/async/websocket/adapters/rack/client.rb +0 -38
  63. data/spec/async/websocket/adapters/rack/config.ru +0 -23
  64. data/spec/async/websocket/adapters/rack_spec.rb +0 -84
  65. data/spec/async/websocket/client_spec.rb +0 -48
  66. data/spec/async/websocket/connection_spec.rb +0 -34
  67. data/spec/async/websocket/server_examples.rb +0 -76
  68. data/spec/async/websocket/server_spec.rb +0 -31
  69. data/spec/async/websocket/upgrade.rb +0 -43
  70. data/spec/spec_helper.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 37e8a4add65ab76660e26f32c32f175127010ea482bcc4ec667a33599537955d
4
- data.tar.gz: 1cf93bfb5264891e5b500c7c9d97462a481d6f5947bd3461b1431c2b4b289e3f
3
+ metadata.gz: d2b2cae182fcc4c6dbfd9724236afc25472d930a98be9496b4bc2af6f67ad502
4
+ data.tar.gz: a9bb7c63e69247a287bd512973788d0e807b6464835ebef1f5d5d1c407574327
5
5
  SHA512:
6
- metadata.gz: 9fc18c9154780780e29ef16a233b7386fa9cc915f94d1e1bc573cdccc3fdc835b7ad778a5c686d14ac4e4b156e77e84ff3bed810afc02feb1bc326ceae8aa237
7
- data.tar.gz: 92332727953f7660154439cf5e86524a498ce335b666728f74bca9b22e6ba8f61dfa7b7bc4f6e66b702ff83de5c060b8c2189b7d0831c5fbb98a95e8b8669f32
6
+ metadata.gz: e0f1f16a9e9fecfa3b68eec6c3b18b63588477ef3b4d2049d42a017e9f35073c6b54641585db4cbebaeff53a37537c742130354ee604620c68c79b24980d6bdf
7
+ data.tar.gz: 2b43de05bcffc2089345160f21e853bba156430b183ce8b0268ca229c0903f11b723849bcec6d8117271580d9265b2ac0999aacd7be9d336987401ec09c179ba
@@ -35,20 +35,26 @@ module Async
35
35
 
36
36
  def self.open(env, headers: [], protocols: [], handler: Connection, **options, &block)
37
37
  if request = env['async.http.request'] and Array(request.protocol).include?(PROTOCOL)
38
+ env = nil
39
+
38
40
  # Select websocket sub-protocol:
39
41
  if requested_protocol = request.headers[SEC_WEBSOCKET_PROTOCOL]
40
42
  protocol = (requested_protocol & protocols).first
41
43
  end
42
44
 
43
45
  response = Response.for(request, headers, protocol: protocol, **options) do |stream|
46
+ response = nil
47
+
44
48
  framer = Protocol::WebSocket::Framer.new(stream)
45
49
 
46
50
  connection = handler.call(framer, protocol)
51
+
47
52
  yield connection
48
53
 
49
54
  connection.close unless connection.closed?
50
55
  end
51
56
 
57
+ request = nil
52
58
  headers = response.headers
53
59
 
54
60
  if protocol = response.protocol
@@ -57,7 +63,7 @@ module Async
57
63
  ])
58
64
  end
59
65
 
60
- return [response.status, headers, response.body]
66
+ return [response.status, headers.to_h, response.body]
61
67
  end
62
68
  end
63
69
  end
@@ -34,8 +34,9 @@ module Async
34
34
  class Client < ::Protocol::HTTP::Middleware
35
35
  include ::Protocol::WebSocket::Headers
36
36
 
37
- def self.open(endpoint, *args, &block)
38
- client = self.new(HTTP::Client.new(endpoint, *args), mask: endpoint.secure?)
37
+ # @return [Client] a client which can be used to establish websocket connections to the given endpoint.
38
+ def self.open(endpoint, **options, &block)
39
+ client = self.new(HTTP::Client.new(endpoint, **options), mask: true)
39
40
 
40
41
  return client unless block_given?
41
42
 
@@ -46,9 +47,10 @@ module Async
46
47
  end
47
48
  end
48
49
 
50
+ # @return [Connection] an open websocket connection to the given endpoint.
49
51
  def self.connect(endpoint, *args, **options, &block)
50
52
  self.open(endpoint, *args) do |client|
51
- connection = client.connect(endpoint.path, **options)
53
+ connection = client.connect(endpoint.authority, endpoint.path, **options)
52
54
 
53
55
  return connection unless block_given?
54
56
 
@@ -60,33 +62,53 @@ module Async
60
62
  end
61
63
  end
62
64
 
63
- def initialize(delegate, **options)
64
- super(delegate)
65
+ def initialize(client, **options)
66
+ super(client)
65
67
 
66
68
  @options = options
67
69
  end
68
70
 
69
- def connect(path, headers: [], handler: Connection, **options)
70
- request = Request.new(nil, nil, path, headers, **options)
71
+ class Framer < ::Protocol::WebSocket::Framer
72
+ def initialize(pool, connection, stream)
73
+ super(stream)
74
+ @pool = pool
75
+ @connection = connection
76
+ end
77
+
78
+ def close
79
+ super
80
+
81
+ if @pool
82
+ @pool.release(@connection)
83
+ @pool = nil
84
+ @connection = nil
85
+ end
86
+ end
87
+ end
88
+
89
+ def connect(authority, path, headers: nil, handler: Connection, **options, &block)
90
+ headers = ::Protocol::HTTP::Headers[headers]
91
+ request = Request.new(nil, authority, path, headers, **options)
92
+
93
+ pool = @delegate.pool
94
+ connection = pool.acquire
71
95
 
72
- response = self.call(request)
96
+ response = request.call(connection)
73
97
 
74
98
  unless response.stream?
75
99
  raise ProtocolError, "Failed to negotiate connection: #{response.status}"
76
100
  end
77
101
 
78
102
  protocol = response.headers[SEC_WEBSOCKET_PROTOCOL]&.first
79
- framer = Protocol::WebSocket::Framer.new(response.stream)
80
-
81
- connection = handler.call(framer, protocol, **@options)
103
+ stream = response.stream
104
+ response = nil
82
105
 
83
- return connection unless block_given?
106
+ framer = Framer.new(pool, connection, stream)
107
+ connection = nil
84
108
 
85
- begin
86
- yield connection
87
- ensure
88
- connection.close
89
- end
109
+ handler.call(framer, protocol, **@options, &block)
110
+ ensure
111
+ pool.release(connection) if connection
90
112
  end
91
113
  end
92
114
  end
@@ -24,6 +24,8 @@ require 'protocol/http/request'
24
24
  require 'protocol/http/headers'
25
25
  require 'protocol/websocket/headers'
26
26
 
27
+ require 'async/http/body/stream'
28
+
27
29
  module Async
28
30
  module WebSocket
29
31
  # This is required for HTTP/1.x to upgrade the connection to the WebSocket protocol.
@@ -32,14 +34,19 @@ module Async
32
34
  include ::Protocol::WebSocket::Headers
33
35
 
34
36
  class Wrapper
35
- def initialize(body, response)
36
- @body = body
37
+ def initialize(stream, response)
37
38
  @response = response
38
- @stream = nil
39
+ @body = @response.body
40
+ @stream = stream
39
41
  end
40
42
 
43
+ attr_accessor :response
44
+
45
+ attr_accessor :body
46
+ attr_accessor :stream
47
+
41
48
  def stream?
42
- @response.success?
49
+ @response.success? and @stream
43
50
  end
44
51
 
45
52
  def status
@@ -54,35 +61,46 @@ module Async
54
61
  true
55
62
  end
56
63
 
57
- attr_accessor :body
58
-
59
64
  def protocol
60
65
  @response.protocol
61
66
  end
67
+ end
68
+
69
+ class Hijack < Async::HTTP::Body::Readable
70
+ def initialize(request)
71
+ @request = request
72
+ @stream = nil
73
+ end
62
74
 
63
- def stream
64
- @stream ||= Async::HTTP::Body::Stream.new(@response.body, @body)
75
+ def stream?
76
+ true
77
+ end
78
+
79
+ attr :stream
80
+
81
+ def call(stream)
82
+ @stream = stream
65
83
  end
66
84
  end
67
85
 
68
- def initialize(request, protocols: [], version: 13)
69
- body = Async::HTTP::Body::Writable.new
86
+ def initialize(request, protocols: [], version: 13, &block)
87
+ body = Hijack.new(self)
70
88
 
71
- headers = []
89
+ headers = ::Protocol::HTTP::Headers[request.headers]
72
90
 
73
- headers << [SEC_WEBSOCKET_VERSION, version]
91
+ headers.add(SEC_WEBSOCKET_VERSION, String(version))
74
92
 
75
93
  if protocols.any?
76
- headers << [SEC_WEBSOCKET_PROTOCOL, protocols.join(',')]
94
+ headers.add(SEC_WEBSOCKET_PROTOCOL, protocols.join(','))
77
95
  end
78
96
 
79
- merged_headers = ::Protocol::HTTP::Headers::Merged.new(request.headers, headers)
80
-
81
- super(request.scheme, request.authority, ::Protocol::HTTP::Methods::CONNECT, request.path, nil, merged_headers, body, PROTOCOL)
97
+ super(request.scheme, request.authority, ::Protocol::HTTP::Methods::CONNECT, request.path, nil, headers, body, PROTOCOL)
82
98
  end
83
99
 
84
100
  def call(connection)
85
- Wrapper.new(@body, super)
101
+ response = super
102
+
103
+ Wrapper.new(@body.stream, response)
86
104
  end
87
105
  end
88
106
  end
@@ -30,10 +30,10 @@ module Async
30
30
  include ::Protocol::WebSocket::Headers
31
31
 
32
32
  def initialize(request, headers = nil, protocol: nil, &block)
33
- headers = Protocol::HTTP::Headers::Merged.new(headers)
33
+ headers = ::Protocol::HTTP::Headers[headers]
34
34
 
35
35
  if protocol
36
- headers << [[SEC_WEBSOCKET_PROTOCOL, protocol]]
36
+ headers.add(SEC_WEBSOCKET_PROTOCOL, protocol)
37
37
  end
38
38
 
39
39
  body = Async::HTTP::Body::Hijack.wrap(request, &block)
@@ -32,12 +32,31 @@ module Async
32
32
  include ::Protocol::WebSocket::Headers
33
33
 
34
34
  def self.call(framer, protocol = [], **options)
35
- return self.new(framer, Array(protocol).first, **options)
35
+ instance = self.new(framer, Array(protocol).first, **options)
36
+
37
+ return instance unless block_given?
38
+
39
+ begin
40
+ yield instance
41
+ ensure
42
+ instance.close
43
+ end
36
44
  end
37
45
 
38
- def initialize(framer, protocol = nil, **options)
46
+ def initialize(framer, protocol = nil, response: nil, **options)
39
47
  super(framer, **options)
48
+
40
49
  @protocol = protocol
50
+ @response = response
51
+ end
52
+
53
+ def close
54
+ super
55
+
56
+ if @response
57
+ @response.finish
58
+ @response = nil
59
+ end
41
60
  end
42
61
 
43
62
  attr :protocol
@@ -30,7 +30,7 @@ module Async
30
30
  Array(request.protocol).include?(PROTOCOL)
31
31
  end
32
32
 
33
- def initialize(scheme = nil, authority = nil, path = nil, headers = [], **options)
33
+ def initialize(scheme = nil, authority = nil, path = nil, headers = nil, **options, &block)
34
34
  @scheme = scheme
35
35
  @authority = authority
36
36
  @path = path
@@ -27,7 +27,7 @@ module Async
27
27
  module WebSocket
28
28
  module Response
29
29
  # Send the request to the given connection.
30
- def self.for(request, headers = [], **options, &body)
30
+ def self.for(request, headers = nil, **options, &body)
31
31
  if request.version =~ /http\/1/i
32
32
  return UpgradeResponse.new(request, headers, **options, &body)
33
33
  elsif request.version =~ /h2/i
@@ -49,6 +49,8 @@ module Async
49
49
  # Select websocket sub-protocol:
50
50
  protocol = select_protocol(request)
51
51
 
52
+ # request.headers = nil
53
+
52
54
  Response.for(request, headers, protocol: protocol, **options) do |stream|
53
55
  framer = Protocol::WebSocket::Framer.new(stream)
54
56
 
@@ -42,6 +42,8 @@ module Async
42
42
  @stream = nil
43
43
  end
44
44
 
45
+ attr_accessor :response
46
+
45
47
  def stream?
46
48
  @response.status == 101
47
49
  end
@@ -71,21 +73,19 @@ module Async
71
73
  end
72
74
  end
73
75
 
74
- def initialize(request, protocols: [], version: 13)
76
+ def initialize(request, protocols: [], version: 13, &block)
75
77
  @key = Nounce.generate_key
76
78
 
77
- headers = [
78
- [SEC_WEBSOCKET_KEY, @key],
79
- [SEC_WEBSOCKET_VERSION, version],
80
- ]
79
+ headers = ::Protocol::HTTP::Headers[request.headers]
80
+
81
+ headers.add(SEC_WEBSOCKET_KEY, @key)
82
+ headers.add(SEC_WEBSOCKET_VERSION, String(version))
81
83
 
82
84
  if protocols.any?
83
- headers << [SEC_WEBSOCKET_PROTOCOL, protocols.join(',')]
85
+ headers.add(SEC_WEBSOCKET_PROTOCOL, protocols.join(','))
84
86
  end
85
87
 
86
- merged_headers = ::Protocol::HTTP::Headers::Merged.new(request.headers, headers)
87
-
88
- super(request.scheme, request.authority, ::Protocol::HTTP::Methods::GET, request.path, nil, merged_headers, nil, PROTOCOL)
88
+ super(request.scheme, request.authority, ::Protocol::HTTP::Methods::GET, request.path, nil, headers, nil, PROTOCOL)
89
89
  end
90
90
 
91
91
  def call(connection)
@@ -31,17 +31,17 @@ module Async
31
31
  include ::Protocol::WebSocket::Headers
32
32
 
33
33
  def initialize(request, headers = nil, protocol: nil, &block)
34
- headers = Protocol::HTTP::Headers::Merged.new(headers)
34
+ headers = ::Protocol::HTTP::Headers[headers]
35
35
 
36
36
  if accept_nounce = request.headers[SEC_WEBSOCKET_KEY]&.first
37
- headers << [[SEC_WEBSOCKET_ACCEPT, Nounce.accept_digest(accept_nounce)]]
37
+ headers.add(SEC_WEBSOCKET_ACCEPT, Nounce.accept_digest(accept_nounce))
38
38
  status = 101
39
39
  else
40
40
  status = 400
41
41
  end
42
42
 
43
43
  if protocol
44
- headers << [[SEC_WEBSOCKET_PROTOCOL, protocol]]
44
+ headers.add(SEC_WEBSOCKET_PROTOCOL, protocol)
45
45
  end
46
46
 
47
47
  body = Async::HTTP::Body::Hijack.wrap(request, &block)
@@ -20,6 +20,6 @@
20
20
 
21
21
  module Async
22
22
  module WebSocket
23
- VERSION = "0.13.0"
23
+ VERSION = "0.17.0"
24
24
  end
25
25
  end
metadata CHANGED
@@ -1,43 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: async-websocket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.0
4
+ version: 0.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-22 00:00:00.000000000 Z
11
+ date: 2021-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: async-io
14
+ name: async-http
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.23'
19
+ version: '0.54'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '1.23'
26
+ version: '0.54'
27
27
  - !ruby/object:Gem::Dependency
28
- name: async-http
28
+ name: async-io
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.43'
33
+ version: '1.23'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.43'
40
+ version: '1.23'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: protocol-websocket
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,21 +67,7 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: falcon
71
- requirement: !ruby/object:Gem::Requirement
72
- requirements:
73
- - - "~>"
74
- - !ruby/object:Gem::Version
75
- version: '0.32'
76
- type: :development
77
- prerelease: false
78
- version_requirements: !ruby/object:Gem::Requirement
79
- requirements:
80
- - - "~>"
81
- - !ruby/object:Gem::Version
82
- version: '0.32'
83
- - !ruby/object:Gem::Dependency
84
- name: covered
70
+ name: bundler
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
73
  - - ">="
@@ -95,7 +81,7 @@ dependencies:
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
- name: bundler
84
+ name: covered
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
87
  - - ">="
@@ -109,21 +95,21 @@ dependencies:
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
112
- name: rspec
98
+ name: falcon
113
99
  requirement: !ruby/object:Gem::Requirement
114
100
  requirements:
115
101
  - - "~>"
116
102
  - !ruby/object:Gem::Version
117
- version: '3.6'
103
+ version: '0.34'
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
107
  requirements:
122
108
  - - "~>"
123
109
  - !ruby/object:Gem::Version
124
- version: '3.6'
110
+ version: '0.34'
125
111
  - !ruby/object:Gem::Dependency
126
- name: rake
112
+ name: rack-test
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
115
  - - ">="
@@ -136,61 +122,26 @@ dependencies:
136
122
  - - ">="
137
123
  - !ruby/object:Gem::Version
138
124
  version: '0'
139
- description:
125
+ - !ruby/object:Gem::Dependency
126
+ name: rspec
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - "~>"
130
+ - !ruby/object:Gem::Version
131
+ version: '3.6'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - "~>"
137
+ - !ruby/object:Gem::Version
138
+ version: '3.6'
139
+ description:
140
140
  email:
141
- - samuel.williams@oriontransfer.co.nz
142
141
  executables: []
143
142
  extensions: []
144
143
  extra_rdoc_files: []
145
144
  files:
146
- - ".editorconfig"
147
- - ".gitignore"
148
- - ".rspec"
149
- - ".travis.yml"
150
- - Gemfile
151
- - README.md
152
- - Rakefile
153
- - async-websocket.gemspec
154
- - examples/chat/client.rb
155
- - examples/chat/config.ru
156
- - examples/chat/multi-client.rb
157
- - examples/mud/client.rb
158
- - examples/mud/config.ru
159
- - examples/rack/client.rb
160
- - examples/rack/config.ru
161
- - examples/utopia/.bowerrc
162
- - examples/utopia/.gitignore
163
- - examples/utopia/.rspec
164
- - examples/utopia/Gemfile
165
- - examples/utopia/Guardfile
166
- - examples/utopia/README.md
167
- - examples/utopia/Rakefile
168
- - examples/utopia/config.ru
169
- - examples/utopia/config/README.md
170
- - examples/utopia/config/environment.rb
171
- - examples/utopia/lib/readme.txt
172
- - examples/utopia/pages/_heading.xnode
173
- - examples/utopia/pages/_page.xnode
174
- - examples/utopia/pages/client/client.js
175
- - examples/utopia/pages/client/index.xnode
176
- - examples/utopia/pages/errors/exception.xnode
177
- - examples/utopia/pages/errors/file-not-found.xnode
178
- - examples/utopia/pages/links.yaml
179
- - examples/utopia/pages/server/controller.rb
180
- - examples/utopia/public/_static/icon.png
181
- - examples/utopia/public/_static/site.css
182
- - examples/utopia/public/_static/utopia-background.svg
183
- - examples/utopia/public/_static/utopia.svg
184
- - examples/utopia/public/readme.txt
185
- - examples/utopia/spec/spec_helper.rb
186
- - examples/utopia/spec/website_context.rb
187
- - examples/utopia/spec/website_spec.rb
188
- - examples/utopia/tasks/bower.rake
189
- - examples/utopia/tasks/deploy.rake
190
- - examples/utopia/tasks/development.rake
191
- - examples/utopia/tasks/environment.rake
192
- - examples/utopia/tasks/log.rake
193
- - examples/utopia/tasks/static.rake
194
145
  - lib/async/websocket.rb
195
146
  - lib/async/websocket/adapters/rack.rb
196
147
  - lib/async/websocket/client.rb
@@ -205,20 +156,11 @@ files:
205
156
  - lib/async/websocket/upgrade_request.rb
206
157
  - lib/async/websocket/upgrade_response.rb
207
158
  - lib/async/websocket/version.rb
208
- - spec/async/websocket/adapters/rack/client.rb
209
- - spec/async/websocket/adapters/rack/config.ru
210
- - spec/async/websocket/adapters/rack_spec.rb
211
- - spec/async/websocket/client_spec.rb
212
- - spec/async/websocket/connection_spec.rb
213
- - spec/async/websocket/server_examples.rb
214
- - spec/async/websocket/server_spec.rb
215
- - spec/async/websocket/upgrade.rb
216
- - spec/spec_helper.rb
217
- homepage: ''
159
+ homepage: https://github.com/socketry/async-websocket
218
160
  licenses:
219
161
  - MIT
220
162
  metadata: {}
221
- post_install_message:
163
+ post_install_message:
222
164
  rdoc_options: []
223
165
  require_paths:
224
166
  - lib
@@ -233,17 +175,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
233
175
  - !ruby/object:Gem::Version
234
176
  version: '0'
235
177
  requirements: []
236
- rubygems_version: 3.0.2
237
- signing_key:
178
+ rubygems_version: 3.1.2
179
+ signing_key:
238
180
  specification_version: 4
239
181
  summary: An async websocket library on top of websocket-driver.
240
- test_files:
241
- - spec/async/websocket/adapters/rack/client.rb
242
- - spec/async/websocket/adapters/rack/config.ru
243
- - spec/async/websocket/adapters/rack_spec.rb
244
- - spec/async/websocket/client_spec.rb
245
- - spec/async/websocket/connection_spec.rb
246
- - spec/async/websocket/server_examples.rb
247
- - spec/async/websocket/server_spec.rb
248
- - spec/async/websocket/upgrade.rb
249
- - spec/spec_helper.rb
182
+ test_files: []