ventable 0.0.3 → 0.0.4
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.
- data/README.md +23 -13
- data/lib/ventable/event.rb +1 -1
- data/lib/ventable/version.rb +1 -1
- data/spec/ventable/ventable_spec.rb +5 -5
- metadata +1 -1
data/README.md
CHANGED
@@ -24,8 +24,8 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
1. Create your own plain ruby Event class that optionally carries some data important to the event. Include module ```Ventable::Event```.
|
26
26
|
2. Create one or more observers. Observer can be any class that implements event handler method as a class method, such as a
|
27
|
-
generic method ```self.
|
28
|
-
callback event would be ```self.
|
27
|
+
generic method ```self.handle(event)``` or a more specific method mapped to the event name: say for event UserRegistered the
|
28
|
+
callback event would be ```self.handle_user_registered(event)```
|
29
29
|
3. Register your observers with the event using ```notifies``` event method, or register groups using ```group``` method, and then
|
30
30
|
use ```notify``` with options ```inside: :group_name```
|
31
31
|
4. Instantiate your event class (optionally with some data), and call ```fire!``` method.
|
@@ -48,7 +48,7 @@ end
|
|
48
48
|
|
49
49
|
# This class is an observer, interested in WakeUpEvents.
|
50
50
|
class SleepingPerson
|
51
|
-
def self.
|
51
|
+
def self.handle_alarm_sound event
|
52
52
|
self.wake_up
|
53
53
|
puts "snoozing at #{event.wakeup_time}"
|
54
54
|
self.snooze(5)
|
@@ -64,10 +64,10 @@ AlarmSoundEvent.new(Date.new).fire!
|
|
64
64
|
|
65
65
|
## Using #configure and groups
|
66
66
|
|
67
|
-
Events can be configured to call observers in groups, with an optional block around it.
|
67
|
+
Events can be configured to call observers in groups, with an optional block around it. Using groups
|
68
|
+
allows you (as in this example) wrap some observers in a transaction, and control the order of notification.
|
68
69
|
|
69
70
|
```ruby
|
70
|
-
|
71
71
|
transaction = ->(b){
|
72
72
|
ActiveRecord::Base.transaction do
|
73
73
|
b.call
|
@@ -90,7 +90,6 @@ SomeEvent.configure do
|
|
90
90
|
# perform block
|
91
91
|
end
|
92
92
|
|
93
|
-
|
94
93
|
# this observer gets notified after all observers inside :transactions are notified
|
95
94
|
notifies AnotherObserverClass
|
96
95
|
|
@@ -102,22 +101,33 @@ end
|
|
102
101
|
SomeEvent.new.fire!
|
103
102
|
```
|
104
103
|
|
104
|
+
## Callback Method Name
|
105
|
+
|
106
|
+
When the observer is notified, Ventable library will call a class method on your observer, with the name determined
|
107
|
+
using the following logic:
|
108
|
+
|
109
|
+
1. If your event defines ```EventClass.ventable_callback_method_name``` method, it's return value is used as a method name.
|
110
|
+
2. If not, your event's fully qualified class name is converted to a method name with underscrores. This method name
|
111
|
+
always begings with ```handle_```. For example, a class ```User::RegistrationEvent``` will generate callback
|
112
|
+
method name ```ObserverClass.handle_user__registration(event)``` (note that '::' is converted to two underscores).
|
113
|
+
3. If neither method is found in the observer, a generic ```ObserverClass.handle(event)``` method is called.
|
114
|
+
|
105
115
|
## Guidelines for Using Ventable with Rails
|
106
116
|
|
107
117
|
You should start by defining your event library for your application (list of events
|
108
118
|
that are important to you), you can place these files anywhere you like, such as
|
109
119
|
```lib/events``` or ```app/events```, etc.
|
110
120
|
|
111
|
-
It is recommended to configure all events and observers in the ```event_initializer.rb``` file,
|
112
|
-
inside the ```config/ininitalizers``` folder.
|
121
|
+
It is recommended to ```configure``` all events and their observers in the ```event_initializer.rb``` file,
|
122
|
+
inside the ```config/ininitalizers``` folder. You may need to require your events in that file also.
|
113
123
|
|
114
124
|
When your event is tied to a creation of a "first class objects", such as user registration,
|
115
125
|
it is recommended to create the User record first, commit it to the database, and then throw
|
116
|
-
a ```
|
117
|
-
their respective classes. For example, if you need to send email to the user, have a ```Mailer```
|
118
|
-
class observe the ```UserRegisteredEvent```, and so all the mailing logic can live
|
119
|
-
class, instead of, say, registration controller
|
120
|
-
wraps the User instance, or any other useful data necessary.
|
126
|
+
a ```UserRegisteredEvent.new(user).fire!```, and have all subsequent logic broeken into
|
127
|
+
their respective classes. For example, if you need to send an email to the user, have a ```Mailer```
|
128
|
+
class observe the ```UserRegisteredEvent```, and so all the mailing logic can live inside the ```Mailer```
|
129
|
+
class, instead of, say, registration controller directly calling ```Mailer.deliver_user_registration!(user)```.
|
130
|
+
The callback method will receive the event, that wraps the User instance, or any other useful data necessary.
|
121
131
|
|
122
132
|
## Further Discussion
|
123
133
|
|
data/lib/ventable/event.rb
CHANGED
@@ -88,7 +88,7 @@ module ::Ventable
|
|
88
88
|
self.ventable_callback_method_name
|
89
89
|
else
|
90
90
|
target = self
|
91
|
-
method = "handle_" + target.name.gsub(/::/,'__').underscore.gsub(/_event/, '')
|
91
|
+
method = "handle_" + target.name.gsub(/::/,'__').underscore.gsub(/_event/, '')
|
92
92
|
method.to_sym
|
93
93
|
end
|
94
94
|
end
|
data/lib/ventable/version.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'ventable'
|
2
|
-
|
2
|
+
|
3
3
|
describe Ventable do
|
4
4
|
before do
|
5
5
|
class TestEvent
|
@@ -66,7 +66,7 @@ describe Ventable do
|
|
66
66
|
end
|
67
67
|
end
|
68
68
|
class TestEventObserver
|
69
|
-
def self.
|
69
|
+
def self.handle_test event
|
70
70
|
event.set_flag!
|
71
71
|
end
|
72
72
|
end
|
@@ -138,9 +138,9 @@ describe Ventable do
|
|
138
138
|
end
|
139
139
|
|
140
140
|
it "should properly set the callback method name" do
|
141
|
-
SomeAwesomeEvent.default_callback_method.should == :
|
142
|
-
Blah::AnotherSweetEvent.default_callback_method.should == :
|
143
|
-
SomeOtherStuffHappened.default_callback_method.should == :
|
141
|
+
SomeAwesomeEvent.default_callback_method.should == :handle_some_awesome
|
142
|
+
Blah::AnotherSweetEvent.default_callback_method.should == :handle_blah__another_sweet
|
143
|
+
SomeOtherStuffHappened.default_callback_method.should == :handle_some_other_stuff_happened
|
144
144
|
ClassWithCustomCallbackMethodEvent.default_callback_method.should == :handle_my_special_event
|
145
145
|
end
|
146
146
|
end
|