delayed_job_shallow_mongoid 0.2.7 → 0.2.8
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/VERSION +1 -1
- data/delayed_job_shallow_mongoid.gemspec +2 -2
- data/lib/delayed/shallow_mongoid.rb +2 -1
- data/spec/delayed_job_shallow_mongoid_spec.rb +84 -64
- data/spec/spec_helper.rb +12 -1
- metadata +19 -19
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.8
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "delayed_job_shallow_mongoid"
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Joey Aghion"]
|
12
|
-
s.date = "
|
12
|
+
s.date = "2012-01-04"
|
13
13
|
s.description = "When the object or arg to a delayed_job is a Mongoid document, store only a small stub of the object instead of the full serialization."
|
14
14
|
s.email = "joey@aghion.com"
|
15
15
|
s.extra_rdoc_files = [
|
@@ -1,7 +1,8 @@
|
|
1
1
|
module Delayed
|
2
2
|
module ShallowMongoid
|
3
3
|
def self.dump(arg)
|
4
|
-
return arg unless arg.is_a?(::Mongoid::Document)
|
4
|
+
return arg unless arg.is_a?(::Mongoid::Document) && arg.persisted?
|
5
|
+
return arg if arg._updates.any? && !Delayed::Worker.delay_jobs
|
5
6
|
if arg.embedded?
|
6
7
|
ShallowMongoid::DocumentStub.new(arg._root.class, arg._root._id.to_s, selector_from(arg))
|
7
8
|
else
|
@@ -11,6 +11,7 @@ class ChildModel
|
|
11
11
|
end
|
12
12
|
class TestModel
|
13
13
|
include ::Mongoid::Document
|
14
|
+
field :title
|
14
15
|
embeds_many :child_models
|
15
16
|
end
|
16
17
|
|
@@ -34,86 +35,105 @@ describe Delayed::ShallowMongoid::DocumentStub do
|
|
34
35
|
end
|
35
36
|
|
36
37
|
describe ::Delayed::PerformableMethod do
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
context 'when saving job' do
|
42
|
-
it "should transform object into shallow version" do
|
38
|
+
context "with an unsaved document" do
|
39
|
+
it "should not transform an unsaved document" do
|
40
|
+
@model = TestModel.new
|
43
41
|
method = ::Delayed::PerformableMethod.new(@model, :to_s, [])
|
44
|
-
method.object.
|
45
|
-
method.object.id.should == @model._id.to_s
|
42
|
+
method.object.should_not be_a_kind_of(Delayed::ShallowMongoid::DocumentStub)
|
46
43
|
end
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
end
|
45
|
+
|
46
|
+
context "with a saved document" do
|
47
|
+
before(:each) do
|
48
|
+
@model = TestModel.create #new(:_id => ::BSON::ObjectId.new)
|
51
49
|
end
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
50
|
+
|
51
|
+
context 'when saving job' do
|
52
|
+
context 'when jobs are run immediately' do
|
53
|
+
before { ::Delayed::Worker.delay_jobs = false }
|
54
|
+
after { ::Delayed::Worker.delay_jobs = true }
|
55
|
+
it "should not transform if there are pending changes and jobs are run immediately" do
|
56
|
+
@model.title = "updated"
|
57
|
+
method = ::Delayed::PerformableMethod.new(@model, :to_s, [])
|
58
|
+
method.object.should_not be_a_kind_of(Delayed::ShallowMongoid::DocumentStub)
|
59
|
+
end
|
56
60
|
end
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
+
it "should transform object into shallow version" do
|
62
|
+
method = ::Delayed::PerformableMethod.new(@model, :to_s, [])
|
63
|
+
method.object.should be_a_kind_of(Delayed::ShallowMongoid::DocumentStub)
|
64
|
+
method.object.id.should == @model._id.to_s
|
61
65
|
end
|
62
|
-
it "should
|
63
|
-
|
64
|
-
|
66
|
+
it "should transform arg into shallow version" do
|
67
|
+
method = ::Delayed::PerformableMethod.new('test', :lines, [@model])
|
68
|
+
method.args.first.should be_a_kind_of(Delayed::ShallowMongoid::DocumentStub)
|
69
|
+
method.args.first.id.should == @model._id.to_s
|
65
70
|
end
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
+
context "with an embedded document" do
|
72
|
+
before(:each) do
|
73
|
+
@child = ChildModel.new(:_id => ::BSON::ObjectId.new)
|
74
|
+
@model.child_models.push @child
|
75
|
+
end
|
76
|
+
after(:each) do
|
77
|
+
@method.object.should be_a_kind_of(Delayed::ShallowMongoid::DocumentStub)
|
78
|
+
@method.object.id.should == @model.id.to_s
|
79
|
+
@method.object.klass.should == @model.class
|
80
|
+
end
|
81
|
+
it "should store the selector" do
|
82
|
+
@method = ::Delayed::PerformableMethod.new(@child, :to_s, [])
|
83
|
+
@method.object.selector.should == ['child_models', ['find', @child._id.to_s]]
|
84
|
+
end
|
85
|
+
it "should store the deeply nested selector" do
|
86
|
+
@grandchild = GrandchildModel.new(:_id => ::BSON::ObjectId.new)
|
87
|
+
@model.child_models.first.grandchild_models.push @grandchild
|
88
|
+
@method = ::Delayed::PerformableMethod.new(@grandchild, :to_s, [])
|
89
|
+
@method.object.selector.should == ['child_models', ['find', @child._id.to_s], 'grandchild_models', ['find', @grandchild._id.to_s]]
|
90
|
+
end
|
71
91
|
end
|
72
92
|
end
|
73
|
-
end
|
74
93
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
end
|
95
|
-
|
96
|
-
context "display_name" do
|
97
|
-
it "should return underlying class when a stub is being used" do
|
98
|
-
method = ::Delayed::PerformableMethod.new(@model, :to_s, [])
|
99
|
-
method.display_name.should == "TestModel[#{@model._id}]#to_s"
|
100
|
-
end
|
101
|
-
it "should return usual name when no stub is involved" do
|
102
|
-
method = ::Delayed::PerformableMethod.new(:test, :to_s, [])
|
103
|
-
method.display_name.should == "Symbol#to_s"
|
94
|
+
context 'when running job' do
|
95
|
+
it "should look up document" do
|
96
|
+
method = ::Delayed::PerformableMethod.new(@model, :to_s, [])
|
97
|
+
TestModel.should_receive(:find).with(@model._id.to_s).and_return(@model)
|
98
|
+
method.perform
|
99
|
+
end
|
100
|
+
it "should do nothing if document not found" do
|
101
|
+
method = ::Delayed::PerformableMethod.new(@model, :to_s, [])
|
102
|
+
error = ::Mongoid::Errors::DocumentNotFound.new(TestModel, @model._id)
|
103
|
+
TestModel.should_receive(:find).with(@model._id.to_s).and_raise(error)
|
104
|
+
method.perform.should be_true
|
105
|
+
end
|
106
|
+
it "should find embedded document" do
|
107
|
+
child = ChildModel.new(:_id => ::BSON::ObjectId.new)
|
108
|
+
@model.child_models.push child
|
109
|
+
method = ::Delayed::PerformableMethod.new(child, :to_s, [])
|
110
|
+
TestModel.should_receive(:find).with(@model._id.to_s).and_return(@model)
|
111
|
+
method.perform
|
112
|
+
end
|
104
113
|
end
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
114
|
+
|
115
|
+
context "display_name" do
|
116
|
+
it "should return underlying class when a stub is being used" do
|
117
|
+
method = ::Delayed::PerformableMethod.new(@model, :to_s, [])
|
118
|
+
method.display_name.should == "TestModel[#{@model._id}]#to_s"
|
119
|
+
end
|
120
|
+
it "should return usual name when no stub is involved" do
|
121
|
+
method = ::Delayed::PerformableMethod.new(:test, :to_s, [])
|
122
|
+
method.display_name.should == "Symbol#to_s"
|
123
|
+
end
|
124
|
+
it "should include selector when document is embedded" do
|
125
|
+
child = ChildModel.new(:_id => ::BSON::ObjectId.new)
|
126
|
+
@model.child_models.push child
|
127
|
+
method = ::Delayed::PerformableMethod.new(child, :to_s, [])
|
128
|
+
method.display_name.should == "TestModel[#{@model._id}].child_models.find(\"#{child._id}\")#to_s"
|
129
|
+
end
|
110
130
|
end
|
111
131
|
end
|
112
132
|
end
|
113
133
|
|
114
134
|
describe ::Delayed::PerformableMailer do
|
115
135
|
before do
|
116
|
-
@model = TestModel.
|
136
|
+
@model = TestModel.create
|
117
137
|
@email = mock('email', :deliver => true)
|
118
138
|
@mailer_class = mock('MailerClass', :signup => @email)
|
119
139
|
@mailer = ::Delayed::PerformableMailer.new(@mailer_class, :signup, [@model])
|
data/spec/spec_helper.rb
CHANGED
@@ -6,6 +6,17 @@ require 'action_mailer'
|
|
6
6
|
require 'mongoid'
|
7
7
|
require 'delayed_job_shallow_mongoid'
|
8
8
|
|
9
|
+
Mongoid.configure do |config|
|
10
|
+
name = "delayed_job_shallow_mongoid_test"
|
11
|
+
config.master = Mongo::Connection.new.db(name)
|
12
|
+
config.logger = Logger.new('/dev/null')
|
13
|
+
end
|
14
|
+
|
9
15
|
RSpec.configure do |config|
|
10
|
-
|
16
|
+
config.before(:each) do
|
17
|
+
Mongoid.master.collections.select {|c| c.name !~ /system/ }.each(&:drop)
|
18
|
+
end
|
19
|
+
config.after(:all) do
|
20
|
+
Mongoid.master.command({'dropDatabase' => 1})
|
21
|
+
end
|
11
22
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: delayed_job_shallow_mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.8
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2012-01-04 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: delayed_job
|
16
|
-
requirement: &
|
16
|
+
requirement: &70252554101280 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: 2.1.1
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70252554101280
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: mongoid
|
27
|
-
requirement: &
|
27
|
+
requirement: &70252554100560 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ~>
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: 2.0.2
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70252554100560
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: actionmailer
|
38
|
-
requirement: &
|
38
|
+
requirement: &70252554099840 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70252554099840
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: shoulda
|
49
|
-
requirement: &
|
49
|
+
requirement: &70252554098960 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *70252554098960
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: bundler
|
60
|
-
requirement: &
|
60
|
+
requirement: &70252554098280 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ~>
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.0.0
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *70252554098280
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: jeweler
|
71
|
-
requirement: &
|
71
|
+
requirement: &70252554097780 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ~>
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: 1.6.4
|
77
77
|
type: :development
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *70252554097780
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: rspec
|
82
|
-
requirement: &
|
82
|
+
requirement: &70252553963220 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *70252553963220
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: ruby-debug19
|
93
|
-
requirement: &
|
93
|
+
requirement: &70252553962740 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :development
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *70252553962740
|
102
102
|
description: When the object or arg to a delayed_job is a Mongoid document, store
|
103
103
|
only a small stub of the object instead of the full serialization.
|
104
104
|
email: joey@aghion.com
|
@@ -138,7 +138,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
138
138
|
version: '0'
|
139
139
|
segments:
|
140
140
|
- 0
|
141
|
-
hash:
|
141
|
+
hash: -213852032855460183
|
142
142
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
143
143
|
none: false
|
144
144
|
requirements:
|