flirt 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b120f2410701ad2d63d29cc453c273021a5a23dc
4
- data.tar.gz: da528cc1e2678262357854934f86064e723a6568
3
+ metadata.gz: e91741f80d191782e97feb4f999ea217cea73ab0
4
+ data.tar.gz: c82e4ca1147147b4dbe58eceda66cb1f24724e9c
5
5
  SHA512:
6
- metadata.gz: 8ebacbf7408b4e5d48702204e9b16490c4e1ef1e4810f56ae0940d6e9af7ea3cd03e47f01c56cc67cec8eaf63130dbfa2aa1e5965414719482ae60b30c425949
7
- data.tar.gz: 00232c11f40b4b5051d679c95af55e4a6f974790befbd511acd99a9777d67b29f52df01136cde92a2cdd4f707d37211f72bcc18f7bce9a81223e05b72881c594
6
+ metadata.gz: 663901d78250f3486d9deee98b17a299032270f93bbaa8c833a7838d597dbef8d5b5ee57565ee9417ef1e0292530504d75a0e28e4b72c8c2f78a473ae5dcb635
7
+ data.tar.gz: e9176cd92e3178a0ee7d291dab6fbf97956a4ca24aa39af78debd4b3ac96202148de7573fe90c41b619d778990ece3d79bfb19e69b33c466d7a6f34b1773cda6
@@ -12,5 +12,9 @@ module Flirt
12
12
  def call(event_data)
13
13
  object.send callback_name, event_data
14
14
  end
15
+
16
+ def ==(other_callback)
17
+ object == other_callback.object && callback_name == other_callback.callback_name
18
+ end
15
19
  end
16
20
  end
data/lib/flirt/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Flirt
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
data/lib/flirt.rb CHANGED
@@ -8,25 +8,31 @@ module Flirt
8
8
 
9
9
  class << self
10
10
 
11
- def broadcast(event_name, event_data)
11
+ def publish(event_name, event_data)
12
12
  return if disabled
13
13
  raise ArgumentError.new("Event name must be a symbol") unless event_name.is_a? Symbol
14
14
  (callbacks[event_name] || []).each do |callback|
15
15
  callback.call(event_data)
16
16
  end
17
17
  end
18
- alias_method :publish, :broadcast
18
+ alias_method :broadcast, :publish
19
19
 
20
20
  def subscribe(object, event_name, options = {})
21
- raise ArgumentError.new("You must pass a callback") unless options[:with].is_a? Symbol
22
- raise ArgumentError.new("You must pass an object") if object.nil?
23
- raise ArgumentError.new("You must pass an event name") unless event_name.is_a? Symbol
21
+ check_subscription_arguments(event_name, object, options)
24
22
  callback = Flirt::Callback.new object: object,
25
23
  callback_name: options[:with]
26
24
  add_callback(event_name, callback)
27
25
  end
28
26
  alias_method :listen, :subscribe
29
27
 
28
+ def unsubscribe(object, event_name, options = {})
29
+ check_subscription_arguments(event_name, object, options)
30
+ callback = Flirt::Callback.new object: object,
31
+ callback_name: options[:with]
32
+ remove_callback(event_name, callback)
33
+ end
34
+ alias_method :unlisten, :unsubscribe
35
+
30
36
  def enable
31
37
  self.disabled = false
32
38
  end
@@ -53,6 +59,20 @@ module Flirt
53
59
  callbacks[event_name] << callback
54
60
  end
55
61
 
62
+ def remove_callback(event_name, callback_to_delete)
63
+ return unless callbacks[event_name]
64
+
65
+ callbacks[event_name].each do |callback|
66
+ callbacks[event_name].delete(callback) if callback == callback_to_delete
67
+ end
68
+ end
69
+
70
+ def check_subscription_arguments(event_name, object, options)
71
+ raise ArgumentError.new("You must pass a callback") unless options[:with].is_a? Symbol
72
+ raise ArgumentError.new("You must pass an object") if object.nil?
73
+ raise ArgumentError.new("You must pass an event name") unless event_name.is_a? Symbol
74
+ end
75
+
56
76
  end
57
77
 
58
78
  end
@@ -5,7 +5,7 @@ describe Flirt::Callback do
5
5
  Flirt.enable
6
6
  end
7
7
 
8
- describe "when instantiated with an object and callback" do
8
+ describe "when instantiated with an object and callback name" do
9
9
 
10
10
  let(:listener) { Object.new }
11
11
  let(:callback_name) { :call_me }
@@ -29,5 +29,10 @@ describe Flirt::Callback do
29
29
  callback.call(event_data)
30
30
  end
31
31
  end
32
+
33
+ it "tests equality if object and callback are the same" do
34
+ other_callback = Flirt::Callback.new object: listener, callback_name: callback_name
35
+ expect(callback).to eq(other_callback)
36
+ end
32
37
  end
