graphql-anycable 1.1.0 → 1.1.1

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: 335a3ba62f65f0d6dfdd5eab2e1361382d192b5fbc910c591ced6f78296fb4ff
4
- data.tar.gz: 9f392057c605fc0b74d6ea2c940409540b87e25ddb0a6dee34e47ad3929f652a
3
+ metadata.gz: a0437da8b1214b8c5aa81733cd8b0b4449a527f9d7f487e3d0e97034ffefea2e
4
+ data.tar.gz: ef6d5a734dfc73824e2a37e7b3d3bcd47eb3af597b99a9d91a7aa41c7fc85797
5
5
  SHA512:
6
- metadata.gz: 55b8fbf37efbdeff43beb7266ed627491b1a592f9cfe7e803dfd420b49d988a8057cb4ad7df7dea916df4f4c555868e29bace42cc76d2ae692755421a05f8bd5
7
- data.tar.gz: d0665b9ec01879f5898c7638a9325c156c2665966552edc20cd013d3dfefbbbbada8e7e22d32e31ce7d8e6e0f59576c9a377ff92ffd1eb8e674e4cef533c7659
6
+ metadata.gz: eae7c1026142f0d4360d556af37eeae4937e9cde79bf0e05a8aed6a3dac9e40a6445f7970b11bc9c8a25def13ee42d1c0507452d6c168805452dc9a7d8fb1c30
7
+ data.tar.gz: f2985e19bad56f101099ca1da605f0eb62b606034d595530c86bbd672b146b65ef7f54212813fdf110dba961dfaa14e400bab390505828b4a8dc7fa289039155
@@ -10,7 +10,7 @@ on:
10
10
 
11
11
  jobs:
12
12
  test:
13
- name: "GraphQL-Ruby ${{ matrix.graphql }} (interpreter: ${{ matrix.interpreter }}) with AnyCable ${{ matrix.anycable }} on Ruby ${{ matrix.ruby }}"
13
+ name: "GraphQL-Ruby ${{ matrix.graphql }} (interpreter: ${{ matrix.interpreter }} with AnyCable ${{ matrix.anycable }}, use_client_id: ${{ matrix.client_id }}) on Ruby ${{ matrix.ruby }}"
14
14
  runs-on: ubuntu-latest
15
15
  strategy:
16
16
  fail-fast: false
@@ -19,34 +19,17 @@ jobs:
19
19
  - ruby: "3.0"
20
20
  graphql: '~> 1.12.0'
21
21
  anycable: '~> 1.1.0'
22
+ client_id: 'false'
22
23
  interpreter: yes
23
- - ruby: "3.0"
24
- graphql: '~> 1.12.0'
25
- anycable: '~> 1.1.0'
26
- interpreter: no
27
24
  - ruby: 2.7
28
25
  graphql: '~> 1.12.0'
29
26
  anycable: '~> 1.1.0'
30
- interpreter: yes
31
- - ruby: 2.7
32
- graphql: '~> 1.12.0'
33
- anycable: '~> 1.1.0'
34
- interpreter: no
35
- - ruby: 2.6
36
- graphql: '~> 1.11.0'
37
- anycable: '~> 1.0.0'
27
+ client_id: 'false'
38
28
  interpreter: yes
39
29
  - ruby: 2.6
40
30
  graphql: '~> 1.11.0'
41
31
  anycable: '~> 1.0.0'
42
- interpreter: no
43
- - ruby: 2.5
44
- graphql: '~> 1.11.0'
45
- anycable: '~> 1.0.0'
46
- interpreter: yes
47
- - ruby: 2.5
48
- graphql: '~> 1.11.0'
49
- anycable: '~> 1.0.0'
32
+ client_id: 'true'
50
33
  interpreter: no
51
34
  container:
52
35
  image: ruby:${{ matrix.ruby }}
@@ -54,6 +37,7 @@ jobs:
54
37
  CI: true
55
38
  GRAPHQL_RUBY_VERSION: ${{ matrix.graphql }}
56
39
  ANYCABLE_VERSION: ${{ matrix.anycable }}
40
+ GRAPHQL_ANYCABLE_USE_CLIENT_PROVIDED_UNIQ_ID: ${{ matrix.client_id }}
57
41
  steps:
58
42
  - uses: actions/checkout@v2
59
43
  - uses: actions/cache@v2
data/CHANGELOG.md CHANGED
@@ -7,6 +7,13 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
7
7
 
8
8
  ## Unreleased
9
9
 
