pubsubstub 0.2.1 → 0.3.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: 115205de6d2987f1c983becef16c87452d844b33001a335105eb96f9a945ba74
4
- data.tar.gz: d32a258717cb23cecc7d81e954938c499ffa6d8a9fdd68340a9e62cecbcffb17
3
+ metadata.gz: c0119eecc1e20e95bad0ebae583d2df813c76e3c99234d57ebea86ab4809fb3c
4
+ data.tar.gz: 5ea2a726c9e52f4fbd347bfaca1683d6ab5ae57d401c10699fe992f686b4e938
5
5
  SHA512:
6
- metadata.gz: f92c6a3acf01542564683a9adf952ac0660bbc82612f294d34ba15864aac95d22b0ac9d778a7474101612528c6948e528a3291286c65e410a42394cbc5d9d2a3
7
- data.tar.gz: 3caa10c0cebbe247632faf75d1259e4cba5fdfa8504b594f10826d8e6840ca560bb3d037c11d0e51acc65186ae73e1597199180a2d0880aea11d587fabc8feeb
6
+ metadata.gz: 210a377f7a47fa5a2a1d8b59a60b2a0aa83980fc25f5ec8e3895b731085180a4e90c0a9a20f90d67926d1bbb1126f05239a2614d28f32e1b0e0dafc985ccfd0f
7
+ data.tar.gz: 4eb1be772be42fbcfe66034ca1ed410eb75f858f64e764d0247be6ad324940b1eb9e68ba6199ffd67c5ae1439152327690f482fd9edc0a0015d513eeceab3b5e
@@ -0,0 +1,35 @@
1
+ name: CI
2
+
3
+ on: [push, pull_request]
4
+
5
+ jobs:
6
+ test:
7
+ name: Tests with Ruby ${{ matrix.ruby_version }}
8
+ runs-on: ubuntu-latest
9
+ strategy:
10
+ fail-fast: false
11
+ matrix:
12
+ ruby_version:
13
+ - '2.7'
14
+ - '3.0'
15
+ - '3.1'
16
+
17
+ services:
18
+ redis:
19
+ image: redis
20
+ ports:
21
+ - 6379:6379
22
+ options: --entrypoint redis-server
23
+
24
+ steps:
25
+ - uses: actions/checkout@v1
26
+ - name: Set up Ruby ${{ matrix.ruby_version }}
27
+ uses: ruby/setup-ruby@v1
28
+ with:
29
+ ruby-version: ${{ matrix.ruby_version }}
30
+ bundler-cache: true
31
+ - name: Run tests
32
+ env:
33
+ RAILS_ENV: test
34
+ run: |
35
+ bundle exec rake
data/Gemfile CHANGED
@@ -3,11 +3,9 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in pubsubstub.gemspec
4
4
  gemspec
5
5
 
6
- gem 'rspec', '~> 3.8'
7
- gem "pry-byebug"
8
- gem "byebug", '~> 10.0'
9
- gem "puma", "~> 3.4"
10
- gem "thin", "~> 1.6"
6
+ gem "rspec"
7
+ gem "puma"
8
+ gem "thin"
11
9
  gem "rack-test"
12
10
  gem "timecop"
13
11
  gem "rake"
@@ -13,11 +13,11 @@ module Pubsubstub
13
13
  end
14
14
 
15
15
  def publish(event)
16
- redis.pipelined do
17
- redis.zadd(scrollback_key, event.id, event.to_json)
18
- redis.zremrangebyrank(scrollback_key, 0, -Pubsubstub.channels_scrollback_size)
19
- redis.expire(scrollback_key, Pubsubstub.channels_scrollback_ttl)
20
- redis.publish(pubsub_key, event.to_json)
16
+ redis.pipelined do |pipeline|
17
+ pipeline.zadd(scrollback_key, event.id, event.to_json)
18
+ pipeline.zremrangebyrank(scrollback_key, 0, -Pubsubstub.channels_scrollback_size)
19
+ pipeline.expire(scrollback_key, Pubsubstub.channels_scrollback_ttl)
20
+ pipeline.publish(pubsub_key, event.to_json)
21
21
  end
22
22
  end
23
23
 
@@ -41,11 +41,7 @@ module Pubsubstub
41
41
  end
42
42
 
