active_model_listener 0.2.4 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,5 +1,6 @@
1
1
  2010-05-14
2
- - fixed annoying 'activerecord' deprecation warning
2
+ - fixed annoying 'activerecord' deprecation warning (thanks to Todd Persen)
3
+ - ActiveModelListener.listeners << now takes a string to play well with Rails in development mode (Peter Jaros)
3
4
 
4
5
  2009-10-26
5
6
  - you no longer have to define all 3 callback methods in callback classes
data/README.md CHANGED
@@ -4,13 +4,6 @@ Simple, global ActiveRecord event observers, using a middleware architecture, th
4
4
 
5
5
  ## Installation
6
6
 
7
- The gem is hosted at gemcutter. You can either add gemcutter as a source, or you can make gemcutter your default source (recommended):
8
-
9
- gem install gemcutter
10
- gem tumble
11
-
12
- Then, install it like any other gem:
13
-
14
7
  gem install active_model_listener
15
8
 
16
9
  ## Usage
@@ -28,32 +21,28 @@ Add the listeners to the ActiveModelListener in an initializer:
28
21
  # config/initializers/active_model_listener.rb
29
22
  ActiveModelListener.listeners << ActivityFeedListener
30
23
 
31
- Then, create a listener class that defines methods for after_create, after_update and after_destroy:
24
+ NOTE: you can also use a string or symbol version of the class. The following are all equivalent:
25
+
26
+ ActiveModelListener.listeners << ActivityFeedListener
27
+ ActiveModelListener.listeners << "ActivityFeedListener"
28
+ ActiveModelListener.listeners << "activity_feed_listener"
29
+ ActiveModelListener.listeners << :activity_feed_listener
30
+
31
+ Then, create a listener class that defines methods for after_create, after_update and/or after_destroy:
32
32
 
33
33
  class ActivityFeedListener
34
34
  class << self
35
35
  def after_create(record)
36
- description = "#{record.class.name} was created"
37
- publish_activity_feed_items record, description
36
+ # do stuff
38
37
  end
39
38
 
40
39
  def after_update(record)
41
- description = "#{record.class.name} was updated"
42
- publish_activity_feed_items record, description
40
+ # do stuff
43
41
  end
44
42
 
45
43
  def after_destroy(record)
46
- description = "#{record.class.name} was deleted"
47
- publish_activity_feed_items record, description
48
- end
49
-
50
- def publish_activity_feed_items(record, description)
51
- record.activity_feed_item_subscribers.each do |subscriber|
52
- ActivityFeedItem.create :user => subscriber, :description => description
53
- end
44
+ # do stuff
54
45
  end
55
-
56
- private :publish_activity_feed_items
57
46
  end
58
47
  end
59
48
 
data/Rakefile CHANGED
@@ -8,7 +8,7 @@ begin
8
8
  gem.summary = %Q{Simple, global ActiveRecord event observers, using a middleware architecture, that can easily be turned on and off. Designed for audit trails, activity feeds and other app-level event handlers}
9
9
  gem.email = "jeff@zilkey.com"
10
10
  gem.homepage = "http://github.com/zilkey/active_model_listener"
11
- gem.authors = ["Jeff Dean"]
11
+ gem.authors = ["Jeff Dean", "Peter Jaros"]
12
12
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
13
13
  end
14
14
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.4
1
+ 0.2.5
@@ -5,10 +5,10 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{active_model_listener}
8
- s.version = "0.2.4"
8
+ s.version = "0.2.5"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Jeff Dean"]
11
+ s.authors = ["Jeff Dean", "Peter Jaros"]
12
12
  s.date = %q{2010-05-14}
13
13
  s.email = %q{jeff@zilkey.com}
