mongo_mapper 0.8.2 → 0.8.3
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/examples/keys.rb +3 -0
- data/examples/modifiers/set.rb +25 -0
- data/lib/mongo_mapper.rb +0 -1
- data/lib/mongo_mapper/exceptions.rb +0 -3
- data/lib/mongo_mapper/plugins/associations/collection.rb +5 -0
- data/lib/mongo_mapper/plugins/keys.rb +7 -4
- data/lib/mongo_mapper/plugins/keys/key.rb +4 -0
- data/lib/mongo_mapper/version.rb +1 -1
- data/test/functional/associations/test_many_documents_proxy.rb +10 -0
- data/test/test_helper.rb +3 -2
- data/test/unit/test_embedded_document.rb +2 -2
- data/test/unit/test_keys.rb +34 -0
- metadata +53 -19
data/examples/keys.rb
CHANGED
@@ -13,6 +13,7 @@ class User
|
|
13
13
|
key :age, Integer
|
14
14
|
key :skills, Array
|
15
15
|
key :friend_ids, Array, :typecast => 'ObjectId'
|
16
|
+
key :links, Hash
|
16
17
|
timestamps!
|
17
18
|
end
|
18
19
|
User.collection.remove # empties collection
|
@@ -22,6 +23,7 @@ john = User.create({
|
|
22
23
|
:last_name => 'Nunemaker',
|
23
24
|
:age => 28,
|
24
25
|
:skills => ['ruby', 'mongo', 'javascript'],
|
26
|
+
:links => {"Google" => "http://www.google.com"}
|
25
27
|
})
|
26
28
|
|
27
29
|
steve = User.create({
|
@@ -32,6 +34,7 @@ steve = User.create({
|
|
32
34
|
})
|
33
35
|
|
34
36
|
john.friend_ids << steve.id.to_s # will get typecast to ObjectId
|
37
|
+
john.links["Ruby on Rails"] = "http://www.rubyonrails.com"
|
35
38
|
john.save
|
36
39
|
|
37
40
|
pp john
|
@@ -0,0 +1,25 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.expand_path('../../../lib', __FILE__))
|
2
|
+
require 'mongo_mapper'
|
3
|
+
require 'pp'
|
4
|
+
|
5
|
+
MongoMapper.database = 'testing'
|
6
|
+
|
7
|
+
class User
|
8
|
+
include MongoMapper::Document
|
9
|
+
|
10
|
+
key :name, String
|
11
|
+
key :tags, Array
|
12
|
+
end
|
13
|
+
User.collection.remove # empties collection
|
14
|
+
|
15
|
+
john = User.create(:name => 'John', :tags => %w[ruby mongo], :age => 28)
|
16
|
+
bill = User.create(:name => 'Bill', :tags => %w[ruby mongo], :age => 30)
|
17
|
+
|
18
|
+
User.set({:name => 'John'}, :tags => %[ruby])
|
19
|
+
pp john.reload
|
20
|
+
|
21
|
+
User.set(john.id, :tags => %w[ruby mongo])
|
22
|
+
pp john.reload
|
23
|
+
|
24
|
+
john.set(:tags => %w[something different])
|
25
|
+
pp john.reload
|
data/lib/mongo_mapper.rb
CHANGED
@@ -8,7 +8,6 @@ module MongoMapper
|
|
8
8
|
autoload :Connection, 'mongo_mapper/connection'
|
9
9
|
|
10
10
|
autoload :Error, 'mongo_mapper/exceptions'
|
11
|
-
autoload :KeyNotFound, 'mongo_mapper/exceptions'
|
12
11
|
autoload :DocumentNotFound, 'mongo_mapper/exceptions'
|
13
12
|
autoload :InvalidScheme, 'mongo_mapper/exceptions'
|
14
13
|
autoload :DocumentNotValid, 'mongo_mapper/exceptions'
|
@@ -44,6 +44,11 @@ module MongoMapper
|
|
44
44
|
object_id_keys.include?(name.to_sym)
|
45
45
|
end
|
46
46
|
|
47
|
+
# API Private
|
48
|
+
def can_default_id?
|
49
|
+
keys['_id'].can_default_id?
|
50
|
+
end
|
51
|
+
|
47
52
|
def to_mongo(instance)
|
48
53
|
return nil if instance.nil?
|
49
54
|
instance.to_mongo
|
@@ -268,8 +273,8 @@ module MongoMapper
|
|
268
273
|
|
269
274
|
def default_id_value(attrs)
|
270
275
|
unless attrs.nil?
|
271
|
-
|
272
|
-
|
276
|
+
id_provided = attrs.keys.map { |k| k.to_s }.detect { |k| k == 'id' || k == '_id' }
|
277
|
+
if !id_provided && self.class.can_default_id?
|
273
278
|
write_key :_id, BSON::ObjectID.new
|
274
279
|
end
|
275
280
|
end
|
@@ -290,8 +295,6 @@ module MongoMapper
|
|
290
295
|
value = key.get(instance_variable_get(:"@#{key_name}"))
|
291
296
|
set_parent_document(key, value)
|
292
297
|
instance_variable_set(:"@#{key_name}", value)
|
293
|
-
else
|
294
|
-
raise KeyNotFound, "Could not find key: #{key_name.inspect}"
|
295
298
|
end
|
296
299
|
end
|
297
300
|
|
data/lib/mongo_mapper/version.rb
CHANGED
@@ -307,6 +307,16 @@ class ManyDocumentsProxyTest < Test::Unit::TestCase
|
|
307
307
|
@project2.save
|
308
308
|
end
|
309
309
|
|
310
|
+
context "include?" do
|
311
|
+
should "return true if in association" do
|
312
|
+
@project1.statuses.should include(@brand_new)
|
313
|
+
end
|
314
|
+
|
315
|
+
should "return false if not in association" do
|
316
|
+
@project1.statuses.should_not include(@in_progress)
|
317
|
+
end
|
318
|
+
end
|
319
|
+
|
310
320
|
context "dynamic finders" do
|
311
321
|
should "work with single key" do
|
312
322
|
@project1.statuses.find_by_name('New').should == @brand_new
|
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
gem 'activesupport', ENV['ACTIVE_SUPPORT_VERSION']
|
3
|
-
gem 'json'
|
3
|
+
gem 'json'
|
4
4
|
gem 'jnunemaker-matchy', '~> 0.4.0'
|
5
5
|
gem 'shoulda', '~> 2.10.2'
|
6
6
|
gem 'timecop', '~> 0.3.1'
|
@@ -10,10 +10,10 @@ $:.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')
|
|
10
10
|
require 'mongo_mapper'
|
11
11
|
require 'fileutils'
|
12
12
|
require 'ostruct'
|
13
|
-
require 'pp'
|
14
13
|
|
15
14
|
require 'active_support/version'
|
16
15
|
require 'json'
|
16
|
+
require 'log_buddy'
|
17
17
|
require 'matchy'
|
18
18
|
require 'shoulda'
|
19
19
|
require 'timecop'
|
@@ -97,6 +97,7 @@ log_dir = File.expand_path('../../log', __FILE__)
|
|
97
97
|
FileUtils.mkdir_p(log_dir) unless File.exist?(log_dir)
|
98
98
|
logger = Logger.new(log_dir + '/test.log')
|
99
99
|
|
100
|
+
LogBuddy.init(:logger => logger)
|
100
101
|
MongoMapper.connection = Mongo::Connection.new('127.0.0.1', 27017, :logger => logger)
|
101
102
|
MongoMapper.database = "mm-test-#{RUBY_VERSION.gsub('.', '-')}"
|
102
103
|
MongoMapper.database.collections.each { |c| c.drop_indexes }
|
@@ -387,9 +387,9 @@ class EmbeddedDocumentTest < Test::Unit::TestCase
|
|
387
387
|
doc[:name].should == 'string'
|
388
388
|
end
|
389
389
|
|
390
|
-
should "
|
390
|
+
should "return nil when not found" do
|
391
391
|
doc = @document.new(:name => 'string')
|
392
|
-
|
392
|
+
doc[:not_here].should be_nil
|
393
393
|
end
|
394
394
|
end
|
395
395
|
|
data/test/unit/test_keys.rb
CHANGED
@@ -4,6 +4,40 @@ require 'models'
|
|
4
4
|
class KeyTest < Test::Unit::TestCase
|
5
5
|
include MongoMapper::Plugins::Keys
|
6
6
|
|
7
|
+
context ".new with no id and _id of type integer" do
|
8
|
+
should "not error" do
|
9
|
+
lambda {
|
10
|
+
klass = Doc() do
|
11
|
+
key :_id, Integer
|
12
|
+
end
|
13
|
+
# No sensible default id for integer, people better pass them in if they user this
|
14
|
+
klass.new.id.should be_nil
|
15
|
+
}.should_not raise_error
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context ".new with no id and _id of type string" do
|
20
|
+
should "not error" do
|
21
|
+
lambda {
|
22
|
+
klass = Doc() do
|
23
|
+
key :_id, String
|
24
|
+
end
|
25
|
+
klass.new.id.should_not be_nil
|
26
|
+
}.should_not raise_error
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context ".new with no id and _id of type object id" do
|
31
|
+
should "not error" do
|
32
|
+
lambda {
|
33
|
+
klass = Doc() do
|
34
|
+
key :_id, ObjectId
|
35
|
+
end
|
36
|
+
klass.new.should_not be_nil
|
37
|
+
}.should_not raise_error
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
7
41
|
context ".key?(:symbol)" do
|
8
42
|
should "be true if document has key" do
|
9
43
|
Address.key?(:city).should be_true
|
metadata
CHANGED
@@ -1,12 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 57
|
4
5
|
prerelease: false
|
5
6
|
segments:
|
6
7
|
- 0
|
7
8
|
- 8
|
8
|
-
-
|
9
|
-
version: 0.8.
|
9
|
+
- 3
|
10
|
+
version: 0.8.3
|
10
11
|
platform: ruby
|
11
12
|
authors:
|
12
13
|
- John Nunemaker
|
@@ -14,16 +15,18 @@ autorequire:
|
|
14
15
|
bindir: bin
|
15
16
|
cert_chain: []
|
16
17
|
|
17
|
-
date: 2010-
|
18
|
+
date: 2010-08-09 00:00:00 -04:00
|
18
19
|
default_executable: mmconsole
|
19
20
|
dependencies:
|
20
21
|
- !ruby/object:Gem::Dependency
|
21
22
|
name: activesupport
|
22
23
|
prerelease: false
|
23
24
|
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
24
26
|
requirements:
|
25
27
|
- - ">="
|
26
28
|
- !ruby/object:Gem::Version
|
29
|
+
hash: 11
|
27
30
|
segments:
|
28
31
|
- 2
|
29
32
|
- 3
|
@@ -35,9 +38,11 @@ dependencies:
|
|
35
38
|
name: jnunemaker-validatable
|
36
39
|
prerelease: false
|
37
40
|
requirement: &id002 !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
38
42
|
requirements:
|
39
43
|
- - ~>
|
40
44
|
- !ruby/object:Gem::Version
|
45
|
+
hash: 63
|
41
46
|
segments:
|
42
47
|
- 1
|
43
48
|
- 8
|
@@ -49,86 +54,110 @@ dependencies:
|
|
49
54
|
name: plucky
|
50
55
|
prerelease: false
|
51
56
|
requirement: &id003 !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
52
58
|
requirements:
|
53
59
|
- - ~>
|
54
60
|
- !ruby/object:Gem::Version
|
61
|
+
hash: 21
|
55
62
|
segments:
|
56
63
|
- 0
|
57
64
|
- 3
|
58
|
-
-
|
59
|
-
version: 0.3.
|
65
|
+
- 3
|
66
|
+
version: 0.3.3
|
60
67
|
type: :runtime
|
61
68
|
version_requirements: *id003
|
62
69
|
- !ruby/object:Gem::Dependency
|
63
70
|
name: json
|
64
71
|
prerelease: false
|
65
72
|
requirement: &id004 !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
66
74
|
requirements:
|
67
|
-
- -
|
75
|
+
- - ">="
|
68
76
|
- !ruby/object:Gem::Version
|
77
|
+
hash: 3
|
69
78
|
segments:
|
70
|
-
-
|
71
|
-
|
72
|
-
- 3
|
73
|
-
version: 1.2.3
|
79
|
+
- 0
|
80
|
+
version: "0"
|
74
81
|
type: :development
|
75
82
|
version_requirements: *id004
|
76
83
|
- !ruby/object:Gem::Dependency
|
77
|
-
name:
|
84
|
+
name: log_buddy
|
78
85
|
prerelease: false
|
79
86
|
requirement: &id005 !ruby/object:Gem::Requirement
|
87
|
+
none: false
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
hash: 3
|
92
|
+
segments:
|
93
|
+
- 0
|
94
|
+
version: "0"
|
95
|
+
type: :development
|
96
|
+
version_requirements: *id005
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: jnunemaker-matchy
|
99
|
+
prerelease: false
|
100
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
101
|
+
none: false
|
80
102
|
requirements:
|
81
103
|
- - ~>
|
82
104
|
- !ruby/object:Gem::Version
|
105
|
+
hash: 15
|
83
106
|
segments:
|
84
107
|
- 0
|
85
108
|
- 4
|
86
109
|
- 0
|
87
110
|
version: 0.4.0
|
88
111
|
type: :development
|
89
|
-
version_requirements: *
|
112
|
+
version_requirements: *id006
|
90
113
|
- !ruby/object:Gem::Dependency
|
91
114
|
name: shoulda
|
92
115
|
prerelease: false
|
93
|
-
requirement: &
|
116
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
117
|
+
none: false
|
94
118
|
requirements:
|
95
119
|
- - ~>
|
96
120
|
- !ruby/object:Gem::Version
|
121
|
+
hash: 35
|
97
122
|
segments:
|
98
123
|
- 2
|
99
124
|
- 10
|
100
125
|
- 2
|
101
126
|
version: 2.10.2
|
102
127
|
type: :development
|
103
|
-
version_requirements: *
|
128
|
+
version_requirements: *id007
|
104
129
|
- !ruby/object:Gem::Dependency
|
105
130
|
name: timecop
|
106
131
|
prerelease: false
|
107
|
-
requirement: &
|
132
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
133
|
+
none: false
|
108
134
|
requirements:
|
109
135
|
- - ~>
|
110
136
|
- !ruby/object:Gem::Version
|
137
|
+
hash: 17
|
111
138
|
segments:
|
112
139
|
- 0
|
113
140
|
- 3
|
114
141
|
- 1
|
115
142
|
version: 0.3.1
|
116
143
|
type: :development
|
117
|
-
version_requirements: *
|
144
|
+
version_requirements: *id008
|
118
145
|
- !ruby/object:Gem::Dependency
|
119
146
|
name: mocha
|
120
147
|
prerelease: false
|
121
|
-
requirement: &
|
148
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
149
|
+
none: false
|
122
150
|
requirements:
|
123
151
|
- - ~>
|
124
152
|
- !ruby/object:Gem::Version
|
153
|
+
hash: 43
|
125
154
|
segments:
|
126
155
|
- 0
|
127
156
|
- 9
|
128
157
|
- 8
|
129
158
|
version: 0.9.8
|
130
159
|
type: :development
|
131
|
-
version_requirements: *
|
160
|
+
version_requirements: *id009
|
132
161
|
description:
|
133
162
|
email:
|
134
163
|
- nunemaker@gmail.com
|
@@ -141,6 +170,7 @@ extra_rdoc_files: []
|
|
141
170
|
files:
|
142
171
|
- bin/mmconsole
|
143
172
|
- examples/keys.rb
|
173
|
+
- examples/modifiers/set.rb
|
144
174
|
- examples/plugins.rb
|
145
175
|
- examples/querying.rb
|
146
176
|
- examples/scopes.rb
|
@@ -281,23 +311,27 @@ rdoc_options: []
|
|
281
311
|
require_paths:
|
282
312
|
- lib
|
283
313
|
required_ruby_version: !ruby/object:Gem::Requirement
|
314
|
+
none: false
|
284
315
|
requirements:
|
285
316
|
- - ">="
|
286
317
|
- !ruby/object:Gem::Version
|
318
|
+
hash: 3
|
287
319
|
segments:
|
288
320
|
- 0
|
289
321
|
version: "0"
|
290
322
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
323
|
+
none: false
|
291
324
|
requirements:
|
292
325
|
- - ">="
|
293
326
|
- !ruby/object:Gem::Version
|
327
|
+
hash: 3
|
294
328
|
segments:
|
295
329
|
- 0
|
296
330
|
version: "0"
|
297
331
|
requirements: []
|
298
332
|
|
299
333
|
rubyforge_project:
|
300
|
-
rubygems_version: 1.3.
|
334
|
+
rubygems_version: 1.3.7
|
301
335
|
signing_key:
|
302
336
|
specification_version: 3
|
303
337
|
summary: A Ruby Object Mapper for Mongo
|