mongo_adaptor 0.0.4 → 0.0.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/lib/mongo_adaptor.rb +3 -0
- data/lib/mongo_adaptor/version.rb +1 -1
- data/spec/mongo_adaptor_spec.rb +33 -16
- metadata +4 -4
data/lib/mongo_adaptor.rb
CHANGED
@@ -17,6 +17,9 @@ class MongoAdaptor
|
|
17
17
|
def insert(model)
|
18
18
|
@collection.insert( process(model), { :safe => true } )
|
19
19
|
end
|
20
|
+
def upsert(model, query = { "_id" => model.id })
|
21
|
+
@collection.update( query, { "$set" => process(model) }, { :safe => true, :upsert => true } )
|
22
|
+
end
|
20
23
|
def update(model)
|
21
24
|
@collection.update( { "_id" => model.id }, { "$set" => process(model) }, { :safe => true, :upsert => false } )
|
22
25
|
end
|
data/spec/mongo_adaptor_spec.rb
CHANGED
@@ -19,24 +19,33 @@ describe 'adapting structs into mongo' do
|
|
19
19
|
let(:adaptor) { MongoAdaptor.new 'test_collection', klass }
|
20
20
|
let(:collection) { Mongo::Configure.current.load.collection 'test_collection' }
|
21
21
|
|
22
|
-
describe '
|
22
|
+
describe 'with a new model' do
|
23
23
|
let(:model) { klass.new 'Test Model','Some Data','fake key' }
|
24
24
|
let(:data) { collection.find({}).to_a[-1] }
|
25
25
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
26
|
+
shared_examples_for 'new model' do
|
27
|
+
it 'changes the number of items in the collection' do
|
28
|
+
expect { subject }.to change { collection.size }.by(1)
|
29
|
+
end
|
30
|
+
it 'generates an _id, ignoring any set key' do
|
31
|
+
subject
|
32
|
+
data['_id'].should be_a BSON::ObjectId
|
33
|
+
data['id'].should be_nil
|
34
|
+
end
|
35
|
+
it 'sets my fields and values' do
|
36
|
+
subject
|
37
|
+
data['name'].should == 'Test Model'
|
38
|
+
data['other'].should == 'Some Data'
|
39
|
+
end
|
30
40
|
end
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
41
|
+
|
42
|
+
context 'inserting' do
|
43
|
+
subject { adaptor.insert model }
|
44
|
+
it_should_behave_like 'new model'
|
35
45
|
end
|
36
|
-
|
37
|
-
subject
|
38
|
-
|
39
|
-
data['other'].should == 'Some Data'
|
46
|
+
context 'upserting' do
|
47
|
+
subject { adaptor.upsert model, {} }
|
48
|
+
it_should_behave_like 'new model'
|
40
49
|
end
|
41
50
|
end
|
42
51
|
|
@@ -48,11 +57,9 @@ describe 'adapting structs into mongo' do
|
|
48
57
|
model.id = id
|
49
58
|
end
|
50
59
|
|
51
|
-
|
60
|
+
shared_examples_for 'modifying an existing model' do
|
52
61
|
let(:data) { collection.find({}).to_a[-1] }
|
53
62
|
|
54
|
-
subject { adaptor.update model }
|
55
|
-
|
56
63
|
it 'doesnt change the number of items in the collection' do
|
57
64
|
expect { subject }.to change { collection.size }.by(0)
|
58
65
|
end
|
@@ -67,6 +74,16 @@ describe 'adapting structs into mongo' do
|
|
67
74
|
end
|
68
75
|
end
|
69
76
|
|
77
|
+
describe 'to update it' do
|
78
|
+
subject { adaptor.update model }
|
79
|
+
it_should_behave_like 'modifying an existing model'
|
80
|
+
end
|
81
|
+
|
82
|
+
describe 'to upsert it' do
|
83
|
+
subject { adaptor.upsert model, { name: 'My Model' } }
|
84
|
+
it_should_behave_like 'modifying an existing model'
|
85
|
+
end
|
86
|
+
|
70
87
|
describe 'to fetch it' do
|
71
88
|
subject { adaptor.fetch({ :_id => id }) }
|
72
89
|
it { should be_a klass }
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo_adaptor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mongo
|
@@ -122,7 +122,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
122
|
version: '0'
|
123
123
|
segments:
|
124
124
|
- 0
|
125
|
-
hash:
|
125
|
+
hash: 3301762641973492072
|
126
126
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
127
|
none: false
|
128
128
|
requirements:
|
@@ -131,7 +131,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
131
|
version: '0'
|
132
132
|
segments:
|
133
133
|
- 0
|
134
|
-
hash:
|
134
|
+
hash: 3301762641973492072
|
135
135
|
requirements: []
|
136
136
|
rubyforge_project:
|
137
137
|
rubygems_version: 1.8.24
|