wisper-compat 4.0.0
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 +7 -0
- data/.github/workflows/test.yml +19 -0
- data/.gitignore +20 -0
- data/.rspec +4 -0
- data/.ruby-version +1 -0
- data/CHANGELOG.md +152 -0
- data/CONTRIBUTING.md +57 -0
- data/Gemfile +10 -0
- data/README.md +358 -0
- data/Rakefile +6 -0
- data/lib/wisper/broadcasters/logger_broadcaster.rb +41 -0
- data/lib/wisper/broadcasters/send_broadcaster.rb +9 -0
- data/lib/wisper/configuration.rb +44 -0
- data/lib/wisper/global_listeners.rb +72 -0
- data/lib/wisper/publisher.rb +89 -0
- data/lib/wisper/registration/block.rb +11 -0
- data/lib/wisper/registration/object.rb +43 -0
- data/lib/wisper/registration/registration.rb +18 -0
- data/lib/wisper/temporary_listeners.rb +41 -0
- data/lib/wisper/value_objects/events.rb +61 -0
- data/lib/wisper/value_objects/prefix.rb +29 -0
- data/lib/wisper/version.rb +3 -0
- data/lib/wisper.rb +65 -0
- data/spec/lib/global_listeners_spec.rb +82 -0
- data/spec/lib/integration_spec.rb +56 -0
- data/spec/lib/simple_example_spec.rb +21 -0
- data/spec/lib/temporary_global_listeners_spec.rb +103 -0
- data/spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb +129 -0
- data/spec/lib/wisper/broadcasters/send_broadcaster_spec.rb +68 -0
- data/spec/lib/wisper/configuration/broadcasters_spec.rb +11 -0
- data/spec/lib/wisper/configuration_spec.rb +36 -0
- data/spec/lib/wisper/publisher_spec.rb +311 -0
- data/spec/lib/wisper/registrations/object_spec.rb +14 -0
- data/spec/lib/wisper/value_objects/events_spec.rb +107 -0
- data/spec/lib/wisper/value_objects/prefix_spec.rb +46 -0
- data/spec/lib/wisper_spec.rb +99 -0
- data/spec/spec_helper.rb +21 -0
- data/wisper-compat.gemspec +29 -0
- metadata +102 -0
@@ -0,0 +1,107 @@
|
|
1
|
+
describe Wisper::ValueObjects::Events do
|
2
|
+
context 'nil' do
|
3
|
+
subject { described_class.new nil }
|
4
|
+
|
5
|
+
describe '#include?' do
|
6
|
+
it 'returns true' do
|
7
|
+
expect(subject.include? 'foo').to be_truthy
|
8
|
+
expect(subject.include? :bar).to be_truthy
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
context '"foo"' do
|
14
|
+
let(:foo) { Class.new(String).new 'foo' }
|
15
|
+
subject { described_class.new foo }
|
16
|
+
|
17
|
+
describe '#include?' do
|
18
|
+
it 'returns true for "foo"' do
|
19
|
+
expect(subject.include? 'foo').to be_truthy
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'returns true for :foo' do
|
23
|
+
expect(subject.include? :foo).to be_truthy
|
24
|
+
end
|
25
|
+
|
26
|
+
it 'returns false otherwise' do
|
27
|
+
expect(subject.include? 'bar').to be_falsey
|
28
|
+
expect(subject.include? :bar).to be_falsey
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context ':foo' do
|
34
|
+
subject { described_class.new :foo }
|
35
|
+
|
36
|
+
describe '#include?' do
|
37
|
+
it 'returns true for "foo"' do
|
38
|
+
expect(subject.include? 'foo').to be_truthy
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'returns true for :foo' do
|
42
|
+
expect(subject.include? :foo).to be_truthy
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'returns false otherwise' do
|
46
|
+
expect(subject.include? 'bar').to be_falsey
|
47
|
+
expect(subject.include? :bar).to be_falsey
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context '[:foo, "bar"]' do
|
53
|
+
subject { described_class.new [:foo, 'bar'] }
|
54
|
+
|
55
|
+
describe '#include?' do
|
56
|
+
it 'returns true for "foo"' do
|
57
|
+
expect(subject.include? 'foo').to be_truthy
|
58
|
+
end
|
59
|
+
|
60
|
+
it 'returns true for :foo' do
|
61
|
+
expect(subject.include? :foo).to be_truthy
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'returns true for "bar"' do
|
65
|
+
expect(subject.include? 'bar').to be_truthy
|
66
|
+
end
|
67
|
+
|
68
|
+
it 'returns true for :bar' do
|
69
|
+
expect(subject.include? :bar).to be_truthy
|
70
|
+
end
|
71
|
+
|
72
|
+
it 'returns false otherwise' do
|
73
|
+
expect(subject.include? 'baz').to be_falsey
|
74
|
+
expect(subject.include? :baz).to be_falsey
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
context 'by /foo/' do
|
80
|
+
subject { described_class.new(/foo/) }
|
81
|
+
|
82
|
+
describe '#include?' do
|
83
|
+
it 'returns true for "foo"' do
|
84
|
+
expect(subject.include? 'foo').to be_truthy
|
85
|
+
end
|
86
|
+
|
87
|
+
it 'returns true for :foo' do
|
88
|
+
expect(subject.include? :foo).to be_truthy
|
89
|
+
end
|
90
|
+
|
91
|
+
it 'returns false otherwise' do
|
92
|
+
expect(subject.include? 'bar').to be_falsey
|
93
|
+
expect(subject.include? :bar).to be_falsey
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
context 'another class' do
|
99
|
+
subject { described_class.new Object.new }
|
100
|
+
|
101
|
+
describe '#include?' do
|
102
|
+
it 'raises ArgumentError' do
|
103
|
+
expect { subject.include? 'foo' }.to raise_error(ArgumentError)
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
describe Wisper::ValueObjects::Prefix do
|
2
|
+
|
3
|
+
it 'is a string' do
|
4
|
+
expect(subject).to be_kind_of String
|
5
|
+
end
|
6
|
+
|
7
|
+
describe '.new' do
|
8
|
+
context 'without arguments' do
|
9
|
+
subject { described_class.new }
|
10
|
+
it { is_expected.to eq '' }
|
11
|
+
end
|
12
|
+
|
13
|
+
context 'nil' do
|
14
|
+
subject { described_class.new nil }
|
15
|
+
it { is_expected.to eq '' }
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'true' do
|
19
|
+
subject { described_class.new true }
|
20
|
+
it { is_expected.to eq 'on_' }
|
21
|
+
end
|
22
|
+
|
23
|
+
context '"foo"' do
|
24
|
+
subject { described_class.new 'foo' }
|
25
|
+
it { is_expected.to eq 'foo_' }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.default=' do
|
30
|
+
after { described_class.default = nil }
|
31
|
+
|
32
|
+
context 'nil' do
|
33
|
+
it "doesn't change default prefix" do
|
34
|
+
expect { described_class.default = nil }
|
35
|
+
.not_to change { described_class.new true }.from('on_')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
context '"foo"' do
|
40
|
+
it 'changes default prefix' do
|
41
|
+
expect { described_class.default = 'foo' }
|
42
|
+
.to change { described_class.new true }.from('on_').to('foo_')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
describe Wisper do
|
2
|
+
describe '.subscribe' do
|
3
|
+
context 'when given block' do
|
4
|
+
|
5
|
+
it 'subscribes listeners to all events for duration of the block' do
|
6
|
+
publisher = publisher_class.new
|
7
|
+
listener = double('listener')
|
8
|
+
|
9
|
+
expect(listener).to receive(:first_event)
|
10
|
+
expect(listener).not_to receive(:second_event)
|
11
|
+
|
12
|
+
Wisper.subscribe(listener) do
|
13
|
+
publisher.send(:broadcast, 'first_event')
|
14
|
+
end
|
15
|
+
|
16
|
+
publisher.send(:broadcast, 'second_event')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context 'when no block given' do
|
21
|
+
it 'subscribes listener to all events' do
|
22
|
+
listener = double('listener')
|
23
|
+
Wisper.subscribe(listener)
|
24
|
+
expect(Wisper::GlobalListeners.listeners).to eq [listener]
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'subscribes listeners to all events' do
|
28
|
+
listener_1 = double('listener')
|
29
|
+
listener_2 = double('listener')
|
30
|
+
|
31
|
+
Wisper.subscribe(listener_1, listener_2)
|
32
|
+
|
33
|
+
expect(Wisper::GlobalListeners.listeners).to include listener_1, listener_2
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '.unsubscribe' do
|
39
|
+
it 'removes listener from list of listeners' do
|
40
|
+
listener = double('listener')
|
41
|
+
|
42
|
+
Wisper.subscribe(listener)
|
43
|
+
expect(Wisper::GlobalListeners.listeners).to eq [listener]
|
44
|
+
|
45
|
+
Wisper.unsubscribe(listener)
|
46
|
+
expect(Wisper::GlobalListeners.listeners).to eq []
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'removes listeners from list of listeners' do
|
50
|
+
listener_1 = double('listener')
|
51
|
+
listener_2 = double('listener')
|
52
|
+
|
53
|
+
Wisper.subscribe(listener_1, listener_2)
|
54
|
+
expect(Wisper::GlobalListeners.listeners).to include listener_1, listener_2
|
55
|
+
|
56
|
+
Wisper.unsubscribe(listener_1, listener_2)
|
57
|
+
expect(Wisper::GlobalListeners.listeners).to eq []
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
describe '.publisher' do
|
62
|
+
it 'returns the Publisher module' do
|
63
|
+
expect(Wisper.publisher).to eq Wisper::Publisher
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe '.clear' do
|
68
|
+
before { Wisper.subscribe(double) }
|
69
|
+
|
70
|
+
it 'clears all global listeners' do
|
71
|
+
Wisper.clear
|
72
|
+
expect(Wisper::GlobalListeners.listeners).to be_empty
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
describe '.configuration' do
|
77
|
+
it 'returns configuration object' do
|
78
|
+
expect(Wisper.configuration).to be_an_instance_of(Wisper::Configuration)
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'is memorized' do
|
82
|
+
expect(Wisper.configuration).to eq Wisper.configuration
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
describe '.configure' do
|
87
|
+
it 'passes configuration to given block' do
|
88
|
+
Wisper.configure do |config|
|
89
|
+
expect(config).to be_an_instance_of(Wisper::Configuration)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
describe '.setup' do
|
95
|
+
it 'sets a default broadcaster' do
|
96
|
+
expect(Wisper.configuration.broadcasters[:default]).to be_instance_of(Wisper::Broadcasters::SendBroadcaster)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'wisper'
|
2
|
+
|
3
|
+
RSpec.configure do |config|
|
4
|
+
config.run_all_when_everything_filtered = true
|
5
|
+
config.filter_run :focus
|
6
|
+
config.order = 'random'
|
7
|
+
config.after(:each) { Wisper::GlobalListeners.clear }
|
8
|
+
|
9
|
+
config.expect_with :rspec do |c|
|
10
|
+
c.syntax = :expect
|
11
|
+
end
|
12
|
+
|
13
|
+
config.mock_with :rspec do |c|
|
14
|
+
c.syntax = :expect
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# returns an anonymous wispered class
|
19
|
+
def publisher_class
|
20
|
+
Class.new { include Wisper::Publisher }
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'wisper/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "wisper-compat"
|
8
|
+
gem.version = Wisper::VERSION
|
9
|
+
gem.authors = ["Kris Leech", "Dima Sukhikh", "Jamie Schembri"]
|
10
|
+
gem.email = ["kris.leech@gmail.com", "dima.sukhikh@nedap.com", "jamie.schembri@nedap.com"]
|
11
|
+
gem.description = <<-DESC
|
12
|
+
A micro library providing objects with Publish-Subscribe capabilities.
|
13
|
+
Both synchronous (in-process) and asynchronous (out-of-process) subscriptions are supported.
|
14
|
+
Check out the Wiki for articles, guides and examples: https://github.com/krisleech/wisper/wiki
|
15
|
+
DESC
|
16
|
+
gem.summary = "A micro library providing objects with Publish-Subscribe capabilities"
|
17
|
+
gem.homepage = "https://github.com/nedap/wisper-compat"
|
18
|
+
gem.license = "MIT"
|
19
|
+
|
20
|
+
gem.required_ruby_version = '>= 2.7'
|
21
|
+
|
22
|
+
gem.files = `git ls-files`.split($/).reject { |f| f.split('/').first == 'bin' }
|
23
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
24
|
+
gem.require_paths = ["lib"]
|
25
|
+
|
26
|
+
gem.metadata = {
|
27
|
+
"rubygems_mfa_required" => "true"
|
28
|
+
}
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,102 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wisper-compat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 4.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Kris Leech
|
8
|
+
- Dima Sukhikh
|
9
|
+
- Jamie Schembri
|
10
|
+
autorequire:
|
11
|
+
bindir: bin
|
12
|
+
cert_chain: []
|
13
|
+
date: 2023-02-28 00:00:00.000000000 Z
|
14
|
+
dependencies: []
|
15
|
+
description: |2
|
16
|
+
A micro library providing objects with Publish-Subscribe capabilities.
|
17
|
+
Both synchronous (in-process) and asynchronous (out-of-process) subscriptions are supported.
|
18
|
+
Check out the Wiki for articles, guides and examples: https://github.com/krisleech/wisper/wiki
|
19
|
+
email:
|
20
|
+
- kris.leech@gmail.com
|
21
|
+
- dima.sukhikh@nedap.com
|
22
|
+
- jamie.schembri@nedap.com
|
23
|
+
executables: []
|
24
|
+
extensions: []
|
25
|
+
extra_rdoc_files: []
|
26
|
+
files:
|
27
|
+
- ".github/workflows/test.yml"
|
28
|
+
- ".gitignore"
|
29
|
+
- ".rspec"
|
30
|
+
- ".ruby-version"
|
31
|
+
- CHANGELOG.md
|
32
|
+
- CONTRIBUTING.md
|
33
|
+
- Gemfile
|
34
|
+
- README.md
|
35
|
+
- Rakefile
|
36
|
+
- lib/wisper.rb
|
37
|
+
- lib/wisper/broadcasters/logger_broadcaster.rb
|
38
|
+
- lib/wisper/broadcasters/send_broadcaster.rb
|
39
|
+
- lib/wisper/configuration.rb
|
40
|
+
- lib/wisper/global_listeners.rb
|
41
|
+
- lib/wisper/publisher.rb
|
42
|
+
- lib/wisper/registration/block.rb
|
43
|
+
- lib/wisper/registration/object.rb
|
44
|
+
- lib/wisper/registration/registration.rb
|
45
|
+
- lib/wisper/temporary_listeners.rb
|
46
|
+
- lib/wisper/value_objects/events.rb
|
47
|
+
- lib/wisper/value_objects/prefix.rb
|
48
|
+
- lib/wisper/version.rb
|
49
|
+
- spec/lib/global_listeners_spec.rb
|
50
|
+
- spec/lib/integration_spec.rb
|
51
|
+
- spec/lib/simple_example_spec.rb
|
52
|
+
- spec/lib/temporary_global_listeners_spec.rb
|
53
|
+
- spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb
|
54
|
+
- spec/lib/wisper/broadcasters/send_broadcaster_spec.rb
|
55
|
+
- spec/lib/wisper/configuration/broadcasters_spec.rb
|
56
|
+
- spec/lib/wisper/configuration_spec.rb
|
57
|
+
- spec/lib/wisper/publisher_spec.rb
|
58
|
+
- spec/lib/wisper/registrations/object_spec.rb
|
59
|
+
- spec/lib/wisper/value_objects/events_spec.rb
|
60
|
+
- spec/lib/wisper/value_objects/prefix_spec.rb
|
61
|
+
- spec/lib/wisper_spec.rb
|
62
|
+
- spec/spec_helper.rb
|
63
|
+
- wisper-compat.gemspec
|
64
|
+
homepage: https://github.com/nedap/wisper-compat
|
65
|
+
licenses:
|
66
|
+
- MIT
|
67
|
+
metadata:
|
68
|
+
rubygems_mfa_required: 'true'
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '2.7'
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
requirements: []
|
84
|
+
rubygems_version: 3.4.6
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: A micro library providing objects with Publish-Subscribe capabilities
|
88
|
+
test_files:
|
89
|
+
- spec/lib/global_listeners_spec.rb
|
90
|
+
- spec/lib/integration_spec.rb
|
91
|
+
- spec/lib/simple_example_spec.rb
|
92
|
+
- spec/lib/temporary_global_listeners_spec.rb
|
93
|
+
- spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb
|
94
|
+
- spec/lib/wisper/broadcasters/send_broadcaster_spec.rb
|
95
|
+
- spec/lib/wisper/configuration/broadcasters_spec.rb
|
96
|
+
- spec/lib/wisper/configuration_spec.rb
|
97
|
+
- spec/lib/wisper/publisher_spec.rb
|
98
|
+
- spec/lib/wisper/registrations/object_spec.rb
|
99
|
+
- spec/lib/wisper/value_objects/events_spec.rb
|
100
|
+
- spec/lib/wisper/value_objects/prefix_spec.rb
|
101
|
+
- spec/lib/wisper_spec.rb
|
102
|
+
- spec/spec_helper.rb
|