crnixon-mongomapper 0.2.0 → 0.3.4
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/.gitignore +1 -0
- data/History +48 -0
- data/README.rdoc +5 -3
- data/Rakefile +6 -4
- data/VERSION +1 -1
- data/bin/mmconsole +56 -0
- data/lib/mongomapper.rb +29 -18
- data/lib/mongomapper/associations.rb +53 -38
- data/lib/mongomapper/associations/base.rb +53 -20
- data/lib/mongomapper/associations/belongs_to_polymorphic_proxy.rb +34 -0
- data/lib/mongomapper/associations/belongs_to_proxy.rb +10 -14
- data/lib/mongomapper/associations/many_documents_as_proxy.rb +27 -0
- data/lib/mongomapper/associations/many_documents_proxy.rb +103 -0
- data/lib/mongomapper/associations/many_embedded_polymorphic_proxy.rb +33 -0
- data/lib/mongomapper/associations/{has_many_embedded_proxy.rb → many_embedded_proxy.rb} +6 -8
- data/lib/mongomapper/associations/many_polymorphic_proxy.rb +11 -0
- data/lib/mongomapper/associations/{array_proxy.rb → many_proxy.rb} +1 -1
- data/lib/mongomapper/associations/proxy.rb +24 -21
- data/lib/mongomapper/callbacks.rb +1 -1
- data/lib/mongomapper/document.rb +160 -74
- data/lib/mongomapper/dynamic_finder.rb +38 -0
- data/lib/mongomapper/embedded_document.rb +154 -105
- data/lib/mongomapper/finder_options.rb +11 -7
- data/lib/mongomapper/key.rb +15 -21
- data/lib/mongomapper/pagination.rb +52 -0
- data/lib/mongomapper/rails_compatibility/document.rb +15 -0
- data/lib/mongomapper/rails_compatibility/embedded_document.rb +25 -0
- data/lib/mongomapper/serialization.rb +1 -1
- data/lib/mongomapper/serializers/json_serializer.rb +15 -0
- data/lib/mongomapper/support.rb +30 -0
- data/mongomapper.gemspec +87 -46
- data/test/NOTE_ON_TESTING +1 -0
- data/test/functional/associations/test_belongs_to_polymorphic_proxy.rb +53 -0
- data/test/functional/associations/test_belongs_to_proxy.rb +45 -0
- data/test/functional/associations/test_many_documents_as_proxy.rb +253 -0
- data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +131 -0
- data/test/functional/associations/test_many_embedded_proxy.rb +106 -0
- data/test/functional/associations/test_many_polymorphic_proxy.rb +261 -0
- data/test/functional/associations/test_many_proxy.rb +295 -0
- data/test/functional/test_associations.rb +47 -0
- data/test/{test_callbacks.rb → functional/test_callbacks.rb} +2 -1
- data/test/functional/test_document.rb +952 -0
- data/test/functional/test_pagination.rb +81 -0
- data/test/functional/test_rails_compatibility.rb +30 -0
- data/test/functional/test_validations.rb +172 -0
- data/test/models.rb +169 -0
- data/test/test_helper.rb +7 -2
- data/test/unit/serializers/test_json_serializer.rb +189 -0
- data/test/unit/test_association_base.rb +144 -0
- data/test/unit/test_document.rb +123 -0
- data/test/unit/test_embedded_document.rb +526 -0
- data/test/{test_finder_options.rb → unit/test_finder_options.rb} +36 -1
- data/test/{test_key.rb → unit/test_key.rb} +59 -12
- data/test/{test_mongomapper.rb → unit/test_mongomapper.rb} +0 -0
- data/test/{test_observing.rb → unit/test_observing.rb} +0 -0
- data/test/unit/test_pagination.rb +113 -0
- data/test/unit/test_rails_compatibility.rb +34 -0
- data/test/{test_serializations.rb → unit/test_serializations.rb} +0 -2
- data/test/{test_validations.rb → unit/test_validations.rb} +0 -134
- metadata +81 -43
- data/lib/mongomapper/associations/has_many_proxy.rb +0 -28
- data/lib/mongomapper/associations/polymorphic_belongs_to_proxy.rb +0 -31
- data/lib/mongomapper/rails_compatibility.rb +0 -23
- data/test/serializers/test_json_serializer.rb +0 -104
- data/test/test_associations.rb +0 -174
- data/test/test_document.rb +0 -944
- data/test/test_embedded_document.rb +0 -253
- data/test/test_rails_compatibility.rb +0 -29
@@ -1,253 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class EmbeddedDocumentTest < Test::Unit::TestCase
|
4
|
-
context "Including MongoMapper::EmbeddedDocument" do
|
5
|
-
setup do
|
6
|
-
@klass = Class.new do
|
7
|
-
include MongoMapper::EmbeddedDocument
|
8
|
-
end
|
9
|
-
end
|
10
|
-
|
11
|
-
should "clear out document default keys" do
|
12
|
-
@klass.keys.size.should == 0
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
context "An instance of an embedded document" do
|
17
|
-
setup do
|
18
|
-
@document = Class.new do
|
19
|
-
include MongoMapper::EmbeddedDocument
|
20
|
-
|
21
|
-
key :name, String
|
22
|
-
key :age, Integer
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
context "when initialized" do
|
27
|
-
should "accept a hash that sets keys and values" do
|
28
|
-
doc = @document.new(:name => 'John', :age => 23)
|
29
|
-
doc.attributes.should == {'name' => 'John', 'age' => 23}
|
30
|
-
end
|
31
|
-
|
32
|
-
should "not throw error if initialized with nil" do
|
33
|
-
doc = @document.new(nil)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
context "mass assigning keys" do
|
38
|
-
should "update values for keys provided" do
|
39
|
-
doc = @document.new(:name => 'foobar', :age => 10)
|
40
|
-
doc.attributes = {:name => 'new value', :age => 5}
|
41
|
-
doc.attributes[:name].should == 'new value'
|
42
|
-
doc.attributes[:age].should == 5
|
43
|
-
end
|
44
|
-
|
45
|
-
should "not update values for keys that were not provided" do
|
46
|
-
doc = @document.new(:name => 'foobar', :age => 10)
|
47
|
-
doc.attributes = {:name => 'new value'}
|
48
|
-
doc.attributes[:name].should == 'new value'
|
49
|
-
doc.attributes[:age].should == 10
|
50
|
-
end
|
51
|
-
|
52
|
-
should "ignore keys that do not exist" do
|
53
|
-
doc = @document.new(:name => 'foobar', :age => 10)
|
54
|
-
doc.attributes = {:name => 'new value', :foobar => 'baz'}
|
55
|
-
doc.attributes[:name].should == 'new value'
|
56
|
-
doc.attributes[:foobar].should be(nil)
|
57
|
-
end
|
58
|
-
|
59
|
-
should "not ignore keys that have methods defined" do
|
60
|
-
@document.class_eval do
|
61
|
-
attr_writer :password
|
62
|
-
|
63
|
-
def passwd
|
64
|
-
@password
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
doc = @document.new(:name => 'foobar', :password => 'secret')
|
69
|
-
doc.passwd.should == 'secret'
|
70
|
-
end
|
71
|
-
|
72
|
-
should "typecast key values" do
|
73
|
-
doc = @document.new(:name => 1234, :age => '21')
|
74
|
-
doc.name.should == '1234'
|
75
|
-
doc.age.should == 21
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
context "requesting keys" do
|
80
|
-
should "default to empty hash" do
|
81
|
-
doc = @document.new
|
82
|
-
doc.attributes.should == {}
|
83
|
-
end
|
84
|
-
|
85
|
-
should "return all keys that aren't nil" do
|
86
|
-
doc = @document.new(:name => 'string', :age => nil)
|
87
|
-
doc.attributes.should == {'name' => 'string'}
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
context "key shorcuts" do
|
92
|
-
should "be able to read key with []" do
|
93
|
-
doc = @document.new(:name => 'string')
|
94
|
-
doc[:name].should == 'string'
|
95
|
-
end
|
96
|
-
|
97
|
-
should "be able to write key value with []=" do
|
98
|
-
doc = @document.new
|
99
|
-
doc[:name] = 'string'
|
100
|
-
doc[:name].should == 'string'
|
101
|
-
end
|
102
|
-
end
|
103
|
-
|
104
|
-
context "indifferent access" do
|
105
|
-
should "be enabled for keys" do
|
106
|
-
doc = @document.new(:name => 'string')
|
107
|
-
doc.attributes[:name].should == 'string'
|
108
|
-
doc.attributes['name'].should == 'string'
|
109
|
-
end
|
110
|
-
end
|
111
|
-
|
112
|
-
context "reading an attribute" do
|
113
|
-
should "work for defined keys" do
|
114
|
-
doc = @document.new(:name => 'string')
|
115
|
-
doc.name.should == 'string'
|
116
|
-
end
|
117
|
-
|
118
|
-
should "raise no method error for undefined keys" do
|
119
|
-
doc = @document.new
|
120
|
-
lambda { doc.fart }.should raise_error(NoMethodError)
|
121
|
-
end
|
122
|
-
|
123
|
-
should "know if reader defined" do
|
124
|
-
doc = @document.new
|
125
|
-
doc.reader?('name').should be(true)
|
126
|
-
doc.reader?(:name).should be(true)
|
127
|
-
doc.reader?('age').should be(true)
|
128
|
-
doc.reader?(:age).should be(true)
|
129
|
-
doc.reader?('foobar').should be(false)
|
130
|
-
doc.reader?(:foobar).should be(false)
|
131
|
-
end
|
132
|
-
|
133
|
-
should "be accessible for use in the model" do
|
134
|
-
@document.class_eval do
|
135
|
-
def name_and_age
|
136
|
-
"#{read_attribute(:name)} (#{read_attribute(:age)})"
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
doc = @document.new(:name => 'John', :age => 27)
|
141
|
-
doc.name_and_age.should == 'John (27)'
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
context "reading an attribute before typcasting" do
|
146
|
-
should "work for defined keys" do
|
147
|
-
doc = @document.new(:name => 12)
|
148
|
-
doc.name_before_typecast.should == 12
|
149
|
-
end
|
150
|
-
|
151
|
-
should "raise no method error for undefined keys" do
|
152
|
-
doc = @document.new
|
153
|
-
lambda { doc.foo_before_typecast }.should raise_error(NoMethodError)
|
154
|
-
end
|
155
|
-
|
156
|
-
should "be accessible for use in a document" do
|
157
|
-
@document.class_eval do
|
158
|
-
def untypcasted_name
|
159
|
-
read_attribute_before_typecast(:name)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
doc = @document.new(:name => 12)
|
164
|
-
doc.name.should == '12'
|
165
|
-
doc.untypcasted_name.should == 12
|
166
|
-
end
|
167
|
-
end
|
168
|
-
|
169
|
-
context "writing an attribute" do
|
170
|
-
should "work for defined keys" do
|
171
|
-
doc = @document.new
|
172
|
-
doc.name = 'John'
|
173
|
-
doc.name.should == 'John'
|
174
|
-
end
|
175
|
-
|
176
|
-
should "raise no method error for undefined keys" do
|
177
|
-
doc = @document.new
|
178
|
-
lambda { doc.fart = 'poof!' }.should raise_error(NoMethodError)
|
179
|
-
end
|
180
|
-
|
181
|
-
should "typecast value" do
|
182
|
-
doc = @document.new
|
183
|
-
doc.name = 1234
|
184
|
-
doc.name.should == '1234'
|
185
|
-
doc.age = '21'
|
186
|
-
doc.age.should == 21
|
187
|
-
end
|
188
|
-
|
189
|
-
should "know if writer defined" do
|
190
|
-
doc = @document.new
|
191
|
-
doc.writer?('name').should be(true)
|
192
|
-
doc.writer?('name=').should be(true)
|
193
|
-
doc.writer?(:name).should be(true)
|
194
|
-
doc.writer?('age').should be(true)
|
195
|
-
doc.writer?('age=').should be(true)
|
196
|
-
doc.writer?(:age).should be(true)
|
197
|
-
doc.writer?('foobar').should be(false)
|
198
|
-
doc.writer?('foobar=').should be(false)
|
199
|
-
doc.writer?(:foobar).should be(false)
|
200
|
-
end
|
201
|
-
|
202
|
-
should "be accessible for use in the model" do
|
203
|
-
@document.class_eval do
|
204
|
-
def name_and_age=(new_value)
|
205
|
-
new_value.match(/([^\(\s]+) \((.*)\)/)
|
206
|
-
write_attribute :name, $1
|
207
|
-
write_attribute :age, $2
|
208
|
-
end
|
209
|
-
end
|
210
|
-
|
211
|
-
doc = @document.new
|
212
|
-
doc.name_and_age = 'Frank (62)'
|
213
|
-
doc.name.should == 'Frank'
|
214
|
-
doc.age.should == 62
|
215
|
-
end
|
216
|
-
end # writing an attribute
|
217
|
-
|
218
|
-
context "respond_to?" do
|
219
|
-
setup do
|
220
|
-
@doc = @document.new
|
221
|
-
end
|
222
|
-
|
223
|
-
should "work for readers" do
|
224
|
-
@doc.respond_to?(:name).should be_true
|
225
|
-
@doc.respond_to?('name').should be_true
|
226
|
-
end
|
227
|
-
|
228
|
-
should "work for writers" do
|
229
|
-
@doc.respond_to?(:name=).should be_true
|
230
|
-
@doc.respond_to?('name=').should be_true
|
231
|
-
end
|
232
|
-
|
233
|
-
should "work for readers before typecast" do
|
234
|
-
@doc.respond_to?(:name_before_typecast).should be_true
|
235
|
-
@doc.respond_to?('name_before_typecast').should be_true
|
236
|
-
end
|
237
|
-
end
|
238
|
-
|
239
|
-
context "equality" do
|
240
|
-
should "be true if all keys and values are equal" do
|
241
|
-
doc1 = @document.new(:name => 'John', :age => 27)
|
242
|
-
doc2 = @document.new(:name => 'John', :age => 27)
|
243
|
-
doc1.should == doc2
|
244
|
-
end
|
245
|
-
|
246
|
-
should "be false if not all the keys and values are equal" do
|
247
|
-
doc1 = @document.new(:name => 'Steve', :age => 27)
|
248
|
-
doc2 = @document.new(:name => 'John', :age => 27)
|
249
|
-
doc1.should_not == doc2
|
250
|
-
end
|
251
|
-
end
|
252
|
-
end # instance of a embedded document
|
253
|
-
end
|
@@ -1,29 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
class TestRailsCompatibility < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
@document = Class.new do
|
6
|
-
include MongoMapper::Document
|
7
|
-
end
|
8
|
-
end
|
9
|
-
|
10
|
-
should "have to_param that returns id" do
|
11
|
-
instance = @document.create('_id' => '1234')
|
12
|
-
instance.to_param.should == '1234'
|
13
|
-
end
|
14
|
-
|
15
|
-
should "alias new to new_record?" do
|
16
|
-
instance = @document.new
|
17
|
-
instance.new_record?.should == instance.new?
|
18
|
-
end
|
19
|
-
|
20
|
-
should "alias many to has_many" do
|
21
|
-
@document.should respond_to(:has_many)
|
22
|
-
@document.method(:has_many).should == @document.method(:many)
|
23
|
-
end
|
24
|
-
|
25
|
-
should "have column names" do
|
26
|
-
@document.key :fname, String
|
27
|
-
@document.column_names.sort.should == ['_id', 'created_at', 'fname', 'updated_at']
|
28
|
-
end
|
29
|
-
end
|