10
+ ## 1.1.1 - 2021-12-06
11
+
12
+ ### Fixed
13
+
14
+ - Handling of buggy istate values on unsubscribe (when `use_client_provided_uniq_id: false`). [@palkan] [#20](https://github.com/anycable/graphql-anycable/pull/20)
15
+ - A bug when `#unsubscribe` happens before `#execute`. [@palkan] [#20](https://github.com/anycable/graphql-anycable/pull/20)
16
+
10
17
  ## 1.1.0 - 2021-11-17
11
18
 
12
19
  ### Added
@@ -142,3 +149,4 @@ Initial version: store subscriptions on redis, re-execute queries in sync. [@Env
142
149
  [@bibendi]: https://github.com/bibendi "Misha Merkushin"
143
150
  [@FX-HAO]: https://github.com/FX-HAO "Fuxin Hao"
144
151
  [@Envek]: https://github.com/Envek "Andrey Novikov"
152
+ [@palkan]: https://github.com/palkan "Vladimir Dementyev"
data/Gemfile CHANGED
@@ -9,6 +9,7 @@ gemspec
9
9
 
10
10
  gem "graphql", ENV.fetch("GRAPHQL_RUBY_VERSION", "~> 1.12")
11
11
  gem "anycable", ENV.fetch("ANYCABLE_VERSION", "~> 1.0")
12
+ gem "anycable-rails", ENV.fetch("ANYCABLE_VERSION", "~> 1.0"), require: false
12
13
 
13
14
  group :development, :test do
14
15
  gem "pry"
@@ -31,8 +31,11 @@ Gem::Specification.new do |spec|
31
31
  spec.add_dependency "graphql", "~> 1.11"
32
32
  spec.add_dependency "redis", ">= 4.2.0"
33
33
 
34
+ spec.add_development_dependency "anycable-rails"
34
35
  spec.add_development_dependency "bundler", "~> 2.0"
35
36
  spec.add_development_dependency "fakeredis"
37
+ spec.add_development_dependency "rack"
38
+ spec.add_development_dependency "railties"
36
39
  spec.add_development_dependency "rake", ">= 12.3.3"
37
40
  spec.add_development_dependency "rspec", "~> 3.0"
38
41
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module GraphQL
4
4
  module AnyCable
5
- VERSION = "1.1.0"
5
+ VERSION = "1.1.1"
6
6
  end
7
7
  end
@@ -225,6 +225,10 @@ module GraphQL
225
225
  def delete_channel_subscriptions(channel_or_id)
226
226
  # For backward compatibility
227
227
  channel_id = channel_or_id.is_a?(String) ? channel_or_id : read_subscription_id(channel_or_id)
228
+
229
+ # Missing in case disconnect happens before #execute
230
+ return unless channel_id
231
+
228
232
  redis.smembers(CHANNEL_PREFIX + channel_id).each do |subscription_id|
229
233
  delete_subscription(subscription_id)
230
234
  end
@@ -240,13 +244,30 @@ module GraphQL
240
244
  def read_subscription_id(channel)
241
245
  return channel.instance_variable_get(:@__sid__) if channel.instance_variable_defined?(:@__sid__)
242
246
 
243
- channel.instance_variable_set(:@__sid__, channel.connection.socket.istate["sid"])
247
+ istate = fetch_channel_istate(channel)
248
+
249
+ return unless istate
250
+
251
+ channel.instance_variable_set(:@__sid__, istate["sid"])
244
252
  end
245
253
 
246
254
  def write_subscription_id(channel, val)
247
255
  channel.connection.socket.istate["sid"] = val
248
256
  channel.instance_variable_set(:@__sid__, val)
249
257
  end
258
+
259
+ def fetch_channel_istate(channel)
260
+ # For Rails integration
261
+ return channel.__istate__ if channel.respond_to?(:__istate__)
262
+
263
+ return unless channel.connection.socket.istate
264
+
265
+ if channel.connection.socket.istate[channel.identifier]
266
+ JSON.parse(channel.connection.socket.istate[channel.identifier])
267
+ else
268
+ channel.connection.socket.istate
269
+ end
270
+ end
250
271
  end
251
272
  end
252
273
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphql-anycable
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Novikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-11-17 00:00:00.000000000 Z
11
+ date: 2021-12-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anycable
@@ -72,6 +72,20 @@ dependencies:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: 4.2.0
75
+ - !ruby/object:Gem::Dependency
76
+ name: anycable-rails
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ type: :development
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
75
89
  - !ruby/object:Gem::Dependency
76
90
  name: bundler
77
91
  requirement: !ruby/object:Gem::Requirement
@@ -100,6 +114,34 @@ dependencies:
100
114
  - - ">="
101
115
  - !ruby/object:Gem::Version
102
116
  version: '0'
117
+ - !ruby/object:Gem::Dependency
118
+ name: rack
119
+ requirement: !ruby/object:Gem::Requirement
120
+ requirements:
121
+ - - ">="
122
+ - !ruby/object:Gem::Version
123
+ version: '0'
124
+ type: :development
125
+ prerelease: false
126
+ version_requirements: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
131
+ - !ruby/object:Gem::Dependency
132
+ name: railties
133
+ requirement: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ type: :development
139
+ prerelease: false
140
+ version_requirements: !ruby/object:Gem::Requirement
141
+ requirements:
142
+ - - ">="
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
103
145
  - !ruby/object:Gem::Dependency
104
146
  name: rake
105
147
  requirement: !ruby/object:Gem::Requirement