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 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
- Muchroom allows any component of your application to trigger events which later get subscribed to by any
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
- # You can instrument methods inline.
38
- # This will trigger the server:stop event when you call #stop
39
- # and notify all subscribers to the stop event.
40
- #
41
- # The server:stop event #duration will be 1 second.
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 :stop
64
+ instrument :start
47
65
  end
48
66
 
49
- # lib/my\_app/event\_handler.rb
50
- class EventHandler < Muchroom::Subscriber
51
- events :start, :stop, :on => Server
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.001
75
+ puts duration #=> 1000.0
59
76
  end
60
77
  end
61
78
 
62
- Server.new.run
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Mushroom
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -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.1
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: &70190744237180 !ruby/object:Gem::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: *70190744237180
24
+ version_requirements: *70109746263340
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rspec
27
- requirement: &70190744236020 !ruby/object:Gem::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: *70190744236020
35
+ version_requirements: *70109746262600
36
36
  description: Super simple events and instrumentation within your ruby app
37
37
  email:
38
38
  - ivanvanderbyl@me.com