33
38
  end
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
- require 'flirt/flirt_test_classes'
2
+ #require 'flirt/flirt_test_classes'
3
3
 
4
4
  describe Flirt::Listener do
5
5
  before(:each) do
@@ -10,16 +10,32 @@ describe Flirt::Listener do
10
10
  let(:event) { :grabbed_coin }
11
11
  let(:callback_name) { :increase_score }
12
12
  let(:event_data) { { value: 100 } }
13
- let(:instance_subscriber) { TestInstanceSubscriber.new event, callback_name }
14
- let(:instance_listener) { TestInstanceListener.new event, callback_name }
13
+ let(:test_class) { Class.new }
14
+ let(:test_instance) { test_class.new }
15
+
16
+ before(:each) do
17
+ test_class.class_eval do
18
+ include Flirt::Listener
19
+ end
20
+ end
15
21
 
16
22
  it "subscribes to an event" do
17
- expect(instance_subscriber).to receive(callback_name).with(event_data)
23
+ block_event = event
24
+ block_callback_name = callback_name
25
+ test_instance.instance_eval do
26
+ subscribe_to block_event, with: block_callback_name
27
+ end
28
+ expect(test_instance).to receive(callback_name).with(event_data)
18
29
  Flirt.broadcast event, event_data
19
30
  end
20
31
 
21
32
  it "listens to an event" do
22
- expect(instance_listener).to receive(callback_name).with(event_data)
33
+ block_event = event
34
+ block_callback_name = callback_name
35
+ test_instance.instance_eval do
36
+ listen_to block_event, with: block_callback_name
37
+ end
38
+ expect(test_instance).to receive(callback_name).with(event_data)
23
39
  Flirt.broadcast event, event_data
24
40
  end
25
41
  end
@@ -28,22 +44,26 @@ describe Flirt::Listener do
28
44
  let(:event) { :event_name }
29
45
  let(:callback_name) { :callback_name }
30
46
  let(:event_data) { { value: 100 } }
31
- let(:class_subscriber) { TestClassSubscriber }
32
- let(:class_listener) { TestClassListener }
33
-
34
- # Because rspec has to clear the Flirt callbacks for each test,
35
- # we need to require the test classes after rspec init.
47
+ let(:test_class) { Class.new }
36
48
 
37
49
  it "subscribes to an event" do
38
- require 'flirt/test_class_subscriber'
39
- expect(class_subscriber).to receive(callback_name).with(event_data)
40
- Flirt.broadcast event, event_data
50
+ block_event = event
51
+ block_callback_name = callback_name
52
+ expect(Flirt).to receive(:subscribe).with(test_class, event, { with: callback_name })
53
+ test_class.class_eval do
54
+ extend Flirt::Listener
55
+ subscribe_to block_event, with: block_callback_name
56
+ end
41
57
  end
42
58
 
43
59
  it "listens to an event" do
44
- require 'flirt/test_class_listener'
45
- expect(class_listener).to receive(callback_name).with(event_data)
46
- Flirt.broadcast event, event_data
60
+ block_event = event
61
+ block_callback_name = callback_name
62
+ expect(Flirt).to receive(:subscribe).with(test_class, event, { with: callback_name })
63
+ test_class.class_eval do
64
+ extend Flirt::Listener
65
+ listen_to block_event, with: block_callback_name
66
+ end
47
67
  end
48
68
  end
49
69
  end
@@ -1,5 +1,5 @@
1
1
  require 'spec_helper'
2
- require 'flirt/flirt_test_classes'
2
+ #require 'flirt/flirt_test_classes'
3
3
 
4
4
  describe Flirt do
5
5
 
@@ -8,26 +8,92 @@ describe Flirt do
8
8
  let(:response) { { topping: "cream" } }
9
9
  let(:event) { :pancake_fried }
10
10
  let(:wrong_event) { :spud_baked }
11
- let!(:listener) { TestListener.new(event) }
11
+ let(:callback) { :respond }
12
+ let!(:listener) { Object.new }
13
+
14
+ before(:each) do
15
+ Flirt.listen listener, event, with: callback
16
+ end
12
17
 
13
18
  it "listens to the correct broadcast event" do
19
+ expect(listener).to receive(callback).with(response)
14
20
  Flirt.broadcast event, response
15
- expect(listener.responded).to eq(response)
16
21
  end
17
22
 
18
23
  it "listens to the correct publish event" do
24
+ expect(listener).to receive(callback).with(response)
19
25
  Flirt.publish event, response
20
- expect(listener.responded).to eq(response)
21
26
  end
22
27
 
23
28
  it "doesn't listen to the wrong broadcast event" do
29
+ expect(listener).not_to receive(callback)
24
30
  Flirt.broadcast wrong_event, response
