anycable 0.6.3 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
@@ -3,11 +3,46 @@
3
3
  module AnyCable
4
4
  # Socket mock to be used with application connection
5
5
  class Socket
6
- attr_reader :transmissions, :env
6
+ # Represents the per-connection store
7
+ # (for example, used to keep session beetween RPC calls)
8
+ class State
9
+ attr_reader :dirty_keys, :source
10
+
11
+ def initialize(from)
12
+ @source = from
13
+ @dirty_keys = nil
14
+ end
15
+
16
+ def read(key)
17
+ source&.[](key)
18
+ end
19
+
20
+ alias [] read
21
+
22
+ def write(key, val)
23
+ return if source&.[](key) == val
24
+
25
+ @source ||= {}
26
+ @dirty_keys ||= []
27
+ dirty_keys << key
28
+ source[key] = val
29
+ end
30
+
31
+ alias []= write
32
+
33
+ def changed_fields
34
+ return unless source && dirty_keys
35
+ source.slice(*dirty_keys)
36
+ end
37
+ end
38
+
39
+ attr_reader :transmissions, :env, :cstate, :istate
7
40
 
8
41
  def initialize(env: nil)
9
42
  @transmissions = []
10
43
  @env = env
44
+ @cstate = env["anycable.cstate"] = State.new(env["anycable.raw_cstate"])
45
+ @istate = env["anycable.istate"] = State.new(env["anycable.raw_istate"])
11
46
  end
12
47
 
13
48
  def transmit(websocket_message)
@@ -15,11 +50,11 @@ module AnyCable
15
50
  end
16
51
 
17
52
  def subscribe(_channel, broadcasting)
18
- streams << broadcasting
53
+ streams[:start] << broadcasting
19
54
  end
20
55
 
21
- def unsubscribe(_channel, _broadcasting)
22
- raise NotImplementedError
56
+ def unsubscribe(_channel, broadcasting)
57
+ streams[:stop] << broadcasting
23
58
  end
24
59
 
25
60
  def unsubscribe_from_all(_channel)
@@ -27,12 +62,11 @@ module AnyCable
27
62
  end
28
63
 
29
64
  def streams
30
- @streams ||= []
65
+ @streams ||= {start: [], stop: []}
31
66
  end
32
67
 
33
68
  def close
34
69
  @closed = true
35
- @transmissions.clear
36
70
  @streams&.clear
37
71
  @stop_all_streams = true
38
72
  end
@@ -44,5 +78,13 @@ module AnyCable
44
78
  def stop_streams?
45
79
  @stop_all_streams == true
46
80
  end
81
+
82
+ def session
83
+ cstate.read(SESSION_KEY)
84
+ end
85
+
86
+ def session=(val)
87
+ cstate.write(SESSION_KEY, val)
88
+ end
47
89
  end
48
90
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module AnyCable
4
- VERSION = "0.6.3"
4
+ VERSION = "1.0.0.rc1"
5
5
  end
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: anycable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.3
4
+ version: 1.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - palkan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-26 00:00:00.000000000 Z
11
+ date: 2020-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anyway_config
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.4.2
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
26
  version: 1.4.2
27
27
  - !ruby/object:Gem::Dependency
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - ">="
74
74
  - !ruby/object:Gem::Version
75
- version: '10.0'
75
+ version: '13.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: '10.0'
82
+ version: '13.0'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: rack
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -109,47 +109,19 @@ dependencies:
109
109
  - !ruby/object:Gem::Version
110
110
  version: '3.5'
111
111
  - !ruby/object:Gem::Dependency
112
- name: rubocop
112
+ name: webmock
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.65.0
117
+ version: '3.8'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: 0.65.0
125
- - !ruby/object:Gem::Dependency
126
- name: simplecov
127
- requirement: !ruby/object:Gem::Requirement
128
- requirements:
129
- - - ">="
130
- - !ruby/object:Gem::Version
131
- version: 0.3.8
132
- type: :development
133
- prerelease: false
134
- version_requirements: !ruby/object:Gem::Requirement
135
- requirements:
136
- - - ">="
137
- - !ruby/object:Gem::Version
138
- version: 0.3.8
139
- - !ruby/object:Gem::Dependency
140
- name: pry-byebug
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - ">="
144
- - !ruby/object:Gem::Version
145
- version: '0'
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - ">="
151
- - !ruby/object:Gem::Version
152
- version: '0'
124
+ version: '3.8'
153
125
  description: AnyCable is a polyglot replacement for ActionCable-compatible servers
154
126
  email:
155
127
  - dementiev.vm@gmail.com
@@ -168,6 +140,8 @@ files:
168
140
  - bin/setup
169
141
  - lib/anycable.rb
170
142
  - lib/anycable/broadcast_adapters.rb
143
+ - lib/anycable/broadcast_adapters/base.rb
144
+ - lib/anycable/broadcast_adapters/http.rb
171
145
  - lib/anycable/broadcast_adapters/redis.rb
172
146
  - lib/anycable/cli.rb
173
147
  - lib/anycable/config.rb
@@ -175,16 +149,27 @@ files:
175
149
  - lib/anycable/health_server.rb
176
150
  - lib/anycable/middleware.rb
177
151
  - lib/anycable/middleware_chain.rb
152
+ - lib/anycable/middlewares/check_version.rb
153
+ - lib/anycable/rpc.rb
178
154
  - lib/anycable/rpc/rpc_pb.rb
179
155
  - lib/anycable/rpc/rpc_services_pb.rb
180
156
  - lib/anycable/rpc_handler.rb
157
+ - lib/anycable/rspec.rb
158
+ - lib/anycable/rspec/rpc_command_context.rb
159
+ - lib/anycable/rspec/rpc_stub_context.rb
160
+ - lib/anycable/rspec/with_grpc_server.rb
181
161
  - lib/anycable/server.rb
182
162
  - lib/anycable/socket.rb
183
163
  - lib/anycable/version.rb
184
164
  homepage: http://github.com/anycable/anycable
185
165
  licenses:
186
166
  - MIT
187
- metadata: {}
167
+ metadata:
168
+ bug_tracker_uri: http://github.com/anycable/anycable/issues
169
+ changelog_uri: https://github.com/anycable/anycable/blob/master/CHANGELOG.md
170
+ documentation_uri: https://docs.anycable.io/
171
+ homepage_uri: https://anycable.io/
172
+ source_code_uri: http://github.com/anycable/anycable
188
173
  post_install_message:
189
174
  rdoc_options: []
190
175
  require_paths:
@@ -193,14 +178,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
193
178
  requirements:
194
179
  - - ">="
195
180
  - !ruby/object:Gem::Version
196
- version: 2.4.0
181
+ version: 2.5.0
197
182
  required_rubygems_version: !ruby/object:Gem::Requirement
198
183
  requirements:
199
- - - ">="
184
+ - - ">"
200
185
  - !ruby/object:Gem::Version
201
- version: '0'
186
+ version: 1.3.1
202
187
  requirements: []
203
- rubygems_version: 3.0.2
188
+ rubygems_version: 3.0.6
204
189
  signing_key:
205
190
  specification_version: 4
206
191
  summary: AnyCable is a polyglot replacement for ActionCable-compatible servers