wisper 2.0.0 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 62cd6c2948137446de8f7f515bcbebd11c14092d
4
- data.tar.gz: dfbc3b2d28c9023edc9f8308a6c406887c20efed
2
+ SHA256:
3
+ metadata.gz: 2890739bfde16edeb614504b6a6ac9f1babe148c3ed3255af7b11d2b68275dc8
4
+ data.tar.gz: f64460470b4778927d19bbab51f5cd190ec2d16df4909340ee09aaa89b8e9636
5
5
  SHA512:
6
- metadata.gz: d82be662081f118b83ce5f01f87a0760be1bbc9d711163fc76ac303db689ba307ec453afb9edfb374fa1b23e92ab6a684a2c3857580d3f6a29195c75c8d6f754
7
- data.tar.gz: 9395fbd3e0d2b925d31dc06682aa573ad66b0f4ee980533b1671e497ce7f2b8b82019840c7f8eb15c7f52b7bdae73934592ae0e5634729b4ad99f2c068bcae3e
6
+ metadata.gz: 82292503201b5402aebb60c3ad433c4f1bfb22858fbd1221ba86225dbb9e597f2ffb97c8b075847a12c5a801fb92d7e84a9485fb8919c39548f80e54c2fdf318
7
+ data.tar.gz: b40625e6e3cf17df8a457f6547ecf5f0d921ff7dc771910462d0a5219d2aba9ab0afcc91787cdb5ccd49d18f48845eda3b95f20ef9bdd4914d1afca5c2f45f4c
Binary file
Binary file
@@ -6,11 +6,10 @@ bundler_args: --without=extras
6
6
  script: rspec spec
7
7
  sudo: false
8
8
  rvm:
9
- - '2.1.10'
10
- - '2.2.6'
11
- - '2.3.3'
12
- - '2.4.0'
13
- - jruby-9.1.6.0
9
+ - 2.6.3
10
+ - 2.5.5
11
+ - 2.4.6
12
+ - jruby-9.2
14
13
  # - rbx-2
15
14
  ### ALLOWED FAILURES ###
16
15
  # see how compatible we are with dev versions, but do not fail the build
@@ -1,10 +1,33 @@
1
1
  ## HEAD (unreleased)
2
2
 
3
- ## 2.0.0 (7th Mar 2017)
3
+ ## 2.0.1 (29th Aug 2019)
4
+
5
+ Authors: David Wilkie, hosseintoussi, Maxim Polunin, Tristan
6
+ Harmer, Bartosz Żurkowski, Kris Leech
4
7
 
5
- Authors: Sergey Mostovoy
8
+ * fix: support nested temporary global listeners
9
+ * docs: add threadsafe notes to README for global and temporary listeners
10
+ * docs: fix spelling mistakes in README
11
+ * fix: safely get signing key in gemspec when HOME is not set
12
+ * adds: add console to aid experiments and REPL driven development
13
+ * adds: Latest Ruby to CI
14
+
15
+ ## 2.0.0 (7th Mar 2017)
6
16
 
7
- * fix: logger raises exception if hash is passed as an argument to a listener
17
+ Authors: Sergey Mostovoy, Andrew Kozin, Kyle Tolle, Martin, Rob Miller, Mike
18
+ Dalto, orthographic-pedant, Drew Ulmer, Mikey Hogarth, Attila Domokos, Josh
19
+ Miltz, Pascal Betz, Vasily Kolesnikov, Julien Letessier, Kris Leech
20
+
21
+ * Fix: logger raises exception if hash is passed as an argument to a listener #133, #136
22
+ * Fix: deprecation warnings #120
23
+ * Doc improvements: #106, #111, #116, #122, #128, #130, #147, #149, #150, #151
24
+ * Adds: Allow configuration of default prefix when using `prefix: true`. #105
25
+ * Adds: Allow unsubscribing of global listeners #118
26
+ * Adds: Helpful error message when passing a block to `#subscribe` of `#on` #125
27
+ * Adds: raise an error message when `#on` is not passed a block #146
28
+ * Adds: Support for JRuby 9.x #148
29
+ * Adds: Support for MRI 2.4.0 #155
30
+ * Refactor specs #126, #131
8
31
 
