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,19 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Criterion::Complex do
|
4
|
-
|
5
|
-
let(:complex) { Mongoid::Criterion::Complex.new(:key => :field, :operator => "$gt") }
|
6
|
-
|
7
|
-
describe "#initialize" do
|
8
|
-
|
9
|
-
it "sets the key" do
|
10
|
-
complex.key.should == :field
|
11
|
-
end
|
12
|
-
|
13
|
-
it "sets the operator" do
|
14
|
-
complex.operator.should == "$gt"
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
end
|
@@ -1,91 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Criterion::Exclusion do
|
4
|
-
|
5
|
-
before do
|
6
|
-
@criteria = Mongoid::Criteria.new(Person)
|
7
|
-
@canvas_criteria = Mongoid::Criteria.new(Canvas)
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "#excludes" do
|
11
|
-
|
12
|
-
it "adds the $ne query to the selector" do
|
13
|
-
@criteria.excludes(:title => "Bad Title", :text => "Bad Text")
|
14
|
-
@criteria.selector.should ==
|
15
|
-
{
|
16
|
-
:title =>
|
17
|
-
{ "$ne" => "Bad Title"},
|
18
|
-
:text =>
|
19
|
-
{ "$ne" => "Bad Text" }
|
20
|
-
}
|
21
|
-
end
|
22
|
-
|
23
|
-
it "returns self" do
|
24
|
-
@criteria.excludes(:title => "Bad").should == @criteria
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when passing an id" do
|
28
|
-
|
29
|
-
it "accepts id" do
|
30
|
-
@criteria.excludes(:id => "1")
|
31
|
-
@criteria.selector.should ==
|
32
|
-
{
|
33
|
-
:_id => { "$ne" => "1" }
|
34
|
-
}
|
35
|
-
end
|
36
|
-
|
37
|
-
it "accepts _id" do
|
38
|
-
@criteria.excludes(:_id => "1")
|
39
|
-
@criteria.selector.should ==
|
40
|
-
{
|
41
|
-
:_id => { "$ne" => "1" }
|
42
|
-
}
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#not_in" do
|
50
|
-
|
51
|
-
it "adds the exclusion to the selector" do
|
52
|
-
@criteria.not_in(:title => ["title1", "title2"], :text => ["test"])
|
53
|
-
@criteria.selector.should == {
|
54
|
-
:title => { "$nin" => ["title1", "title2"] },
|
55
|
-
:text => { "$nin" => ["test"] }
|
56
|
-
}
|
57
|
-
end
|
58
|
-
|
59
|
-
it "returns self" do
|
60
|
-
@criteria.not_in(:title => ["title1"]).should == @criteria
|
61
|
-
end
|
62
|
-
|
63
|
-
end
|
64
|
-
|
65
|
-
describe "#only" do
|
66
|
-
|
67
|
-
context "when args are provided" do
|
68
|
-
|
69
|
-
it "adds the options for limiting by fields" do
|
70
|
-
@criteria.only(:title, :text)
|
71
|
-
@criteria.options.should == { :fields => [ :title, :text ] }
|
72
|
-
end
|
73
|
-
|
74
|
-
it "returns self" do
|
75
|
-
@criteria.only.should == @criteria
|
76
|
-
end
|
77
|
-
|
78
|
-
end
|
79
|
-
|
80
|
-
context "when no args provided" do
|
81
|
-
|
82
|
-
it "does not add the field option" do
|
83
|
-
@criteria.only
|
84
|
-
@criteria.options[:fields].should be_nil
|
85
|
-
end
|
86
|
-
|
87
|
-
end
|
88
|
-
|
89
|
-
end
|
90
|
-
|
91
|
-
end
|
@@ -1,219 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Criterion::Inclusion do
|
4
|
-
|
5
|
-
before do
|
6
|
-
@criteria = Mongoid::Criteria.new(Person)
|
7
|
-
@canvas_criteria = Mongoid::Criteria.new(Canvas)
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "#all" do
|
11
|
-
|
12
|
-
it "adds the $all query to the selector" do
|
13
|
-
@criteria.all(:title => ["title1", "title2"])
|
14
|
-
@criteria.selector.should ==
|
15
|
-
{
|
16
|
-
:title => { "$all" => ["title1", "title2"] }
|
17
|
-
}
|
18
|
-
end
|
19
|
-
|
20
|
-
it "returns self" do
|
21
|
-
@criteria.all(:title => [ "title1" ]).should == @criteria
|
22
|
-
end
|
23
|
-
|
24
|
-
end
|
25
|
-
|
26
|
-
describe "#and" do
|
27
|
-
|
28
|
-
context "when provided a hash" do
|
29
|
-
|
30
|
-
it "adds the clause to the selector" do
|
31
|
-
@criteria.and(:title => "Title", :text => "Text")
|
32
|
-
@criteria.selector.should ==
|
33
|
-
{
|
34
|
-
:title => "Title",
|
35
|
-
:text => "Text"
|
36
|
-
}
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
context "when provided a string" do
|
42
|
-
|
43
|
-
it "adds the $where clause to the selector" do
|
44
|
-
@criteria.and("this.date < new Date()")
|
45
|
-
@criteria.selector.should ==
|
46
|
-
{
|
47
|
-
"$where" => "this.date < new Date()"
|
48
|
-
}
|
49
|
-
end
|
50
|
-
|
51
|
-
end
|
52
|
-
|
53
|
-
it "returns self" do
|
54
|
-
@criteria.and.should == @criteria
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
describe "#in" do
|
60
|
-
|
61
|
-
it "adds the $in clause to the selector" do
|
62
|
-
@criteria.in(:title => ["title1", "title2"], :text => ["test"])
|
63
|
-
@criteria.selector.should ==
|
64
|
-
{
|
65
|
-
:title => { "$in" => ["title1", "title2"] }, :text => { "$in" => ["test"] }
|
66
|
-
}
|
67
|
-
end
|
68
|
-
|
69
|
-
it "#any_in is aliased to #in" do
|
70
|
-
@criteria.any_in(:title => ["title1", "title2"], :text => ["test"])
|
71
|
-
@criteria.selector.should ==
|
72
|
-
{
|
73
|
-
:title => { "$in" => ["title1", "title2"] }, :text => { "$in" => ["test"] }
|
74
|
-
}
|
75
|
-
end
|
76
|
-
|
77
|
-
it "returns self" do
|
78
|
-
@criteria.in(:title => ["title1"]).should == @criteria
|
79
|
-
end
|
80
|
-
|
81
|
-
end
|
82
|
-
|
83
|
-
describe "#where" do
|
84
|
-
|
85
|
-
context "when provided a hash" do
|
86
|
-
|
87
|
-
context "with simple hash keys" do
|
88
|
-
|
89
|
-
it "adds the clause to the selector" do
|
90
|
-
@criteria.where(:title => "Title", :text => "Text")
|
91
|
-
@criteria.selector.should ==
|
92
|
-
{ :title => "Title", :text => "Text" }
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
context "with complex criterion" do
|
98
|
-
|
99
|
-
context "#all" do
|
100
|
-
|
101
|
-
it "returns those matching an all clause" do
|
102
|
-
@criteria.where(:title.all => ["Sir"])
|
103
|
-
@criteria.selector.should ==
|
104
|
-
{ :title => { "$all" => ["Sir"] } }
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
context "#exists" do
|
110
|
-
|
111
|
-
it "returns those matching an exists clause" do
|
112
|
-
@criteria.where(:title.exists => true)
|
113
|
-
@criteria.selector.should ==
|
114
|
-
{ :title => { "$exists" => true } }
|
115
|
-
end
|
116
|
-
|
117
|
-
end
|
118
|
-
|
119
|
-
context "#gt" do
|
120
|
-
|
121
|
-
it "returns those matching a gt clause" do
|
122
|
-
@criteria.where(:age.gt => 30)
|
123
|
-
@criteria.selector.should ==
|
124
|
-
{ :age => { "$gt" => 30 } }
|
125
|
-
end
|
126
|
-
|
127
|
-
end
|
128
|
-
|
129
|
-
context "#gte" do
|
130
|
-
|
131
|
-
it "returns those matching a gte clause" do
|
132
|
-
@criteria.where(:age.gte => 33)
|
133
|
-
@criteria.selector.should ==
|
134
|
-
{ :age => { "$gte" => 33 } }
|
135
|
-
end
|
136
|
-
|
137
|
-
end
|
138
|
-
|
139
|
-
context "#in" do
|
140
|
-
|
141
|
-
it "returns those matching an in clause" do
|
142
|
-
@criteria.where(:title.in => ["Sir", "Madam"])
|
143
|
-
@criteria.selector.should ==
|
144
|
-
{ :title => { "$in" => ["Sir", "Madam"] } }
|
145
|
-
end
|
146
|
-
|
147
|
-
end
|
148
|
-
|
149
|
-
context "#lt" do
|
150
|
-
|
151
|
-
it "returns those matching a lt clause" do
|
152
|
-
@criteria.where(:age.lt => 34)
|
153
|
-
@criteria.selector.should ==
|
154
|
-
{ :age => { "$lt" => 34 } }
|
155
|
-
end
|
156
|
-
|
157
|
-
end
|
158
|
-
|
159
|
-
context "#lte" do
|
160
|
-
|
161
|
-
it "returns those matching a lte clause" do
|
162
|
-
@criteria.where(:age.lte => 33)
|
163
|
-
@criteria.selector.should ==
|
164
|
-
{ :age => { "$lte" => 33 } }
|
165
|
-
end
|
166
|
-
|
167
|
-
end
|
168
|
-
|
169
|
-
context "#ne" do
|
170
|
-
|
171
|
-
it "returns those matching a ne clause" do
|
172
|
-
@criteria.where(:age.ne => 50)
|
173
|
-
@criteria.selector.should ==
|
174
|
-
{ :age => { "$ne" => 50 } }
|
175
|
-
end
|
176
|
-
|
177
|
-
end
|
178
|
-
|
179
|
-
context "#nin" do
|
180
|
-
|
181
|
-
it "returns those matching a nin clause" do
|
182
|
-
@criteria.where(:title.nin => ["Esquire", "Congressman"])
|
183
|
-
@criteria.selector.should ==
|
184
|
-
{ :title => { "$nin" => ["Esquire", "Congressman"] } }
|
185
|
-
end
|
186
|
-
|
187
|
-
end
|
188
|
-
|
189
|
-
context "#size" do
|
190
|
-
|
191
|
-
it "returns those matching a size clause" do
|
192
|
-
@criteria.where(:aliases.size => 2)
|
193
|
-
@criteria.selector.should ==
|
194
|
-
{ :aliases => { "$size" => 2 } }
|
195
|
-
end
|
196
|
-
|
197
|
-
end
|
198
|
-
|
199
|
-
end
|
200
|
-
|
201
|
-
end
|
202
|
-
|
203
|
-
context "when provided a string" do
|
204
|
-
|
205
|
-
it "adds the $where clause to the selector" do
|
206
|
-
@criteria.where("this.date < new Date()")
|
207
|
-
@criteria.selector.should ==
|
208
|
-
{ "$where" => "this.date < new Date()" }
|
209
|
-
end
|
210
|
-
|
211
|
-
end
|
212
|
-
|
213
|
-
it "returns self" do
|
214
|
-
@criteria.where.should == @criteria
|
215
|
-
end
|
216
|
-
|
217
|
-
end
|
218
|
-
|
219
|
-
end
|
@@ -1,319 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Criterion::Optional do
|
4
|
-
|
5
|
-
before do
|
6
|
-
@criteria = Mongoid::Criteria.new(Person)
|
7
|
-
@canvas_criteria = Mongoid::Criteria.new(Canvas)
|
8
|
-
end
|
9
|
-
|
10
|
-
describe "#cache" do
|
11
|
-
|
12
|
-
it "sets the cache option on the criteria" do
|
13
|
-
@criteria.cache
|
14
|
-
@criteria.options[:cache].should be_true
|
15
|
-
end
|
16
|
-
|
17
|
-
it "returns self" do
|
18
|
-
@criteria.cache.should == @criteria
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
describe "#cached?" do
|
23
|
-
|
24
|
-
context "when the criteria has a cache option" do
|
25
|
-
|
26
|
-
before do
|
27
|
-
@criteria.cache
|
28
|
-
end
|
29
|
-
|
30
|
-
it "returns true" do
|
31
|
-
@criteria.cached?.should be_true
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
context "when the criteria has no cache option" do
|
36
|
-
|
37
|
-
it "returns false" do
|
38
|
-
@criteria.cached?.should be_false
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
describe "#enslave" do
|
44
|
-
|
45
|
-
it "sets the enslaved option on the criteria" do
|
46
|
-
@criteria.enslave
|
47
|
-
@criteria.options[:enslave].should be_true
|
48
|
-
end
|
49
|
-
|
50
|
-
it "returns self" do
|
51
|
-
@criteria.enslave.should == @criteria
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
describe "#extras" do
|
56
|
-
|
57
|
-
context "filtering" do
|
58
|
-
|
59
|
-
context "when page is provided" do
|
60
|
-
|
61
|
-
it "sets the limit and skip options" do
|
62
|
-
@criteria.extras({ :page => "2" })
|
63
|
-
@criteria.page.should == 2
|
64
|
-
@criteria.options.should == { :skip => 20, :limit => 20 }
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
context "when per_page is provided" do
|
70
|
-
|
71
|
-
it "sets the limit and skip options" do
|
72
|
-
@criteria.extras({ :per_page => 45 })
|
73
|
-
@criteria.options.should == { :skip => 0, :limit => 45 }
|
74
|
-
end
|
75
|
-
|
76
|
-
end
|
77
|
-
|
78
|
-
context "when page and per_page both provided" do
|
79
|
-
|
80
|
-
it "sets the limit and skip options" do
|
81
|
-
@criteria.extras({ :per_page => 30, :page => "4" })
|
82
|
-
@criteria.options.should == { :skip => 90, :limit => 30 }
|
83
|
-
@criteria.page.should == 4
|
84
|
-
end
|
85
|
-
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
it "adds the extras to the options" do
|
91
|
-
@criteria.limit(10).extras({ :skip => 10 })
|
92
|
-
@criteria.options.should == { :skip => 10, :limit => 10 }
|
93
|
-
end
|
94
|
-
|
95
|
-
it "returns self" do
|
96
|
-
@criteria.extras({}).should == @criteria
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
describe "#id" do
|
102
|
-
|
103
|
-
context "when passing a single id" do
|
104
|
-
|
105
|
-
context "when the id is a string" do
|
106
|
-
|
107
|
-
it "adds the _id query to the selector" do
|
108
|
-
id = Mongo::ObjectID.new.to_s
|
109
|
-
@criteria.id(id)
|
110
|
-
@criteria.selector.should == { :_id => id }
|
111
|
-
end
|
112
|
-
|
113
|
-
it "returns self" do
|
114
|
-
id = Mongo::ObjectID.new.to_s
|
115
|
-
@criteria.id(id).should == @criteria
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
context "when the id is an object id" do
|
120
|
-
|
121
|
-
it "adds the _id query to the selector" do
|
122
|
-
id = Mongo::ObjectID.new
|
123
|
-
@criteria.id(id)
|
124
|
-
@criteria.selector.should == { :_id => id }
|
125
|
-
end
|
126
|
-
|
127
|
-
it "returns self" do
|
128
|
-
id = Mongo::ObjectID.new
|
129
|
-
@criteria.id(id).should == @criteria
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
end
|
134
|
-
|
135
|
-
context "when passing in an array of ids" do
|
136
|
-
|
137
|
-
before do
|
138
|
-
@ids = []
|
139
|
-
3.times { @ids << Mongo::ObjectID.new.to_s }
|
140
|
-
end
|
141
|
-
|
142
|
-
it "adds the _id query to the selector" do
|
143
|
-
@criteria.id(@ids)
|
144
|
-
@criteria.selector.should ==
|
145
|
-
{ :_id => { "$in" => @ids } }
|
146
|
-
end
|
147
|
-
|
148
|
-
end
|
149
|
-
|
150
|
-
end
|
151
|
-
|
152
|
-
describe "#limit" do
|
153
|
-
|
154
|
-
context "when value provided" do
|
155
|
-
|
156
|
-
it "adds the limit to the options" do
|
157
|
-
@criteria.limit(100)
|
158
|
-
@criteria.options.should == { :limit => 100 }
|
159
|
-
end
|
160
|
-
|
161
|
-
end
|
162
|
-
|
163
|
-
context "when value not provided" do
|
164
|
-
|
165
|
-
it "defaults to 20" do
|
166
|
-
@criteria.limit
|
167
|
-
@criteria.options.should == { :limit => 20 }
|
168
|
-
end
|
169
|
-
|
170
|
-
end
|
171
|
-
|
172
|
-
it "returns self" do
|
173
|
-
@criteria.limit.should == @criteria
|
174
|
-
end
|
175
|
-
|
176
|
-
end
|
177
|
-
|
178
|
-
describe "#offset" do
|
179
|
-
|
180
|
-
context "when the per_page option exists" do
|
181
|
-
|
182
|
-
before do
|
183
|
-
@criteria = Mongoid::Criteria.new(Person).extras({ :per_page => 20, :page => 3 })
|
184
|
-
end
|
185
|
-
|
186
|
-
it "returns the per_page option" do
|
187
|
-
@criteria.offset.should == 40
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|
191
|
-
|
192
|
-
context "when the skip option exists" do
|
193
|
-
|
194
|
-
before do
|
195
|
-
@criteria = Mongoid::Criteria.new(Person).extras({ :skip => 20 })
|
196
|
-
end
|
197
|
-
|
198
|
-
it "returns the skip option" do
|
199
|
-
@criteria.offset.should == 20
|
200
|
-
end
|
201
|
-
|
202
|
-
end
|
203
|
-
|
204
|
-
context "when an argument is provided" do
|
205
|
-
|
206
|
-
before do
|
207
|
-
@criteria = Mongoid::Criteria.new(Person)
|
208
|
-
@criteria.offset(40)
|
209
|
-
end
|
210
|
-
|
211
|
-
it "delegates to skip" do
|
212
|
-
@criteria.options[:skip].should == 40
|
213
|
-
end
|
214
|
-
|
215
|
-
end
|
216
|
-
|
217
|
-
context "when no option exists" do
|
218
|
-
|
219
|
-
context "when page option exists" do
|
220
|
-
|
221
|
-
before do
|
222
|
-
@criteria = Mongoid::Criteria.new(Person).extras({ :page => 2 })
|
223
|
-
end
|
224
|
-
|
225
|
-
it "adds the skip option to the options and returns it" do
|
226
|
-
@criteria.offset.should == 20
|
227
|
-
@criteria.options[:skip].should == 20
|
228
|
-
end
|
229
|
-
|
230
|
-
end
|
231
|
-
|
232
|
-
context "when page option does not exist" do
|
233
|
-
|
234
|
-
before do
|
235
|
-
@criteria = Mongoid::Criteria.new(Person)
|
236
|
-
end
|
237
|
-
|
238
|
-
it "returns nil" do
|
239
|
-
@criteria.offset.should be_nil
|
240
|
-
@criteria.options[:skip].should be_nil
|
241
|
-
end
|
242
|
-
|
243
|
-
end
|
244
|
-
|
245
|
-
end
|
246
|
-
|
247
|
-
end
|
248
|
-
|
249
|
-
describe "#order_by" do
|
250
|
-
|
251
|
-
context "when field names and direction specified" do
|
252
|
-
|
253
|
-
it "adds the sort to the options" do
|
254
|
-
@criteria.order_by([[:title, :asc], [:text, :desc]])
|
255
|
-
@criteria.options.should == { :sort => [[:title, :asc], [:text, :desc]] }
|
256
|
-
end
|
257
|
-
|
258
|
-
end
|
259
|
-
|
260
|
-
it "returns self" do
|
261
|
-
@criteria.order_by.should == @criteria
|
262
|
-
end
|
263
|
-
|
264
|
-
end
|
265
|
-
|
266
|
-
describe "#page" do
|
267
|
-
|
268
|
-
context "when the page option exists" do
|
269
|
-
|
270
|
-
before do
|
271
|
-
@criteria = Mongoid::Criteria.new(Person).extras({ :page => 5 })
|
272
|
-
end
|
273
|
-
|
274
|
-
it "returns the page option" do
|
275
|
-
@criteria.page.should == 5
|
276
|
-
end
|
277
|
-
|
278
|
-
end
|
279
|
-
|
280
|
-
context "when the page option does not exist" do
|
281
|
-
|
282
|
-
before do
|
283
|
-
@criteria = Mongoid::Criteria.new(Person)
|
284
|
-
end
|
285
|
-
|
286
|
-
it "returns 1" do
|
287
|
-
@criteria.page.should == 1
|
288
|
-
end
|
289
|
-
|
290
|
-
end
|
291
|
-
|
292
|
-
end
|
293
|
-
|
294
|
-
describe "#skip" do
|
295
|
-
|
296
|
-
context "when value provided" do
|
297
|
-
|
298
|
-
it "adds the skip value to the options" do
|
299
|
-
@criteria.skip(20)
|
300
|
-
@criteria.options.should == { :skip => 20 }
|
301
|
-
end
|
302
|
-
|
303
|
-
end
|
304
|
-
|
305
|
-
context "when value not provided" do
|
306
|
-
|
307
|
-
it "defaults to zero" do
|
308
|
-
@criteria.skip
|
309
|
-
@criteria.options.should == { :skip => 0 }
|
310
|
-
end
|
311
|
-
|
312
|
-
end
|
313
|
-
|
314
|
-
it "returns self" do
|
315
|
-
@criteria.skip.should == @criteria
|
316
|
-
end
|
317
|
-
|
318
|
-
end
|
319
|
-
end
|