mongoid 2.0.0.alpha → 2.0.0.beta.5
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/lib/mongoid.rb +11 -5
- data/lib/mongoid/associations.rb +112 -107
- data/lib/mongoid/associations/belongs_to_related.rb +2 -3
- data/lib/mongoid/associations/embedded_in.rb +12 -4
- data/lib/mongoid/associations/{embed_many.rb → embeds_many.rb} +101 -32
- data/lib/mongoid/associations/{embed_one.rb → embeds_one.rb} +10 -10
- data/lib/mongoid/associations/has_many_related.rb +51 -5
- data/lib/mongoid/associations/has_one_related.rb +9 -5
- data/lib/mongoid/associations/meta_data.rb +2 -1
- data/lib/mongoid/associations/options.rb +15 -6
- data/lib/mongoid/associations/proxy.rb +14 -21
- data/lib/mongoid/attributes.rb +34 -13
- data/lib/mongoid/callbacks.rb +1 -2
- data/lib/mongoid/collection.rb +4 -3
- data/lib/mongoid/collections.rb +41 -0
- data/lib/mongoid/collections/master.rb +3 -2
- data/lib/mongoid/collections/slaves.rb +3 -2
- data/lib/mongoid/components.rb +4 -1
- data/lib/mongoid/config.rb +163 -13
- data/lib/mongoid/contexts.rb +1 -2
- data/lib/mongoid/contexts/enumerable.rb +1 -1
- data/lib/mongoid/contexts/mongo.rb +1 -1
- data/lib/mongoid/contexts/paging.rb +10 -2
- data/lib/mongoid/criteria.rb +13 -22
- data/lib/mongoid/criterion/exclusion.rb +3 -3
- data/lib/mongoid/criterion/inclusion.rb +17 -0
- data/lib/mongoid/criterion/optional.rb +1 -1
- data/lib/mongoid/dirty.rb +253 -0
- data/lib/mongoid/document.rb +40 -85
- data/lib/mongoid/errors.rb +48 -1
- data/lib/mongoid/extensions.rb +11 -9
- data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
- data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
- data/lib/mongoid/extensions/date/conversions.rb +13 -4
- data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
- data/lib/mongoid/extensions/float/conversions.rb +5 -1
- data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
- data/lib/mongoid/extensions/hash/conversions.rb +34 -4
- data/lib/mongoid/extensions/integer/conversions.rb +5 -1
- data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
- data/lib/mongoid/extensions/object/conversions.rb +3 -3
- data/lib/mongoid/extensions/string/conversions.rb +1 -1
- data/lib/mongoid/extensions/symbol/inflections.rb +5 -2
- data/lib/mongoid/extensions/time_conversions.rb +35 -0
- data/lib/mongoid/factory.rb +2 -1
- data/lib/mongoid/field.rb +15 -2
- data/lib/mongoid/fields.rb +1 -1
- data/lib/mongoid/identity.rb +3 -3
- data/lib/mongoid/indexes.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -2
- data/lib/mongoid/memoization.rb +8 -2
- data/lib/mongoid/named_scope.rb +0 -5
- data/lib/mongoid/observable.rb +1 -1
- data/lib/mongoid/paths.rb +30 -22
- data/lib/mongoid/persistence.rb +218 -0
- data/lib/mongoid/persistence/command.rb +39 -0
- data/lib/mongoid/persistence/insert.rb +47 -0
- data/lib/mongoid/persistence/insert_embedded.rb +38 -0
- data/lib/mongoid/persistence/remove.rb +39 -0
- data/lib/mongoid/persistence/remove_all.rb +37 -0
- data/lib/mongoid/persistence/remove_embedded.rb +50 -0
- data/lib/mongoid/persistence/update.rb +63 -0
- data/lib/mongoid/railtie.rb +53 -0
- data/lib/mongoid/railties/database.rake +37 -0
- data/lib/mongoid/timestamps.rb +2 -2
- data/lib/mongoid/validations.rb +2 -2
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/uniqueness.rb +13 -2
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +3 -2
- data/lib/rails/generators/mongoid/config/config_generator.rb +41 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +24 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +24 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb +15 -0
- data/lib/rails/generators/mongoid_generator.rb +61 -0
- metadata +76 -301
- data/.gitignore +0 -6
- data/.watchr +0 -29
- data/Rakefile +0 -52
- data/VERSION +0 -1
- data/caliper.yml +0 -4
- data/lib/mongoid/collections/mimic.rb +0 -46
- data/lib/mongoid/commands.rb +0 -161
- data/lib/mongoid/commands/create.rb +0 -19
- data/lib/mongoid/commands/delete.rb +0 -16
- data/lib/mongoid/commands/delete_all.rb +0 -23
- data/lib/mongoid/commands/deletion.rb +0 -18
- data/lib/mongoid/commands/destroy.rb +0 -17
- data/lib/mongoid/commands/destroy_all.rb +0 -23
- data/lib/mongoid/commands/save.rb +0 -29
- data/lib/mongoid/extensions/time/conversions.rb +0 -18
- data/mongoid.gemspec +0 -408
- data/perf/benchmark.rb +0 -77
- data/spec/integration/mongoid/associations_spec.rb +0 -340
- data/spec/integration/mongoid/attributes_spec.rb +0 -22
- data/spec/integration/mongoid/commands_spec.rb +0 -227
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
- data/spec/integration/mongoid/criteria_spec.rb +0 -272
- data/spec/integration/mongoid/document_spec.rb +0 -650
- data/spec/integration/mongoid/extensions_spec.rb +0 -22
- data/spec/integration/mongoid/finders_spec.rb +0 -119
- data/spec/integration/mongoid/inheritance_spec.rb +0 -137
- data/spec/integration/mongoid/named_scope_spec.rb +0 -46
- data/spec/models/address.rb +0 -39
- data/spec/models/animal.rb +0 -6
- data/spec/models/callbacks.rb +0 -18
- data/spec/models/comment.rb +0 -8
- data/spec/models/country_code.rb +0 -6
- data/spec/models/employer.rb +0 -5
- data/spec/models/game.rb +0 -7
- data/spec/models/inheritance.rb +0 -56
- data/spec/models/location.rb +0 -5
- data/spec/models/mixed_drink.rb +0 -4
- data/spec/models/name.rb +0 -13
- data/spec/models/namespacing.rb +0 -11
- data/spec/models/patient.rb +0 -4
- data/spec/models/person.rb +0 -99
- data/spec/models/pet.rb +0 -7
- data/spec/models/pet_owner.rb +0 -6
- data/spec/models/phone.rb +0 -7
- data/spec/models/post.rb +0 -15
- data/spec/models/translation.rb +0 -5
- data/spec/models/vet_visit.rb +0 -5
- data/spec/spec.opts +0 -3
- data/spec/spec_helper.rb +0 -31
- data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
- data/spec/unit/mongoid/associations/embed_many_spec.rb +0 -516
- data/spec/unit/mongoid/associations/embed_one_spec.rb +0 -282
- data/spec/unit/mongoid/associations/embedded_in_spec.rb +0 -193
- data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -418
- data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
- data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
- data/spec/unit/mongoid/associations/options_spec.rb +0 -192
- data/spec/unit/mongoid/associations_spec.rb +0 -595
- data/spec/unit/mongoid/attributes_spec.rb +0 -507
- data/spec/unit/mongoid/callbacks_spec.rb +0 -55
- data/spec/unit/mongoid/collection_spec.rb +0 -187
- data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
- data/spec/unit/mongoid/collections/master_spec.rb +0 -41
- data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
- data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
- data/spec/unit/mongoid/commands/create_spec.rb +0 -31
- data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
- data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
- data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -21
- data/spec/unit/mongoid/commands/destroy_spec.rb +0 -51
- data/spec/unit/mongoid/commands/save_spec.rb +0 -107
- data/spec/unit/mongoid/commands_spec.rb +0 -270
- data/spec/unit/mongoid/config_spec.rb +0 -172
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
- data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
- data/spec/unit/mongoid/contexts_spec.rb +0 -25
- data/spec/unit/mongoid/criteria_spec.rb +0 -824
- data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
- data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
- data/spec/unit/mongoid/cursor_spec.rb +0 -74
- data/spec/unit/mongoid/deprecation_spec.rb +0 -24
- data/spec/unit/mongoid/document_spec.rb +0 -818
- data/spec/unit/mongoid/errors_spec.rb +0 -103
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
- data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -67
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
- data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
- data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
- data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
- data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
- data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
- data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
- data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
- data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
- data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
- data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
- data/spec/unit/mongoid/extras_spec.rb +0 -102
- data/spec/unit/mongoid/factory_spec.rb +0 -31
- data/spec/unit/mongoid/field_spec.rb +0 -143
- data/spec/unit/mongoid/fields_spec.rb +0 -181
- data/spec/unit/mongoid/finders_spec.rb +0 -404
- data/spec/unit/mongoid/identity_spec.rb +0 -109
- data/spec/unit/mongoid/indexes_spec.rb +0 -93
- data/spec/unit/mongoid/javascript_spec.rb +0 -48
- data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
- data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
- data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
- data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
- data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
- data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
- data/spec/unit/mongoid/matchers_spec.rb +0 -329
- data/spec/unit/mongoid/memoization_spec.rb +0 -75
- data/spec/unit/mongoid/named_scope_spec.rb +0 -123
- data/spec/unit/mongoid/observable_spec.rb +0 -46
- data/spec/unit/mongoid/paths_spec.rb +0 -124
- data/spec/unit/mongoid/scope_spec.rb +0 -240
- data/spec/unit/mongoid/state_spec.rb +0 -83
- data/spec/unit/mongoid/timestamps_spec.rb +0 -25
- data/spec/unit/mongoid/validations/associated_spec.rb +0 -103
- data/spec/unit/mongoid/validations/uniqueness_spec.rb +0 -47
- data/spec/unit/mongoid/validations_spec.rb +0 -190
- data/spec/unit/mongoid/versioning_spec.rb +0 -41
- data/spec/unit/mongoid_spec.rb +0 -46
@@ -1,507 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Attributes do
|
4
|
-
|
5
|
-
describe ".accepts_nested_attributes_for" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@person = Person.new
|
9
|
-
end
|
10
|
-
|
11
|
-
it "adds a setter for the association attributes" do
|
12
|
-
@person.should respond_to(:addresses_attributes=)
|
13
|
-
end
|
14
|
-
|
15
|
-
describe "#association_attributes=" do
|
16
|
-
|
17
|
-
context "on a has many association" do
|
18
|
-
|
19
|
-
context "when a reject block supplied" do
|
20
|
-
|
21
|
-
before do
|
22
|
-
@attributes = {
|
23
|
-
"0" => { "city" => "San Francisco" }
|
24
|
-
}
|
25
|
-
@person.addresses_attributes = @attributes
|
26
|
-
end
|
27
|
-
|
28
|
-
it "removes the attributes that match" do
|
29
|
-
@person.addresses.should be_empty
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
context "when association is empty" do
|
35
|
-
|
36
|
-
before do
|
37
|
-
@attributes = {
|
38
|
-
"0" => { "street" => "Folsom", "city" => "San Francisco" }
|
39
|
-
}
|
40
|
-
@person.addresses_attributes = @attributes
|
41
|
-
end
|
42
|
-
|
43
|
-
it "adds a new document to the association" do
|
44
|
-
address = @person.addresses.first
|
45
|
-
address.street.should == "Folsom"
|
46
|
-
address.city.should == "San Francisco"
|
47
|
-
end
|
48
|
-
|
49
|
-
end
|
50
|
-
|
51
|
-
context "when association is not empty" do
|
52
|
-
|
53
|
-
before do
|
54
|
-
@person = Person.new
|
55
|
-
@person.addresses.build(:street => "Broadway", :city => "New York")
|
56
|
-
@attributes = {
|
57
|
-
"0" => { "street" => "Folsom", "city" => "San Francisco" }
|
58
|
-
}
|
59
|
-
@person.addresses_attributes = @attributes
|
60
|
-
end
|
61
|
-
|
62
|
-
it "updates the existing attributes on the association" do
|
63
|
-
@person.addresses.size.should == 2
|
64
|
-
end
|
65
|
-
|
66
|
-
end
|
67
|
-
|
68
|
-
end
|
69
|
-
|
70
|
-
context "on a has one association" do
|
71
|
-
|
72
|
-
before do
|
73
|
-
@person = Person.new
|
74
|
-
@attributes = {
|
75
|
-
"first_name" => "Fernando", "last_name" => "Torres"
|
76
|
-
}
|
77
|
-
@person.name_attributes = @attributes
|
78
|
-
end
|
79
|
-
|
80
|
-
it "replaces the document on the association" do
|
81
|
-
name = @person.name
|
82
|
-
name.first_name.should == "Fernando"
|
83
|
-
name.last_name.should == "Torres"
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
end
|
91
|
-
|
92
|
-
describe "#_id" do
|
93
|
-
|
94
|
-
before do
|
95
|
-
@person = Person.new
|
96
|
-
end
|
97
|
-
|
98
|
-
it "delegates to #id" do
|
99
|
-
@person._id.should == @person.id
|
100
|
-
end
|
101
|
-
|
102
|
-
end
|
103
|
-
|
104
|
-
describe "#_id=" do
|
105
|
-
|
106
|
-
before do
|
107
|
-
@person = Person.new
|
108
|
-
end
|
109
|
-
|
110
|
-
it "delegates to #id=" do
|
111
|
-
@id = Mongo::ObjectID.new.to_s
|
112
|
-
@person._id = @id
|
113
|
-
@person.id.should == @id
|
114
|
-
end
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
describe "#method_missing" do
|
119
|
-
|
120
|
-
before do
|
121
|
-
Mongoid.configure.allow_dynamic_fields = true
|
122
|
-
@attributes = {
|
123
|
-
:testing => "Testing"
|
124
|
-
}
|
125
|
-
@person = Person.new(@attributes)
|
126
|
-
end
|
127
|
-
|
128
|
-
context "when an attribute exists" do
|
129
|
-
|
130
|
-
it "allows the getter" do
|
131
|
-
@person.testing.should == "Testing"
|
132
|
-
end
|
133
|
-
|
134
|
-
it "allows the setter" do
|
135
|
-
@person.testing = "Test"
|
136
|
-
@person.testing.should == "Test"
|
137
|
-
end
|
138
|
-
|
139
|
-
end
|
140
|
-
|
141
|
-
end
|
142
|
-
|
143
|
-
describe "#process" do
|
144
|
-
|
145
|
-
context "when passing non accessible fields" do
|
146
|
-
|
147
|
-
before do
|
148
|
-
@person = Person.new(:owner_id => 6)
|
149
|
-
end
|
150
|
-
|
151
|
-
it "does not set the value" do
|
152
|
-
@person.owner_id.should be_nil
|
153
|
-
end
|
154
|
-
end
|
155
|
-
|
156
|
-
context "when attributes dont have fields defined" do
|
157
|
-
|
158
|
-
before do
|
159
|
-
@attributes = {
|
160
|
-
:nofieldstring => "Testing",
|
161
|
-
:nofieldint => 5,
|
162
|
-
:employer => Employer.new
|
163
|
-
}
|
164
|
-
end
|
165
|
-
|
166
|
-
context "when allowing dynamic fields" do
|
167
|
-
|
168
|
-
before do
|
169
|
-
Mongoid.configure.allow_dynamic_fields = true
|
170
|
-
@person = Person.new(@attributes)
|
171
|
-
end
|
172
|
-
|
173
|
-
context "when attribute is a string" do
|
174
|
-
|
175
|
-
it "adds the string to the attributes" do
|
176
|
-
@person.attributes[:nofieldstring].should == "Testing"
|
177
|
-
end
|
178
|
-
|
179
|
-
end
|
180
|
-
|
181
|
-
context "when attribute is not a string" do
|
182
|
-
|
183
|
-
it "adds a cast value to the attributes" do
|
184
|
-
@person.attributes[:nofieldint].should == 5
|
185
|
-
end
|
186
|
-
|
187
|
-
end
|
188
|
-
|
189
|
-
end
|
190
|
-
|
191
|
-
context "when not allowing dynamic fields" do
|
192
|
-
|
193
|
-
before do
|
194
|
-
Mongoid.configure.allow_dynamic_fields = false
|
195
|
-
Person.fields.delete(:nofieldstring)
|
196
|
-
@attributes = {
|
197
|
-
:nofieldstring => "Testing"
|
198
|
-
}
|
199
|
-
end
|
200
|
-
|
201
|
-
after do
|
202
|
-
Mongoid.configure.allow_dynamic_fields = true
|
203
|
-
end
|
204
|
-
|
205
|
-
it "raises an error" do
|
206
|
-
lambda { Person.new(@attributes) }.should raise_error
|
207
|
-
end
|
208
|
-
|
209
|
-
end
|
210
|
-
|
211
|
-
end
|
212
|
-
|
213
|
-
context "when supplied hash has values" do
|
214
|
-
|
215
|
-
before do
|
216
|
-
@attributes = {
|
217
|
-
:_id => "1",
|
218
|
-
:title => "value",
|
219
|
-
:age => "30",
|
220
|
-
:terms => "true",
|
221
|
-
:score => "",
|
222
|
-
:name => {
|
223
|
-
:_id => "2", :first_name => "Test", :last_name => "User"
|
224
|
-
},
|
225
|
-
:addresses => [
|
226
|
-
{ :_id => "3", :street => "First Street" },
|
227
|
-
{ :_id => "4", :street => "Second Street" }
|
228
|
-
]
|
229
|
-
}
|
230
|
-
end
|
231
|
-
|
232
|
-
it "returns properly cast attributes" do
|
233
|
-
attrs = Person.new(@attributes).attributes
|
234
|
-
attrs[:age].should == 30
|
235
|
-
attrs[:terms].should == true
|
236
|
-
attrs[:_id].should == "1"
|
237
|
-
attrs[:score].should be_nil
|
238
|
-
end
|
239
|
-
|
240
|
-
end
|
241
|
-
|
242
|
-
context "when associations provided in the attributes" do
|
243
|
-
|
244
|
-
context "when association is a has_one" do
|
245
|
-
|
246
|
-
before do
|
247
|
-
@name = Name.new(:first_name => "Testy")
|
248
|
-
@attributes = {
|
249
|
-
:name => @name
|
250
|
-
}
|
251
|
-
@person = Person.new(@attributes)
|
252
|
-
end
|
253
|
-
|
254
|
-
it "sets the associations" do
|
255
|
-
@person.name.should == @name
|
256
|
-
end
|
257
|
-
|
258
|
-
end
|
259
|
-
|
260
|
-
context "when association is a belongs_to" do
|
261
|
-
|
262
|
-
before do
|
263
|
-
@person = Person.new
|
264
|
-
@name = Name.new(:first_name => "Tyler", :person => @person)
|
265
|
-
end
|
266
|
-
|
267
|
-
it "sets the association" do
|
268
|
-
@name.person.should == @person
|
269
|
-
end
|
270
|
-
|
271
|
-
end
|
272
|
-
|
273
|
-
end
|
274
|
-
|
275
|
-
context "when non-associations provided in the attributes" do
|
276
|
-
|
277
|
-
before do
|
278
|
-
@employer = Employer.new
|
279
|
-
@attributes = { :employer_id => @employer.id, :title => "Sir" }
|
280
|
-
@person = Person.new(@attributes)
|
281
|
-
end
|
282
|
-
|
283
|
-
it "calls the setter for the association" do
|
284
|
-
@person.employer_id.should == "1"
|
285
|
-
end
|
286
|
-
|
287
|
-
end
|
288
|
-
|
289
|
-
context "when an empty array is provided in the attributes" do
|
290
|
-
|
291
|
-
before do
|
292
|
-
@attributes = {
|
293
|
-
:aliases => []
|
294
|
-
}
|
295
|
-
@person = Person.new(@attributes)
|
296
|
-
end
|
297
|
-
|
298
|
-
it "sets the empty array" do
|
299
|
-
@person.aliases.should == []
|
300
|
-
end
|
301
|
-
|
302
|
-
end
|
303
|
-
|
304
|
-
context "when an empty hash is provided in the attributes" do
|
305
|
-
|
306
|
-
before do
|
307
|
-
@attributes = {
|
308
|
-
:map => {}
|
309
|
-
}
|
310
|
-
@person = Person.new(@attributes)
|
311
|
-
end
|
312
|
-
|
313
|
-
it "sets the empty hash" do
|
314
|
-
@person.map.should == {}
|
315
|
-
end
|
316
|
-
|
317
|
-
end
|
318
|
-
|
319
|
-
end
|
320
|
-
|
321
|
-
context "updating when attributes already exist" do
|
322
|
-
|
323
|
-
before do
|
324
|
-
@person = Person.new(:title => "Sir")
|
325
|
-
@attributes = { :dob => "2000-01-01" }
|
326
|
-
end
|
327
|
-
|
328
|
-
it "only overwrites supplied attributes" do
|
329
|
-
@person.process(@attributes)
|
330
|
-
@person.title.should == "Sir"
|
331
|
-
end
|
332
|
-
|
333
|
-
end
|
334
|
-
|
335
|
-
describe "#read_attribute" do
|
336
|
-
|
337
|
-
context "when attribute does not exist" do
|
338
|
-
|
339
|
-
before do
|
340
|
-
@person = Person.new
|
341
|
-
end
|
342
|
-
|
343
|
-
it "returns the default value" do
|
344
|
-
@person.age.should == 100
|
345
|
-
@person.pets.should == false
|
346
|
-
end
|
347
|
-
|
348
|
-
end
|
349
|
-
|
350
|
-
context "when attribute is not accessible" do
|
351
|
-
|
352
|
-
before do
|
353
|
-
@person = Person.new
|
354
|
-
@person.owner_id = 5
|
355
|
-
end
|
356
|
-
|
357
|
-
it "returns the value" do
|
358
|
-
@person.read_attribute(:owner_id).should == 5
|
359
|
-
end
|
360
|
-
end
|
361
|
-
|
362
|
-
end
|
363
|
-
|
364
|
-
describe "#remove_attribute" do
|
365
|
-
|
366
|
-
context "when the attribute exists" do
|
367
|
-
|
368
|
-
it "removes the attribute" do
|
369
|
-
person = Person.new(:title => "Sir")
|
370
|
-
person.remove_attribute(:title)
|
371
|
-
person.title.should be_nil
|
372
|
-
end
|
373
|
-
|
374
|
-
end
|
375
|
-
|
376
|
-
context "when the attribute does not exist" do
|
377
|
-
|
378
|
-
it "does nothing" do
|
379
|
-
person = Person.new
|
380
|
-
person.remove_attribute(:title)
|
381
|
-
person.title.should be_nil
|
382
|
-
end
|
383
|
-
|
384
|
-
end
|
385
|
-
|
386
|
-
end
|
387
|
-
|
388
|
-
describe "#write_attribute" do
|
389
|
-
|
390
|
-
context "when attribute does not exist" do
|
391
|
-
|
392
|
-
before do
|
393
|
-
@person = Person.new
|
394
|
-
end
|
395
|
-
|
396
|
-
it "returns the default value" do
|
397
|
-
@person.age = nil
|
398
|
-
@person.age.should == 100
|
399
|
-
end
|
400
|
-
|
401
|
-
end
|
402
|
-
|
403
|
-
context "when field has a default value" do
|
404
|
-
|
405
|
-
before do
|
406
|
-
@person = Person.new
|
407
|
-
end
|
408
|
-
|
409
|
-
it "should allow overwriting of the default value" do
|
410
|
-
@person.terms = true
|
411
|
-
@person.terms.should be_true
|
412
|
-
end
|
413
|
-
|
414
|
-
end
|
415
|
-
|
416
|
-
end
|
417
|
-
|
418
|
-
describe "#attributes=" do
|
419
|
-
it 'should be a alias of write_attributes' do
|
420
|
-
|
421
|
-
end
|
422
|
-
end
|
423
|
-
|
424
|
-
[:attributes=, :write_attributes].each do |method|
|
425
|
-
describe "##{method}" do
|
426
|
-
|
427
|
-
context "typecasting" do
|
428
|
-
|
429
|
-
before do
|
430
|
-
@person = Person.new
|
431
|
-
@attributes = { :age => "50" }
|
432
|
-
end
|
433
|
-
|
434
|
-
it "properly casts values" do
|
435
|
-
@person.send(method, @attributes)
|
436
|
-
@person.age.should == 50
|
437
|
-
end
|
438
|
-
|
439
|
-
it "allows passing of nil" do
|
440
|
-
@person.send(method, nil)
|
441
|
-
@person.age.should == 100
|
442
|
-
end
|
443
|
-
|
444
|
-
end
|
445
|
-
|
446
|
-
context "on a parent document" do
|
447
|
-
|
448
|
-
context "when the parent has a has many through a has one" do
|
449
|
-
|
450
|
-
before do
|
451
|
-
@owner = PetOwner.new(:title => "Mr")
|
452
|
-
@pet = Pet.new(:name => "Fido")
|
453
|
-
@owner.pet = @pet
|
454
|
-
@vet_visit = VetVisit.new(:date => Date.today)
|
455
|
-
@pet.vet_visits = [@vet_visit]
|
456
|
-
end
|
457
|
-
|
458
|
-
it "does not overwrite child attributes if not in the hash" do
|
459
|
-
@owner.send(method, { :pet => { :name => "Bingo" } })
|
460
|
-
@owner.pet.name.should == "Bingo"
|
461
|
-
@owner.pet.vet_visits.size.should == 1
|
462
|
-
end
|
463
|
-
|
464
|
-
end
|
465
|
-
|
466
|
-
end
|
467
|
-
|
468
|
-
context "on a child document" do
|
469
|
-
|
470
|
-
context "when child is part of a has one" do
|
471
|
-
|
472
|
-
before do
|
473
|
-
@person = Person.new(:title => "Sir", :age => 30)
|
474
|
-
@name = Name.new(:first_name => "Test", :last_name => "User")
|
475
|
-
@person.name = @name
|
476
|
-
end
|
477
|
-
|
478
|
-
it "sets the child attributes on the parent" do
|
479
|
-
@name.send(method, :first_name => "Test2", :last_name => "User2")
|
480
|
-
@person.attributes[:name].should ==
|
481
|
-
{ "_id" => "test-user", "first_name" => "Test2", "last_name" => "User2", "_type" => "Name" }
|
482
|
-
end
|
483
|
-
|
484
|
-
end
|
485
|
-
|
486
|
-
context "when child is part of a has many" do
|
487
|
-
|
488
|
-
before do
|
489
|
-
@person = Person.new(:title => "Sir")
|
490
|
-
@address = Address.new(:street => "Test")
|
491
|
-
@person.addresses << @address
|
492
|
-
end
|
493
|
-
|
494
|
-
it "updates the child attributes on the parent" do
|
495
|
-
@address.send(method, "street" => "Test2")
|
496
|
-
@person.attributes[:addresses].should ==
|
497
|
-
[ { "_id" => "test", "street" => "Test2", "_type" => "Address" } ]
|
498
|
-
end
|
499
|
-
|
500
|
-
end
|
501
|
-
|
502
|
-
end
|
503
|
-
end
|
504
|
-
|
505
|
-
end
|
506
|
-
|
507
|
-
end
|