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,172 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Config do
|
4
|
-
|
5
|
-
after :all do
|
6
|
-
config.raise_not_found_error = true
|
7
|
-
end
|
8
|
-
|
9
|
-
let(:config) { Mongoid::Config.instance }
|
10
|
-
|
11
|
-
describe "#database=" do
|
12
|
-
|
13
|
-
context "when object provided is not a Mongo::DB" do
|
14
|
-
|
15
|
-
it "raises an error" do
|
16
|
-
lambda { config.database = "Test" }.should raise_error
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "#master=" do
|
24
|
-
|
25
|
-
context "when object provided is not a Mongo::DB" do
|
26
|
-
|
27
|
-
it "raises an error" do
|
28
|
-
lambda { config.master = "Test" }.should raise_error
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
end
|
34
|
-
|
35
|
-
describe "#parameterize_keys" do
|
36
|
-
|
37
|
-
it "defaults to true" do
|
38
|
-
config.parameterize_keys.should == true
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
describe "#persist_types" do
|
43
|
-
|
44
|
-
it "defaults to true" do
|
45
|
-
config.persist_types.should == true
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#persist_in_safe_mode=" do
|
50
|
-
|
51
|
-
context "when setting to true" do
|
52
|
-
|
53
|
-
before do
|
54
|
-
config.persist_in_safe_mode = true
|
55
|
-
end
|
56
|
-
|
57
|
-
it "sets the value" do
|
58
|
-
config.persist_in_safe_mode.should == true
|
59
|
-
end
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
context "when setting to false" do
|
64
|
-
|
65
|
-
before do
|
66
|
-
config.persist_in_safe_mode = false
|
67
|
-
end
|
68
|
-
|
69
|
-
it "sets the value" do
|
70
|
-
config.persist_in_safe_mode.should == false
|
71
|
-
end
|
72
|
-
|
73
|
-
end
|
74
|
-
|
75
|
-
end
|
76
|
-
|
77
|
-
describe "#raise_not_found_error=" do
|
78
|
-
|
79
|
-
context "when setting to true" do
|
80
|
-
|
81
|
-
before do
|
82
|
-
config.raise_not_found_error = true
|
83
|
-
end
|
84
|
-
|
85
|
-
it "sets the value" do
|
86
|
-
config.raise_not_found_error.should == true
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
context "when setting to false" do
|
92
|
-
|
93
|
-
before do
|
94
|
-
config.raise_not_found_error = false
|
95
|
-
end
|
96
|
-
|
97
|
-
it "sets the value" do
|
98
|
-
config.raise_not_found_error.should == false
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
104
|
-
|
105
|
-
describe "#reconnect_time" do
|
106
|
-
|
107
|
-
it "defaults to 3" do
|
108
|
-
config.reconnect_time.should == 3
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
|
113
|
-
describe "#reconnect_time=" do
|
114
|
-
|
115
|
-
after do
|
116
|
-
config.reconnect_time = 3
|
117
|
-
end
|
118
|
-
|
119
|
-
it "sets the time" do
|
120
|
-
config.reconnect_time = 5
|
121
|
-
config.reconnect_time.should == 5
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
describe "#slaves=" do
|
126
|
-
|
127
|
-
context "when object provided is not a Mongo::DB" do
|
128
|
-
|
129
|
-
it "raises an error" do
|
130
|
-
lambda { config.slaves = ["Test"] }.should raise_error
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
end
|
136
|
-
|
137
|
-
describe "#allow_dynamic_fields=" do
|
138
|
-
|
139
|
-
context "when setting to true" do
|
140
|
-
|
141
|
-
before do
|
142
|
-
config.allow_dynamic_fields = true
|
143
|
-
end
|
144
|
-
|
145
|
-
it "sets the value" do
|
146
|
-
config.allow_dynamic_fields.should == true
|
147
|
-
end
|
148
|
-
|
149
|
-
end
|
150
|
-
|
151
|
-
context "when setting to false" do
|
152
|
-
|
153
|
-
before do
|
154
|
-
config.allow_dynamic_fields = false
|
155
|
-
end
|
156
|
-
|
157
|
-
it "sets the value" do
|
158
|
-
config.allow_dynamic_fields.should == false
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
|
-
end
|
164
|
-
|
165
|
-
describe "#use_object_ids" do
|
166
|
-
|
167
|
-
it "defaults to false" do
|
168
|
-
config.use_object_ids.should == false
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
end
|
@@ -1,421 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Contexts::Enumerable do
|
4
|
-
|
5
|
-
before do
|
6
|
-
@london = Address.new(:number => 1, :street => "Bond Street")
|
7
|
-
@shanghai = Address.new(:number => 10, :street => "Nan Jing Dong Lu")
|
8
|
-
@melbourne = Address.new(:number => 20, :street => "Bourke Street")
|
9
|
-
@new_york = Address.new(:number => 20, :street => "Broadway")
|
10
|
-
@docs = [ @london, @shanghai, @melbourne, @new_york ]
|
11
|
-
@criteria = Mongoid::Criteria.new(Address)
|
12
|
-
@criteria.documents = @docs
|
13
|
-
@criteria.where(:street => "Bourke Street").only(:number)
|
14
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
15
|
-
end
|
16
|
-
|
17
|
-
describe "#aggregate" do
|
18
|
-
|
19
|
-
before do
|
20
|
-
@counts = @context.aggregate
|
21
|
-
end
|
22
|
-
|
23
|
-
it "groups by the fields provided in the options" do
|
24
|
-
@counts.size.should == 3
|
25
|
-
end
|
26
|
-
|
27
|
-
it "stores the counts in proper groups" do
|
28
|
-
@counts[1].should == 1
|
29
|
-
@counts[10].should == 1
|
30
|
-
@counts[20].should == 2
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
describe "#avg" do
|
35
|
-
|
36
|
-
it "returns the avg value for the supplied field" do
|
37
|
-
@context.avg(:number).should == 12.75
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
describe "#count" do
|
42
|
-
|
43
|
-
it "returns the size of the enumerable" do
|
44
|
-
@context.count.should == 4
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#distinct" do
|
50
|
-
|
51
|
-
context "when the criteria is limited" do
|
52
|
-
|
53
|
-
it "returns an array of distinct values for the field" do
|
54
|
-
@context.distinct(:street).should == [ "Bourke Street" ]
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
context "when the criteria is not limited" do
|
59
|
-
|
60
|
-
before do
|
61
|
-
@criteria = Mongoid::Criteria.new(Address)
|
62
|
-
@criteria.documents = @docs
|
63
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
64
|
-
end
|
65
|
-
|
66
|
-
it "returns an array of distinct values for the field" do
|
67
|
-
@context.distinct(:street).should ==
|
68
|
-
[ "Bond Street", "Nan Jing Dong Lu", "Bourke Street", "Broadway" ]
|
69
|
-
end
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
|
-
describe "#execute" do
|
74
|
-
|
75
|
-
before do
|
76
|
-
@criteria = Mongoid::Criteria.new(Address)
|
77
|
-
@criteria.documents = @docs
|
78
|
-
end
|
79
|
-
|
80
|
-
it "returns the matching documents from the array" do
|
81
|
-
@context.execute.should == [ @melbourne ]
|
82
|
-
end
|
83
|
-
|
84
|
-
context "when selector is empty" do
|
85
|
-
|
86
|
-
before do
|
87
|
-
@criteria.only(:number)
|
88
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
89
|
-
end
|
90
|
-
|
91
|
-
it "returns all the documents" do
|
92
|
-
@context.execute.should == @docs
|
93
|
-
end
|
94
|
-
end
|
95
|
-
|
96
|
-
context "when skip and limit are in the options" do
|
97
|
-
|
98
|
-
before do
|
99
|
-
@criteria.skip(2).limit(2)
|
100
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
101
|
-
end
|
102
|
-
|
103
|
-
it "properly narrows down the matching results" do
|
104
|
-
@context.execute.should == [ @melbourne, @new_york ]
|
105
|
-
end
|
106
|
-
end
|
107
|
-
|
108
|
-
context "when limit is set without skip in the options" do
|
109
|
-
|
110
|
-
before do
|
111
|
-
@criteria.limit(2)
|
112
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
113
|
-
end
|
114
|
-
|
115
|
-
it "properly narrows down the matching results" do
|
116
|
-
@context.execute.size.should == 2
|
117
|
-
end
|
118
|
-
|
119
|
-
end
|
120
|
-
|
121
|
-
end
|
122
|
-
|
123
|
-
describe "#first" do
|
124
|
-
|
125
|
-
context "when a selector is present" do
|
126
|
-
|
127
|
-
it "returns the first that matches the selector" do
|
128
|
-
@context.first.should == @melbourne
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
end
|
133
|
-
|
134
|
-
describe "#group" do
|
135
|
-
|
136
|
-
before do
|
137
|
-
@group = @context.group
|
138
|
-
end
|
139
|
-
|
140
|
-
it "groups by the fields provided in the options" do
|
141
|
-
@group.size.should == 3
|
142
|
-
end
|
143
|
-
|
144
|
-
it "stores the documents in proper groups" do
|
145
|
-
@group[1].should == [ @london ]
|
146
|
-
@group[10].should == [ @shanghai ]
|
147
|
-
@group[20].should == [ @melbourne, @new_york ]
|
148
|
-
end
|
149
|
-
|
150
|
-
end
|
151
|
-
|
152
|
-
describe ".initialize" do
|
153
|
-
|
154
|
-
let(:selector) { { :field => "value" } }
|
155
|
-
let(:options) { { :skip => 20 } }
|
156
|
-
let(:documents) { [stub] }
|
157
|
-
|
158
|
-
before do
|
159
|
-
@criteria = Mongoid::Criteria.new(Address)
|
160
|
-
@criteria.documents = documents
|
161
|
-
@criteria.where(selector).skip(20)
|
162
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
163
|
-
end
|
164
|
-
|
165
|
-
it "sets the selector" do
|
166
|
-
@context.selector.should == selector
|
167
|
-
end
|
168
|
-
|
169
|
-
it "sets the options" do
|
170
|
-
@context.options.should == options
|
171
|
-
end
|
172
|
-
|
173
|
-
it "sets the documents" do
|
174
|
-
@context.documents.should == documents
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
describe "#iterate" do
|
180
|
-
before do
|
181
|
-
@criteria.where(:street => "Bourke Street")
|
182
|
-
@criteria.documents = @docs
|
183
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
184
|
-
end
|
185
|
-
|
186
|
-
it "executes the criteria" do
|
187
|
-
acc = []
|
188
|
-
@context.iterate do |doc|
|
189
|
-
acc << doc
|
190
|
-
end
|
191
|
-
acc.should == [@melbourne]
|
192
|
-
end
|
193
|
-
end
|
194
|
-
|
195
|
-
describe "#last" do
|
196
|
-
|
197
|
-
it "returns the last matching in the enumerable" do
|
198
|
-
@context.last.should == @melbourne
|
199
|
-
end
|
200
|
-
|
201
|
-
end
|
202
|
-
|
203
|
-
describe "#max" do
|
204
|
-
|
205
|
-
it "returns the max value for the supplied field" do
|
206
|
-
@context.max(:number).should == 20
|
207
|
-
end
|
208
|
-
|
209
|
-
end
|
210
|
-
|
211
|
-
describe "#min" do
|
212
|
-
|
213
|
-
it "returns the min value for the supplied field" do
|
214
|
-
@context.min(:number).should == 1
|
215
|
-
end
|
216
|
-
|
217
|
-
end
|
218
|
-
|
219
|
-
describe "#one" do
|
220
|
-
|
221
|
-
it "returns the first matching in the enumerable" do
|
222
|
-
@context.one.should == @melbourne
|
223
|
-
end
|
224
|
-
|
225
|
-
end
|
226
|
-
|
227
|
-
describe "#page" do
|
228
|
-
|
229
|
-
context "when the page option exists" do
|
230
|
-
|
231
|
-
before do
|
232
|
-
@criteria = Mongoid::Criteria.new(Person).extras({ :page => 5 })
|
233
|
-
@criteria.documents = []
|
234
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
235
|
-
end
|
236
|
-
|
237
|
-
it "returns the page option" do
|
238
|
-
@context.page.should == 5
|
239
|
-
end
|
240
|
-
|
241
|
-
end
|
242
|
-
|
243
|
-
context "when the page option does not exist" do
|
244
|
-
|
245
|
-
before do
|
246
|
-
@criteria = Mongoid::Criteria.new(Person)
|
247
|
-
@criteria.documents = []
|
248
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
249
|
-
end
|
250
|
-
|
251
|
-
it "returns 1" do
|
252
|
-
@context.page.should == 1
|
253
|
-
end
|
254
|
-
|
255
|
-
end
|
256
|
-
|
257
|
-
end
|
258
|
-
|
259
|
-
describe "#paginate" do
|
260
|
-
|
261
|
-
before do
|
262
|
-
@criteria = Person.criteria.skip(2).limit(2)
|
263
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
264
|
-
@results = @context.paginate
|
265
|
-
end
|
266
|
-
|
267
|
-
it "executes and paginates the results" do
|
268
|
-
@results.current_page.should == 2
|
269
|
-
@results.per_page.should == 2
|
270
|
-
end
|
271
|
-
|
272
|
-
end
|
273
|
-
|
274
|
-
describe "#per_page" do
|
275
|
-
|
276
|
-
context "when a limit option exists" do
|
277
|
-
|
278
|
-
it "returns 20" do
|
279
|
-
@context.per_page.should == 20
|
280
|
-
end
|
281
|
-
|
282
|
-
end
|
283
|
-
|
284
|
-
context "when a limit option does not exist" do
|
285
|
-
|
286
|
-
before do
|
287
|
-
@criteria = Person.criteria.limit(50)
|
288
|
-
@criteria.documents = []
|
289
|
-
@context = Mongoid::Contexts::Enumerable.new(@criteria)
|
290
|
-
end
|
291
|
-
|
292
|
-
it "returns the limit" do
|
293
|
-
@context.per_page.should == 50
|
294
|
-
end
|
295
|
-
|
296
|
-
end
|
297
|
-
|
298
|
-
end
|
299
|
-
|
300
|
-
describe "#sum" do
|
301
|
-
|
302
|
-
it "returns the sum of all the field values" do
|
303
|
-
@context.sum(:number).should == 51
|
304
|
-
end
|
305
|
-
|
306
|
-
end
|
307
|
-
|
308
|
-
context "#id_criteria" do
|
309
|
-
|
310
|
-
let(:criteria) do
|
311
|
-
criteria = Mongoid::Criteria.new(Address)
|
312
|
-
criteria.documents = []
|
313
|
-
criteria
|
314
|
-
end
|
315
|
-
let(:context) { criteria.context }
|
316
|
-
|
317
|
-
context "with a single argument" do
|
318
|
-
|
319
|
-
let(:id) { Mongo::ObjectID.new.to_s }
|
320
|
-
|
321
|
-
before do
|
322
|
-
criteria.expects(:id).with(id).returns(criteria)
|
323
|
-
end
|
324
|
-
|
325
|
-
context "when the document is found" do
|
326
|
-
|
327
|
-
let(:document) { stub }
|
328
|
-
|
329
|
-
it "returns a matching document" do
|
330
|
-
context.expects(:one).returns(document)
|
331
|
-
document.expects(:blank? => false)
|
332
|
-
context.id_criteria(id).should == document
|
333
|
-
end
|
334
|
-
|
335
|
-
end
|
336
|
-
|
337
|
-
context "when the document is not found" do
|
338
|
-
|
339
|
-
it "raises an error" do
|
340
|
-
context.expects(:one).returns(nil)
|
341
|
-
lambda { context.id_criteria(id) }.should raise_error
|
342
|
-
end
|
343
|
-
|
344
|
-
end
|
345
|
-
|
346
|
-
end
|
347
|
-
|
348
|
-
context "multiple arguments" do
|
349
|
-
|
350
|
-
context "when an array of ids" do
|
351
|
-
|
352
|
-
let(:ids) do
|
353
|
-
(0..2).inject([]) { |ary, i| ary << Mongo::ObjectID.new.to_s }
|
354
|
-
end
|
355
|
-
|
356
|
-
context "when documents are found" do
|
357
|
-
|
358
|
-
let(:docs) do
|
359
|
-
(0..2).inject([]) { |ary, i| ary << stub }
|
360
|
-
end
|
361
|
-
|
362
|
-
before do
|
363
|
-
criteria.expects(:id).with(ids).returns(criteria)
|
364
|
-
end
|
365
|
-
|
366
|
-
it "returns matching documents" do
|
367
|
-
context.expects(:execute).returns(docs)
|
368
|
-
context.id_criteria(ids).should == docs
|
369
|
-
end
|
370
|
-
|
371
|
-
end
|
372
|
-
|
373
|
-
context "when documents are not found" do
|
374
|
-
|
375
|
-
it "raises an error" do
|
376
|
-
context.expects(:execute).returns([])
|
377
|
-
lambda { context.id_criteria(ids) }.should raise_error
|
378
|
-
end
|
379
|
-
|
380
|
-
end
|
381
|
-
|
382
|
-
end
|
383
|
-
|
384
|
-
context "when an array of object ids" do
|
385
|
-
|
386
|
-
let(:ids) do
|
387
|
-
(0..2).inject([]) { |ary, i| ary << Mongo::ObjectID.new }
|
388
|
-
end
|
389
|
-
|
390
|
-
context "when documents are found" do
|
391
|
-
|
392
|
-
let(:docs) do
|
393
|
-
(0..2).inject([]) { |ary, i| ary << stub }
|
394
|
-
end
|
395
|
-
|
396
|
-
before do
|
397
|
-
criteria.expects(:id).with(ids).returns(criteria)
|
398
|
-
end
|
399
|
-
|
400
|
-
it "returns matching documents" do
|
401
|
-
context.expects(:execute).returns(docs)
|
402
|
-
context.id_criteria(ids).should == docs
|
403
|
-
end
|
404
|
-
|
405
|
-
end
|
406
|
-
|
407
|
-
context "when documents are not found" do
|
408
|
-
|
409
|
-
it "raises an error" do
|
410
|
-
context.expects(:execute).returns([])
|
411
|
-
lambda { context.id_criteria(ids) }.should raise_error
|
412
|
-
end
|
413
|
-
|
414
|
-
end
|
415
|
-
|
416
|
-
end
|
417
|
-
end
|
418
|
-
|
419
|
-
end
|
420
|
-
|
421
|
-
end
|