active_model_listener 0.2.4 → 0.2.5

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/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: []