wisper 1.1.0 → 1.2.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.
- data/README.md +1 -1
- data/lib/wisper.rb +4 -0
- data/lib/wisper/global_listeners.rb +9 -3
- data/lib/wisper/publisher.rb +2 -2
- data/lib/wisper/version.rb +1 -1
- data/spec/lib/global_subscribers_spec.rb +16 -8
- data/spec/lib/wisper/publisher_spec.rb +28 -2
- data/spec/lib/wisper_spec.rb +5 -7
- data/spec/spec_helper.rb +9 -0
- metadata +2 -2
    
        data/README.md
    CHANGED
    
    | @@ -202,7 +202,7 @@ However it means that when looking at the code it will not be obvious that the | |
| 202 202 | 
             
            global listeners are being executed in additional to the regular listeners.
         | 
| 203 203 |  | 
| 204 204 | 
             
            ```ruby
         | 
| 205 | 
            -
            Wisper | 
| 205 | 
            +
            Wisper.add_listener(MyListener.new)
         | 
| 206 206 | 
             
            ```
         | 
| 207 207 |  | 
| 208 208 | 
             
            In a Rails app you might want to add your global listeners in an initalizer.
         | 
    
        data/lib/wisper.rb
    CHANGED
    
    
| @@ -11,7 +11,7 @@ module Wisper | |
| 11 11 | 
             
                  @mutex         = Mutex.new
         | 
| 12 12 | 
             
                end
         | 
| 13 13 |  | 
| 14 | 
            -
                def  | 
| 14 | 
            +
                def add(listener, options = {})
         | 
| 15 15 | 
             
                  with_mutex { @registrations << ObjectRegistration.new(listener, options) }
         | 
| 16 16 | 
             
                  self
         | 
| 17 17 | 
             
                end
         | 
| @@ -28,8 +28,8 @@ module Wisper | |
| 28 28 | 
             
                  with_mutex { @registrations.clear }
         | 
| 29 29 | 
             
                end
         | 
| 30 30 |  | 
| 31 | 
            -
                def self. | 
| 32 | 
            -
                  instance. | 
| 31 | 
            +
                def self.add(listener, options = {})
         | 
| 32 | 
            +
                  instance.add(listener, options)
         | 
| 33 33 | 
             
                end
         | 
| 34 34 |  | 
| 35 35 | 
             
                def self.registrations
         | 
| @@ -44,6 +44,12 @@ module Wisper | |
| 44 44 | 
             
                  instance.clear
         | 
| 45 45 | 
             
                end
         | 
| 46 46 |  | 
| 47 | 
            +
                # remain backwards compatible
         | 
| 48 | 
            +
                def self.add_listener(listener, options = {})
         | 
| 49 | 
            +
                  warn "[DEPRECATION] use `add` instead of `add_listener`"
         | 
| 50 | 
            +
                  add(listener, options)
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 47 53 | 
             
                private
         | 
| 48 54 |  | 
| 49 55 | 
             
                def with_mutex
         | 
    
        data/lib/wisper/publisher.rb
    CHANGED
    
    
    
        data/lib/wisper/version.rb
    CHANGED
    
    
| @@ -5,18 +5,16 @@ describe Wisper::GlobalListeners do | |
| 5 5 | 
             
              let(:local_listener)   { double('listener') }
         | 
| 6 6 | 
             
              let(:publisher)        { publisher_class.new }
         | 
| 7 7 |  | 
| 8 | 
            -
               | 
| 9 | 
            -
             | 
| 10 | 
            -
              describe '.add_listener' do
         | 
| 8 | 
            +
              describe '.add' do
         | 
| 11 9 | 
             
                it 'adds given listener to every publisher' do
         | 
| 12 | 
            -
                  Wisper::GlobalListeners. | 
| 10 | 
            +
                  Wisper::GlobalListeners.add(global_listener)
         | 
| 13 11 | 
             
                  global_listener.should_receive(:it_happened)
         | 
| 14 12 | 
             
                  publisher.send(:broadcast, :it_happened)
         | 
| 15 13 | 
             
                end
         | 
| 16 14 |  | 
| 17 15 | 
             
                it 'works along side local listeners' do
         | 
| 18 16 | 
             
                  # global listener
         | 