43
43
  def use_persistent_connections?
44
- Pubsubstub.use_persistent_connections && !event_machine?
45
- end
46
-
47
- def event_machine?
48
- defined?(EventMachine) && EventMachine.reactor_running?
44
+ Pubsubstub.use_persistent_connections
49
45
  end
50
46
 
51
47
  def subscribe_connection(channels, last_event_id)
@@ -74,12 +70,8 @@ module Pubsubstub
74
70
  @mutex.synchronize do
75
71
  return if defined? @helper_threads_initialized
76
72
  @helper_threads_initialized = true
77
- if event_machine?
78
- error { "EventMachine is loaded, running in degraded mode :/"}
79
- else
80
- start_subscriber
81
- start_heartbeat
82
- end
73
+ start_subscriber
74
+ start_heartbeat
83
75
  end
84
76
  end
85
77
 
@@ -1,3 +1,3 @@
1
1
  module Pubsubstub
2
- VERSION = "0.2.1"
2
+ VERSION = "0.3.0"
3
3
  end
data/lib/pubsubstub.rb CHANGED
@@ -38,6 +38,10 @@ module Pubsubstub
38
38
  @redis || synchronize { @redis ||= new_redis }
39
39
  end
40
40
 
41
+ def redis=(client)
42
+ synchronize { @redis = client }
43
+ end
44
+
41
45
  def new_redis
42
46
  Redis.new(url: redis_url)
43
47
  end
data/pubsubstub.gemspec CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["gmalette@gmail.com"]
11
11
  spec.summary = %q{Pubsubstub is a rack middleware to add Pub/Sub}
12
12
  spec.description = %q{Pubsubstub can be added to a rack Application or deployed standalone. It uses Redis to do the Pub/Sub}
13
- spec.homepage = "https://github.com/gmalette/pubsubstub"
13
+ spec.homepage = "https://github.com/byroot/pubsubstub"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
data/spec/spec_helper.rb CHANGED
@@ -1,7 +1,5 @@
1
1
  require 'open3'
2
2
  require 'rack/test'
3
- require 'pry'
4
- require 'pry-byebug'
5
3
  require 'timecop'
6
4
  require 'thread'
7
5
 
@@ -16,15 +14,6 @@ require_relative '../lib/pubsubstub'
16
14
  Pubsubstub.logger = Logger.new(nil)
17
15
  Pubsubstub.logger.level = Logger::DEBUG
18
16
 
19
- # Fake EM
20
- module EventMachine
21
- extend self
22
-
23
- def reactor_running?
24
- false
25
- end
26
- end
27
-
28
17
  RSpec.configure do |config|
29
18
  config.include Rack::Test::Methods
30
19
  config.include HTTPHelpers
@@ -21,14 +21,6 @@ end
21
21
  describe Pubsubstub::StreamAction do
22
22
  let(:app) { Pubsubstub::StreamAction.new }
23
23
 
24
- context "with EventMachine" do
25
- before do
26
- allow(EventMachine).to receive(:reactor_running?).and_return(true)
27
- end
28
-
29
- it_behaves_like "short lived connections"
30
- end
31
-
32
24
  context "with persistent connections disabled" do
33
25
  around :example do |example|
34
26
  previous = Pubsubstub.use_persistent_connections
@@ -44,7 +36,7 @@ describe Pubsubstub::StreamAction do
44
36
  with_background_server do
45
37
  expect(9292).to listen.in_under(5)
46
38
 
47
- chunks = async_get('http://localhost:9292/?channels[]=foo', 'Last-Event-Id' => '0')
39
+ chunks, thread = async_get('http://localhost:9292/?channels[]=foo', { 'Last-Event-Id' => '0' })
48
40
  expect(chunks.pop).to include("event: heartbeat\n")
49
41
 
50
42
  Pubsubstub.publish('foo', 'bar', id: 1)
@@ -52,6 +44,8 @@ describe Pubsubstub::StreamAction do
52
44
 
53
45
  Pubsubstub.publish('foo', 'baz', id: 2)
54
46
  expect(chunks.pop).to include("id: 2\n")
47
+ ensure
48
+ thread.kill
55
49
  end
56
50
  end
57
51
 
@@ -61,11 +55,13 @@ describe Pubsubstub::StreamAction do
61
55
  with_background_server do
