graphql-anycable 0.4.1 → 0.4.2

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: f463febbc62debd78ca0f3beffb7a6e97f9f10a850256cd97ad49f3af4894587
4
- data.tar.gz: 8d10b35e3bed8d8e8f0524540cc1a049d6af9ed7673f5335dec09e9a0deb420d
3
+ metadata.gz: 0f464f4d333c2d59173af97549967def49f8843ae53882c4ab455fa48e1b62ab
4
+ data.tar.gz: f19ba6bfd926d4038ce6c11bc40c499f60f5d426daeec59f9b2f28304d08d0bb
5
5
  SHA512:
6
- metadata.gz: 9f0f7636f5062096548548acfb4dd16d7762d55b39d0e53fb750f5ae549936adb9511cc179cf06becdf2e67b513f9d3ebb15b44d3e9dd9f6146da99087ce801c
7
- data.tar.gz: 94880103ba2deb26aa42549591e18aeee903c7fc33a09a5f26c3498174250ae583acccc1ded333890a6150846cc91dd975a5ee187c16eaebca3de82f996a23a2
6
+ metadata.gz: 7b35ce8815a7ffebed1162b35d21cf3addb5f6677df3dd00311827cdac7d371277703c271447631a143d9b6e3e4865ea17a141ce2664ea7948fe9c52ac6bc6f5
7
+ data.tar.gz: 7696f55e6a71cc8e1c14d08473a86da9b950317d88224afb8beaa2f0484d96886bf1d0d5a51cc53d3026a8598f4f4f7ecc57db9106b4aec80bcd81a0670b07e1
@@ -0,0 +1,64 @@
1
+ name: Build and release gem to RubyGems
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - v*
7
+
8
+ jobs:
9
+ release:
10
+ runs-on: ubuntu-latest
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ with:
14
+ fetch-depth: 0 # Fetch current tag as annotated. See https://github.com/actions/checkout/issues/290
15
+ - uses: ruby/setup-ruby@v1
16
+ with:
17
+ ruby-version: 2.7
18
+ - name: "Extract data from tag: version, message, body"
19
+ id: tag
20
+ run: |
21
+ git fetch --tags --force # Really fetch annotated tag. See https://github.com/actions/checkout/issues/290#issuecomment-680260080
22
+ echo ::set-output name=version::${GITHUB_REF#refs/tags/v}
23
+ echo ::set-output name=subject::$(git for-each-ref $GITHUB_REF --format='%(contents:subject)')
24
+ # Multiline body for release. See https://github.community/t/set-output-truncates-multiline-strings/16852/5
25
+ BODY="$(git for-each-ref $GITHUB_REF --format='%(contents:body)')"
26
+ BODY="${BODY//'%'/'%25'}"
27
+ BODY="${BODY//$'\n'/'%0A'}"
28
+ BODY="${BODY//$'\r'/'%0D'}"
29
+ echo "::set-output name=body::$BODY"
30
+ - name: Build gem
31
+ run: gem build
32
+ - name: Check version
33
+ run: ls graphql-anycable-${{ steps.tag.outputs.version }}.gem
34
+ - name: Create Release
35
+ id: create_release
36
+ uses: actions/create-release@v1
37
+ env:
38
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
39
+ with:
40
+ tag_name: ${{ github.ref }}
41
+ release_name: ${{ steps.tag.outputs.subject }}
42
+ body: ${{ steps.tag.outputs.body }}
43
+ draft: false
44
+ prerelease: false
45
+ - name: Upload Release Asset
46
+ id: upload-release-asset
47
+ uses: actions/upload-release-asset@v1
48
+ env:
49
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50
+ with:
51
+ upload_url: ${{ steps.create_release.outputs.upload_url }}
52
+ asset_path: graphql-anycable-${{ steps.tag.outputs.version }}.gem
53
+ asset_name: graphql-anycable-${{ steps.tag.outputs.version }}.gem
54
+ asset_content_type: application/x-tar
55
+ - name: Install publish prerequisites
56
+ run: |
57
+ sudo apt-get update
58
+ sudo apt-get install oathtool
59
+ - name: Publish to RubyGems
60
+ env:
61
+ GEM_HOST_API_KEY: "${{ secrets.RUBYGEMS_API_KEY }}"
62
+ RUBYGEMS_OTP_KEY: "${{ secrets.RUBYGEMS_OTP_KEY }}"
63
+ run: |
64
+ gem push graphql-anycable-${{ steps.tag.outputs.version }}.gem --otp=$(oathtool --totp --base32 $RUBYGEMS_OTP_KEY)
@@ -0,0 +1,69 @@
1
+ name: Run tests
2
+
3
+ on:
4
+ pull_request:
5
+ push:
6
+ branches:
7
+ - '**'
8
+ tags-ignore:
9
+ - 'v*'
10
+
11
+ jobs:
12
+ test:
13
+ name: "Run tests"
14
+ if: "! contains(toJSON(github.event.commits.latest.message), '[ci skip]')"
15
+ runs-on: ubuntu-latest
16
+ strategy:
17
+ fail-fast: false
18
+ matrix:
19
+ include:
20
+ - ruby: 2.7
21
+ graphql: '~> 1.11.0'
22
+ anycable: '~> 1.0.0'
23
+ interpreter: yes
24
+ - ruby: 2.7
25
+ graphql: '~> 1.11.0'
26
+ anycable: '~> 1.0.0'
27
+ interpreter: no
28
+ - ruby: 2.6
29
+ graphql: '~> 1.10.0'
30
+ anycable: '~> 1.0.0'
31
+ interpreter: yes
32
+ - ruby: 2.6
33
+ graphql: '~> 1.10.0'
34
+ anycable: '~> 1.0.0'
35
+ interpreter: no
36
+ - ruby: 2.5
37
+ graphql: '~> 1.9.0'
38
+ anycable: '~> 0.6.0'
39
+ interpreter: yes
40
+ - ruby: 2.5
41
+ graphql: '~> 1.9.0'
42
+ anycable: '~> 0.6.0'
43
+ interpreter: no
44
+ container:
45
+ image: ruby:${{ matrix.ruby }}
46
+ env:
47
+ CI: true
48
+ GRAPHQL_RUBY_VERSION: ${{ matrix.graphql }}
49
+ ANYCABLE_VERSION: ${{ matrix.anycable }}
50
+ steps:
51
+ - uses: actions/checkout@v2
52
+ - uses: actions/cache@v2
53
+ with:
54
+ path: vendor/bundle
55
+ key: bundle-${{ matrix.ruby }}-${{ matrix.graphql }}-${{ matrix.anycable }}-${{ hashFiles('**/*.gemspec') }}-${{ hashFiles('**/Gemfile') }}
56
+ restore-keys: |
57
+ bundle-${{ matrix.ruby }}-${{ matrix.graphql }}-${{ matrix.anycable }}-
58
+ bundle-${{ matrix.ruby }}-
59
+ - name: Upgrade Bundler to 2.0 (for older Rubies)
60
+ run: gem install bundler -v '~> 2.0'
61
+ - name: Bundle install
62
+ run: |
63
+ bundle config path vendor/bundle
64
+ bundle install
65
+ bundle update
66
+ - name: Run RSpec
67
+ env:
68
+ GRAPHQL_RUBY_INTERPRETER: ${{ matrix.interpreter }}
69
+ run: bundle exec rspec
data/Gemfile CHANGED
@@ -7,6 +7,9 @@ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
7
7
  # Specify your gem's dependencies in graphql-anycable.gemspec
8
8
  gemspec
9
9
 
10
+ gem "graphql", ENV.fetch("GRAPHQL_RUBY_VERSION", "~> 1.11")
11
+ gem "anycable", ENV.fetch("ANYCABLE_VERSION", "~> 1.0")
12
+
10
13
  group :development, :test do
11
14
  gem "pry"
12
15
  gem "pry-byebug", platform: :mri
@@ -15,5 +18,5 @@ group :development, :test do
15
18
  gem "rubocop-rspec"
16
19
 
17
20
  # See https://github.com/guilleiguaran/fakeredis/pull/247
18
- gem "fakeredis", github: 'artygus/fakeredis', branch: 'exists-should-return-number'
21
+ gem "fakeredis", github: 'guilleiguaran/fakeredis'
19
22
  end
data/README.md CHANGED
@@ -139,6 +139,43 @@ GraphQL-Anycable uses [anyway_config] to configure itself. There are several pos
139
139
 
140
140
  And any other way provided by [anyway_config]. Check its documentation!
141
141
 
142
+ ## Data model
143
+
144
+ As in AnyCable there is no place to store subscription data in-memory, it should be persisted somewhere to be retrieved on `GraphQLSchema.subscriptions.trigger` and sent to subscribed clients. `graphql-anycable` uses the same Redis database as AnyCable itself.
145
+
146
+ 1. Event subscriptions: `graphql-event:#{event.topic}` set containing identifiers for all subscriptions for given operation with certain context and arguments (serialized in _topic_). Used to find all subscriptions on `GraphQLSchema.subscriptions.trigger`.
147
+
148
+ ```
149
+ SMEMBERS graphql-event:1:myStats:
150
+ => 52ee8d65-275e-4d22-94af-313129116388
151
+ ```
152
+
153
+ 2. Subscription data: `graphql-subscription:#{subscription_id}` hash contains everything required to evaluate subscription on trigger and create data for client.
154
+
155
+ ```
156
+ HGETALL graphql-subscription:52ee8d65-275e-4d22-94af-313129116388
157
+ => {
158
+ context: '{"user_id":1,"user":{"__gid__":"Z2lkOi8vZWJheS1tYWcyL1VzZXIvMQ"},"subscription_id":"52ee8d65-275e-4d22-94af-313129116388\","action_cable_stream":"graphql-subscription:52ee8d65-275e-4d22-94af-313129116388",}',
159
+ variables: '{}',
160
+ operation_name: 'MyStats'
161
+ query_string: 'subscription MyStats { myStatsUpdated { completed total processed __typename } }',
162
+ }
163
+ ```
164
+
165
+ 3. Channel subscriptions: `graphql-channel:#{channel_id}` set containing identifiers for subscriptions created in ActionCable channel to delete them on client disconnect.
166
+
167
+ ```
168
+ SMEMBERS graphql-channel:17420c6ed9e
169
+ => 52ee8d65-275e-4d22-94af-313129116388
170
+ ```
171
+
172
+ 4. Subscription events: `graphql-subscription-events:#{subscription_id}` set containing event topics to delete subscription identifier from event subscriptions set on unsubscribe (or client disconnect).
173
+
174
+ ```
175
+ SMEMBERS graphql-subscription-events:52ee8d65-275e-4d22-94af-313129116388
176
+ => 1:myStats:
177
+ ```
178
+
142
179
  ## Development
143
180
 
144
181
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -35,5 +35,4 @@ Gem::Specification.new do |spec|
35
35
  spec.add_development_dependency "fakeredis"
36
36
  spec.add_development_dependency "rake", ">= 12.3.3"
37
37
  spec.add_development_dependency "rspec", "~> 3.0"
38
- spec.add_development_dependency "appraisal"
39
38
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module GraphQL
4
4
  module Anycable
5
- VERSION = "0.4.1"
5
+ VERSION = "0.4.2"
6
6
  end
7
7
  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: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrey Novikov
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-08-21 00:00:00.000000000 Z
11
+ date: 2020-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: anycable
@@ -134,20 +134,6 @@ dependencies:
134
134
  - - "~>"
135
135
  - !ruby/object:Gem::Version
136
136
  version: '3.0'
137
- - !ruby/object:Gem::Dependency
138
- name: appraisal
139
- requirement: !ruby/object:Gem::Requirement
140
- requirements:
141
- - - ">="
142
- - !ruby/object:Gem::Version
143
- version: '0'
144
- type: :development
145
- prerelease: false
146
- version_requirements: !ruby/object:Gem::Requirement
147
- requirements:
148
- - - ">="
149
- - !ruby/object:Gem::Version
150
- version: '0'
151
137
  description:
152
138
  email:
153
139
  - envek@envek.name
@@ -157,11 +143,11 @@ extra_rdoc_files: []
157
143
  files:
158
144
  - ".github/ISSUE_TEMPLATE/bug_report.md"
159
145
  - ".github/ISSUE_TEMPLATE/feature_request.md"
146
+ - ".github/workflows/build-release.yml"
147
+ - ".github/workflows/test.yml"
160
148
  - ".gitignore"
161
149
  - ".rspec"
162
150
  - ".rubocop.yml"
163
- - ".travis.yml"
164
- - Appraisals
165
151
  - CHANGELOG.md
166
152
  - Gemfile
167
153
  - LICENSE.txt
@@ -169,12 +155,6 @@ files:
169
155
  - Rakefile
170
156
  - bin/console
171
157
  - bin/setup
172
- - gemfiles/.bundle/config
173
- - gemfiles/anycable_0.6.gemfile
174
- - gemfiles/anycable_1.0.gemfile
175
- - gemfiles/graphql_1.10.gemfile
176
- - gemfiles/graphql_1.11.gemfile
177
- - gemfiles/graphql_1.9.gemfile
178
158
  - graphql-anycable.gemspec
179
159
  - lib/Rakefile
180
160
  - lib/graphql-anycable.rb
@@ -1,34 +0,0 @@
1
- ---
2
- language: ruby
3
- cache: bundler
4
- rvm:
5
- - 2.7.1
6
- - 2.6.6
7
- - 2.5.8
8
- gemfile:
9
- - gemfiles/graphql_1.9.gemfile
10
- - gemfiles/graphql_1.10.gemfile
11
- - gemfiles/graphql_1.11.gemfile
12
- - gemfiles/anycable_0.6.gemfile
13
- - gemfiles/anycable_1.0.gemfile
14
- env:
15
- - GRAPHQL_RUBY_INTERPRETER=yes
16
- - GRAPHQL_RUBY_INTERPRETER=no
17
- before_install: gem install bundler -v "~> 2.0"
18
-
19
- jobs:
20
- exclude:
21
- # Exclude new dependencies on old rubies to run less jobs
22
- - rvm: 2.5.8
23
- gemfile: gemfiles/anycable_1.0.gemfile
24
- - rvm: 2.5.8
25
- gemfile: gemfiles/graphql_1.10.gemfile
26
- - rvm: 2.5.8
27
- gemfile: gemfiles/graphql_1.11.gemfile
28
- # Exclude old dependencies on new rubies to run less jobs
29
- - rvm: 2.6.5
30
- gemfile: gemfiles/anycable_0.6.gemfile
31
- - rvm: 2.6.5
32
- gemfile: gemfiles/graphql_1.9.gemfile
33
- - rvm: 2.6.5
34
- gemfile: gemfiles/graphql_1.10.gemfile
data/Appraisals DELETED
@@ -1,19 +0,0 @@
1
- appraise "graphql-1.9" do
2
- gem "graphql", "~> 1.9.0"
3
- end
4
-
5
- appraise "graphql-1.10" do
6
- gem "graphql", "~> 1.10.0"
7
- end
8
-
9
- appraise "graphql-1.11" do
10
- gem "graphql", "~> 1.11.0"
11
- end
12
-
13
- appraise "anycable-0.6" do
14
- gem "anycable", "~> 0.6.0"
15
- end
16
-
17
- appraise "anycable-1.0" do
18
- gem "anycable", "~> 1.0.0.preview1"
19
- end
@@ -1,2 +0,0 @@
1
- ---
2
- BUNDLE_RETRY: "1"
@@ -1,14 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "anycable", "~> 0.6.0"
6
-
7
- group :development, :test do
8
- gem "pry"
9
- gem "pry-byebug", platform: :mri
10
- gem "rubocop"
11
- gem "rubocop-rspec"
12
- end
13
-
14
- gemspec path: "../"
@@ -1,14 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "anycable", "~> 1.0.0.preview1"
6
-
7
- group :development, :test do
8
- gem "pry"
9
- gem "pry-byebug", platform: :mri
10
- gem "rubocop"
11
- gem "rubocop-rspec"
12
- end
13
-
14
- gemspec path: "../"
@@ -1,14 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "graphql", "~> 1.10.0"
6
-
7
- group :development, :test do
8
- gem "pry"
9
- gem "pry-byebug", platform: :mri
10
- gem "rubocop"
11
- gem "rubocop-rspec"
12
- end
13
-
14
- gemspec path: "../"
@@ -1,14 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "graphql", "~> 1.11.0"
6
-
7
- group :development, :test do
8
- gem "pry"
9
- gem "pry-byebug", platform: :mri
10
- gem "rubocop"
11
- gem "rubocop-rspec"
12
- end
13
-
14
- gemspec path: "../"
@@ -1,14 +0,0 @@
1
- # This file was generated by Appraisal
2
-
3
- source "https://rubygems.org"
4
-
5
- gem "graphql", "~> 1.9.0"
6
-
7
- group :development, :test do
8
- gem "pry"
9
- gem "pry-byebug", platform: :mri
10
- gem "rubocop"
11
- gem "rubocop-rspec"
12
- end
13
-
14
- gemspec path: "../"