mongoid-publishable 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mongoid/publishable/callbacks.rb +3 -0
- data/lib/mongoid/publishable/unpublished_object.rb +4 -4
- data/lib/mongoid/publishable/version.rb +1 -1
- data/spec/mongoid/publishable/unpublished_object_spec.rb +35 -0
- data/spec/support/models/callbackable_subobject.rb +2 -0
- data/spec/support/models/nested_publishable_object.rb +9 -0
- data/spec/support/mongoid.rb +3 -0
- data/spec/support/mongoid.yml +6 -0
- metadata +7 -1
@@ -25,8 +25,11 @@ module Mongoid
|
|
25
25
|
@after_publish_callbacks ||= CallbackCollection.new
|
26
26
|
end
|
27
27
|
|
28
|
+
# add the callback to the collection
|
28
29
|
def add_after_publish_callback(callback)
|
30
|
+
# add it to this object's collection
|
29
31
|
after_publish_callbacks << callback
|
32
|
+
# add it to the subclasses collections too
|
30
33
|
subclasses.each do |subclass|
|
31
34
|
subclass.add_after_publish_callback(callback)
|
32
35
|
end
|
@@ -25,8 +25,8 @@ module Mongoid
|
|
25
25
|
MultiJson.load(@serialized_data)
|
26
26
|
end
|
27
27
|
|
28
|
-
def respond_to_missing?(method)
|
29
|
-
source_object.respond_to?(method)
|
28
|
+
def respond_to_missing?(method, include_private = false)
|
29
|
+
source_object.respond_to?(method) || super
|
30
30
|
end
|
31
31
|
|
32
32
|
def method_missing(method, *args, &block)
|
@@ -71,7 +71,7 @@ module Mongoid
|
|
71
71
|
result = {
|
72
72
|
embedded: {
|
73
73
|
association: parent_relation.inverse_of,
|
74
|
-
embedded: result,
|
74
|
+
embedded: result && result[:embedded],
|
75
75
|
id: object.id
|
76
76
|
}
|
77
77
|
}
|
@@ -79,7 +79,7 @@ module Mongoid
|
|
79
79
|
object = object._parent
|
80
80
|
end
|
81
81
|
# when at the top level, store the class/id/result
|
82
|
-
result = { class_name: object.class.name, id: object.id, embedded: result }
|
82
|
+
result = { class_name: object.class.name, id: object.id, embedded: result && result[:embedded] }
|
83
83
|
# convert the result to JSON
|
84
84
|
MultiJson.dump(result)
|
85
85
|
end
|
@@ -4,6 +4,12 @@ require "mongoid/publishable/unpublished_object"
|
|
4
4
|
|
5
5
|
describe Mongoid::Publishable::UnpublishedObject do
|
6
6
|
let(:model) { PublishableObject.new }
|
7
|
+
let(:parent_model) do
|
8
|
+
ParentPublishableObject.create
|
9
|
+
end
|
10
|
+
let(:nested_model) do
|
11
|
+
parent_model.nested_objects.build
|
12
|
+
end
|
7
13
|
|
8
14
|
describe "::deserialize_from_session" do
|
9
15
|
it "should initialize with data" do
|
@@ -56,6 +62,35 @@ describe Mongoid::Publishable::UnpublishedObject do
|
|
56
62
|
expect(json["class_name"]).to eq model.class.name
|
57
63
|
expect(json["id"].to_s).to eq model.id.to_s
|
58
64
|
end
|
65
|
+
|
66
|
+
it "should deserialise back into the object" do
|
67
|
+
model.save
|
68
|
+
data = subject.serialize_for_session
|
69
|
+
reloaded_subject = subject.class.deserialize_from_session(data)
|
70
|
+
expect(reloaded_subject.source_object).to eq subject.source_object
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "with a nested model" do
|
75
|
+
subject do
|
76
|
+
Mongoid::Publishable::UnpublishedObject.new(model: nested_model)
|
77
|
+
end
|
78
|
+
|
79
|
+
it "should return a string of JSON" do
|
80
|
+
json = MultiJson.load(subject.serialize_for_session)
|
81
|
+
expect(json["class_name"]).to eq nested_model._parent.class.name
|
82
|
+
expect(json["id"].to_s).to eq nested_model._parent.id.to_s
|
83
|
+
expect(json["embedded"]["id"]).to eq nested_model.id.to_s
|
84
|
+
expect(json["embedded"]["association"]).to eq "nested_objects"
|
85
|
+
expect(json["embedded"]["embedded"]).to be_nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should deserialise back into the object" do
|
89
|
+
nested_model.save
|
90
|
+
data = subject.serialize_for_session
|
91
|
+
reloaded_subject = subject.class.deserialize_from_session(data)
|
92
|
+
expect(reloaded_subject.source_object).to eq subject.source_object
|
93
|
+
end
|
59
94
|
end
|
60
95
|
|
61
96
|
context "with data" do
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require_relative "publishable_object"
|
2
|
+
|
3
|
+
class ParentPublishableObject < PublishableObject
|
4
|
+
embeds_many :nested_objects, class_name: "NestedPublishableObject"
|
5
|
+
end
|
6
|
+
|
7
|
+
class NestedPublishableObject < PublishableObject
|
8
|
+
embedded_in :parent_publishable, class_name: "ParentPublishableObject", inverse_of: :nested_objects
|
9
|
+
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.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -130,9 +130,12 @@ files:
|
|
130
130
|
- spec/support/env.rb
|
131
131
|
- spec/support/models/callbackable_object.rb
|
132
132
|
- spec/support/models/callbackable_subobject.rb
|
133
|
+
- spec/support/models/nested_publishable_object.rb
|
133
134
|
- spec/support/models/publishable_object.rb
|
134
135
|
- spec/support/models/publisher.rb
|
135
136
|
- spec/support/models/queuing_controller.rb
|
137
|
+
- spec/support/mongoid.rb
|
138
|
+
- spec/support/mongoid.yml
|
136
139
|
homepage: https://github.com/ryantownsend/mongoid-publishable
|
137
140
|
licenses: []
|
138
141
|
post_install_message:
|
@@ -170,6 +173,9 @@ test_files:
|
|
170
173
|
- spec/support/env.rb
|
171
174
|
- spec/support/models/callbackable_object.rb
|
172
175
|
- spec/support/models/callbackable_subobject.rb
|
176
|
+
- spec/support/models/nested_publishable_object.rb
|
173
177
|
- spec/support/models/publishable_object.rb
|
174
178
|
- spec/support/models/publisher.rb
|
175
179
|
- spec/support/models/queuing_controller.rb
|
180
|
+
- spec/support/mongoid.rb
|
181
|
+
- spec/support/mongoid.yml
|