| 19 | 
            -
                  Wisper::GlobalListeners. | 
| 17 | 
            +
                  Wisper::GlobalListeners.add(global_listener)
         | 
| 20 18 |  | 
| 21 19 | 
             
                  # local listener
         | 
| 22 20 | 
             
                  publisher.add_listener(local_listener)
         | 
| @@ -31,7 +29,7 @@ describe Wisper::GlobalListeners do | |
| 31 29 | 
             
                  num_threads = 100
         | 
| 32 30 | 
             
                  (1..num_threads).to_a.map do
         | 
| 33 31 | 
             
                    Thread.new do
         | 
| 34 | 
            -
                      Wisper::GlobalListeners. | 
| 32 | 
            +
                      Wisper::GlobalListeners.add(Object.new)
         | 
| 35 33 | 
             
                      sleep(rand) # a little chaos
         | 
| 36 34 | 
             
                    end
         | 
| 37 35 | 
             
                  end.each(&:join)
         | 
| @@ -42,7 +40,7 @@ describe Wisper::GlobalListeners do | |
| 42 40 |  | 
| 43 41 | 
             
              describe '.listeners' do
         | 
| 44 42 | 
             
                it 'returns collection of global listeners' do
         | 
| 45 | 
            -
                  Wisper::GlobalListeners. | 
| 43 | 
            +
                  Wisper::GlobalListeners.add(global_listener)
         | 
| 46 44 | 
             
                  Wisper::GlobalListeners.listeners.should == [global_listener]
         | 
| 47 45 | 
             
                end
         | 
| 48 46 |  | 
| @@ -53,8 +51,18 @@ describe Wisper::GlobalListeners do | |
| 53 51 | 
             
              end
         | 
| 54 52 |  | 
| 55 53 | 
             
              it '.clear clears all global listeners' do
         | 
| 56 | 
            -
                Wisper::GlobalListeners. | 
| 54 | 
            +
                Wisper::GlobalListeners.add(global_listener)
         | 
| 57 55 | 
             
                Wisper::GlobalListeners.clear
         | 
| 58 56 | 
             
                Wisper::GlobalListeners.listeners.should be_empty
         | 
| 59 57 | 
             
              end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
              describe 'backwards compatibility' do
         | 
| 60 | 
            +
                it '.add_listener adds a listener' do
         | 
| 61 | 
            +
                  silence_warnings do
         | 
| 62 | 
            +
                    Wisper::GlobalListeners.add_listener(global_listener)
         | 
| 63 | 
            +
                    global_listener.should_receive(:it_happened)
         | 
| 64 | 
            +
                    publisher.send(:broadcast, :it_happened)
         | 
| 65 | 
            +
                  end
         | 
| 66 | 
            +
                end
         | 
| 67 | 
            +
              end
         | 
| 60 68 | 
             
            end
         | 
| @@ -90,6 +90,19 @@ describe Wisper::Publisher do | |
| 90 90 | 
             
                    publisher.send(:broadcast, 'something_happened')
         | 
| 91 91 | 
             
                    publisher.send(:broadcast, 'and_so_did_this')
         | 
| 92 92 | 
             
                  end
         | 
| 93 | 
            +
             | 
| 94 | 
            +
                  it '.add_block_listener subscribes block to all listed events' do
         | 
| 95 | 
            +
                    insider.should_receive(:it_happened).twice
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                    publisher.add_block_listener(
         | 
| 98 | 
            +
                      :on => ['something_happened', 'and_so_did_this']) do
         | 
| 99 | 
            +
                      insider.it_happened
         | 
| 100 | 
            +
                    end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                    publisher.send(:broadcast, 'something_happened')
         | 
| 103 | 
            +
                    publisher.send(:broadcast, 'and_so_did_this')
         | 
| 104 | 
            +
                    publisher.send(:broadcast, 'but_not_this')
         | 
| 105 | 
            +
                  end
         | 
| 93 106 | 
             
                end
         | 
| 94 107 |  | 
| 95 108 | 
             
                it 'returns publisher so methods can be chained' do
         | 
| @@ -99,8 +112,9 @@ describe Wisper::Publisher do | |
| 99 112 | 
             
              end
         | 
