bps 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c304694760a3a2ec342890aa712e3a8b9ac3984dc3a04905f273c686c80532b1
4
- data.tar.gz: 68cf2791624965f9bf552d8cae2983aa1b2510cb3525a97c710a50ecf7306896
3
+ metadata.gz: b92c586f8714baa2d0eb59f900d653385e8234f11db651d86cfb0c60e6e562b6
4
+ data.tar.gz: 855927bb8ac566e779d98299045da1b81cac64de7a5ad69607ee7e6b4c52e2b1
5
5
  SHA512:
6
- metadata.gz: f8912ce5b3f169900b0310945c5f8b8e0e28d5b54476dfb0a3b08c10d379e1a4a55232fc78e07fa02f65de10d963c544ea007faaa1514cbc8d0c96b165df1806
7
- data.tar.gz: 930a1e2f1f0448e999099ceed035147512a1485ea79f79de22548bb254bfb55a12a0aafdbecc1985b2505031a03a1ad7b81104441f093fb8b0d215ea3f3aa37a
6
+ metadata.gz: cd832222ce04ba89d6bdf559f14f981176c602519192a7734e9accaaa44edeaefc4a247fd559276691218b38b5a74ccbb6f13cdb0b701a523c9f3cf14dca0c67
7
+ data.tar.gz: e5e2adb22cc63a7f6be8f8e6db745cff4d6b36898313e719efdc6846af50739633ea7be9872f6f6d58089bcb654d7fb4a6dc9bb7262f094bd912c4864df0a23e
data/lib/bps.rb CHANGED
@@ -6,6 +6,7 @@ module BPS
6
6
 
7
7
  module Publisher
8
8
  autoload :Abstract, 'bps/publisher/abstract'
9
+ autoload :InMem, 'bps/publisher/in_mem'
9
10
 
10
11
  def self.register(*schemes, &resolver)
11
12
  @registry ||= {}
@@ -11,6 +11,10 @@ module BPS
11
11
  def flush(**); end
12
12
  end
13
13
 
14
+ def initialize
15
+ ObjectSpace.define_finalizer(self, proc { close })
16
+ end
17
+
14
18
  # Retrieve a topic handle.
15
19
  # @params [String] name the topic name.
16
20
  def topic(_name)
@@ -0,0 +1,41 @@
1
+ module BPS
2
+ module Publisher
3
+ class InMem < Abstract
4
+ class Topic < Abstract::Topic
5
+ attr_reader :name, :messages
6
+
7
+ def initialize(name)
8
+ super()
9
+ @name = name.to_s
10
+ @messages = []
11
+ end
12
+
13
+ # Publish a message.
14
+ def publish(message, **)
15
+ @messages.push(message.to_s)
16
+ end
17
+ end
18
+
19
+ def initialize
20
+ super()
21
+ @topics = {}
22
+ end
23
+
24
+ # @return [Array<String>] the existing topic names.
25
+ def topic_names
26
+ @topic_names ||= @topics.keys.sort
27
+ end
28
+
29
+ # Retrieve a topic handle.
30
+ # @params [String] name the topic name.
31
+ def topic(name)
32
+ name = name.to_s
33
+
34
+ @topics[name] ||= begin
35
+ @topic_names = nil
36
+ self.class::Topic.new(name)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
@@ -1,6 +1,10 @@
1
1
  module BPS
2
2
  module Subscriber
3
3
  class Abstract
4
+ def initialize
5
+ ObjectSpace.define_finalizer(self, proc { close })
6
+ end
7
+
4
8
  # Subscribe to a topic
5
9
  # @params [String] topic the topic name.
6
10
  def subscribe(_topic, **)
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
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])
11
+ end
12
+
13
+ it 'should publish' do
14
+ topic = subject.topic('x')
15
+ topic.publish('foo')
16
+ topic.publish('bar')
17
+ expect(topic.messages).to eq(%w[foo bar])
18
+
19
+ expect { topic.flush }.not_to raise_error
20
+ expect(subject.topic('x').messages).to eq(%w[foo bar])
21
+ end
22
+ 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.0.2
4
+ version: 0.0.3
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-07-01 00:00:00.000000000 Z
11
+ date: 2020-09-08 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Minimalist abstraction for publish-subscribe
14
14
  email: info@blacksquaremedia.com
@@ -20,8 +20,10 @@ files:
20
20
  - lib/bps.rb
21
21
  - lib/bps/coercer.rb
22
22
  - lib/bps/publisher/abstract.rb
23
+ - lib/bps/publisher/in_mem.rb
23
24
  - lib/bps/subscriber/abstract.rb
24
25
  - spec/bps/coercer_spec.rb
26
+ - spec/bps/publisher/in_mem_spec.rb
25
27
  homepage: https://github.com/bsm/bps
26
28
  licenses:
27
29
  - Apache-2.0
@@ -41,9 +43,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
41
43
  - !ruby/object:Gem::Version
42
44
  version: '0'
43
45
  requirements: []
44
- rubygems_version: 3.1.4
46
+ rubygems_version: 3.1.2
45
47
  signing_key:
46
48
  specification_version: 4
47
49
  summary: Multi-platform pubsub adapter
48
50
  test_files:
49
51
  - spec/bps/coercer_spec.rb
52
+ - spec/bps/publisher/in_mem_spec.rb