signals 1.0.0 → 1.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 +84 -8
- data/lib/signals/publisher.rb +9 -4
- data/lib/signals/subscriber.rb +3 -0
- data/lib/signals/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f4c85e1c8bbac32c7a94627bd21b1b4c8e4abae5
|
4
|
+
data.tar.gz: 7f8da72aa990368a5c347d4360cfe0fa537a70b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58e800ed2f583788265d2dde09aaae317ccc12fb262d9fed67abbfa26d046df1cfba69716f679c6239bdbb928043fc3c69e372b69a795173f83e2de1e37fb33d
|
7
|
+
data.tar.gz: 84a3b7c9048dc56c705b17a6521b508b7175b05db82625d43408c9da464d069995227a6d1d7ccd3bd8ad0802f4106caa0584d19f96dbd7f2875e8f00d7cc5582
|
data/README.md
CHANGED
@@ -1,8 +1,11 @@
|
|
1
1
|
# Signals
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
3
|
+
[](https://codeclimate.com/github/warmwaffles/signals)
|
4
|
+
|
5
|
+
A light weight publish / subscribe. It is similar to how the Wisper gem works.
|
6
|
+
Except that listeners must include `Signals::Subscriber` so that it can have a
|
7
|
+
nice DSL and listen for specific events and trigger actions based on those
|
8
|
+
events. This library also has no external dependencies.
|
6
9
|
|
7
10
|
## Installation
|
8
11
|
|
@@ -54,12 +57,85 @@ coach.subscribe(center)
|
|
54
57
|
coach.on(:stop) do |c|
|
55
58
|
puts "I'm telling you to stop"
|
56
59
|
end
|
60
|
+
|
61
|
+
coach.broadcast(:v_formation, coach)
|
62
|
+
coach.broadcast(:hat_trick, coach)
|
63
|
+
coach.broadcast(:stop, coach)
|
64
|
+
```
|
65
|
+
|
66
|
+
## Rails Usage
|
67
|
+
|
68
|
+
```rb
|
69
|
+
# app/controllers/something_controller.rb
|
70
|
+
class SomethingController < ApplicationController
|
71
|
+
# ...
|
72
|
+
def create
|
73
|
+
service = CreateSomething.new(something_params)
|
74
|
+
service.subscribe(AListener.new)
|
75
|
+
service.subscribe(AnotherListener.new)
|
76
|
+
service.on(:create_something_successful) do |something|
|
77
|
+
redirect_to something_path(something)
|
78
|
+
end
|
79
|
+
service.on(:create_something_failed) do |something|
|
80
|
+
@something = something
|
81
|
+
render action: 'new'
|
82
|
+
end
|
83
|
+
service.execute
|
84
|
+
end
|
85
|
+
# ...
|
86
|
+
end
|
87
|
+
```
|
88
|
+
|
89
|
+
```rb
|
90
|
+
# app/services/create_something.rb
|
91
|
+
class CreateSomething
|
92
|
+
include Signals::Publisher
|
93
|
+
|
94
|
+
def initialize(something_params={})
|
95
|
+
@something = Something.new(something_params)
|
96
|
+
end
|
97
|
+
|
98
|
+
def execute
|
99
|
+
if @something.save
|
100
|
+
broadcast(:create_something_successful, @something)
|
101
|
+
else
|
102
|
+
broadcast(:create_something_failed, @something)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
```
|
107
|
+
|
108
|
+
```rb
|
109
|
+
# app/listeners/a_listener.rb
|
110
|
+
class AListener
|
111
|
+
include Signals::Subscriber
|
112
|
+
|
113
|
+
listen_for :create_something_success => :enqueue_send_email
|
114
|
+
|
115
|
+
def enqueue_send_email
|
116
|
+
# queue it up to send an email
|
117
|
+
end
|
118
|
+
end
|
119
|
+
```
|
120
|
+
|
121
|
+
```rb
|
122
|
+
# app/listeners/another_listener.rb
|
123
|
+
class AnotherListener
|
124
|
+
include Signals::Subscriber
|
125
|
+
|
126
|
+
listen_for :create_something_failed => :log_failure
|
127
|
+
|
128
|
+
def log_failure(something)
|
129
|
+
Rails.logger.error "Something failed"
|
130
|
+
end
|
131
|
+
end
|
57
132
|
```
|
58
133
|
|
59
134
|
## Contributing
|
60
135
|
|
61
|
-
1. Fork it
|
62
|
-
2. Create your feature branch
|
63
|
-
3. Commit your changes
|
64
|
-
4.
|
65
|
-
5.
|
136
|
+
1. Fork it
|
137
|
+
2. Create your feature branch
|
138
|
+
3. Commit your changes
|
139
|
+
4. Write tests for those changes
|
140
|
+
5. Push the changes
|
141
|
+
6. Create new Pull Request
|
data/lib/signals/publisher.rb
CHANGED
@@ -3,13 +3,9 @@ module Signals
|
|
3
3
|
module Publisher
|
4
4
|
|
5
5
|
def self.included(base)
|
6
|
-
base.extend(ClassMethods)
|
7
6
|
base.send(:include, InstanceMethods)
|
8
7
|
end
|
9
8
|
|
10
|
-
module ClassMethods
|
11
|
-
end
|
12
|
-
|
13
9
|
module InstanceMethods
|
14
10
|
# Broadcasts an event to all of the subscribed listeners
|
15
11
|
# @return [void]
|
@@ -29,12 +25,21 @@ module Signals
|
|
29
25
|
end
|
30
26
|
|
31
27
|
# Subscribe a listener to the publisher
|
28
|
+
# @param [Object] listener
|
32
29
|
# @return [void]
|
33
30
|
def subscribe(listener)
|
34
31
|
listeners.add(listener)
|
35
32
|
nil
|
36
33
|
end
|
37
34
|
|
35
|
+
# Unsubscribe a listener from the publisher
|
36
|
+
# @param [Object] listener
|
37
|
+
# @return [void]
|
38
|
+
def unsubscribe(listener)
|
39
|
+
listeners.delete(listener)
|
40
|
+
nil
|
41
|
+
end
|
42
|
+
|
38
43
|
# All of the listeners subscribed to a publisher
|
39
44
|
# @return [Set] a unique set of listeners
|
40
45
|
def listeners
|
data/lib/signals/subscriber.rb
CHANGED
data/lib/signals/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: signals
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Johnston
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-07-
|
11
|
+
date: 2013-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|