mongo_mapper-rails3 0.7.0.1 → 0.7.2
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/README.rdoc +8 -37
- metadata +16 -284
- data/.gitignore +0 -10
- data/Gemfile +0 -15
- data/LICENSE +0 -20
- data/Rakefile +0 -58
- data/VERSION +0 -1
- data/bin/mmconsole +0 -60
- data/lib/mongo_mapper.rb +0 -131
- data/lib/mongo_mapper/document.rb +0 -439
- data/lib/mongo_mapper/embedded_document.rb +0 -68
- data/lib/mongo_mapper/plugins.rb +0 -30
- data/lib/mongo_mapper/plugins/associations.rb +0 -106
- data/lib/mongo_mapper/plugins/associations/base.rb +0 -123
- data/lib/mongo_mapper/plugins/associations/belongs_to_polymorphic_proxy.rb +0 -30
- data/lib/mongo_mapper/plugins/associations/belongs_to_proxy.rb +0 -25
- data/lib/mongo_mapper/plugins/associations/collection.rb +0 -21
- data/lib/mongo_mapper/plugins/associations/embedded_collection.rb +0 -50
- data/lib/mongo_mapper/plugins/associations/in_array_proxy.rb +0 -141
- data/lib/mongo_mapper/plugins/associations/many_documents_as_proxy.rb +0 -28
- data/lib/mongo_mapper/plugins/associations/many_documents_proxy.rb +0 -120
- data/lib/mongo_mapper/plugins/associations/many_embedded_polymorphic_proxy.rb +0 -31
- data/lib/mongo_mapper/plugins/associations/many_embedded_proxy.rb +0 -23
- data/lib/mongo_mapper/plugins/associations/many_polymorphic_proxy.rb +0 -13
- data/lib/mongo_mapper/plugins/associations/one_proxy.rb +0 -68
- data/lib/mongo_mapper/plugins/associations/proxy.rb +0 -119
- data/lib/mongo_mapper/plugins/callbacks.rb +0 -87
- data/lib/mongo_mapper/plugins/clone.rb +0 -14
- data/lib/mongo_mapper/plugins/descendants.rb +0 -17
- data/lib/mongo_mapper/plugins/dirty.rb +0 -120
- data/lib/mongo_mapper/plugins/equality.rb +0 -24
- data/lib/mongo_mapper/plugins/identity_map.rb +0 -124
- data/lib/mongo_mapper/plugins/inspect.rb +0 -15
- data/lib/mongo_mapper/plugins/keys.rb +0 -310
- data/lib/mongo_mapper/plugins/logger.rb +0 -19
- data/lib/mongo_mapper/plugins/pagination.rb +0 -26
- data/lib/mongo_mapper/plugins/pagination/proxy.rb +0 -72
- data/lib/mongo_mapper/plugins/protected.rb +0 -46
- data/lib/mongo_mapper/plugins/rails.rb +0 -46
- data/lib/mongo_mapper/plugins/serialization.rb +0 -50
- data/lib/mongo_mapper/plugins/validations.rb +0 -88
- data/lib/mongo_mapper/query.rb +0 -130
- data/lib/mongo_mapper/support.rb +0 -217
- data/lib/mongo_mapper/support/descendant_appends.rb +0 -46
- data/lib/mongo_mapper/support/find.rb +0 -77
- data/mongo_mapper-rails3.gemspec +0 -208
- data/performance/read_write.rb +0 -52
- data/specs.watchr +0 -51
- data/test/NOTE_ON_TESTING +0 -1
- data/test/functional/associations/test_belongs_to_polymorphic_proxy.rb +0 -63
- data/test/functional/associations/test_belongs_to_proxy.rb +0 -101
- data/test/functional/associations/test_in_array_proxy.rb +0 -321
- data/test/functional/associations/test_many_documents_as_proxy.rb +0 -229
- data/test/functional/associations/test_many_documents_proxy.rb +0 -453
- data/test/functional/associations/test_many_embedded_polymorphic_proxy.rb +0 -176
- data/test/functional/associations/test_many_embedded_proxy.rb +0 -256
- data/test/functional/associations/test_many_polymorphic_proxy.rb +0 -302
- data/test/functional/associations/test_one_proxy.rb +0 -161
- data/test/functional/test_associations.rb +0 -44
- data/test/functional/test_binary.rb +0 -27
- data/test/functional/test_callbacks.rb +0 -81
- data/test/functional/test_dirty.rb +0 -163
- data/test/functional/test_document.rb +0 -1244
- data/test/functional/test_embedded_document.rb +0 -125
- data/test/functional/test_identity_map.rb +0 -508
- data/test/functional/test_logger.rb +0 -20
- data/test/functional/test_modifiers.rb +0 -252
- data/test/functional/test_pagination.rb +0 -93
- data/test/functional/test_protected.rb +0 -161
- data/test/functional/test_string_id_compatibility.rb +0 -67
- data/test/functional/test_validations.rb +0 -329
- data/test/models.rb +0 -232
- data/test/support/custom_matchers.rb +0 -55
- data/test/support/timing.rb +0 -16
- data/test/test_helper.rb +0 -59
- data/test/unit/associations/test_base.rb +0 -207
- data/test/unit/associations/test_proxy.rb +0 -105
- data/test/unit/serializers/test_json_serializer.rb +0 -189
- data/test/unit/test_descendant_appends.rb +0 -71
- data/test/unit/test_document.rb +0 -231
- data/test/unit/test_dynamic_finder.rb +0 -123
- data/test/unit/test_embedded_document.rb +0 -663
- data/test/unit/test_keys.rb +0 -169
- data/test/unit/test_lint.rb +0 -8
- data/test/unit/test_mongo_mapper.rb +0 -125
- data/test/unit/test_pagination.rb +0 -160
- data/test/unit/test_plugins.rb +0 -51
- data/test/unit/test_query.rb +0 -334
- data/test/unit/test_rails.rb +0 -123
- data/test/unit/test_rails_compatibility.rb +0 -57
- data/test/unit/test_serialization.rb +0 -51
- data/test/unit/test_support.rb +0 -362
- data/test/unit/test_time_zones.rb +0 -39
- data/test/unit/test_validations.rb +0 -557
data/test/unit/test_plugins.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
|
3
|
-
module MyPlugin
|
4
|
-
extend ActiveSupport::Concern
|
5
|
-
def self.configure(model)
|
6
|
-
model.class_eval { attr_accessor :from_configure }
|
7
|
-
end
|
8
|
-
|
9
|
-
module ClassMethods
|
10
|
-
def class_foo
|
11
|
-
'class_foo'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
module InstanceMethods
|
16
|
-
def instance_foo
|
17
|
-
'instance_foo'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
class PluginsTest < Test::Unit::TestCase
|
23
|
-
context "plugin" do
|
24
|
-
setup do
|
25
|
-
@document = Class.new do
|
26
|
-
extend MongoMapper::Plugins
|
27
|
-
plugin MyPlugin
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
should "include instance methods" do
|
32
|
-
@document.new.instance_foo.should == 'instance_foo'
|
33
|
-
end
|
34
|
-
|
35
|
-
should "extend class methods" do
|
36
|
-
@document.class_foo.should == 'class_foo'
|
37
|
-
end
|
38
|
-
|
39
|
-
should "pass model to configure" do
|
40
|
-
@document.new.should respond_to(:from_configure)
|
41
|
-
end
|
42
|
-
|
43
|
-
should "default plugins to empty array" do
|
44
|
-
Class.new { extend MongoMapper::Plugins }.plugins.should == []
|
45
|
-
end
|
46
|
-
|
47
|
-
should "add plugin to plugins" do
|
48
|
-
@document.plugins.should include(MyPlugin)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
data/test/unit/test_query.rb
DELETED
@@ -1,334 +0,0 @@
|
|
1
|
-
require 'test_helper'
|
2
|
-
require 'models'
|
3
|
-
|
4
|
-
class QueryTest < Test::Unit::TestCase
|
5
|
-
include MongoMapper
|
6
|
-
|
7
|
-
should "raise error if provided something other than a hash" do
|
8
|
-
lambda { Query.new(Room) }.should raise_error(ArgumentError)
|
9
|
-
lambda { Query.new(Room, 1) }.should raise_error(ArgumentError)
|
10
|
-
end
|
11
|
-
|
12
|
-
should "symbolize the keys of the hash provided" do
|
13
|
-
Query.new(Room, 'offset' => 1).options.keys.map do |key|
|
14
|
-
key.should be_instance_of(Symbol)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
context "Converting conditions to criteria" do
|
19
|
-
should "not add _type to query if model does not have superclass that is single collection inherited" do
|
20
|
-
Query.new(Message, :foo => 'bar').criteria.should == {
|
21
|
-
:foo => 'bar'
|
22
|
-
}
|
23
|
-
end
|
24
|
-
|
25
|
-
should "not add _type to nested conditions" do
|
26
|
-
Query.new(Enter, :foo => 'bar', :age => {'$gt' => 21}).criteria.should == {
|
27
|
-
:foo => 'bar',
|
28
|
-
:age => {'$gt' => 21},
|
29
|
-
:_type => 'Enter'
|
30
|
-
}
|
31
|
-
end
|
32
|
-
|
33
|
-
should "automatically add _type to query if model is single collection inherited" do
|
34
|
-
Query.new(Enter, :foo => 'bar').criteria.should == {
|
35
|
-
:foo => 'bar',
|
36
|
-
:_type => 'Enter'
|
37
|
-
}
|
38
|
-
end
|
39
|
-
|
40
|
-
%w{gt lt gte lte ne in nin mod all size where exists}.each do |operator|
|
41
|
-
should "convert #{operator} conditions" do
|
42
|
-
Query.new(Room, :age.send(operator) => 21).criteria.should == {
|
43
|
-
:age => {"$#{operator}" => 21}
|
44
|
-
}
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
should "normalize value when using symbol operators" do
|
49
|
-
time = Time.now.in_time_zone('Indiana (East)')
|
50
|
-
criteria = Query.new(Room, :created_at.gt => time).criteria
|
51
|
-
criteria[:created_at]['$gt'].should be_utc
|
52
|
-
end
|
53
|
-
|
54
|
-
should "work with simple criteria" do
|
55
|
-
Query.new(Room, :foo => 'bar').criteria.should == {
|
56
|
-
:foo => 'bar'
|
57
|
-
}
|
58
|
-
|
59
|
-
Query.new(Room, :foo => 'bar', :baz => 'wick').criteria.should == {
|
60
|
-
:foo => 'bar',
|
61
|
-
:baz => 'wick'
|
62
|
-
}
|
63
|
-
end
|
64
|
-
|
65
|
-
should "convert id to _id" do
|
66
|
-
id = Mongo::ObjectID.new
|
67
|
-
Query.new(Room, :id => id).criteria.should == {:_id => id}
|
68
|
-
end
|
69
|
-
|
70
|
-
should "convert id with symbol operator to _id with modifier" do
|
71
|
-
id = Mongo::ObjectID.new
|
72
|
-
Query.new(Room, :id.ne => id).criteria.should == {
|
73
|
-
:_id => {'$ne' => id}
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
should "make sure that _id's are object ids" do
|
78
|
-
id = Mongo::ObjectID.new
|
79
|
-
Query.new(Room, :_id => id.to_s).criteria.should == {:_id => id}
|
80
|
-
end
|
81
|
-
|
82
|
-
should "work fine with _id's that are object ids" do
|
83
|
-
id = Mongo::ObjectID.new
|
84
|
-
Query.new(Room, :_id => id).criteria.should == {:_id => id}
|
85
|
-
end
|
86
|
-
|
87
|
-
should "make sure other object id typed keys get converted" do
|
88
|
-
id = Mongo::ObjectID.new
|
89
|
-
Query.new(Message, :room_id => id.to_s).criteria.should == {:room_id => id}
|
90
|
-
end
|
91
|
-
|
92
|
-
should "work fine with object ids for object id typed keys" do
|
93
|
-
id = Mongo::ObjectID.new
|
94
|
-
Query.new(Message, :room_id => id).criteria.should == {:room_id => id}
|
95
|
-
end
|
96
|
-
|
97
|
-
should "convert times to utc if they aren't already" do
|
98
|
-
time = Time.now.in_time_zone('Indiana (East)')
|
99
|
-
criteria = Query.new(Room, :created_at => time).criteria
|
100
|
-
criteria[:created_at].utc?.should be_true
|
101
|
-
end
|
102
|
-
|
103
|
-
should "not funk with times already in utc" do
|
104
|
-
time = Time.now.utc
|
105
|
-
criteria = Query.new(Room, :created_at => time).criteria
|
106
|
-
criteria[:created_at].utc?.should be_true
|
107
|
-
criteria[:created_at].should == time
|
108
|
-
end
|
109
|
-
|
110
|
-
should "use $in for arrays" do
|
111
|
-
Query.new(Room, :foo => [1,2,3]).criteria.should == {
|
112
|
-
:foo => {'$in' => [1,2,3]}
|
113
|
-
}
|
114
|
-
end
|
115
|
-
|
116
|
-
should "not use $in for arrays if already using array operator" do
|
117
|
-
Query.new(Room, :foo => {'$all' => [1,2,3]}).criteria.should == {
|
118
|
-
:foo => {'$all' => [1,2,3]}
|
119
|
-
}
|
120
|
-
|
121
|
-
Query.new(Room, :foo => {'$any' => [1,2,3]}).criteria.should == {
|
122
|
-
:foo => {'$any' => [1,2,3]}
|
123
|
-
}
|
124
|
-
end
|
125
|
-
|
126
|
-
should "work arbitrarily deep" do
|
127
|
-
Query.new(Room, :foo => {:bar => [1,2,3]}).criteria.should == {
|
128
|
-
:foo => {:bar => {'$in' => [1,2,3]}}
|
129
|
-
}
|
130
|
-
|
131
|
-
Query.new(Room, :foo => {:bar => {'$any' => [1,2,3]}}).criteria.should == {
|
132
|
-
:foo => {:bar => {'$any' => [1,2,3]}}
|
133
|
-
}
|
134
|
-
end
|
135
|
-
end
|
136
|
-
|
137
|
-
context "ordering" do
|
138
|
-
should "single field with ascending direction" do
|
139
|
-
sort = [['foo', 1]]
|
140
|
-
Query.new(Room, :order => 'foo asc').options[:sort].should == sort
|
141
|
-
Query.new(Room, :order => 'foo ASC').options[:sort].should == sort
|
142
|
-
end
|
143
|
-
|
144
|
-
should "single field with descending direction" do
|
145
|
-
sort = [['foo', -1]]
|
146
|
-
Query.new(Room, :order => 'foo desc').options[:sort].should == sort
|
147
|
-
Query.new(Room, :order => 'foo DESC').options[:sort].should == sort
|
148
|
-
end
|
149
|
-
|
150
|
-
should "convert order operators to mongo sort" do
|
151
|
-
Query.new(Room, :order => :foo.asc).options[:sort].should == [['foo', 1]]
|
152
|
-
Query.new(Room, :order => :foo.desc).options[:sort].should == [['foo', -1]]
|
153
|
-
end
|
154
|
-
|
155
|
-
should "convert array of order operators to mongo sort" do
|
156
|
-
Query.new(Room, :order => [:foo.asc, :bar.desc]).options[:sort].should == [['foo', 1], ['bar', -1]]
|
157
|
-
end
|
158
|
-
|
159
|
-
should "convert field without direction to ascending" do
|
160
|
-
sort = [['foo', 1]]
|
161
|
-
Query.new(Room, :order => 'foo').options[:sort].should == sort
|
162
|
-
end
|
163
|
-
|
164
|
-
should "convert multiple fields with directions" do
|
165
|
-
sort = [['foo', -1], ['bar', 1], ['baz', -1]]
|
166
|
-
Query.new(Room, :order => 'foo desc, bar asc, baz desc').options[:sort].should == sort
|
167
|
-
end
|
168
|
-
|
169
|
-
should "convert multiple fields with some missing directions" do
|
170
|
-
sort = [['foo', -1], ['bar', 1], ['baz', 1]]
|
171
|
-
Query.new(Room, :order => 'foo desc, bar, baz').options[:sort].should == sort
|
172
|
-
end
|
173
|
-
|
174
|
-
should "just use sort if sort and order are present" do
|
175
|
-
sort = [['$natural', 1]]
|
176
|
-
Query.new(Room, :sort => sort, :order => 'foo asc').options[:sort].should == sort
|
177
|
-
end
|
178
|
-
|
179
|
-
should "convert natural in order to proper" do
|
180
|
-
sort = [['$natural', 1]]
|
181
|
-
Query.new(Room, :order => '$natural asc').options[:sort].should == sort
|
182
|
-
sort = [['$natural', -1]]
|
183
|
-
Query.new(Room, :order => '$natural desc').options[:sort].should == sort
|
184
|
-
end
|
185
|
-
|
186
|
-
should "work for natural order ascending" do
|
187
|
-
Query.new(Room, :sort => {'$natural' => 1}).options[:sort]['$natural'].should == 1
|
188
|
-
end
|
189
|
-
|
190
|
-
should "work for natural order descending" do
|
191
|
-
Query.new(Room, :sort => {'$natural' => -1}).options[:sort]['$natural'].should == -1
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
context "skip" do
|
196
|
-
should "default to 0" do
|
197
|
-
Query.new(Room, {}).options[:skip].should == 0
|
198
|
-
end
|
199
|
-
|
200
|
-
should "use skip provided" do
|
201
|
-
Query.new(Room, :skip => 2).options[:skip].should == 2
|
202
|
-
end
|
203
|
-
|
204
|
-
should "covert string to integer" do
|
205
|
-
Query.new(Room, :skip => '2').options[:skip].should == 2
|
206
|
-
end
|
207
|
-
|
208
|
-
should "convert offset to skip" do
|
209
|
-
Query.new(Room, :offset => 1).options[:skip].should == 1
|
210
|
-
end
|
211
|
-
end
|
212
|
-
|
213
|
-
context "limit" do
|
214
|
-
should "default to 0" do
|
215
|
-
Query.new(Room, {}).options[:limit].should == 0
|
216
|
-
end
|
217
|
-
|
218
|
-
should "use limit provided" do
|
219
|
-
Query.new(Room, :limit => 2).options[:limit].should == 2
|
220
|
-
end
|
221
|
-
|
222
|
-
should "covert string to integer" do
|
223
|
-
Query.new(Room, :limit => '2').options[:limit].should == 2
|
224
|
-
end
|
225
|
-
end
|
226
|
-
|
227
|
-
context "fields" do
|
228
|
-
should "default to nil" do
|
229
|
-
Query.new(Room, {}).options[:fields].should be(nil)
|
230
|
-
end
|
231
|
-
|
232
|
-
should "be converted to nil if empty string" do
|
233
|
-
Query.new(Room, :fields => '').options[:fields].should be(nil)
|
234
|
-
end
|
235
|
-
|
236
|
-
should "be converted to nil if []" do
|
237
|
-
Query.new(Room, :fields => []).options[:fields].should be(nil)
|
238
|
-
end
|
239
|
-
|
240
|
-
should "should work with array" do
|
241
|
-
Query.new(Room, {:fields => %w(a b)}).options[:fields].should == %w(a b)
|
242
|
-
end
|
243
|
-
|
244
|
-
should "convert comma separated list to array" do
|
245
|
-
Query.new(Room, {:fields => 'a, b'}).options[:fields].should == %w(a b)
|
246
|
-
end
|
247
|
-
|
248
|
-
should "also work as select" do
|
249
|
-
Query.new(Room, :select => %w(a b)).options[:fields].should == %w(a b)
|
250
|
-
end
|
251
|
-
|
252
|
-
should "also work with select as array of symbols" do
|
253
|
-
Query.new(Room, :select => [:a, :b]).options[:fields].should == [:a, :b]
|
254
|
-
end
|
255
|
-
end
|
256
|
-
|
257
|
-
context "Condition auto-detection" do
|
258
|
-
should "know :conditions are criteria" do
|
259
|
-
finder = Query.new(Room, :conditions => {:foo => 'bar'})
|
260
|
-
finder.criteria.should == {:foo => 'bar'}
|
261
|
-
finder.options.keys.should_not include(:conditions)
|
262
|
-
end
|
263
|
-
|
264
|
-
should "know fields is an option" do
|
265
|
-
finder = Query.new(Room, :fields => ['foo'])
|
266
|
-
finder.options[:fields].should == ['foo']
|
267
|
-
finder.criteria.keys.should_not include(:fields)
|
268
|
-
end
|
269
|
-
|
270
|
-
# select gets converted to fields so just checking keys
|
271
|
-
should "know select is an option" do
|
272
|
-
finder = Query.new(Room, :select => 'foo')
|
273
|
-
finder.options.keys.should include(:sort)
|
274
|
-
finder.criteria.keys.should_not include(:select)
|
275
|
-
finder.criteria.keys.should_not include(:fields)
|
276
|
-
end
|
277
|
-
|
278
|
-
should "know skip is an option" do
|
279
|
-
finder = Query.new(Room, :skip => 10)
|
280
|
-
finder.options[:skip].should == 10
|
281
|
-
finder.criteria.keys.should_not include(:skip)
|
282
|
-
end
|
283
|
-
|
284
|
-
# offset gets converted to skip so just checking keys
|
285
|
-
should "know offset is an option" do
|
286
|
-
finder = Query.new(Room, :offset => 10)
|
287
|
-
finder.options.keys.should include(:skip)
|
288
|
-
finder.criteria.keys.should_not include(:skip)
|
289
|
-
finder.criteria.keys.should_not include(:offset)
|
290
|
-
end
|
291
|
-
|
292
|
-
should "know limit is an option" do
|
293
|
-
finder = Query.new(Room, :limit => 10)
|
294
|
-
finder.options[:limit].should == 10
|
295
|
-
finder.criteria.keys.should_not include(:limit)
|
296
|
-
end
|
297
|
-
|
298
|
-
should "know sort is an option" do
|
299
|
-
finder = Query.new(Room, :sort => [['foo', 1]])
|
300
|
-
finder.options[:sort].should == [['foo', 1]]
|
301
|
-
finder.criteria.keys.should_not include(:sort)
|
302
|
-
end
|
303
|
-
|
304
|
-
# order gets converted to sort so just checking keys
|
305
|
-
should "know order is an option" do
|
306
|
-
finder = Query.new(Room, :order => 'foo')
|
307
|
-
finder.options.keys.should include(:sort)
|
308
|
-
finder.criteria.keys.should_not include(:sort)
|
309
|
-
end
|
310
|
-
|
311
|
-
should "work with full range of things" do
|
312
|
-
query_options = Query.new(Room, {
|
313
|
-
:foo => 'bar',
|
314
|
-
:baz => true,
|
315
|
-
:sort => [['foo', 1]],
|
316
|
-
:fields => ['foo', 'baz'],
|
317
|
-
:limit => 10,
|
318
|
-
:skip => 10,
|
319
|
-
})
|
320
|
-
|
321
|
-
query_options.criteria.should == {
|
322
|
-
:foo => 'bar',
|
323
|
-
:baz => true,
|
324
|
-
}
|
325
|
-
|
326
|
-
query_options.options.should == {
|
327
|
-
:sort => [['foo', 1]],
|
328
|
-
:fields => ['foo', 'baz'],
|
329
|
-
:limit => 10,
|
330
|
-
:skip => 10,
|
331
|
-
}
|
332
|
-
end
|
333
|
-
end
|
334
|
-
end
|
data/test/unit/test_rails.rb
DELETED
@@ -1,123 +0,0 @@
|
|
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.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.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
|