62
56
  expect(9292).to listen.in_under(5)
63
57
 
64
- chunks = async_get('http://localhost:9292/?channels[]=foo', 'Last-Event-Id' => '0')
58
+ chunks, thread = async_get('http://localhost:9292/?channels[]=foo', { 'Last-Event-Id' => '0' })
65
59
  expect(chunks.pop).to include("id: 1\n")
66
60
 
67
61
  Pubsubstub.publish('foo', 'baz', id: 2)
68
62
  expect(chunks.pop).to include("id: 2\n")
63
+ ensure
64
+ thread.kill
69
65
  end
70
66
  end
71
67
  end
@@ -4,7 +4,7 @@ module HTTPHelpers
4
4
  def async_get(uri, headers = {}, retries: 10, &block)
5
5
  uri = URI(uri.to_s)
6
6
  queue = Queue.new
7
- Thread.start do
7
+ thread = Thread.start do
8
8
  begin
9
9
  Net::HTTP.start(uri.host, uri.port, open_timeout: 10) do |http|
10
10
  request = Net::HTTP::Get.new uri.request_uri
@@ -33,7 +33,7 @@ module HTTPHelpers
33
33
  end
34
34
  end
35
35
 
36
- queue
36
+ return queue, thread
37
37
  end
38
38
 
39
39
  ROOT_PATH = File.join(__dir__, '../..')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pubsubstub
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Guillaume Malette
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-27 00:00:00.000000000 Z
11
+ date: 2024-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -62,9 +62,9 @@ executables:
62
62
  extensions: []
63
63
  extra_rdoc_files: []
64
64
  files:
65
+ - ".github/workflows/ci.yml"
65
66
  - ".gitignore"
66
67
  - ".rspec"
67
- - ".travis.yml"
68
68
  - Gemfile
69
69
  - LICENSE.txt
70
70
  - README.md
@@ -74,10 +74,6 @@ files:
74
74
  - example/Gemfile
75
75
  - example/config.ru
76
76
  - example/puma_config.rb
77
- - gemfiles/Gemfile.rack-1.x
78
- - gemfiles/Gemfile.rack-1.x.lock
79
- - gemfiles/Gemfile.rack-2.x
80
- - gemfiles/Gemfile.rack-2.x.lock
81
77
  - lib/pubsubstub.rb
82
78
  - lib/pubsubstub/application.rb
83
79
  - lib/pubsubstub/channel.rb
@@ -99,7 +95,7 @@ files:
99
95
  - spec/subscription_spec.rb
100
96
  - spec/support/http_helpers.rb
101
97
  - spec/support/threading_matchers.rb
102
- homepage: https://github.com/gmalette/pubsubstub
98
+ homepage: https://github.com/byroot/pubsubstub
103
99
  licenses:
104
100
  - MIT
105
101
  metadata: {}
@@ -118,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
118
114
  - !ruby/object:Gem::Version
119
115
  version: '0'
120
116
  requirements: []
121
- rubygems_version: 3.1.2
117
+ rubygems_version: 3.5.11
122
118
  signing_key:
123
119
  specification_version: 4
124
120
  summary: Pubsubstub is a rack middleware to add Pub/Sub
