siftery-wisper 2.0.1

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.
Files changed (41) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.rspec +4 -0
  4. data/.travis.yml +22 -0
  5. data/CHANGELOG.md +129 -0
  6. data/CONTRIBUTING.md +61 -0
  7. data/Gemfile +13 -0
  8. data/README.md +373 -0
  9. data/Rakefile +10 -0
  10. data/bin/console +8 -0
  11. data/bin/setup +6 -0
  12. data/gem-public_cert.pem +21 -0
  13. data/lib/wisper.rb +65 -0
  14. data/lib/wisper/broadcasters/logger_broadcaster.rb +37 -0
  15. data/lib/wisper/broadcasters/send_broadcaster.rb +9 -0
  16. data/lib/wisper/configuration.rb +44 -0
  17. data/lib/wisper/global_listeners.rb +74 -0
  18. data/lib/wisper/publisher.rb +89 -0
  19. data/lib/wisper/registration/block.rb +11 -0
  20. data/lib/wisper/registration/object.rb +77 -0
  21. data/lib/wisper/registration/registration.rb +19 -0
  22. data/lib/wisper/temporary_listeners.rb +41 -0
  23. data/lib/wisper/value_objects/events.rb +61 -0
  24. data/lib/wisper/value_objects/prefix.rb +29 -0
  25. data/lib/wisper/version.rb +3 -0
  26. data/siftery-wisper.gemspec +31 -0
  27. data/spec/lib/global_listeners_spec.rb +82 -0
  28. data/spec/lib/integration_spec.rb +56 -0
  29. data/spec/lib/simple_example_spec.rb +21 -0
  30. data/spec/lib/temporary_global_listeners_spec.rb +67 -0
  31. data/spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb +93 -0
  32. data/spec/lib/wisper/broadcasters/send_broadcaster_spec.rb +28 -0
  33. data/spec/lib/wisper/configuration/broadcasters_spec.rb +11 -0
  34. data/spec/lib/wisper/configuration_spec.rb +36 -0
  35. data/spec/lib/wisper/publisher_spec.rb +331 -0
  36. data/spec/lib/wisper/registrations/object_spec.rb +14 -0
  37. data/spec/lib/wisper/value_objects/events_spec.rb +107 -0
  38. data/spec/lib/wisper/value_objects/prefix_spec.rb +46 -0
  39. data/spec/lib/wisper_spec.rb +99 -0
  40. data/spec/spec_helper.rb +24 -0
  41. metadata +101 -0
@@ -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
@@ -0,0 +1,24 @@
1
+ require 'coveralls'
2
+ Coveralls.wear!
3
+
4
+ require 'wisper'
5
+
6
+ RSpec.configure do |config|
7
+ config.run_all_when_everything_filtered = true
8
+ config.filter_run :focus
9
+ config.order = 'random'
10
+ config.after(:each) { Wisper::GlobalListeners.clear }
11
+
12
+ config.expect_with :rspec do |c|
13
+ c.syntax = :expect
14
+ end
15
+
16
+ config.mock_with :rspec do |c|
17
+ c.syntax = :expect
18
+ end
19
+ end
20
+
21
+ # returns an anonymous wispered class
22
+ def publisher_class
23
+ Class.new { include Wisper::Publisher }
24
+ end
metadata ADDED
@@ -0,0 +1,101 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: siftery-wisper
3
+ version: !ruby/object:Gem::Version
4
+ version: 2.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Shubham Kumar
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-10-15 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: |2
14
+ A micro library providing objects with Publish-Subscribe capabilities.
15
+ Both synchronous (in-process) and asynchronous (out-of-process) subscriptions are supported.
16
+ Check out the Wiki for articles, guides and examples: https://github.com/shubh2336/wisper/wiki
17
+ email:
18
+ - shubh2336@gmail.com
19
+ executables:
20
+ - console
21
+ - setup
22
+ extensions: []
23
+ extra_rdoc_files: []
24
+ files:
25
+ - ".gitignore"
26
+ - ".rspec"
27
+ - ".travis.yml"
28
+ - CHANGELOG.md
29
+ - CONTRIBUTING.md
30
+ - Gemfile
31
+ - README.md
32
+ - Rakefile
33
+ - bin/console
34
+ - bin/setup
35
+ - gem-public_cert.pem
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
+ - siftery-wisper.gemspec
50
+ - spec/lib/global_listeners_spec.rb
51
+ - spec/lib/integration_spec.rb
52
+ - spec/lib/simple_example_spec.rb
53
+ - spec/lib/temporary_global_listeners_spec.rb
54
+ - spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb
55
+ - spec/lib/wisper/broadcasters/send_broadcaster_spec.rb
56
+ - spec/lib/wisper/configuration/broadcasters_spec.rb
57
+ - spec/lib/wisper/configuration_spec.rb
58
+ - spec/lib/wisper/publisher_spec.rb
59
+ - spec/lib/wisper/registrations/object_spec.rb
60
+ - spec/lib/wisper/value_objects/events_spec.rb
61
+ - spec/lib/wisper/value_objects/prefix_spec.rb
62
+ - spec/lib/wisper_spec.rb
63
+ - spec/spec_helper.rb
64
+ homepage: https://github.com/shubh2336/wisper
65
+ licenses:
66
+ - MIT
67
+ metadata: {}
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubygems_version: 3.0.3
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: A micro library providing objects with Publish-Subscribe capabilities
87
+ test_files:
88
+ - spec/lib/global_listeners_spec.rb
89
+ - spec/lib/integration_spec.rb
90
+ - spec/lib/simple_example_spec.rb
91
+ - spec/lib/temporary_global_listeners_spec.rb
92
+ - spec/lib/wisper/broadcasters/logger_broadcaster_spec.rb
93
+ - spec/lib/wisper/broadcasters/send_broadcaster_spec.rb
94
+ - spec/lib/wisper/configuration/broadcasters_spec.rb
95
+ - spec/lib/wisper/configuration_spec.rb
96
+ - spec/lib/wisper/publisher_spec.rb
97
+ - spec/lib/wisper/registrations/object_spec.rb
98
+ - spec/lib/wisper/value_objects/events_spec.rb
99
+ - spec/lib/wisper/value_objects/prefix_spec.rb
100
+ - spec/lib/wisper_spec.rb
101
+ - spec/spec_helper.rb