flirt 0.0.4 → 0.1.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 +4 -4
- data/README.md +31 -9
- data/flirt.gemspec +1 -0
- data/lib/flirt/listener.rb +0 -4
- data/lib/flirt/version.rb +2 -2
- data/lib/flirt.rb +37 -4
- data/spec/flirt/flirt_spec.rb +120 -0
- data/spec/spec_helper.rb +1 -0
- metadata +15 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 564e3009a8c2864fb2de008cb57be72e8440017f
|
4
|
+
data.tar.gz: 87e6f2718d7ffa0d922b79f73bb718b469704a56
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b97a5309761523a1e376c56333ebaaf4d9a8315d21774fd84b8b66bd37ffcdfe0d1e801bd9e37b7c9bf40f7feaeb821a46b5e90c22684574f2324677c2fdaa04
|
7
|
+
data.tar.gz: 19ffd5697790350cdab302e69aaaf39437589d17c0f6fcec617c1e22708a97a342ca3c3c1eb745c04f0bbdf44fe7a8f7b2b763f05b4b2784445a54d27dfef2f9
|
data/README.md
CHANGED
@@ -29,14 +29,15 @@ Or install it yourself as:
|
|
29
29
|
|
30
30
|
## Usage
|
31
31
|
|
32
|
-
To publish an event:
|
32
|
+
###To publish an event:
|
33
33
|
|
34
34
|
|
35
35
|
```ruby
|
36
|
+
event_data = { fruit: 'apple' }
|
36
37
|
Flirt.publish :picked, event_data
|
37
38
|
```
|
38
39
|
|
39
|
-
To subscribe:
|
40
|
+
###To subscribe:
|
40
41
|
|
41
42
|
```ruby
|
42
43
|
class MyListener
|
@@ -50,7 +51,7 @@ class MyListener
|
|
50
51
|
end
|
51
52
|
```
|
52
53
|
|
53
|
-
To unsubscribe:
|
54
|
+
###To unsubscribe:
|
54
55
|
|
55
56
|
```ruby
|
56
57
|
Flirt.unsubscribe self, :picked, with: :picked_callback
|
@@ -94,7 +95,7 @@ end
|
|
94
95
|
|
95
96
|
```unsubscribe_from``` can technically be used in the class context, but probably doesn't have as much use.
|
96
97
|
|
97
|
-
Flirt defaults to 'enabled'. Switch Flirt off:
|
98
|
+
###Flirt defaults to 'enabled'. Switch Flirt off:
|
98
99
|
|
99
100
|
```ruby
|
100
101
|
Flirt.disable
|
@@ -106,27 +107,48 @@ And back on again:
|
|
106
107
|
Flirt.enable
|
107
108
|
```
|
108
109
|
|
109
|
-
|
110
|
+
Enabled status affects publishing only, listeners can still be added and will be
|
111
|
+
remembered. No listeners will be removed.
|
112
|
+
|
113
|
+
###Disable only a set of events:
|
110
114
|
|
111
115
|
```ruby
|
112
116
|
Flirt.disable only: [:pancake_cooked, :picked]
|
113
117
|
```
|
114
118
|
|
115
|
-
|
119
|
+
###Enable only a set of events:
|
116
120
|
|
117
121
|
```ruby
|
118
122
|
Flirt.enable only: [:topping_added, :pancake_flipped]
|
119
123
|
```
|
120
124
|
|
121
|
-
|
122
|
-
|
125
|
+
Disabling and enabling sets of events is not cumulative. The new set of events will overwrite all previous calls.
|
126
|
+
For example:
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
Flirt.disable only: [:pancake_cooked, :picked]
|
130
|
+
Flirt.disable only: [:flipped]
|
131
|
+
```
|
123
132
|
|
124
|
-
|
133
|
+
The above code will leave only ```:flipped``` disabled.
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
Flirt.enable only: [:flipped, :picked]
|
137
|
+
Flirt.disable only: [:flipped]
|
138
|
+
```
|
139
|
+
|
140
|
+
The above code will also leave only ```:flipped``` disabled.
|
141
|
+
|
142
|
+
Calling ```Flirt.enable``` or ```Flirt.disable``` will clear any previously set enabled or disabled events.
|
143
|
+
|
144
|
+
###Clear all listeners:
|
125
145
|
|
126
146
|
```ruby
|
127
147
|
Flirt.clear
|
128
148
|
```
|
129
149
|
|
150
|
+
This operation cannot be undone.
|
151
|
+
|
130
152
|
## Contributing
|
131
153
|
|
132
154
|
1. Fork it ( https://github.com/[my-github-username]/flirt/fork )
|
data/flirt.gemspec
CHANGED
data/lib/flirt/listener.rb
CHANGED
@@ -7,8 +7,6 @@
|
|
7
7
|
#
|
8
8
|
# def initialize
|
9
9
|
# subscribe_to :picked, with: :picked_callback
|
10
|
-
# # or the alias
|
11
|
-
# listen_to :picked, with: :picked_callback
|
12
10
|
# end
|
13
11
|
#
|
14
12
|
# def picked_callback(event_data)
|
@@ -22,8 +20,6 @@
|
|
22
20
|
# extend Flirt::Listener
|
23
21
|
#
|
24
22
|
# subscribe_to :picked, with: :picked_callback
|
25
|
-
# # or the alias
|
26
|
-
# listen_to :picked, with: :picked_callback
|
27
23
|
#
|
28
24
|
# def self.picked_callback(event_data)
|
29
25
|
# puts "The #{event_data[:fruit]} has been picked"
|
data/lib/flirt/version.rb
CHANGED
data/lib/flirt.rb
CHANGED
@@ -11,7 +11,10 @@ module Flirt
|
|
11
11
|
|
12
12
|
def publish(event_name, event_data)
|
13
13
|
return if disabled
|
14
|
+
return if disabled_list && disabled_list.include?(event_name)
|
15
|
+
return if enabled_list && !enabled_list.include?(event_name)
|
14
16
|
raise ArgumentError.new("Event name must be a symbol") unless event_name.is_a? Symbol
|
17
|
+
|
15
18
|
(callbacks[event_name] || []).each do |callback|
|
16
19
|
callback.call(event_data)
|
17
20
|
end
|
@@ -34,13 +37,23 @@ module Flirt
|
|
34
37
|
end
|
35
38
|
|
36
39
|
|
37
|
-
def enable
|
40
|
+
def enable(opts = {})
|
41
|
+
clear_event_lists
|
42
|
+
if opts[:only]
|
43
|
+
set_enabled opts[:only]
|
44
|
+
end
|
38
45
|
self.disabled = false
|
39
46
|
end
|
40
47
|
|
41
48
|
|
42
|
-
def disable
|
43
|
-
|
49
|
+
def disable(opts = {})
|
50
|
+
clear_event_lists
|
51
|
+
if opts[:only]
|
52
|
+
set_disabled opts[:only]
|
53
|
+
self.disabled = false
|
54
|
+
else
|
55
|
+
self.disabled = true
|
56
|
+
end
|
44
57
|
end
|
45
58
|
|
46
59
|
|
@@ -52,7 +65,7 @@ module Flirt
|
|
52
65
|
private
|
53
66
|
|
54
67
|
attr_reader :callbacks
|
55
|
-
attr_accessor :disabled
|
68
|
+
attr_accessor :disabled, :disabled_list, :enabled_list
|
56
69
|
|
57
70
|
|
58
71
|
def callbacks
|
@@ -66,6 +79,26 @@ module Flirt
|
|
66
79
|
end
|
67
80
|
|
68
81
|
|
82
|
+
def set_disabled(events)
|
83
|
+
self.disabled_list = wrap_event_list(events)
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
def set_enabled(events)
|
88
|
+
self.enabled_list = wrap_event_list(events)
|
89
|
+
end
|
90
|
+
|
91
|
+
|
92
|
+
def clear_event_lists
|
93
|
+
self.enabled_list = nil
|
94
|
+
self.disabled_list = nil
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
def wrap_event_list(events)
|
99
|
+
events.is_a?(Array) ? events : [events]
|
100
|
+
end
|
101
|
+
|
69
102
|
def remove_callback(event_name, callback_to_delete)
|
70
103
|
return unless callbacks[event_name]
|
71
104
|
|
data/spec/flirt/flirt_spec.rb
CHANGED
@@ -50,6 +50,126 @@ describe Flirt do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
|
53
|
+
describe "then more listeners added" do
|
54
|
+
|
55
|
+
let(:event2) { :topping_added }
|
56
|
+
|
57
|
+
let(:event3) { :plated_up }
|
58
|
+
|
59
|
+
let(:callback2) { :respond2 }
|
60
|
+
|
61
|
+
let(:callback3) { :respond3 }
|
62
|
+
|
63
|
+
before(:each) do
|
64
|
+
Flirt.subscribe listener, event2, with: callback2
|
65
|
+
|
66
|
+
Flirt.subscribe listener, event3, with: callback3
|
67
|
+
end
|
68
|
+
|
69
|
+
after(:each) { Flirt.enable }
|
70
|
+
|
71
|
+
describe "when a single event is disabled" do
|
72
|
+
|
73
|
+
it "disables just that event" do
|
74
|
+
Flirt.disable only: :pancake_fried
|
75
|
+
expect(listener).not_to receive(callback)
|
76
|
+
expect(listener).to receive(callback2).with(response)
|
77
|
+
expect(listener).to receive(callback3).with(response)
|
78
|
+
Flirt.publish event, response
|
79
|
+
Flirt.publish event2, response
|
80
|
+
Flirt.publish event3, response
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
|
85
|
+
describe "when multiple events are disabled" do
|
86
|
+
|
87
|
+
before(:each) { Flirt.disable only: [:pancake_fried, :topping_added] }
|
88
|
+
|
89
|
+
it "disables those events" do
|
90
|
+
expect(listener).not_to receive(callback)
|
91
|
+
expect(listener).not_to receive(callback2)
|
92
|
+
expect(listener).to receive(callback3).with(response)
|
93
|
+
Flirt.publish event, response
|
94
|
+
Flirt.publish event2, response
|
95
|
+
Flirt.publish event3, response
|
96
|
+
end
|
97
|
+
|
98
|
+
it "forgets those events after a call to #enable" do
|
99
|
+
Flirt.enable
|
100
|
+
expect(listener).to receive(callback)
|
101
|
+
expect(listener).to receive(callback2).with(response)
|
102
|
+
expect(listener).to receive(callback3).with(response)
|
103
|
+
Flirt.publish event, response
|
104
|
+
Flirt.publish event2, response
|
105
|
+
Flirt.publish event3, response
|
106
|
+
end
|
107
|
+
|
108
|
+
|
109
|
+
it "forgets those events after a call to #disable" do
|
110
|
+
Flirt.disable
|
111
|
+
expect(listener).not_to receive(callback)
|
112
|
+
expect(listener).not_to receive(callback2).with(response)
|
113
|
+
expect(listener).not_to receive(callback3).with(response)
|
114
|
+
Flirt.publish event, response
|
115
|
+
Flirt.publish event2, response
|
116
|
+
Flirt.publish event3, response
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "when a single event is enabled" do
|
121
|
+
|
122
|
+
it "enables just that event" do
|
123
|
+
Flirt.enable only: :pancake_fried
|
124
|
+
expect(listener).to receive(callback)
|
125
|
+
expect(listener).not_to receive(callback2).with(response)
|
126
|
+
expect(listener).not_to receive(callback3).with(response)
|
127
|
+
Flirt.publish event, response
|
128
|
+
Flirt.publish event2, response
|
129
|
+
Flirt.publish event3, response
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
133
|
+
|
134
|
+
|
135
|
+
describe "when multiple events are enabled" do
|
136
|
+
|
137
|
+
before(:each) { Flirt.enable only: [:pancake_fried, :topping_added] }
|
138
|
+
it "enables those events" do
|
139
|
+
Flirt.enable only: [:pancake_fried, :topping_added]
|
140
|
+
expect(listener). to receive(callback)
|
141
|
+
expect(listener). to receive(callback2).with(response)
|
142
|
+
expect(listener).not_to receive(callback3).with(response)
|
143
|
+
Flirt.publish event, response
|
144
|
+
Flirt.publish event2, response
|
145
|
+
Flirt.publish event3, response
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
it "forgets those events after a call to #enable" do
|
150
|
+
Flirt.enable
|
151
|
+
expect(listener).to receive(callback)
|
152
|
+
expect(listener).to receive(callback2).with(response)
|
153
|
+
expect(listener).to receive(callback3).with(response)
|
154
|
+
Flirt.publish event, response
|
155
|
+
Flirt.publish event2, response
|
156
|
+
Flirt.publish event3, response
|
157
|
+
end
|
158
|
+
|
159
|
+
|
160
|
+
it "forgets those events after a call to #disable" do
|
161
|
+
Flirt.disable
|
162
|
+
expect(listener).not_to receive(callback)
|
163
|
+
expect(listener).not_to receive(callback2).with(response)
|
164
|
+
expect(listener).not_to receive(callback3).with(response)
|
165
|
+
Flirt.publish event, response
|
166
|
+
Flirt.publish event2, response
|
167
|
+
Flirt.publish event3, response
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
|
53
173
|
describe "when cleared" do
|
54
174
|
|
55
175
|
let(:callback2) { :respond2 }
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flirt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Randles-Dunkley
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.2'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: byebug
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '4.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '4.0'
|
55
69
|
description: " Provides a single point for the publication and subscription of events,
|
56
70
|
promoting extreme decoupling. "
|
57
71
|
email:
|