25
- expect(listener.responded).to be_nil
26
31
  end
27
32
 
28
33
  it "doesn't listen to the wrong publish event" do
34
+ expect(listener).not_to receive(callback)
29
35
  Flirt.broadcast wrong_event, response
30
- expect(listener.responded).to be_nil
36
+ end
37
+
38
+ describe "when disabled" do
39
+ before(:each) { Flirt.disable }
40
+ after(:each) { Flirt.enable }
41
+
42
+ it "doesn't broadcast" do
43
+ expect(listener).not_to receive(callback)
44
+ Flirt.broadcast event, response
45
+ end
46
+
47
+ it "doesn't publish" do
48
+ expect(listener).not_to receive(callback)
49
+ Flirt.publish event, response
50
+ end
51
+ end
52
+
53
+ describe "when cleared" do
54
+
55
+ let(:callback2) { :respond2 }
56
+
57
+ before(:each) do
58
+ Flirt.listen listener, event, with: callback2
59
+ Flirt.clear
60
+ end
61
+
62
+ it "forgets listeners" do
63
+ expect(listener).not_to receive(callback)
64
+ expect(listener).not_to receive(callback2)
65
+ Flirt.publish event, response
66
+ end
67
+
68
+ end
69
+
70
+ describe "when unlistened" do
71
+
72
+ let(:callback2) { :respond2 }
73
+
74
+ before(:each) do
75
+ Flirt.listen listener, event, with: callback2
76
+ Flirt.unlisten listener, event, with: callback
77
+ end
78
+
79
+ it "forgets the listener" do
80
+ expect(listener).not_to receive(callback)
81
+ expect(listener).to receive(callback2).with(response)
82
+ Flirt.broadcast event, response
83
+ end
84
+
85
+ end
86
+
87
+ describe "when unsubscribed" do
88
+ before(:each) do
89
+ Flirt.unsubscribe listener, event, with: callback
90
+ end
91
+
92
+ it "forgets the listener" do
93
+ expect(listener).not_to receive(callback).with(response)
94
+ Flirt.publish event, response
95
+ end
96
+
31
97
  end
32
98
  end
33
99
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flirt
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Benjamin Randles-Dunkley
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-03-28 00:00:00.000000000 Z
11
+ date: 2015-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -74,9 +74,6 @@ files:
74
74
  - spec/flirt/flirt_callback_spec.rb
75
75
  - spec/flirt/flirt_listener_spec.rb
76
76
  - spec/flirt/flirt_spec.rb
77
- - spec/flirt/flirt_test_classes.rb
78
- - spec/flirt/test_class_listener.rb
79
- - spec/flirt/test_class_subscriber.rb
80
77
  - spec/spec_helper.rb
81
78
  homepage: https://github.com/chemica/flirt
82
79
  licenses:
@@ -106,7 +103,4 @@ test_files:
106
103
  - spec/flirt/flirt_callback_spec.rb
107
104
  - spec/flirt/flirt_listener_spec.rb
108
105
  - spec/flirt/flirt_spec.rb
109
- - spec/flirt/flirt_test_classes.rb
110
- - spec/flirt/test_class_listener.rb
111
- - spec/flirt/test_class_subscriber.rb
112
106
  - spec/spec_helper.rb
@@ -1,45 +0,0 @@
1
-
2
- class TestSubscriber
3
-
4
- attr_accessor :responded
5
-
6
- def initialize(event)
7
- Flirt.subscribe self, event, with: :respond
8
- end
9
-
10
- def respond(event_data)
11
- self.responded = event_data
12
- end
13
- end
14
-
15
-
16
- class TestListener
17
-
18
- attr_accessor :responded
19
-
20
- def initialize(event)
21
- Flirt.listen self, event, with: :respond
22
- end
23
-
24
- def respond(event_data)
25
- self.responded = event_data
26
- end
27
- end
28
-
29
- class TestInstanceSubscriber
30
- include Flirt::Listener
31
-
32
- def initialize(event, callback)
33
- subscribe_to event, with: callback
34
- end
35
- end
36
-
37
- class TestInstanceListener
38
- include Flirt::Listener
39
-
40
- attr_accessor :responded
41
-
42
- def initialize(event, callback)
43
- listen_to event, with: callback
44
- end
45
- end
@@ -1,9 +0,0 @@
1
- class TestClassListener
2
- extend Flirt::Listener
3
-
4
- class << self
5
- attr_accessor :responded
6
- end
7
-
8
- listen_to :event_name, with: :callback_name
9
- end
@@ -1,9 +0,0 @@
1
- class TestClassSubscriber
2
- extend Flirt::Listener
3
-
4
- class << self
5
- attr_accessor :responded
6
- end
7
-
8
- subscribe_to :event_name, with: :callback_name
9
- end