14
14
  s.extra_rdoc_files = [
@@ -13,7 +13,8 @@ class ActiveModelListener
13
13
  method_name = "after_#{action}"
14
14
  self.listeners.each do |listener|
15
15
  without_listeners do
16
- listener.send method_name, object if listener.respond_to?(method_name)
16
+ listener_object = listener.to_s.classify.constantize
17
+ listener_object.send method_name, object if listener_object.respond_to?(method_name)
17
18
  end
18
19
  end
19
20
  end
@@ -4,8 +4,10 @@ class GenericListener
4
4
  def self.after_create(object)
5
5
  object.class.create
6
6
  end
7
+
7
8
  def self.after_update(object)
8
9
  end
10
+
9
11
  def self.after_destroy(object)
10
12
  end
11
13
  end
@@ -19,9 +21,6 @@ end
19
21
  class BarListener < GenericListener
20
22
  end
21
23
 
22
- class BazListener < GenericListener
23
- end
24
-
25
24
  describe ActiveModelListener do
26
25
  before do
27
26
  build_model :articles do
@@ -32,11 +31,14 @@ describe ActiveModelListener do
32
31
  end
33
32
 
34
33
  ActiveModelListener.listeners.clear
35
- ActiveModelListener.listeners << FooListener
36
- ActiveModelListener.listeners << BarListener
37
34
  end
38
35
 
39
36
  describe "with_listeners" do
37
+ before do
38
+ ActiveModelListener.listeners << FooListener
39
+ ActiveModelListener.listeners << BarListener
40
+ end
41
+
40
42
  it "only fires those listeners that are present" do
41
43
  FooListener.should_receive(:after_create)
42
44
  BarListener.should_not_receive(:after_create)
@@ -58,6 +60,11 @@ describe ActiveModelListener do
58
60
  end
59
61
 
60
62
  describe "without_listeners" do
63
+ before do
64
+ ActiveModelListener.listeners << FooListener
65
+ ActiveModelListener.listeners << BarListener
66
+ end
67
+
61
68
  it "fires no listeners" do
62
69
  FooListener.should_not_receive(:after_create)
63
70
  BarListener.should_not_receive(:after_create)
@@ -69,6 +76,11 @@ describe ActiveModelListener do
69
76
  end
70
77
 
71
78
  describe "callback methods" do
79
+ before do
80
+ ActiveModelListener.listeners << FooListener
81
+ ActiveModelListener.listeners << BarListener
82
+ end
83
+
72
84
  it "should turn off other listeners" do
73
85
  FooListener.should_receive(:after_create).once
74
86
  Article.create! :title => "foo"
@@ -81,7 +93,12 @@ describe ActiveModelListener do
81
93
  end
82
94
 
83
95
  describe "after create" do
84
- it "should fire off all wired up events" do
96
+ before do
97
+ ActiveModelListener.listeners << FooListener
98
+ ActiveModelListener.listeners << BarListener
99
+ end
100
+
101
+ it "should fire all wired up events" do
85
102
  FooListener.should_receive(:after_create)
86
103
  BarListener.should_receive(:after_create)
87
104
  Article.create! :title => "foo"
@@ -89,7 +106,12 @@ describe ActiveModelListener do
89
106
  end
90
107
 
91
108
  describe "after update" do
92
- it "should fire off all wired up events" do
109
+ before do
110
+ ActiveModelListener.listeners << FooListener
111
+ ActiveModelListener.listeners << BarListener
112
+ end
113
+
114
+ it "should fire all wired up events" do
93
115
  article = Article.create
94
116
  FooListener.should_receive(:after_update).with(article)
95
117
  BarListener.should_receive(:after_update).with(article)
@@ -98,7 +120,12 @@ describe ActiveModelListener do
98
120
  end
99
121
 
100
122
  describe "after destroy" do
101
- it "should fire off all wired up events" do
123
+ before do
124
+ ActiveModelListener.listeners << FooListener
125
+ ActiveModelListener.listeners << BarListener
126
+ end
127
+
128
+ it "should fire all wired up events" do
102
129
  article = Article.create
103
130
  FooListener.should_receive(:after_destroy).with(article)
104
131
  BarListener.should_receive(:after_destroy).with(article)
@@ -108,11 +135,10 @@ describe ActiveModelListener do
108
135
 
109
136
  describe "a listener with missing methods" do
110
137
  before do
111
- ActiveModelListener.listeners.clear
112
138
  ActiveModelListener.listeners << SimpleListener
113
139
  end
114
-
115
- it "should not fire off the missing methods" do
140
+
141
+ it "should not fire the missing methods" do
116
142
  article = Article.create
117
143
  proc do
118
144
  article.destroy
@@ -120,4 +146,25 @@ describe ActiveModelListener do
120
146
  end
121
147
  end
122
148
 
149
+ describe "a listener with missing methods" do
150
+ before do
151
+ ActiveModelListener.listeners << SimpleListener
152
+ end
153
+
154
+ it "should not fire the missing methods" do
155
+ article = Article.create
156
+ proc do
157
+ article.destroy
158
+ end.should_not raise_error
159
+ end
160
+ end
161
+
162
+ ["FooListener", :foo_listener, "foo_listener"].each do |name|
163
+ it "work when specifying with a format like #{name}" do
164
+ ActiveModelListener.listeners << name
165
+ FooListener.should_receive(:after_create)
166
+ Article.create
167
+ end
168
+ end
169
+
123
170
  end
metadata CHANGED
@@ -5,11 +5,12 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 4
9
- version: 0.2.4
8
+ - 5
9
+ version: 0.2.5
10
10
  platform: ruby
11
11
  authors:
12
12
  - Jeff Dean
13
+ - Peter Jaros
13
14
  autorequire:
14
15
  bindir: bin
15
16
  cert_chain: []