mushroom 0.0.1 → 0.0.2
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 +89 -15
- data/lib/mushroom/subscriber.rb +10 -1
- data/lib/mushroom/version.rb +1 -1
- data/spec/mushroom/subscriber_spec.rb +15 -0
- metadata +5 -5
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Mushroom is a super simple wrapper around ActiveSupport Instrumentation introduced in Rails 3.
|
4
4
|
|
5
|
-
|
5
|
+
Mushroom allows any component of your application to trigger events which later get subscribed to by any
|
6
6
|
other component in your application.
|
7
7
|
|
8
8
|
The returned event can be used to handle follow up behaviour, profile running code, and event dispatch requests to
|
@@ -24,6 +24,8 @@ Or install it yourself as:
|
|
24
24
|
|
25
25
|
## Usage
|
26
26
|
|
27
|
+
**Simple example: Dispatch an event and receive it somewhere else**
|
28
|
+
|
27
29
|
```ruby
|
28
30
|
|
29
31
|
# app/models/server.rb
|
@@ -33,35 +35,107 @@ class Server
|
|
33
35
|
def run
|
34
36
|
notify :start #=> Dispatches a 'server:start' event with the current server instance as the event target.
|
35
37
|
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# lib/my_app/event_handler.rb
|
41
|
+
class EventHandler < Mushroom::Subscriber
|
42
|
+
events :start, :on => Server
|
43
|
+
|
44
|
+
def notify
|
45
|
+
# Handle event here
|
46
|
+
puts name #=> "server:start"
|
47
|
+
puts target #=> <Server id:1 ...>
|
48
|
+
puts duration #=> 0.001
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
Server.new.run
|
53
|
+
```
|
54
|
+
|
55
|
+
**Slightly more advanced example: Instrument a method running, and display its duration:**
|
36
56
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
#
|
43
|
-
def stop
|
57
|
+
```ruby
|
58
|
+
class Server
|
59
|
+
include Mushroom
|
60
|
+
|
61
|
+
def start
|
44
62
|
sleep 1
|
45
63
|
end
|
46
|
-
instrument :
|
64
|
+
instrument :start
|
47
65
|
end
|
48
66
|
|
49
|
-
# lib/
|
50
|
-
class EventHandler <
|
51
|
-
events :start, :
|
52
|
-
events :cleanup, :on => ServerCache
|
67
|
+
# lib/my_app/event_handler.rb
|
68
|
+
class EventHandler < Mushroom::Subscriber
|
69
|
+
events :start, :on => Server
|
53
70
|
|
54
71
|
def notify
|
55
72
|
# Handle event here
|
56
73
|
puts name #=> "server:start"
|
57
74
|
puts target #=> <Server id:1 ...>
|
58
|
-
puts duration #=> 0
|
75
|
+
puts duration #=> 1000.0
|
59
76
|
end
|
60
77
|
end
|
61
78
|
|
62
|
-
Server.new.
|
79
|
+
Server.new.start
|
80
|
+
```
|
81
|
+
|
82
|
+
**Subscribing to multiple events:**
|
83
|
+
|
84
|
+
```ruby
|
85
|
+
# lib/my_app/event_handler.rb
|
86
|
+
class EventHandler < Mushroom::Subscriber
|
87
|
+
events :start, :stop, :destroy, :on => Server
|
88
|
+
end
|
63
89
|
```
|
64
90
|
|
91
|
+
**Subscribing events to multiple targets**
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
# lib/my_app/event_handler.rb
|
95
|
+
class EventHandler < Mushroom::Subscriber
|
96
|
+
events :create, :destroy, :on => [Server, User, Account]
|
97
|
+
end
|
98
|
+
```
|
99
|
+
|
100
|
+
**Passing extra parameters to the subscriber**
|
101
|
+
|
102
|
+
```ruby
|
103
|
+
class Server
|
104
|
+
include Mushroom
|
105
|
+
|
106
|
+
def start
|
107
|
+
notify :start, Time.now
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# lib/my_app/event_handler.rb
|
112
|
+
class EventHandler < Mushroom::Subscriber
|
113
|
+
events :start, :on => Server
|
114
|
+
|
115
|
+
def notify(started_at)
|
116
|
+
puts started_at #=> 2012-04-26 16:56:54 +1000
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
Server.new.start
|
121
|
+
```
|
122
|
+
|
123
|
+
Remember to declare all the arguments you expect to be received in `#notify` or you won't receive them all. You can also get the same
|
124
|
+
arguments from the `#payload` method.
|
125
|
+
|
126
|
+
## Subscriber API
|
127
|
+
|
128
|
+
The following methods are available on your Subscriber subclass:
|
129
|
+
|
130
|
+
```ruby
|
131
|
+
# payload
|
132
|
+
# name
|
133
|
+
# time
|
134
|
+
# transaction_id
|
135
|
+
# duration
|
136
|
+
```
|
137
|
+
|
138
|
+
|
65
139
|
## Contributing
|
66
140
|
|
67
141
|
1. Fork it
|
data/lib/mushroom/subscriber.rb
CHANGED
@@ -6,11 +6,20 @@ module Mushroom
|
|
6
6
|
|
7
7
|
attr_reader :event
|
8
8
|
delegate :payload, :name, :time, :transaction_id, :duration, :to => :event
|
9
|
-
|
9
|
+
|
10
10
|
def initialize(event)
|
11
11
|
@event = event
|
12
12
|
end
|
13
13
|
|
14
|
+
# The endpoint for notifications
|
15
|
+
def notify
|
16
|
+
raise NotImplementedError
|
17
|
+
end
|
18
|
+
|
19
|
+
def target
|
20
|
+
payload[:target]
|
21
|
+
end
|
22
|
+
|
14
23
|
class << self
|
15
24
|
|
16
25
|
# Public: Setter and getter for events
|
data/lib/mushroom/version.rb
CHANGED
@@ -96,6 +96,21 @@ describe Mushroom::Subscriber do
|
|
96
96
|
Server.new.notify(:start, {:payload => {:id => 123}}, Thread.current[:now])
|
97
97
|
end
|
98
98
|
|
99
|
+
it 'target points to the instance that triggered the event' do
|
100
|
+
$server = Server.new
|
101
|
+
|
102
|
+
class CustomHandler < Mushroom::Subscriber
|
103
|
+
events :start, :on => Server
|
104
|
+
|
105
|
+
def notify
|
106
|
+
target.should == $server
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
$server.notify(:start)
|
111
|
+
end
|
112
|
+
|
113
|
+
|
99
114
|
end
|
100
115
|
end
|
101
116
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mushroom
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-04-26 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: activesupport
|
16
|
-
requirement: &
|
16
|
+
requirement: &70109746263340 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 3.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70109746263340
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rspec
|
27
|
-
requirement: &
|
27
|
+
requirement: &70109746262600 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,7 +32,7 @@ dependencies:
|
|
32
32
|
version: 2.8.0
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70109746262600
|
36
36
|
description: Super simple events and instrumentation within your ruby app
|
37
37
|
email:
|
38
38
|
- ivanvanderbyl@me.com
|