data/.travis.yml DELETED
@@ -1,14 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3
4
- - 2.4
5
- - 2.5
6
- - 2.6.3
7
- gemfile:
8
- - gemfiles/Gemfile.rack-1.x
9
- - gemfiles/Gemfile.rack-2.x
10
- services:
11
- - redis-server
12
-
13
- after_failure:
14
- - cat tmp/puma.log
@@ -1,12 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rack', '< 2'
4
- gem 'redis', '~> 4.0'
5
- gem 'rspec', '~> 3.8'
6
- gem "pry-byebug"
7
- gem "byebug", '~> 10.0'
8
- gem "puma", "~> 3.4"
9
- gem "thin", "~> 1.6"
10
- gem "rack-test"
11
- gem "timecop"
12
- gem "rake"
@@ -1,57 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- byebug (10.0.2)
5
- coderay (1.1.2)
6
- daemons (1.3.1)
7
- diff-lcs (1.3)
8
- eventmachine (1.2.7)
9
- method_source (0.9.2)
10
- pry (0.12.2)
11
- coderay (~> 1.1.0)
12
- method_source (~> 0.9.0)
13
- pry-byebug (3.6.0)
14
- byebug (~> 10.0)
15
- pry (~> 0.10)
16
- puma (3.12.1)
17
- rack (1.6.11)
18
- rack-test (1.1.0)
19
- rack (>= 1.0, < 3)
20
- rake (12.3.3)
21
- redis (4.1.2)
22
- rspec (3.8.0)
23
- rspec-core (~> 3.8.0)
24
- rspec-expectations (~> 3.8.0)
25
- rspec-mocks (~> 3.8.0)
26
- rspec-core (3.8.2)
27
- rspec-support (~> 3.8.0)
28
- rspec-expectations (3.8.4)
29
- diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.8.0)
31
- rspec-mocks (3.8.1)
32
- diff-lcs (>= 1.2.0, < 2.0)
33
- rspec-support (~> 3.8.0)
34
- rspec-support (3.8.2)
35
- thin (1.7.2)
36
- daemons (~> 1.0, >= 1.0.9)
37
- eventmachine (~> 1.0, >= 1.0.4)
38
- rack (>= 1, < 3)
39
- timecop (0.9.1)
40
-
41
- PLATFORMS
42
- ruby
43
-
44
- DEPENDENCIES
45
- byebug (~> 10.0)
46
- pry-byebug
47
- puma (~> 3.4)
48
- rack (< 2)
49
- rack-test
50
- rake
51
- redis (~> 4.0)
52
- rspec (~> 3.8)
53
- thin (~> 1.6)
54
- timecop
55
-
56
- BUNDLED WITH
57
- 1.17.3
@@ -1,12 +0,0 @@
1
- source 'https://rubygems.org'
2
-
3
- gem 'rack', '~> 2.0'
4
- gem 'redis', '~> 4.0'
5
- gem 'rspec', '~> 3.8'
6
- gem "pry-byebug"
7
- gem "byebug", '~> 10.0'
8
- gem "puma", "~> 3.4"
9
- gem "thin", "~> 1.6"
10
- gem "rack-test"
11
- gem "timecop"
12
- gem "rake"
@@ -1,57 +0,0 @@
1
- GEM
2
- remote: https://rubygems.org/
3
- specs:
4
- byebug (10.0.2)
5
- coderay (1.1.2)
6
- daemons (1.3.1)
7
- diff-lcs (1.3)
8
- eventmachine (1.2.7)
9
- method_source (0.9.2)
10
- pry (0.12.2)
11
- coderay (~> 1.1.0)
12
- method_source (~> 0.9.0)
13
- pry-byebug (3.6.0)
14
- byebug (~> 10.0)
15
- pry (~> 0.10)
16
- puma (3.12.1)
17
- rack (2.0.7)
18
- rack-test (1.1.0)
19
- rack (>= 1.0, < 3)
20
- rake (12.3.3)
21
- redis (4.1.2)
22
- rspec (3.8.0)
23
- rspec-core (~> 3.8.0)
24
- rspec-expectations (~> 3.8.0)
25
- rspec-mocks (~> 3.8.0)
26
- rspec-core (3.8.2)
27
- rspec-support (~> 3.8.0)
28
- rspec-expectations (3.8.4)
29
- diff-lcs (>= 1.2.0, < 2.0)
30
- rspec-support (~> 3.8.0)
31
- rspec-mocks (3.8.1)
32
- diff-lcs (>= 1.2.0, < 2.0)
33
- rspec-support (~> 3.8.0)
34
- rspec-support (3.8.2)
35
- thin (1.7.2)
36
- daemons (~> 1.0, >= 1.0.9)
37
- eventmachine (~> 1.0, >= 1.0.4)
38
- rack (>= 1, < 3)
39
- timecop (0.9.1)
40
-
41
- PLATFORMS
42
- ruby
43
-
44
- DEPENDENCIES
45
- byebug (~> 10.0)
46
- pry-byebug
47
- puma (~> 3.4)
48
- rack (~> 2.0)
49
- rack-test
50
- rake
51
- redis (~> 4.0)
52
- rspec (~> 3.8)
53
- thin (~> 1.6)
54
- timecop
55
-
56
- BUNDLED WITH
57
- 1.17.3