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 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