mongoid-publishable 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,17 +15,35 @@ module Mongoid
15
15
  end
16
16
 
17
17
  module ClassMethods
18
+ # setter for the callbacks
19
+ def after_publish_callbacks=(values)
20
+ @after_publish_callbacks = CallbackCollection.new(values)
21
+ end
22
+
18
23
  # returns the list of callbacks
19
24
  def after_publish_callbacks
20
25
  @after_publish_callbacks ||= CallbackCollection.new
21
26
  end
22
27
 
28
+ def add_after_publish_callback(callback)
29
+ after_publish_callbacks << callback
30
+ subclasses.each do |subclass|
31
+ subclass.add_after_publish_callback(callback)
32
+ end
33
+ end
34
+
23
35
  # adds a callback to the list
24
36
  def after_publish(*args, &block)
25
37
  Callback.new(*args, &block).tap do |callback|
26
- after_publish_callbacks << callback
38
+ add_after_publish_callback(callback)
27
39
  end
28
40
  end
41
+
42
+ # pass the callbacks down to the sub-class
43
+ def inherited(subclass)
44
+ subclass.after_publish_callbacks = after_publish_callbacks
45
+ super
46
+ end
29
47
  end
30
48
 
31
49
  module InstanceMethods
@@ -1,5 +1,5 @@
1
1
  module Mongoid
2
2
  module Publishable
3
- VERSION = "0.0.1"
3
+ VERSION = "0.0.2"
4
4
  end
5
5
  end
@@ -9,6 +9,12 @@ describe Mongoid::Publishable::Callbacks do
9
9
  CallbackableObject
10
10
  end
11
11
 
12
+ before(:each) do
13
+ [CallbackableObject, CallbackableSubobject].each do |klass|
14
+ klass.after_publish_callbacks.replace []
15
+ end
16
+ end
17
+
12
18
  describe "::after_publish_callbacks" do
13
19
  it "should return an object that responds to #process" do
14
20
  expect(subject.after_publish_callbacks).to respond_to :process
@@ -17,7 +23,6 @@ describe Mongoid::Publishable::Callbacks do
17
23
 
18
24
  describe "::after_publish" do
19
25
  it "should increment the callbacks by 1" do
20
- subject.after_publish_callbacks.replace []
21
26
  expect(subject.after_publish_callbacks.size).to eq 0
22
27
  subject.after_publish(:method_name)
23
28
  expect(subject.after_publish_callbacks.size).to eq 1
@@ -34,11 +39,35 @@ describe Mongoid::Publishable::Callbacks do
34
39
  callback = subject.after_publish(:method_name)
35
40
  expect(callback).to respond_to :process
36
41
  end
42
+
43
+ it "should be inherited by any sub-classes" do
44
+ expect(CallbackableSubobject.after_publish_callbacks.size).to eq 0
45
+ CallbackableObject.after_publish(:method_name)
46
+ expect(CallbackableSubobject.after_publish_callbacks.size).to eq 1
47
+ end
37
48
  end
38
49
 
39
50
  end # class
40
51
 
41
- context "an instance class that's included Mongoid::Publishable::Callbacks" do
52
+ context "a sub-class of a class that's included Mongoid::Publishable::Callbacks" do
53
+
54
+ before(:each) do
55
+ [CallbackableObject, CallbackableSubobject].each do |klass|
56
+ klass.after_publish_callbacks.replace []
57
+ end
58
+ end
59
+
60
+ describe "defining a callback" do
61
+ it "should not be defined on the parent class" do
62
+ expect(CallbackableObject.after_publish_callbacks.size).to eq 0
63
+ CallbackableSubobject.after_publish(:method_name)
64
+ expect(CallbackableObject.after_publish_callbacks.size).to eq 0
65
+ end
66
+ end
67
+
68
+ end
69
+
70
+ context "an instance of a class that's included Mongoid::Publishable::Callbacks" do
42
71
 
43
72
  subject do
44
73
  CallbackableObject.new
@@ -1,6 +1,6 @@
1
1
  require "mongoid/publishable/callbacks"
2
2
 
3
3
  class CallbackableObject
4
- def self.after_save(*args); end
4
+ include Mongoid::Document
5
5
  include Mongoid::Publishable::Callbacks
6
6
  end
@@ -0,0 +1,2 @@
1
+ class CallbackableSubobject < CallbackableObject
2
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid-publishable
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:
@@ -129,6 +129,7 @@ files:
129
129
  - spec/spec_helper.rb
130
130
  - spec/support/env.rb
131
131
  - spec/support/models/callbackable_object.rb
132
+ - spec/support/models/callbackable_subobject.rb
132
133
  - spec/support/models/publishable_object.rb
133
134
  - spec/support/models/publisher.rb
134
135
  - spec/support/models/queuing_controller.rb
@@ -168,6 +169,7 @@ test_files:
168
169
  - spec/spec_helper.rb
169
170
  - spec/support/env.rb
170
171
  - spec/support/models/callbackable_object.rb
172
+ - spec/support/models/callbackable_subobject.rb
171
173
  - spec/support/models/publishable_object.rb
172
174
  - spec/support/models/publisher.rb
173
175
  - spec/support/models/queuing_controller.rb