signals 1.0.0 → 1.1.0

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: d0a17dcf963e613b1958719ee6335e765e1f4233
4
- data.tar.gz: f322c5f49706eb819a44e39a8bb54211bf7fc49b
3
+ metadata.gz: f4c85e1c8bbac32c7a94627bd21b1b4c8e4abae5
4
+ data.tar.gz: 7f8da72aa990368a5c347d4360cfe0fa537a70b6
5
5
  SHA512:
6
- metadata.gz: c6317c3d341b4fd50be0eaf0ef67e5ce8bbab4e1bb99ab60c4a4fa21dbe27d3d3bf6efbc57831b0ca82bb31572dd7be9b020d4ebcc8a3524fe403c4b425de9e0
7
- data.tar.gz: e20efc2de3708bbf8e53ba7a574dd353799dfd0d58d51787f16e895844287c4f94000ecbbe61a4c142bccb4180841d608a2e2e724804f52ceabef8bf0778eccb
6
+ metadata.gz: 58e800ed2f583788265d2dde09aaae317ccc12fb262d9fed67abbfa26d046df1cfba69716f679c6239bdbb928043fc3c69e372b69a795173f83e2de1e37fb33d
7
+ data.tar.gz: 84a3b7c9048dc56c705b17a6521b508b7175b05db82625d43408c9da464d069995227a6d1d7ccd3bd8ad0802f4106caa0584d19f96dbd7f2875e8f00d7cc5582
data/README.md CHANGED
@@ -1,8 +1,11 @@
1
1
  # Signals
2
2
 
3
- A light weight publish / subscribe. It is similar to how the gem Wisper works
4
- but without extra functionality. This library assumes nothing and concurrency is
5
- not a priortiy.
3
+ [![Code Climate](https://codeclimate.com/github/warmwaffles/signals.png)](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 (`git checkout -b my-new-feature`)
63
- 3. Commit your changes (`git commit -am 'Add some feature'`)
64
- 4. Push to the branch (`git push origin my-new-feature`)
65
- 5. Create new Pull Request
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
@@ -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
@@ -104,6 +104,9 @@ module Signals
104
104
  events.include?(event)
105
105
  end
106
106
 
107
+ # Get actions for a specific event
108
+ # @param [Symbol] event
109
+ # @return [Array]
107
110
  def actions_for(event)
108
111
  self.events[event] || Array.new
109
112
  end
@@ -1,3 +1,3 @@
1
1
  module Signals
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
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.0.0
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-03 00:00:00.000000000 Z
11
+ date: 2013-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler