bps 0.1.2 → 0.2.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: ddb7d0cf9385205fd1faa31471ba98be7d5c59f26fd0742cf1cb6b5f9f1e2951
4
- data.tar.gz: ee82c473da8be43ecc9183c521036b9c97a6d3df179ea4e3b6333e0578e2521c
3
+ metadata.gz: a7ea055a7a6f92d9464ec2a7142a94c414cea104ab54684b561c6dfebf5107f9
4
+ data.tar.gz: 97c3f004f66bdeca362e188511ff44bbc118ac852b65f362510cf87e9410f93e
5
5
  SHA512:
6
- metadata.gz: a1e851fb6716a04faaefccd79089a328de2972342ab81840f5a1fd58453d03b9c518a09d21c725d52b3ae92db3db27c6d6255d0e1de08484bcfe847878c1015c
7
- data.tar.gz: a87404ee2e004cf821177fd2e69129326ffc7aff8655817e8bdeb93f09c8cd36cf1249edd9459796539e57919d581a9d603d6c7170e03e52f4dc87137ddae328
6
+ metadata.gz: 28a8bf949c811ca202265494dc7ae1c2277b53b953f6786d74b425b252ce59a98c6f6ff1cf0fff8c8cc7e711710b075b0f9807332c1b89eb42eb1ab5a166d0e9
7
+ data.tar.gz: 64d9f267c210fc2be7901563050d7f30901f8473a8c3c616b88620edf9aac8e41c13a6295d861b5547fd087a9a24f905805662a7ae4135ecc3a4d9a5d1ccd06f
@@ -1,3 +1,5 @@
1
+ require 'securerandom'
2
+
1
3
  module BPS
2
4
  module Publisher
3
5
  class Abstract
@@ -12,7 +14,8 @@ module BPS
12
14
  end
13
15
 
14
16
  def initialize
15
- ObjectSpace.define_finalizer(self, proc { close })
17
+ @uuid = SecureRandom.uuid
18
+ ObjectSpace.define_finalizer(@uuid, proc { close })
16
19
  end
17
20
 
18
21
  # Retrieve a topic handle.
@@ -22,7 +25,9 @@ module BPS
22
25
  end
23
26
 
24
27
  # Close the publisher.
25
- def close; end
28
+ def close
29
+ ObjectSpace.undefine_finalizer(@uuid)
30
+ end
26
31
  end
27
32
  end
28
33
  end
@@ -2,7 +2,8 @@ module BPS
2
2
  module Subscriber
3
3
  class Abstract
4
4
  def initialize
5
- ObjectSpace.define_finalizer(self, proc { close })
5
+ @uuid = SecureRandom.uuid
6
+ ObjectSpace.define_finalizer(@uuid, proc { close })
6
7
  end
7
8
 
8
9
  # Subscribe to a topic
@@ -12,7 +13,9 @@ module BPS
12
13
  end
13
14
 
14
15
  # Close the subscriber.
15
- def close; end
16
+ def close
17
+ ObjectSpace.undefine_finalizer(@uuid)
18
+ end
16
19
  end
17
20
  end
18
21
  end
@@ -1,7 +1,9 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe BPS::Coercer do
4
- subject do
4
+ subject { coercer }
5
+
6
+ let(:coercer) do
5
7
  described_class.new(
6
8
  name: :string,
7
9
  codec: :symbol,
@@ -11,7 +13,6 @@ RSpec.describe BPS::Coercer do
11
13
  tags: [:string],
12
14
  )
13
15
  end
14
-
15
16
  let :options do
16
17
  {
17
18
  name: 123,
@@ -24,13 +25,13 @@ RSpec.describe BPS::Coercer do
24
25
  }
25
26
  end
26
27
 
27
- it 'should validate' do
28
+ it 'validates' do
28
29
  expect { described_class.new(name: :unknown) }.to raise_error(ArgumentError, /Unknown type :unknown/)
29
30
  expect { described_class.new(bad: []) }.to raise_error(ArgumentError, /Array types must have exactly one entry/)
30
31
  end
31
32
 
32
- it 'should coerce options' do
33
- expect(subject.coerce(options)).to eq(
33
+ it 'coerces options' do
34
+ expect(coercer.coerce(options)).to eq(
34
35
  name: '123',
35
36
  codec: :snappy,
36
37
  retries: 4,
@@ -1,22 +1,26 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  RSpec.describe BPS::Publisher::InMem do
4
- it 'should maintain topics' do
5
- expect(subject.topic('x')).to be_a(described_class::Topic)
6
- expect(subject.topic_names).to eq(%w[x])
7
- expect(subject.topic('z')).to be_a(described_class::Topic)
8
- expect(subject.topic_names).to eq(%w[x z])
9
- expect(subject.topic('y')).to be_a(described_class::Topic)
10
- expect(subject.topic_names).to eq(%w[x y z])
4
+ subject { publisher }
5
+
6
+ let(:publisher) { described_class.new }
7
+
8
+ it 'maintains topics' do
9
+ expect(publisher.topic('x')).to be_a(described_class::Topic)
10
+ expect(publisher.topic_names).to eq(%w[x])
11
+ expect(publisher.topic('z')).to be_a(described_class::Topic)
12
+ expect(publisher.topic_names).to eq(%w[x z])
13
+ expect(publisher.topic('y')).to be_a(described_class::Topic)
14
+ expect(publisher.topic_names).to eq(%w[x y z])
11
15
  end
12
16
 
13
- it 'should publish' do
14
- topic = subject.topic('x')
17
+ it 'publishes' do
18
+ topic = publisher.topic('x')
15
19
  topic.publish('foo')
16
20
  topic.publish('bar')
17
21
  expect(topic.messages).to eq(%w[foo bar])
18
22
 
19
23
  expect { topic.flush }.not_to raise_error
20
- expect(subject.topic('x').messages).to eq(%w[foo bar])
24
+ expect(publisher.topic('x').messages).to eq(%w[foo bar])
21
25
  end
22
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bps
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Black Square Media
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-11-09 00:00:00.000000000 Z
11
+ date: 2021-09-16 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Minimalist abstraction for publish-subscribe
14
14
  email: info@blacksquaremedia.com
@@ -43,7 +43,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
43
43
  - !ruby/object:Gem::Version
44
44
  version: '0'
45
45
  requirements: []
46
- rubygems_version: 3.1.2
46
+ rubygems_version: 3.2.15
47
47
  signing_key:
48
48
  specification_version: 4
49
49
  summary: Multi-platform pubsub adapter