mongo_mapper 0.10.1 → 0.11.0
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/UPGRADES +3 -0
- data/examples/plugins.rb +2 -5
- data/lib/mongo_mapper.rb +1 -0
- data/lib/mongo_mapper/connection.rb +4 -0
- data/lib/mongo_mapper/embedded_document.rb +1 -0
- data/lib/mongo_mapper/extensions/object.rb +5 -6
- data/lib/mongo_mapper/plugins/accessible.rb +14 -16
- data/lib/mongo_mapper/plugins/associations.rb +21 -23
- data/lib/mongo_mapper/plugins/associations/base.rb +1 -1
- data/lib/mongo_mapper/plugins/associations/belongs_to_association.rb +4 -0
- data/lib/mongo_mapper/plugins/associations/many_association.rb +0 -4
- data/lib/mongo_mapper/plugins/associations/one_association.rb +1 -1
- data/lib/mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb +30 -0
- data/lib/mongo_mapper/plugins/caching.rb +11 -13
- data/lib/mongo_mapper/plugins/callbacks.rb +12 -14
- data/lib/mongo_mapper/plugins/clone.rb +11 -13
- data/lib/mongo_mapper/plugins/dirty.rb +36 -38
- data/lib/mongo_mapper/plugins/document.rb +20 -22
- data/lib/mongo_mapper/plugins/embedded_callbacks.rb +11 -13
- data/lib/mongo_mapper/plugins/embedded_document.rb +22 -24
- data/lib/mongo_mapper/plugins/equality.rb +6 -8
- data/lib/mongo_mapper/plugins/identity_map.rb +11 -13
- data/lib/mongo_mapper/plugins/inspect.rb +6 -8
- data/lib/mongo_mapper/plugins/keys.rb +109 -110
- data/lib/mongo_mapper/plugins/logger.rb +2 -4
- data/lib/mongo_mapper/plugins/modifiers.rb +32 -34
- data/lib/mongo_mapper/plugins/persistence.rb +5 -7
- data/lib/mongo_mapper/plugins/protected.rb +14 -16
- data/lib/mongo_mapper/plugins/querying.rb +29 -31
- data/lib/mongo_mapper/plugins/rails.rb +28 -22
- data/lib/mongo_mapper/plugins/rails/active_record_association_adapter.rb +33 -0
- data/lib/mongo_mapper/plugins/safe.rb +3 -5
- data/lib/mongo_mapper/plugins/sci.rb +3 -5
- data/lib/mongo_mapper/plugins/serialization.rb +49 -52
- data/lib/mongo_mapper/plugins/timestamps.rb +4 -6
- data/lib/mongo_mapper/plugins/validations.rb +8 -10
- data/lib/mongo_mapper/railtie/database.rake +1 -1
- data/lib/mongo_mapper/version.rb +1 -1
- data/lib/rails/generators/mongo_mapper/model/model_generator.rb +1 -1
- data/lib/rails/generators/mongo_mapper/model/templates/model.rb +2 -0
- data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +63 -0
- data/test/functional/associations/test_one_embedded_polymorphic_proxy.rb +208 -0
- data/test/functional/test_accessible.rb +5 -0
- data/test/functional/test_embedded_document.rb +12 -0
- data/test/functional/test_modifiers.rb +19 -19
- data/test/functional/test_protected.rb +10 -0
- data/test/functional/test_querying.rb +15 -1
- data/test/functional/test_validations.rb +33 -0
- data/test/models.rb +14 -0
- data/test/unit/associations/test_one_association.rb +11 -0
- data/test/unit/test_mongo_mapper.rb +9 -0
- data/test/unit/test_plugins.rb +2 -4
- data/test/unit/test_rails_reflect_on_association.rb +118 -0
- metadata +15 -11
@@ -74,6 +74,11 @@ class ProtectedTest < Test::Unit::TestCase
|
|
74
74
|
doc.name.should == 'John'
|
75
75
|
end
|
76
76
|
|
77
|
+
should "ignore protected attribute on #update_attribute" do
|
78
|
+
@doc.update_attribute('admin', true)
|
79
|
+
@doc.admin.should be_true
|
80
|
+
end
|
81
|
+
|
77
82
|
should "ignore protected attribute on #update_attributes" do
|
78
83
|
@doc.update_attributes(:name => 'Ren Hoek', :admin => true)
|
79
84
|
@doc.name.should == 'Ren Hoek'
|
@@ -176,6 +181,11 @@ class ProtectedTest < Test::Unit::TestCase
|
|
176
181
|
@edoc.admin.should be_true
|
177
182
|
end
|
178
183
|
|
184
|
+
should "not ignore protected attribute on #update_attribute" do
|
185
|
+
@edoc.update_attribute('admin', true)
|
186
|
+
@edoc.admin.should be_true
|
187
|
+
end
|
188
|
+
|
179
189
|
should "ignore protected attribute on #update_attributes" do
|
180
190
|
@edoc.update_attributes(:name => 'Ren Hoek', :admin => true)
|
181
191
|
@edoc.name.should == 'Ren Hoek'
|
@@ -682,10 +682,24 @@ class QueryingTesting < Test::Unit::TestCase
|
|
682
682
|
@doc = @document.create(:first_name => 'John', :age => '27')
|
683
683
|
end
|
684
684
|
|
685
|
-
should "
|
685
|
+
should "accept symbols as keys" do
|
686
686
|
@doc.update_attribute(:first_name, 'Chris').should be_true
|
687
687
|
@doc.reload.first_name.should == 'Chris'
|
688
688
|
end
|
689
|
+
|
690
|
+
should "update the attribute" do
|
691
|
+
@doc.update_attribute('first_name', 'Chris').should be_true
|
692
|
+
@doc.reload.first_name.should == 'Chris'
|
693
|
+
end
|
694
|
+
|
695
|
+
should "update the attribute without invoking validations" do
|
696
|
+
@document.key :name, String, :required => true
|
697
|
+
|
698
|
+
@doc.expects(:valid?).never
|
699
|
+
@doc.update_attribute('name', '').should be_true
|
700
|
+
@doc.reload.name.should == ''
|
701
|
+
@document.count.should == 1
|
702
|
+
end
|
689
703
|
end
|
690
704
|
|
691
705
|
context "#save (new document)" do
|
@@ -350,6 +350,39 @@ class ValidationsTest < Test::Unit::TestCase
|
|
350
350
|
doc.children.build
|
351
351
|
doc.should have_error_on(:children, 'are invalid')
|
352
352
|
end
|
353
|
+
|
354
|
+
end
|
355
|
+
|
356
|
+
context "validating associated docs with custom context" do
|
357
|
+
setup do
|
358
|
+
@child_class = EDoc do
|
359
|
+
key :name
|
360
|
+
|
361
|
+
validates_length_of :name, :minimum => 5, :on => :custom_context
|
362
|
+
end
|
363
|
+
|
364
|
+
@root_class = Doc { }
|
365
|
+
@root_class.many :children, :class => @child_class
|
366
|
+
@root_class.validates_associated :children, :context => :custom_context
|
367
|
+
end
|
368
|
+
|
369
|
+
should "pass if there are no associated docs" do
|
370
|
+
doc = @root_class.new
|
371
|
+
doc.valid?(:custom_context).should be_true
|
372
|
+
end
|
373
|
+
|
374
|
+
should "pass if the associated doc is valid" do
|
375
|
+
doc = @root_class.new
|
376
|
+
doc.children.build(:name => 'George')
|
377
|
+
doc.valid?(:custom_context).should be_true
|
378
|
+
end
|
379
|
+
|
380
|
+
should "fail if the associated doc is invalid" do
|
381
|
+
doc = @root_class.new
|
382
|
+
doc.children.build(:name => 'Bob')
|
383
|
+
doc.valid?(:custom_context).should_not be_true
|
384
|
+
end
|
385
|
+
|
353
386
|
end
|
354
387
|
# context "validates uniqueness of with :unique shortcut" do
|
355
388
|
# should "work" do
|
data/test/models.rb
CHANGED
@@ -245,3 +245,17 @@ end
|
|
245
245
|
class AltUser
|
246
246
|
include MongoMapper::Document
|
247
247
|
end
|
248
|
+
|
249
|
+
class Human
|
250
|
+
include MongoMapper::EmbeddedDocument
|
251
|
+
|
252
|
+
key :name, String
|
253
|
+
embedded_in :post
|
254
|
+
end
|
255
|
+
|
256
|
+
class Robot
|
257
|
+
include MongoMapper::EmbeddedDocument
|
258
|
+
|
259
|
+
key :serial_number, String
|
260
|
+
embedded_in :post
|
261
|
+
end
|
@@ -4,6 +4,12 @@ require 'models'
|
|
4
4
|
class OneAssociationTest < Test::Unit::TestCase
|
5
5
|
include MongoMapper::Plugins::Associations
|
6
6
|
|
7
|
+
context "type_key_name" do
|
8
|
+
should "be _type" do
|
9
|
+
OneAssociation.new(:foo).type_key_name.should == '_type'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
7
13
|
context "embeddable?" do
|
8
14
|
should "be true if class is embeddable" do
|
9
15
|
base = OneAssociation.new(:media)
|
@@ -31,6 +37,11 @@ class OneAssociationTest < Test::Unit::TestCase
|
|
31
37
|
base = OneAssociation.new(:media)
|
32
38
|
base.proxy_class.should == OneEmbeddedProxy
|
33
39
|
end
|
40
|
+
|
41
|
+
should "be OneEmbeddedPolymorphicProxy for polymorphic one embedded" do
|
42
|
+
base = OneAssociation.new(:media, :polymorphic => true)
|
43
|
+
base.proxy_class.should == OneEmbeddedPolymorphicProxy
|
44
|
+
end
|
34
45
|
end
|
35
46
|
|
36
47
|
end
|
@@ -65,6 +65,15 @@ class MongoMapperTest < Test::Unit::TestCase
|
|
65
65
|
MongoMapper.connect('development', :logger => logger)
|
66
66
|
end
|
67
67
|
|
68
|
+
should "work with options from config" do
|
69
|
+
MongoMapper.config = {
|
70
|
+
'development' => {'host' => '192.168.1.1', 'port' => 2222, 'database' => 'test', 'options' => {'safe' => true}}
|
71
|
+
}
|
72
|
+
connection, logger = mock('connection'), mock('logger')
|
73
|
+
Mongo::Connection.expects(:new).with('192.168.1.1', 2222, :logger => logger, :safe => true)
|
74
|
+
MongoMapper.connect('development', :logger => logger)
|
75
|
+
end
|
76
|
+
|
68
77
|
should "work with options using uri" do
|
69
78
|
MongoMapper.config = {
|
70
79
|
'development' => {'uri' => 'mongodb://127.0.0.1:27017/test'}
|
data/test/unit/test_plugins.rb
CHANGED
@@ -0,0 +1,118 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ReflectOnAssociationTestModels
|
4
|
+
class Tree
|
5
|
+
include MongoMapper::Document
|
6
|
+
many :birds, :class_name => "ReflectOnAssociationTestModels::Bird"
|
7
|
+
end
|
8
|
+
|
9
|
+
class Bird
|
10
|
+
include MongoMapper::Document
|
11
|
+
belongs_to :tree, :class_name => "ReflectOnAssociationTestModels::Tree"
|
12
|
+
end
|
13
|
+
|
14
|
+
class Book
|
15
|
+
include MongoMapper::Document
|
16
|
+
many :authors, :class_name => "ReflectOnAssociationTestModels::Author", :in => :author_ids
|
17
|
+
end
|
18
|
+
|
19
|
+
class Author
|
20
|
+
include MongoMapper::Document
|
21
|
+
end
|
22
|
+
|
23
|
+
class Employee
|
24
|
+
include MongoMapper::Document
|
25
|
+
one :desk, :class_name => "ReflectOnAssociationTestModels::Desk"
|
26
|
+
end
|
27
|
+
|
28
|
+
class Desk
|
29
|
+
include MongoMapper::Document
|
30
|
+
belongs_to :employee, :class_name => "ReflectOnAssociationTestModels::Employee"
|
31
|
+
end
|
32
|
+
|
33
|
+
class Order
|
34
|
+
include MongoMapper::Document
|
35
|
+
many :line_items, :class_name => "ReflectOnAssociationTestModels::LineItem"
|
36
|
+
end
|
37
|
+
|
38
|
+
class LineItem
|
39
|
+
include MongoMapper::EmbeddedDocument
|
40
|
+
end
|
41
|
+
|
42
|
+
class Body
|
43
|
+
include MongoMapper::Document
|
44
|
+
one :heart, :class_name => "ReflectOnAssociationTestModels::Heart"
|
45
|
+
end
|
46
|
+
|
47
|
+
class Heart
|
48
|
+
include MongoMapper::EmbeddedDocument
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
class ReflectOnAssociationTest < Test::Unit::TestCase
|
53
|
+
context "one-to-many association" do
|
54
|
+
should "return :has_many association for Tree#birds" do
|
55
|
+
association = ReflectOnAssociationTestModels::Tree.reflect_on_association(:birds)
|
56
|
+
association.klass.should == ReflectOnAssociationTestModels::Bird
|
57
|
+
association.macro.should == :has_many
|
58
|
+
association.name.should == :birds
|
59
|
+
association.options.should == {}
|
60
|
+
end
|
61
|
+
|
62
|
+
should "return :belongs_to association for Bird#tree" do
|
63
|
+
association = ReflectOnAssociationTestModels::Bird.reflect_on_association(:tree)
|
64
|
+
association.klass.should == ReflectOnAssociationTestModels::Tree
|
65
|
+
association.macro.should == :belongs_to
|
66
|
+
association.name.should == :tree
|
67
|
+
association.options.should == {}
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "many-to-many association" do
|
72
|
+
should "return :has_many association for Book#authors" do
|
73
|
+
association = ReflectOnAssociationTestModels::Book.reflect_on_association(:authors)
|
74
|
+
association.klass.should == ReflectOnAssociationTestModels::Author
|
75
|
+
association.macro.should == :has_many
|
76
|
+
association.name.should == :authors
|
77
|
+
association.options.should == {}
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
context "one-to-one association" do
|
82
|
+
should "return :has_one association for Employee#desk" do
|
83
|
+
association = ReflectOnAssociationTestModels::Employee.reflect_on_association(:desk)
|
84
|
+
association.klass.should == ReflectOnAssociationTestModels::Desk
|
85
|
+
association.macro.should == :has_one
|
86
|
+
association.name.should == :desk
|
87
|
+
association.options.should == {}
|
88
|
+
end
|
89
|
+
|
90
|
+
should "return :belongs_to association for Desk#employee" do
|
91
|
+
association = ReflectOnAssociationTestModels::Desk.reflect_on_association(:employee)
|
92
|
+
association.klass.should == ReflectOnAssociationTestModels::Employee
|
93
|
+
association.macro.should == :belongs_to
|
94
|
+
association.name.should == :employee
|
95
|
+
association.options.should == {}
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
context "embeds one" do
|
100
|
+
should "return :has_one association for Body#heart" do
|
101
|
+
association = ReflectOnAssociationTestModels::Body.reflect_on_association(:heart)
|
102
|
+
association.klass.should == ReflectOnAssociationTestModels::Heart
|
103
|
+
association.macro.should == :has_one
|
104
|
+
association.name.should == :heart
|
105
|
+
association.options.should == {}
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context "embeds many" do
|
110
|
+
should "return :has_many association for Order#line_items" do
|
111
|
+
association = ReflectOnAssociationTestModels::Order.reflect_on_association(:line_items)
|
112
|
+
association.klass.should == ReflectOnAssociationTestModels::LineItem
|
113
|
+
association.macro.should == :has_many
|
114
|
+
association.name.should == :line_items
|
115
|
+
association.options.should == {}
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo_mapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 51
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
-
|
10
|
-
version: 0.
|
8
|
+
- 11
|
9
|
+
- 0
|
10
|
+
version: 0.11.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- John Nunemaker
|
@@ -15,11 +15,13 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2012-01-26 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
|
+
type: :runtime
|
22
23
|
name: activemodel
|
24
|
+
prerelease: false
|
23
25
|
version_requirements: &id001 !ruby/object:Gem::Requirement
|
24
26
|
none: false
|
25
27
|
requirements:
|
@@ -30,11 +32,11 @@ dependencies:
|
|
30
32
|
- 3
|
31
33
|
- 0
|
32
34
|
version: "3.0"
|
33
|
-
prerelease: false
|
34
|
-
type: :runtime
|
35
35
|
requirement: *id001
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
|
+
type: :runtime
|
37
38
|
name: activesupport
|
39
|
+
prerelease: false
|
38
40
|
version_requirements: &id002 !ruby/object:Gem::Requirement
|
39
41
|
none: false
|
40
42
|
requirements:
|
@@ -45,11 +47,11 @@ dependencies:
|
|
45
47
|
- 3
|
46
48
|
- 0
|
47
49
|
version: "3.0"
|
48
|
-
prerelease: false
|
49
|
-
type: :runtime
|
50
50
|
requirement: *id002
|
51
51
|
- !ruby/object:Gem::Dependency
|
52
|
+
type: :runtime
|
52
53
|
name: plucky
|
54
|
+
prerelease: false
|
53
55
|
version_requirements: &id003 !ruby/object:Gem::Requirement
|
54
56
|
none: false
|
55
57
|
requirements:
|
@@ -61,8 +63,6 @@ dependencies:
|
|
61
63
|
- 4
|
62
64
|
- 0
|
63
65
|
version: 0.4.0
|
64
|
-
prerelease: false
|
65
|
-
type: :runtime
|
66
66
|
requirement: *id003
|
67
67
|
description:
|
68
68
|
email:
|
@@ -125,6 +125,7 @@ files:
|
|
125
125
|
- lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb
|
126
126
|
- lib/mongo_mapper/plugins/associations/one_as_proxy.rb
|
127
127
|
- lib/mongo_mapper/plugins/associations/one_association.rb
|
128
|
+
- lib/mongo_mapper/plugins/associations/one_embedded_polymorphic_proxy.rb
|
128
129
|
- lib/mongo_mapper/plugins/associations/one_embedded_proxy.rb
|
129
130
|
- lib/mongo_mapper/plugins/associations/one_proxy.rb
|
130
131
|
- lib/mongo_mapper/plugins/associations/proxy.rb
|
@@ -153,6 +154,7 @@ files:
|
|
153
154
|
- lib/mongo_mapper/plugins/querying/decorator.rb
|
154
155
|
- lib/mongo_mapper/plugins/querying/plucky_methods.rb
|
155
156
|
- lib/mongo_mapper/plugins/querying.rb
|
157
|
+
- lib/mongo_mapper/plugins/rails/active_record_association_adapter.rb
|
156
158
|
- lib/mongo_mapper/plugins/rails.rb
|
157
159
|
- lib/mongo_mapper/plugins/safe.rb
|
158
160
|
- lib/mongo_mapper/plugins/sci.rb
|
@@ -181,6 +183,7 @@ files:
|
|
181
183
|
- test/functional/associations/test_many_embedded_proxy.rb
|
182
184
|
- test/functional/associations/test_many_polymorphic_proxy.rb
|
183
185
|
- test/functional/associations/test_one_as_proxy.rb
|
186
|
+
- test/functional/associations/test_one_embedded_polymorphic_proxy.rb
|
184
187
|
- test/functional/associations/test_one_embedded_proxy.rb
|
185
188
|
- test/functional/associations/test_one_proxy.rb
|
186
189
|
- test/functional/test_accessible.rb
|
@@ -235,6 +238,7 @@ files:
|
|
235
238
|
- test/unit/test_plugins.rb
|
236
239
|
- test/unit/test_rails.rb
|
237
240
|
- test/unit/test_rails_compatibility.rb
|
241
|
+
- test/unit/test_rails_reflect_on_association.rb
|
238
242
|
- test/unit/test_railtie.rb
|
239
243
|
- test/unit/test_serialization.rb
|
240
244
|
- test/unit/test_time_zones.rb
|