| 100 113 |  | 
| 101 114 | 
             
              describe '.on (alternative block syntax)' do
         | 
| 115 | 
            +
                let(:insider) { double('insider') }
         | 
| 116 | 
            +
             | 
| 102 117 | 
             
                it 'subscribes given block to an event' do
         | 
| 103 | 
            -
                  insider = double('insider')
         | 
| 104 118 | 
             
                  insider.should_receive(:it_happened)
         | 
| 105 119 |  | 
| 106 120 | 
             
                  publisher.on(:something_happened) do
         | 
| @@ -109,12 +123,24 @@ describe Wisper::Publisher do | |
| 109 123 |  | 
| 110 124 | 
             
                  publisher.send(:broadcast, 'something_happened')
         | 
| 111 125 | 
             
                end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
                it 'subscribes given block to multiple events' do
         | 
| 128 | 
            +
                  insider.should_receive(:it_happened).twice
         | 
| 129 | 
            +
             | 
| 130 | 
            +
                  publisher.on(:something_happened, :and_so_did_this) do
         | 
| 131 | 
            +
                    insider.it_happened
         | 
| 132 | 
            +
                  end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                  publisher.send(:broadcast, 'something_happened')
         | 
| 135 | 
            +
                  publisher.send(:broadcast, 'and_so_did_this')
         | 
| 136 | 
            +
                  publisher.send(:broadcast, 'but_not_this')
         | 
| 137 | 
            +
                end
         | 
| 112 138 | 
             
              end
         | 
| 113 139 |  | 
| 114 140 | 
             
              describe '.broadcast' do
         | 
| 115 141 | 
             
                it 'does not publish events which cannot be responded to' do
         | 
| 116 142 | 
             
                  listener.should_not_receive(:so_did_this)
         | 
| 117 | 
            -
                  listener.stub(:respond_to | 
| 143 | 
            +
                  listener.stub(:respond_to? => false)
         | 
| 118 144 |  | 
| 119 145 | 
             
                  publisher.add_listener(listener, :on => 'so_did_this')
         | 
| 120 146 |  | 
    
        data/spec/lib/wisper_spec.rb
    CHANGED
    
    | @@ -22,12 +22,10 @@ describe Wisper do | |
| 22 22 |  | 
| 23 23 | 
             
                publisher.send(:broadcast, 'not_here')
         | 
| 24 24 | 
             
              end
         | 
| 25 | 
            -
            end
         | 
| 26 25 |  | 
| 27 | 
            -
             | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
             | 
| 31 | 
            -
               | 
| 32 | 
            -
              $VERBOSE = original_verbosity
         | 
| 26 | 
            +
              it '.add_listener adds a global listener' do
         | 
| 27 | 
            +
                listener = double('listener')
         | 
| 28 | 
            +
                Wisper.add_listener(listener)
         | 
| 29 | 
            +
                Wisper::GlobalListeners.listeners.should == [listener]
         | 
| 30 | 
            +
              end
         | 
| 33 31 | 
             
            end
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    | @@ -8,9 +8,18 @@ RSpec.configure do |config| | |
| 8 8 | 
             
              config.run_all_when_everything_filtered = true
         | 
| 9 9 | 
             
              config.filter_run :focus
         | 
| 10 10 | 
             
              config.order = 'random'
         | 
| 11 | 
            +
              config.after(:each) { Wisper::GlobalListeners.clear }
         | 
| 11 12 | 
             
            end
         | 
| 12 13 |  | 
| 13 14 | 
             
            # returns an anonymous wispered class
         | 
| 14 15 | 
             
            def publisher_class
         | 
| 15 16 | 
             
              Class.new { include Wisper::Publisher }
         | 
| 16 17 | 
             
            end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            # prevents deprecation warning showing up in spec output
         | 
| 20 | 
            +
            def silence_warnings
         | 
| 21 | 
            +
              original_verbosity = $VERBOSE
         | 
| 22 | 
            +
              $VERBOSE = nil
         | 
| 23 | 
            +
              yield
         | 
| 24 | 
            +
              $VERBOSE = original_verbosity
         | 
| 25 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: wisper
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.2.0
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,7 +9,7 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2013- | 
| 12 | 
            +
            date: 2013-07-21 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: rake
         |