mongo_mapper-unstable 2010.1.6 → 2010.1.12
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/lib/mongo_mapper/descendant_appends.rb +44 -0
- data/lib/mongo_mapper/document.rb +54 -98
- data/lib/mongo_mapper/embedded_document.rb +28 -348
- data/lib/mongo_mapper/finder_options.rb +15 -33
- data/lib/mongo_mapper/plugins/associations/base.rb +121 -0
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +28 -0
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +23 -0
- data/lib/mongo_mapper/plugins/associations/collection.rb +21 -0
- data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +49 -0
- data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +139 -0
- data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +28 -0
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +117 -0
- data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +31 -0
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +23 -0
- data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +13 -0
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +66 -0
- data/lib/mongo_mapper/plugins/associations/proxy.rb +118 -0
- data/lib/mongo_mapper/plugins/associations.rb +104 -0
- data/lib/mongo_mapper/plugins/callbacks.rb +65 -0
- data/lib/mongo_mapper/plugins/clone.rb +13 -0
- data/lib/mongo_mapper/plugins/descendants.rb +16 -0
- data/lib/mongo_mapper/plugins/dirty.rb +119 -0
- data/lib/mongo_mapper/plugins/equality.rb +11 -0
- data/lib/mongo_mapper/plugins/identity_map.rb +66 -0
- data/lib/mongo_mapper/plugins/inspect.rb +14 -0
- data/lib/mongo_mapper/plugins/keys.rb +295 -0
- data/lib/mongo_mapper/plugins/logger.rb +17 -0
- data/lib/mongo_mapper/plugins/pagination.rb +85 -0
- data/lib/mongo_mapper/plugins/rails.rb +45 -0
- data/lib/mongo_mapper/plugins/serialization.rb +109 -0
- data/lib/mongo_mapper/plugins/validations.rb +48 -0
- data/lib/mongo_mapper/plugins.rb +19 -0
- data/lib/mongo_mapper/support.rb +36 -15
- data/lib/mongo_mapper.rb +23 -22
- data/performance/read_write.rb +52 -0
- data/specs.watchr +23 -2
- data/test/functional/associations/test_belongs_to_proxy.rb +1 -1
- data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +58 -39
- data/test/functional/associations/test_many_embedded_proxy.rb +103 -69
- data/test/functional/test_dirty.rb +1 -1
- data/test/functional/test_document.rb +25 -25
- data/test/functional/test_embedded_document.rb +66 -63
- data/test/functional/test_identity_map.rb +233 -0
- data/test/functional/test_modifiers.rb +14 -0
- data/test/functional/test_string_id_compatibility.rb +4 -4
- data/test/functional/test_validations.rb +13 -0
- data/test/models.rb +0 -39
- data/test/test_helper.rb +8 -2
- data/test/unit/associations/test_base.rb +1 -1
- data/test/unit/associations/test_proxy.rb +3 -3
- data/test/unit/test_descendant_appends.rb +71 -0
- data/test/unit/test_document.rb +35 -46
- data/test/unit/test_embedded_document.rb +218 -271
- data/test/unit/{test_key.rb → test_keys.rb} +0 -0
- data/test/unit/test_pagination.rb +10 -2
- data/test/unit/test_plugins.rb +42 -0
- data/test/unit/test_rails.rb +123 -0
- data/test/unit/{test_serializations.rb → test_serialization.rb} +0 -0
- data/test/unit/test_support.rb +10 -6
- data/test/unit/test_time_zones.rb +2 -2
- metadata +44 -31
- data/lib/mongo_mapper/associations/base.rb +0 -119
- data/lib/mongo_mapper/associations/belongs_to_polymorphic_proxy.rb +0 -26
- data/lib/mongo_mapper/associations/belongs_to_proxy.rb +0 -21
- data/lib/mongo_mapper/associations/collection.rb +0 -19
- data/lib/mongo_mapper/associations/in_array_proxy.rb +0 -137
- data/lib/mongo_mapper/associations/many_documents_as_proxy.rb +0 -26
- data/lib/mongo_mapper/associations/many_documents_proxy.rb +0 -115
- data/lib/mongo_mapper/associations/many_embedded_polymorphic_proxy.rb +0 -31
- data/lib/mongo_mapper/associations/many_embedded_proxy.rb +0 -54
- data/lib/mongo_mapper/associations/many_polymorphic_proxy.rb +0 -11
- data/lib/mongo_mapper/associations/one_proxy.rb +0 -64
- data/lib/mongo_mapper/associations/proxy.rb +0 -116
- data/lib/mongo_mapper/associations.rb +0 -78
- data/lib/mongo_mapper/callbacks.rb +0 -61
- data/lib/mongo_mapper/dirty.rb +0 -117
- data/lib/mongo_mapper/key.rb +0 -36
- data/lib/mongo_mapper/mongo_mapper.rb +0 -125
- data/lib/mongo_mapper/pagination.rb +0 -66
- data/lib/mongo_mapper/rails_compatibility/document.rb +0 -15
- data/lib/mongo_mapper/rails_compatibility/embedded_document.rb +0 -28
- data/lib/mongo_mapper/serialization.rb +0 -54
- data/lib/mongo_mapper/serializers/json_serializer.rb +0 -48
- data/lib/mongo_mapper/validations.rb +0 -39
- data/test/functional/test_rails_compatibility.rb +0 -25
@@ -1,8 +1,16 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
|
-
class PaginationTest < Test::Unit::TestCase
|
3
|
+
class PaginationTest < Test::Unit::TestCase
|
4
|
+
should "default per_page to 25" do
|
5
|
+
Doc().per_page.should == 25
|
6
|
+
end
|
7
|
+
|
8
|
+
should "allow overriding per_page" do
|
9
|
+
Doc() { def self.per_page; 1 end }.per_page.should == 1
|
10
|
+
end
|
11
|
+
|
4
12
|
context "Pagination proxy" do
|
5
|
-
include MongoMapper::Pagination
|
13
|
+
include MongoMapper::Plugins::Pagination
|
6
14
|
|
7
15
|
should "should have accessors for subject" do
|
8
16
|
subject = [1,2,3,4,5]
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module MyPlugin
|
4
|
+
module ClassMethods
|
5
|
+
def class_foo
|
6
|
+
'class_foo'
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
module InstanceMethods
|
11
|
+
def instance_foo
|
12
|
+
'instance_foo'
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class PluginsTest < Test::Unit::TestCase
|
18
|
+
context "plugin" do
|
19
|
+
setup do
|
20
|
+
@document = Class.new do
|
21
|
+
extend MongoMapper::Plugins
|
22
|
+
plugin MyPlugin
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
should "include instance methods" do
|
27
|
+
@document.new.instance_foo.should == 'instance_foo'
|
28
|
+
end
|
29
|
+
|
30
|
+
should "extend class methods" do
|
31
|
+
@document.class_foo.should == 'class_foo'
|
32
|
+
end
|
33
|
+
|
34
|
+
should "default plugins to empty array" do
|
35
|
+
Class.new { extend MongoMapper::Plugins }.plugins.should == []
|
36
|
+
end
|
37
|
+
|
38
|
+
should "add plugin to plugins" do
|
39
|
+
@document.plugins.should include(MyPlugin)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class TestRails < Test::Unit::TestCase
|
4
|
+
context "Document" do
|
5
|
+
setup do
|
6
|
+
@klass = Doc('Post') do
|
7
|
+
key :foo, String
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
context "Class methods" do
|
12
|
+
should "alias has_many to many" do
|
13
|
+
@klass.should respond_to(:has_many)
|
14
|
+
end
|
15
|
+
|
16
|
+
should "alias has_one to one" do
|
17
|
+
@klass.should respond_to(:has_one)
|
18
|
+
end
|
19
|
+
|
20
|
+
should "have column names" do
|
21
|
+
@klass.column_names.sort.should == ['_id', 'foo']
|
22
|
+
end
|
23
|
+
|
24
|
+
should "implement human_name" do
|
25
|
+
@klass.human_name.should == 'Post'
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
context "Instance methods" do
|
30
|
+
setup do
|
31
|
+
@klass.class_eval do
|
32
|
+
def bar=(value)
|
33
|
+
write_attribute(:foo, value)
|
34
|
+
end
|
35
|
+
|
36
|
+
def bar_before_typecast
|
37
|
+
read_attribute_before_typecast(:foo)
|
38
|
+
end
|
39
|
+
|
40
|
+
def bar
|
41
|
+
read_attribute(:foo)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
should "alias new_record? to new?" do
|
47
|
+
@klass.new.should be_new_record
|
48
|
+
end
|
49
|
+
|
50
|
+
should "be able to read key with read_attribute" do
|
51
|
+
@klass.new(:foo => 'Bar').bar.should == 'Bar'
|
52
|
+
end
|
53
|
+
|
54
|
+
should "be able to read key before typecast with read_attribute_before_typecast" do
|
55
|
+
@klass.new(:foo => 21).bar_before_typecast.should == 21
|
56
|
+
@klass.new(:foo => 21).bar.should == '21'
|
57
|
+
end
|
58
|
+
|
59
|
+
should "be able to write key with write_attribute" do
|
60
|
+
@klass.new(:bar => 'Setting Foo').foo.should == 'Setting Foo'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context "EmbeddedDocument" do
|
66
|
+
setup do
|
67
|
+
@klass = EDoc('Post') { key :foo, String }
|
68
|
+
end
|
69
|
+
|
70
|
+
context "Class methods" do
|
71
|
+
should "alias has_many to many" do
|
72
|
+
@klass.should respond_to(:has_many)
|
73
|
+
end
|
74
|
+
|
75
|
+
should "alias has_one to one" do
|
76
|
+
@klass.should respond_to(:has_one)
|
77
|
+
end
|
78
|
+
|
79
|
+
should "have column names" do
|
80
|
+
@klass.column_names.sort.should == ['_id', 'foo']
|
81
|
+
end
|
82
|
+
|
83
|
+
should "implement human_name" do
|
84
|
+
@klass.human_name.should == 'Post'
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
context "Instance methods" do
|
89
|
+
setup do
|
90
|
+
@klass.class_eval do
|
91
|
+
def bar=(value)
|
92
|
+
write_attribute(:foo, value)
|
93
|
+
end
|
94
|
+
|
95
|
+
def bar_before_typecast
|
96
|
+
read_attribute_before_typecast(:foo)
|
97
|
+
end
|
98
|
+
|
99
|
+
def bar
|
100
|
+
read_attribute(:foo)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
should "alias new_record? to new?" do
|
106
|
+
@klass.new.should be_new_record
|
107
|
+
end
|
108
|
+
|
109
|
+
should "be able to read key with read_attribute" do
|
110
|
+
@klass.new(:foo => 'Bar').bar.should == 'Bar'
|
111
|
+
end
|
112
|
+
|
113
|
+
should "be able to read key before typecast with read_attribute_before_typecast" do
|
114
|
+
@klass.new(:foo => 21).bar_before_typecast.should == 21
|
115
|
+
@klass.new(:foo => 21).bar.should == '21'
|
116
|
+
end
|
117
|
+
|
118
|
+
should "be able to write key with write_attribute" do
|
119
|
+
@klass.new(:bar => 'Setting Foo').foo.should == 'Setting Foo'
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
File without changes
|
data/test/unit/test_support.rb
CHANGED
@@ -90,6 +90,10 @@ class SupportTest < Test::Unit::TestCase
|
|
90
90
|
Date.to_mongo(Date.new(2009, 10, 1)).should == Time.utc(2009, 10, 1)
|
91
91
|
end
|
92
92
|
|
93
|
+
should "be date if time" do
|
94
|
+
Date.to_mongo(Time.parse("2009-10-1T12:30:00")).should == Time.utc(2009, 10, 1)
|
95
|
+
end
|
96
|
+
|
93
97
|
should "be nil if bogus string" do
|
94
98
|
Date.to_mongo('jdsafop874').should be_nil
|
95
99
|
end
|
@@ -264,8 +268,8 @@ class SupportTest < Test::Unit::TestCase
|
|
264
268
|
end
|
265
269
|
|
266
270
|
context "Time#to_mongo without Time.zone" do
|
267
|
-
should "be time if string" do
|
268
|
-
Time.to_mongo('2000-01-01 01:01:01.123456').should == Time.local(2000, 1, 1, 1, 1, 1,
|
271
|
+
should "be time to milliseconds if string" do
|
272
|
+
Time.to_mongo('2000-01-01 01:01:01.123456').should == Time.local(2000, 1, 1, 1, 1, 1, 123000).utc
|
269
273
|
end
|
270
274
|
|
271
275
|
should "be time in utc if time" do
|
@@ -282,15 +286,15 @@ class SupportTest < Test::Unit::TestCase
|
|
282
286
|
end
|
283
287
|
|
284
288
|
context "Time#to_mongo with Time.zone" do
|
285
|
-
should "be time if time" do
|
289
|
+
should "be time to milliseconds if time" do
|
286
290
|
Time.zone = 'Hawaii'
|
287
|
-
Time.to_mongo(Time.zone.local(2009, 8, 15, 14, 0, 0)).should == Time.utc(2009, 8, 16, 0, 0, 0)
|
291
|
+
Time.to_mongo(Time.zone.local(2009, 8, 15, 14, 0, 0, 123456)).should == Time.utc(2009, 8, 16, 0, 0, 0, 123000)
|
288
292
|
Time.zone = nil
|
289
293
|
end
|
290
294
|
|
291
|
-
should "be time if string" do
|
295
|
+
should "be time to milliseconds if string" do
|
292
296
|
Time.zone = 'Hawaii'
|
293
|
-
Time.to_mongo('2009-08-15 14:00:00').should == Time.utc(2009, 8, 16, 0, 0, 0)
|
297
|
+
Time.to_mongo('2009-08-15 14:00:00.123456').should == Time.utc(2009, 8, 16, 0, 0, 0, 123000)
|
294
298
|
Time.zone = nil
|
295
299
|
end
|
296
300
|
|
@@ -26,10 +26,10 @@ class TimeZonesTest < Test::Unit::TestCase
|
|
26
26
|
Time.zone = nil
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
should "work with timezones that are not UTC" do
|
30
30
|
Time.zone = 'Hawaii'
|
31
31
|
|
32
|
-
doc = @document.new(:created_at =>
|
32
|
+
doc = @document.new(:created_at => "2009-08-15 14:00:00")
|
33
33
|
doc.created_at.is_a?(ActiveSupport::TimeWithZone).should be_true
|
34
34
|
doc.created_at.should == Time.utc(2009, 8, 16)
|
35
35
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongo_mapper-unstable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2010.1.
|
4
|
+
version: 2010.1.12
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Nunemaker
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-12 00:00:00 -05:00
|
13
13
|
default_executable: mmconsole
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -99,35 +99,42 @@ files:
|
|
99
99
|
- VERSION
|
100
100
|
- bin/mmconsole
|
101
101
|
- lib/mongo_mapper.rb
|
102
|
-
- lib/mongo_mapper/
|
103
|
-
- lib/mongo_mapper/associations/base.rb
|
104
|
-
- lib/mongo_mapper/associations/belongs_to_polymorphic_proxy.rb
|
105
|
-
- lib/mongo_mapper/associations/belongs_to_proxy.rb
|
106
|
-
- lib/mongo_mapper/associations/collection.rb
|
107
|
-
- lib/mongo_mapper/associations/in_array_proxy.rb
|
108
|
-
- lib/mongo_mapper/associations/many_documents_as_proxy.rb
|
109
|
-
- lib/mongo_mapper/associations/many_documents_proxy.rb
|
110
|
-
- lib/mongo_mapper/associations/many_embedded_polymorphic_proxy.rb
|
111
|
-
- lib/mongo_mapper/associations/many_embedded_proxy.rb
|
112
|
-
- lib/mongo_mapper/associations/many_polymorphic_proxy.rb
|
113
|
-
- lib/mongo_mapper/associations/one_proxy.rb
|
114
|
-
- lib/mongo_mapper/associations/proxy.rb
|
115
|
-
- lib/mongo_mapper/callbacks.rb
|
116
|
-
- lib/mongo_mapper/dirty.rb
|
102
|
+
- lib/mongo_mapper/descendant_appends.rb
|
117
103
|
- lib/mongo_mapper/document.rb
|
118
104
|
- lib/mongo_mapper/dynamic_finder.rb
|
119
105
|
- lib/mongo_mapper/embedded_document.rb
|
120
106
|
- lib/mongo_mapper/finder_options.rb
|
121
|
-
- lib/mongo_mapper/
|
122
|
-
- lib/mongo_mapper/
|
123
|
-
- lib/mongo_mapper/
|
124
|
-
- lib/mongo_mapper/
|
125
|
-
- lib/mongo_mapper/
|
126
|
-
- lib/mongo_mapper/
|
127
|
-
- lib/mongo_mapper/
|
107
|
+
- lib/mongo_mapper/plugins.rb
|
108
|
+
- lib/mongo_mapper/plugins/associations.rb
|
109
|
+
- lib/mongo_mapper/plugins/associations/base.rb
|
110
|
+
- lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb
|
111
|
+
- lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb
|
112
|
+
- lib/mongo_mapper/plugins/associations/collection.rb
|
113
|
+
- lib/mongo_mapper/plugins/associations/embedded_collection.rb
|
114
|
+
- lib/mongo_mapper/plugins/associations/in_array_proxy.rb
|
115
|
+
- lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb
|
116
|
+
- lib/mongo_mapper/plugins/associations/many_documents_proxy.rb
|
117
|
+
- lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb
|
118
|
+
- lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb
|
119
|
+
- lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb
|
120
|
+
- lib/mongo_mapper/plugins/associations/one_proxy.rb
|
121
|
+
- lib/mongo_mapper/plugins/associations/proxy.rb
|
122
|
+
- lib/mongo_mapper/plugins/callbacks.rb
|
123
|
+
- lib/mongo_mapper/plugins/clone.rb
|
124
|
+
- lib/mongo_mapper/plugins/descendants.rb
|
125
|
+
- lib/mongo_mapper/plugins/dirty.rb
|
126
|
+
- lib/mongo_mapper/plugins/equality.rb
|
127
|
+
- lib/mongo_mapper/plugins/identity_map.rb
|
128
|
+
- lib/mongo_mapper/plugins/inspect.rb
|
129
|
+
- lib/mongo_mapper/plugins/keys.rb
|
130
|
+
- lib/mongo_mapper/plugins/logger.rb
|
131
|
+
- lib/mongo_mapper/plugins/pagination.rb
|
132
|
+
- lib/mongo_mapper/plugins/rails.rb
|
133
|
+
- lib/mongo_mapper/plugins/serialization.rb
|
134
|
+
- lib/mongo_mapper/plugins/validations.rb
|
128
135
|
- lib/mongo_mapper/support.rb
|
129
|
-
- lib/mongo_mapper/validations.rb
|
130
136
|
- mongo_mapper.gemspec
|
137
|
+
- performance/read_write.rb
|
131
138
|
- specs.watchr
|
132
139
|
- test/NOTE_ON_TESTING
|
133
140
|
- test/functional/associations/test_belongs_to_polymorphic_proxy.rb
|
@@ -145,10 +152,10 @@ files:
|
|
145
152
|
- test/functional/test_dirty.rb
|
146
153
|
- test/functional/test_document.rb
|
147
154
|
- test/functional/test_embedded_document.rb
|
155
|
+
- test/functional/test_identity_map.rb
|
148
156
|
- test/functional/test_logger.rb
|
149
157
|
- test/functional/test_modifiers.rb
|
150
158
|
- test/functional/test_pagination.rb
|
151
|
-
- test/functional/test_rails_compatibility.rb
|
152
159
|
- test/functional/test_string_id_compatibility.rb
|
153
160
|
- test/functional/test_validations.rb
|
154
161
|
- test/models.rb
|
@@ -158,15 +165,18 @@ files:
|
|
158
165
|
- test/unit/associations/test_base.rb
|
159
166
|
- test/unit/associations/test_proxy.rb
|
160
167
|
- test/unit/serializers/test_json_serializer.rb
|
168
|
+
- test/unit/test_descendant_appends.rb
|
161
169
|
- test/unit/test_document.rb
|
162
170
|
- test/unit/test_dynamic_finder.rb
|
163
171
|
- test/unit/test_embedded_document.rb
|
164
172
|
- test/unit/test_finder_options.rb
|
165
|
-
- test/unit/
|
173
|
+
- test/unit/test_keys.rb
|
166
174
|
- test/unit/test_mongo_mapper.rb
|
167
175
|
- test/unit/test_pagination.rb
|
176
|
+
- test/unit/test_plugins.rb
|
177
|
+
- test/unit/test_rails.rb
|
168
178
|
- test/unit/test_rails_compatibility.rb
|
169
|
-
- test/unit/
|
179
|
+
- test/unit/test_serialization.rb
|
170
180
|
- test/unit/test_support.rb
|
171
181
|
- test/unit/test_time_zones.rb
|
172
182
|
- test/unit/test_validations.rb
|
@@ -200,18 +210,21 @@ specification_version: 3
|
|
200
210
|
summary: Awesome gem for modeling your domain and storing it in mongo
|
201
211
|
test_files:
|
202
212
|
- test/unit/test_embedded_document.rb
|
203
|
-
- test/unit/test_serializations.rb
|
204
|
-
- test/unit/test_key.rb
|
205
213
|
- test/unit/test_dynamic_finder.rb
|
206
214
|
- test/unit/serializers/test_json_serializer.rb
|
207
215
|
- test/unit/test_support.rb
|
208
216
|
- test/unit/test_finder_options.rb
|
217
|
+
- test/unit/test_keys.rb
|
209
218
|
- test/unit/associations/test_proxy.rb
|
210
219
|
- test/unit/associations/test_base.rb
|
211
220
|
- test/unit/test_time_zones.rb
|
221
|
+
- test/unit/test_serialization.rb
|
222
|
+
- test/unit/test_rails.rb
|
212
223
|
- test/unit/test_rails_compatibility.rb
|
213
224
|
- test/unit/test_validations.rb
|
214
225
|
- test/unit/test_mongo_mapper.rb
|
226
|
+
- test/unit/test_descendant_appends.rb
|
227
|
+
- test/unit/test_plugins.rb
|
215
228
|
- test/unit/test_document.rb
|
216
229
|
- test/unit/test_pagination.rb
|
217
230
|
- test/test_helper.rb
|
@@ -230,10 +243,10 @@ test_files:
|
|
230
243
|
- test/functional/associations/test_many_polymorphic_proxy.rb
|
231
244
|
- test/functional/associations/test_belongs_to_polymorphic_proxy.rb
|
232
245
|
- test/functional/associations/test_one_proxy.rb
|
246
|
+
- test/functional/test_identity_map.rb
|
233
247
|
- test/functional/test_binary.rb
|
234
248
|
- test/functional/test_dirty.rb
|
235
249
|
- test/functional/test_callbacks.rb
|
236
|
-
- test/functional/test_rails_compatibility.rb
|
237
250
|
- test/functional/test_validations.rb
|
238
251
|
- test/functional/test_logger.rb
|
239
252
|
- test/functional/test_document.rb
|
@@ -1,119 +0,0 @@
|
|
1
|
-
module MongoMapper
|
2
|
-
module Associations
|
3
|
-
class Base
|
4
|
-
attr_reader :type, :name, :options, :finder_options
|
5
|
-
|
6
|
-
# Options that should not be considered MongoDB query options/criteria
|
7
|
-
AssociationOptions = [:as, :class, :class_name, :dependent, :extend, :foreign_key, :in, :polymorphic]
|
8
|
-
|
9
|
-
def initialize(type, name, options={}, &extension)
|
10
|
-
@type, @name, @options, @finder_options = type, name, {}, {}
|
11
|
-
options.symbolize_keys!
|
12
|
-
|
13
|
-
options[:extend] = modulized_extensions(extension, options[:extend])
|
14
|
-
|
15
|
-
options.each_pair do |key, value|
|
16
|
-
if AssociationOptions.include?(key)
|
17
|
-
@options[key] = value
|
18
|
-
else
|
19
|
-
@finder_options[key] = value
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
def class_name
|
25
|
-
@class_name ||= begin
|
26
|
-
if cn = options[:class_name]
|
27
|
-
cn
|
28
|
-
elsif many?
|
29
|
-
name.to_s.singularize.camelize
|
30
|
-
else
|
31
|
-
name.to_s.camelize
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def klass
|
37
|
-
@klass ||= options[:class] || class_name.constantize
|
38
|
-
end
|
39
|
-
|
40
|
-
def many?
|
41
|
-
@many_type ||= @type == :many
|
42
|
-
end
|
43
|
-
|
44
|
-
def belongs_to?
|
45
|
-
@belongs_to_type ||= @type == :belongs_to
|
46
|
-
end
|
47
|
-
|
48
|
-
def one?
|
49
|
-
@one_type ||= @type == :one
|
50
|
-
end
|
51
|
-
|
52
|
-
def polymorphic?
|
53
|
-
!!@options[:polymorphic]
|
54
|
-
end
|
55
|
-
|
56
|
-
def as?
|
57
|
-
!!@options[:as]
|
58
|
-
end
|
59
|
-
|
60
|
-
def in_array?
|
61
|
-
!!@options[:in]
|
62
|
-
end
|
63
|
-
|
64
|
-
def embeddable?
|
65
|
-
many? && klass.embeddable?
|
66
|
-
end
|
67
|
-
|
68
|
-
def type_key_name
|
69
|
-
@type_key_name ||= many? ? '_type' : "#{as}_type"
|
70
|
-
end
|
71
|
-
|
72
|
-
def as
|
73
|
-
@options[:as] || self.name
|
74
|
-
end
|
75
|
-
|
76
|
-
def foreign_key
|
77
|
-
@options[:foreign_key] || "#{name}_id"
|
78
|
-
end
|
79
|
-
|
80
|
-
def ivar
|
81
|
-
@ivar ||= "@_#{name}"
|
82
|
-
end
|
83
|
-
|
84
|
-
def proxy_class
|
85
|
-
@proxy_class ||= begin
|
86
|
-
if many?
|
87
|
-
if self.klass.embeddable?
|
88
|
-
polymorphic? ? ManyEmbeddedPolymorphicProxy : ManyEmbeddedProxy
|
89
|
-
else
|
90
|
-
if polymorphic?
|
91
|
-
ManyPolymorphicProxy
|
92
|
-
elsif as?
|
93
|
-
ManyDocumentsAsProxy
|
94
|
-
elsif in_array?
|
95
|
-
InArrayProxy
|
96
|
-
else
|
97
|
-
ManyDocumentsProxy
|
98
|
-
end
|
99
|
-
end
|
100
|
-
elsif one?
|
101
|
-
OneProxy
|
102
|
-
else
|
103
|
-
polymorphic? ? BelongsToPolymorphicProxy : BelongsToProxy
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
private
|
109
|
-
|
110
|
-
# @param [Array<Module, Proc>] extensions a collection of Modules or
|
111
|
-
# Procs that extend the behaviour of this association.
|
112
|
-
def modulized_extensions(*extensions)
|
113
|
-
extensions.flatten.compact.map do |extension|
|
114
|
-
Proc === extension ? Module.new(&extension) : extension
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module MongoMapper
|
2
|
-
module Associations
|
3
|
-
class BelongsToPolymorphicProxy < Proxy
|
4
|
-
def replace(doc)
|
5
|
-
if doc
|
6
|
-
doc.save if doc.new?
|
7
|
-
id, type = doc.id, doc.class.name
|
8
|
-
end
|
9
|
-
|
10
|
-
owner[reflection.foreign_key] = id
|
11
|
-
owner[reflection.type_key_name] = type
|
12
|
-
reset
|
13
|
-
end
|
14
|
-
|
15
|
-
protected
|
16
|
-
def find_target
|
17
|
-
return nil if association_class.nil? || owner[reflection.foreign_key].nil?
|
18
|
-
association_class.first(:id => owner[reflection.foreign_key])
|
19
|
-
end
|
20
|
-
|
21
|
-
def association_class
|
22
|
-
proxy_owner[reflection.type_key_name] ? proxy_owner[reflection.type_key_name].constantize : nil
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,21 +0,0 @@
|
|
1
|
-
module MongoMapper
|
2
|
-
module Associations
|
3
|
-
class BelongsToProxy < Proxy
|
4
|
-
def replace(doc)
|
5
|
-
if doc
|
6
|
-
doc.save if doc.new?
|
7
|
-
id = doc.id
|
8
|
-
end
|
9
|
-
|
10
|
-
owner[reflection.foreign_key] = id
|
11
|
-
reset
|
12
|
-
end
|
13
|
-
|
14
|
-
protected
|
15
|
-
def find_target
|
16
|
-
return nil if owner[reflection.foreign_key].nil?
|
17
|
-
klass.first(:id => owner[reflection.foreign_key])
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|