mushroom 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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