9
32
  ## 2.0.0.rc1 (17 Dec 2014)
10
33
 
@@ -28,10 +28,6 @@ appropriate as an extension to Wisper.
28
28
 
29
29
  We also have a [Gitter channel](https://gitter.im/krisleech/wisper) if you wish to discuss your ideas.
30
30
 
31
- ## Backlog / Roadmap
32
-
33
- The backlog for Wisper and related gems is on [Waffle](https://waffle.io/krisleech/wisper).
34
-
35
31
  ## Questions
36
32
 
37
33
  Try the [Wiki](https://github.com/krisleech/wisper/wiki) first, the examples
@@ -43,7 +39,7 @@ Feel free to ping me the URL on [Twitter](https://twitter.com/krisleech).
43
39
 
44
40
  ## Pull requests
45
41
 
46
- * Fork the project, create a new branch from `v1` or `master`.
42
+ * Fork the project, create a new branch `master`.
47
43
  * Squash commits which are related.
48
44
  * Write a [good commit message](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
49
45
  * Documentation only changes should have `[skip ci]` in the commit message
@@ -58,4 +54,4 @@ not backwards compatible.
58
54
  The `v1` branch is a long lived branch and you should
59
55
  branch from this if you wish to fix an issue in version `~> 1.0`.
60
56
 
61
- The `master` branch will target the next version of Wisper.
57
+ Otherwise branch from `master` branch.
data/Gemfile CHANGED
@@ -2,8 +2,8 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rake', '~> 10.3.0'
6
- gem 'rspec', '~> 3.4.0'
5
+ gem 'rake'
6
+ gem 'rspec'
7
7
  gem 'coveralls', require: false
8
8
 
9
9
  group :extras do
data/README.md CHANGED
@@ -10,10 +10,12 @@
10
10
  * Decouple core business logic from external concerns in Hexagonal style architectures
11
11
  * Use as an alternative to ActiveRecord callbacks and Observers in Rails apps
12
12
  * Connect objects based on context without permanence
13
- * React to events synchronously or asynchronously
13
+ * Publish events synchronously or asynchronously
14
14
 
15
15
  Note: Wisper was originally extracted from a Rails codebase but is not dependant on Rails.
16
16
 
17
+ Please also see the [Wiki](https://github.com/krisleech/wisper/wiki) for more additional information and articles.
18
+
17
19
  ## Installation
18
20
 
19
21
  Add this line to your application's Gemfile:
@@ -74,7 +76,7 @@ class OrderNotifier
74
76
  def cancel_order_successful(order_id)
75
77
  order = Order.find_by_id(order_id)
76
78
 
77
- # notify someone ...
79
+ # notify someone ...
78
80
  end
79
81
  end
80
82
  ```
@@ -118,8 +120,9 @@ cancel_order.subscribe(OrderNotifier.new, async: true)
118
120
  Wisper has various adapters for asynchronous event handling, please refer to
119
121
  [wisper-celluloid](https://github.com/krisleech/wisper-celluloid),
120
122
  [wisper-sidekiq](https://github.com/krisleech/wisper-sidekiq),
121
- [wisper-activejob](https://github.com/krisleech/wisper-activejob), or
122
- [wisper-que](https://github.com/joevandyk/wisper-que).
123
+ [wisper-activejob](https://github.com/krisleech/wisper-activejob),
124
+ [wisper-que](https://github.com/joevandyk/wisper-que) or
125
+ [wisper-resque](https://github.com/bzurkowski/wisper-resque).
123
126
 
124
127
  Depending on the adapter used the listener may need to be a class instead of an object. In this situation, every method corresponding to events should be declared as a class method, too. For example:
125
128
 
@@ -131,7 +134,7 @@ class OrderNotifier
131
134
  def self.cancel_order_successful(order_id)
132
135
  order = Order.find_by_id(order_id)
133
136
 
134
- # notify someone ...
137
+ # notify someone ...
135
138
  end
136
139
  end
137
140
  ```
@@ -191,9 +194,10 @@ This is useful for cross cutting concerns such as recording statistics, indexing
191
194
  Wisper.subscribe(MyListener.new)
192
195
  ```
193
196
 
194
- In a Rails app you might want to add your global listeners in an initalizer.
197
+ In a Rails app you might want to add your global listeners in an initializer.
198
+
199
+ Global listeners are threadsafe. Subscribers will receive events published on all threads.
195
200
 
196
- Global listeners are threadsafe.
197
201
 
198
202
  ### Scoping by publisher class
199
203
 
@@ -231,7 +235,7 @@ listeners.
231
235
 
232
236
  This is useful for capturing events published by objects to which you do not have access in a given context.
233
237
 
234
- Temporary Global Listeners are threadsafe.
238
+ Temporary Global Listeners are threadsafe. Subscribers will receive events published on the same thread.
235
239
 
236
240
  ## Subscribing to selected events
237
241
 
@@ -291,7 +295,7 @@ You could also alias the method within your listener, as such
291
295
 
292
296
  ## Testing
293
297
 
294
- Testing matchers and stubs are in seperate gems.
298
+ Testing matchers and stubs are in separate gems.
295
299
 
296
300
  * [wisper-rspec](https://github.com/krisleech/wisper-rspec)
297
301
  * [wisper-minitest](https://github.com/digitalcuisine/wisper-minitest)
@@ -339,6 +343,7 @@ Please read the [Contributing Guidelines](https://github.com/krisleech/wisper/bl
339
343
 
340
344
  * gem releases are [signed](http://guides.rubygems.org/security/) ([public key](https://github.com/krisleech/wisper/blob/master/gem-public_cert.pem))
341
345
  * commits are GPG signed ([public key](https://pgp.mit.edu/pks/lookup?op=get&search=0x3ABC74851F7CCC88))
346
+ * My [Keybase.io profile](https://keybase.io/krisleech)
342
347
 
343
348
  ## License
344
349
 
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "wisper"
5
+
6
+ require "pry"
7
+ Pry.start
8
+
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
@@ -1,21 +1,20 @@
1
1
  -----BEGIN CERTIFICATE-----
2
- MIIDeDCCAmCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBBMRMwEQYDVQQDDAprcmlz
3
- LmxlZWNoMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNj
4
- b20wHhcNMTQxMTA1MTEwMzQ4WhcNMTUxMTA1MTEwMzQ4WjBBMRMwEQYDVQQDDApr
5
- cmlzLmxlZWNoMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZ
6
- FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtW0/UtrFK/tSm
7
- uq5HnCUkZAQjnSaZ/h1Tby9s30CDJjDUdizPRdLQCplLDAMHFsAfTyD0Mc+Ez8o9
8
- CdTh8EZ4TSf+nokL+SUprpdR6qm6OWU03Ntd+bDCP0+rdqCX82g3N3mnvjR9aD3a
9
- +hd9Fhp0WuEyqTNjQ7IlopeUPDW7eYfSwI4bjfRHxsDR1GuZ3j0npxCAgAIN41WH
10
- MSTTZhdo0vKEiKZEtMMnT6w6fG/c3XIhVVPGnqy5+IZqBL0SYC+WJL3vC6yUBgqB
11
- nrpA/q+b3M69W+q+TkGv0qOnrxln0O7J2pykjoGIxUhhRkiGEldEhy9dxQWubffr
12
- hVJ4F0wLAgMBAAGjezB5MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
13
- BBSzq+x8mwj0ldvNkvjOl44OJG354jAfBgNVHREEGDAWgRRrcmlzLmxlZWNoQGdt
14
- YWlsLmNvbTAfBgNVHRIEGDAWgRRrcmlzLmxlZWNoQGdtYWlsLmNvbTANBgkqhkiG
15
- 9w0BAQUFAAOCAQEAF5M2Md3DcNCrQrDRDLaIzHaMM+RTgfbpgmZ6tU0iEowES18g
16
- QWQgrAbFuvQRPETJ2gbL5AC35fEqN80nU+3GhgW/bDYhII5D3PGLMorxhFw1JYLI
17
- 0Fd7MCE0sImc2rPybYUdpZ6TxvqgPKp+8CzM8vBUrdYd+dSHXit1piViWBcZcJb+
18
- EL5Ze4IodjkCPAeHvu2MQieieViLyfB4eG1syvfkxvAXCjFHeQoIFP16vVtcljdF
19
- k5cHH/4SGeMuGrSLRsqVvltxVV3AbQAfH8WUos2brjYHsoH5tVPrJ7UcFhzP95oU
20
- pEfFMW42smiNTOXpzG6JoIpA11szEHFT5ZS+UQ==
2
+ MIIDQDCCAiigAwIBAgIBATANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBprcmlz
3
+ LmxlZWNoL0RDPWdtYWlsL0RDPWNvbTAeFw0xOTEwMTYxNDEzNDVaFw0yMDEwMTUx
4
+ NDEzNDVaMCUxIzAhBgNVBAMMGmtyaXMubGVlY2gvREM9Z21haWwvREM9Y29tMIIB
5
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8gg/iZE6RFkl6GjisJJf9wQl
6
+ 5Tog+mrGqtylNpe9QKeyQS1fKLNR3Cqmv6sT3f3GlU8hhG+802MXmlJo7VyENs+s
7
+ HdMy85fBnYwhS/szhTzBqduXw43RAAGqB0VaHAoHdufTZBkmFSXET5c0/jUqQrPL
8
+ Zxsm2i0NV8cVpvrZlQcsW4Kf97DG1ZFNncS0IfCDqnluh21qMSgVAuiKHGoVKCYG
9
+ Igey486VuuJ8j6axwW3ii8HoBOxjF8Ka/rJ/t4sB9Ql/p6RHR4RhxP5xIS9geCpI
10
+ dsPGnCSleTW1EnXGHLdOdJpVmJXueYJEQJ1Rh/rR+9PeqAT3RA0D/dxSGIVtrQID
11
+ AQABo3sweTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUyupX2gb3
12
+ +isBRwf4/fhgLnh02sYwHwYDVR0RBBgwFoEUa3Jpcy5sZWVjaEBnbWFpbC5jb20w
13
+ HwYDVR0SBBgwFoEUa3Jpcy5sZWVjaEBnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
14
+ ggEBAExirH+Py0Wm8+ZzNnx/oyFXSF7V9FClYhPUXwQ5FmvQG+gXRlonO9IR/HL+
15
+ wGJNFh4B19fpughgQeJKjKJsG2zk2XnSK2yQyyNGdr/9dHXp/TS5sGvX9jFYVeAr
16
+ 0XCWXRBK+IfEqNnbFvPkwZEK62WLnrL50gMs3u2ILmLP5gkO3EoLyezJvIj33CLO
17
+ HX0Plp0VwiSp8+gEELX5wtdrnJ/UjmrY1lg7szukE+jgOJ++1e7Rzr+woBewIWvF
18
+ xn3z1ObkNQCnLZMRmzEcSa40T10/AuuuEv32emAgb50u9vz+s4y2lnE9i4mWW7+X
19
+ 5vdRgX7VnzYPA+Lc39kD+AcGIrQ=
21
20
  -----END CERTIFICATE-----
@@ -4,7 +4,6 @@
4
4
 
5
5
  module Wisper
6
6
  class TemporaryListeners
7
-
8
7
  def self.subscribe(*listeners, &block)
9
8
  new.subscribe(*listeners, &block)
10
9
  end
@@ -13,13 +12,14 @@ module Wisper
13
12
  new.registrations
14
13
  end
15
14
 
16
- def subscribe(*listeners, &block)
17
- options = listeners.last.is_a?(Hash) ? listeners.pop : {}
15
+ def subscribe(*listeners, &_block)
16
+ new_registrations = build_registrations(listeners)
17
+
18
18
  begin
19
- listeners.each { |listener| registrations << ObjectRegistration.new(listener, options) }
19
+ registrations.merge new_registrations
20
20
  yield
21
21
  ensure
22
- clear
22
+ registrations.subtract new_registrations
23
23
  end
24
24
  self
25
25
  end
@@ -30,8 +30,9 @@ module Wisper
30
30
 
31
31
  private
32
32
 
33
- def clear
34
- registrations.clear
33
+ def build_registrations(listeners)
34
+ options = listeners.last.is_a?(Hash) ? listeners.pop : {}
35
+ listeners.map { |listener| ObjectRegistration.new(listener, options) }
35
36
  end
36
37
 
37
38
  def key
@@ -1,3 +1,3 @@
1
1
  module Wisper
2
- VERSION = "2.0.0"
2
+ VERSION = "2.0.1"
3
3
  end
@@ -32,6 +32,42 @@ describe Wisper::TemporaryListeners do
32
32
  publisher.instance_eval { broadcast(:failure) }
33
33
  end
34
34
 
35
+ it 'globally subscribes listeners for duration of nested block' do
36
+
37
+ expect(listener_1).to receive(:success)
38
+ expect(listener_1).to receive(:failure)
39
+
40
+ expect(listener_2).to receive(:success)
41
+ expect(listener_2).to_not receive(:failure)
42
+
43
+ Wisper::TemporaryListeners.subscribe(listener_1) do
44
+ Wisper::TemporaryListeners.subscribe(listener_2) do
45
+ publisher.instance_eval { broadcast(:success) }
46
+ end
47
+ publisher.instance_eval { broadcast(:failure) }
48
+ end
49
+ end
50
+
51
+ it 'clears registrations for the block which exits' do
52
+
53
+ # listener_1 is subscribed twice hence it's supposed to get the message twice
54
+ expect(listener_1).to receive(:success).twice
55
+ expect(listener_1).to receive(:failure)
56
+ expect(listener_1).to_not receive(:ignored)
57
+
58
+ expect(listener_2).to receive(:success)
59
+ expect(listener_2).to_not receive(:failure)
60
+ expect(listener_2).to_not receive(:ignored)
61
+
62
+ Wisper::TemporaryListeners.subscribe(listener_1) do
63
+ Wisper::TemporaryListeners.subscribe(listener_1, listener_2) do
64
+ publisher.instance_eval { broadcast(:success) }
65
+ end
66
+ publisher.instance_eval { broadcast(:failure) }
67
+ end
68
+ publisher.instance_eval { broadcast(:ignored) }
69
+ end
70
+
35
71
  it 'is thread safe' do
36
72
  num_threads = 20
37
73
  (1..num_threads).to_a.map do
@@ -17,7 +17,7 @@ Gem::Specification.new do |gem|
17
17
  gem.homepage = "https://github.com/krisleech/wisper"
18
18
  gem.license = "MIT"
19
19
 
20
- signing_key = File.expand_path('~/.ssh/gem-private_key.pem')
20
+ signing_key = File.expand_path(ENV['HOME'].to_s + '/.ssh/gem-private_key.pem')
21
21
 
22
22
  if File.exist?(signing_key)
23
23
  gem.signing_key = signing_key
metadata CHANGED
@@ -1,14 +1,35 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wisper
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kris Leech
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain: []
11
- date: 2017-03-07 00:00:00.000000000 Z
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDQDCCAiigAwIBAgIBATANBgkqhkiG9w0BAQsFADAlMSMwIQYDVQQDDBprcmlz
14
+ LmxlZWNoL0RDPWdtYWlsL0RDPWNvbTAeFw0xOTEwMTYxNDEzNDVaFw0yMDEwMTUx
15
+ NDEzNDVaMCUxIzAhBgNVBAMMGmtyaXMubGVlY2gvREM9Z21haWwvREM9Y29tMIIB
16
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8gg/iZE6RFkl6GjisJJf9wQl
17
+ 5Tog+mrGqtylNpe9QKeyQS1fKLNR3Cqmv6sT3f3GlU8hhG+802MXmlJo7VyENs+s
18
+ HdMy85fBnYwhS/szhTzBqduXw43RAAGqB0VaHAoHdufTZBkmFSXET5c0/jUqQrPL
19
+ Zxsm2i0NV8cVpvrZlQcsW4Kf97DG1ZFNncS0IfCDqnluh21qMSgVAuiKHGoVKCYG
20
+ Igey486VuuJ8j6axwW3ii8HoBOxjF8Ka/rJ/t4sB9Ql/p6RHR4RhxP5xIS9geCpI
21
+ dsPGnCSleTW1EnXGHLdOdJpVmJXueYJEQJ1Rh/rR+9PeqAT3RA0D/dxSGIVtrQID
22
+ AQABo3sweTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNVHQ4EFgQUyupX2gb3
23
+ +isBRwf4/fhgLnh02sYwHwYDVR0RBBgwFoEUa3Jpcy5sZWVjaEBnbWFpbC5jb20w
24
+ HwYDVR0SBBgwFoEUa3Jpcy5sZWVjaEBnbWFpbC5jb20wDQYJKoZIhvcNAQELBQAD
25
+ ggEBAExirH+Py0Wm8+ZzNnx/oyFXSF7V9FClYhPUXwQ5FmvQG+gXRlonO9IR/HL+
26
+ wGJNFh4B19fpughgQeJKjKJsG2zk2XnSK2yQyyNGdr/9dHXp/TS5sGvX9jFYVeAr
27
+ 0XCWXRBK+IfEqNnbFvPkwZEK62WLnrL50gMs3u2ILmLP5gkO3EoLyezJvIj33CLO
28
+ HX0Plp0VwiSp8+gEELX5wtdrnJ/UjmrY1lg7szukE+jgOJ++1e7Rzr+woBewIWvF
29
+ xn3z1ObkNQCnLZMRmzEcSa40T10/AuuuEv32emAgb50u9vz+s4y2lnE9i4mWW7+X
30
+ 5vdRgX7VnzYPA+Lc39kD+AcGIrQ=
31
+ -----END CERTIFICATE-----
32
+ date: 2019-10-16 00:00:00.000000000 Z
12
33
  dependencies: []
13
34
  description: |2
14
35
  A micro library providing objects with Publish-Subscribe capabilities.
@@ -16,7 +37,9 @@ description: |2
16
37
  Check out the Wiki for articles, guides and examples: https://github.com/krisleech/wisper/wiki
17
38
  email:
18
39
  - kris.leech@gmail.com
19
- executables: []
40
+ executables:
41
+ - console
42
+ - setup
20
43
  extensions: []
21
44
  extra_rdoc_files: []
22
45
  files:
@@ -28,6 +51,8 @@ files:
28
51
  - Gemfile
29
52
  - README.md
30
53
  - Rakefile
54
+ - bin/console
55
+ - bin/setup
31
56
  - gem-public_cert.pem
32
57
  - lib/wisper.rb
33
58
  - lib/wisper/broadcasters/logger_broadcaster.rb
@@ -76,8 +101,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
101
  - !ruby/object:Gem::Version
77
102
  version: '0'
78
103
  requirements: []
79
- rubyforge_project:
80
- rubygems_version: 2.5.1
104
+ rubygems_version: 3.0.6
81
105
  signing_key:
82
106
  specification_version: 4
83
107
  summary: A micro library providing objects with Publish-Subscribe capabilities
Binary file