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,83 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::State do
|
4
|
-
|
5
|
-
describe "#new_record?" do
|
6
|
-
|
7
|
-
context "when the object has been saved" do
|
8
|
-
|
9
|
-
before do
|
10
|
-
@person = Person.new(:_id => "1")
|
11
|
-
end
|
12
|
-
|
13
|
-
it "returns false" do
|
14
|
-
@person.new_record?.should be_false
|
15
|
-
end
|
16
|
-
|
17
|
-
end
|
18
|
-
|
19
|
-
context "when the object has not been saved" do
|
20
|
-
|
21
|
-
before do
|
22
|
-
@person = Person.new
|
23
|
-
end
|
24
|
-
|
25
|
-
it "returns true" do
|
26
|
-
@person.new_record?.should be_true
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
end
|
32
|
-
|
33
|
-
describe "#persisted?" do
|
34
|
-
|
35
|
-
before do
|
36
|
-
@person = Person.new
|
37
|
-
end
|
38
|
-
|
39
|
-
it "delegates to new_record?" do
|
40
|
-
@person.persisted?.should be_false
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
describe "destroyed?" do
|
45
|
-
|
46
|
-
before do
|
47
|
-
@person = Person.new
|
48
|
-
end
|
49
|
-
|
50
|
-
context "when destroyed is true" do
|
51
|
-
|
52
|
-
before do
|
53
|
-
@person.destroyed = true
|
54
|
-
end
|
55
|
-
|
56
|
-
it "returns true" do
|
57
|
-
@person.destroyed?.should be_true
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
context "when destroyed is false" do
|
62
|
-
|
63
|
-
before do
|
64
|
-
@person.destroyed = false
|
65
|
-
end
|
66
|
-
|
67
|
-
it "returns true" do
|
68
|
-
@person.destroyed?.should be_false
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
context "when destroyed is nil" do
|
73
|
-
|
74
|
-
before do
|
75
|
-
@person.destroyed = nil
|
76
|
-
end
|
77
|
-
|
78
|
-
it "returns false" do
|
79
|
-
@person.destroyed?.should be_false
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
83
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Timestamps do
|
4
|
-
|
5
|
-
describe ".included" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@person = Person.new
|
9
|
-
end
|
10
|
-
|
11
|
-
it "adds created_at and updated_at to the document" do
|
12
|
-
fields = Person.fields
|
13
|
-
fields["created_at"].should_not be_nil
|
14
|
-
fields["updated_at"].should_not be_nil
|
15
|
-
end
|
16
|
-
|
17
|
-
it "forces the timestamps to UTC" do
|
18
|
-
@person.run_callbacks(:save)
|
19
|
-
@person.created_at.should be_close(Time.now.utc, 10.seconds)
|
20
|
-
@person.updated_at.should be_close(Time.now.utc, 10.seconds)
|
21
|
-
end
|
22
|
-
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
@@ -1,103 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Validations::AssociatedValidator do
|
4
|
-
|
5
|
-
describe "#validate_each" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@document = Person.new
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:validator) { Mongoid::Validations::AssociatedValidator.new(:attributes => @document.attributes) }
|
12
|
-
|
13
|
-
context "when the association is a has one" do
|
14
|
-
|
15
|
-
context "when the association is nil" do
|
16
|
-
|
17
|
-
before do
|
18
|
-
validator.validate_each(@document, :name, nil)
|
19
|
-
end
|
20
|
-
|
21
|
-
it "adds no errors" do
|
22
|
-
@document.errors[:name].should be_empty
|
23
|
-
end
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
context "when the association is valid" do
|
28
|
-
|
29
|
-
before do
|
30
|
-
@associated = stub(:valid? => true)
|
31
|
-
validator.validate_each(@document, :name, @associated)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "adds no errors" do
|
35
|
-
@document.errors[:name].should be_empty
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
|
40
|
-
context "when the association is invalid" do
|
41
|
-
|
42
|
-
before do
|
43
|
-
@associated = stub(:valid? => false)
|
44
|
-
validator.validate_each(@document, :name, @associated)
|
45
|
-
end
|
46
|
-
|
47
|
-
it "adds errors to the parent document" do
|
48
|
-
@document.errors[:name].should_not be_empty
|
49
|
-
end
|
50
|
-
|
51
|
-
it "translates the error in english" do
|
52
|
-
@document.errors[:name][0].should == "is invalid"
|
53
|
-
end
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
end
|
58
|
-
|
59
|
-
context "when the association is a has many" do
|
60
|
-
|
61
|
-
context "when the association is empty" do
|
62
|
-
|
63
|
-
before do
|
64
|
-
validator.validate_each(@document, :addresses, [])
|
65
|
-
end
|
66
|
-
|
67
|
-
it "adds no errors" do
|
68
|
-
@document.errors[:addresses].should be_empty
|
69
|
-
end
|
70
|
-
|
71
|
-
end
|
72
|
-
|
73
|
-
context "when the association has invalid documents" do
|
74
|
-
|
75
|
-
before do
|
76
|
-
@associated = stub(:valid? => false)
|
77
|
-
validator.validate_each(@document, :addresses, [ @associated ])
|
78
|
-
end
|
79
|
-
|
80
|
-
it "adds errors to the parent document" do
|
81
|
-
@document.errors[:addresses].should_not be_empty
|
82
|
-
end
|
83
|
-
|
84
|
-
end
|
85
|
-
|
86
|
-
context "when the assocation has all valid documents" do
|
87
|
-
|
88
|
-
before do
|
89
|
-
@associated = stub(:valid? => true)
|
90
|
-
validator.validate_each(@document, :addresses, [ @associated ])
|
91
|
-
end
|
92
|
-
|
93
|
-
it "adds no errors" do
|
94
|
-
@document.errors[:addresses].should be_empty
|
95
|
-
end
|
96
|
-
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
|
101
|
-
end
|
102
|
-
|
103
|
-
end
|
@@ -1,47 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Validations::UniquenessValidator do
|
4
|
-
|
5
|
-
describe "#validate_each" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@document = Person.new
|
9
|
-
end
|
10
|
-
|
11
|
-
let(:validator) { Mongoid::Validations::UniquenessValidator.new(:attributes => @document.attributes) }
|
12
|
-
|
13
|
-
context "when a document exists with the attribute value" do
|
14
|
-
|
15
|
-
before do
|
16
|
-
@criteria = stub(:empty? => false)
|
17
|
-
Person.expects(:where).with(all_of(has_entry(:title, "Sir"), has_value(@document._id))).returns(@criteria)
|
18
|
-
validator.validate_each(@document, :title, "Sir")
|
19
|
-
end
|
20
|
-
|
21
|
-
it "adds the errors to the document" do
|
22
|
-
@document.errors[:title].should_not be_empty
|
23
|
-
end
|
24
|
-
|
25
|
-
it "should translate the error in english" do
|
26
|
-
@document.errors[:title][0].should == "is already taken"
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
|
31
|
-
context "when no other document exists with the attribute value" do
|
32
|
-
|
33
|
-
before do
|
34
|
-
@criteria = stub(:empty? => true)
|
35
|
-
Person.expects(:where).with(all_of(has_entry(:title, "Sir"), has_value(@document._id))).returns(@criteria)
|
36
|
-
validator.validate_each(@document, :title, "Sir")
|
37
|
-
end
|
38
|
-
|
39
|
-
it "adds no errors" do
|
40
|
-
@document.errors[:title].should be_empty
|
41
|
-
end
|
42
|
-
|
43
|
-
end
|
44
|
-
|
45
|
-
end
|
46
|
-
|
47
|
-
end
|
@@ -1,190 +0,0 @@
|
|
1
|
-
require "spec_helper"
|
2
|
-
|
3
|
-
describe Mongoid::Validations do
|
4
|
-
|
5
|
-
describe ".validates_associated" do
|
6
|
-
|
7
|
-
before do
|
8
|
-
@class = MixedDrink
|
9
|
-
end
|
10
|
-
|
11
|
-
it "adds the associated validator" do
|
12
|
-
@class.expects(:validates_with).with(Mongoid::Validations::AssociatedValidator, { :attributes => [ :name ] })
|
13
|
-
@class.validates_associated(:name)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "is picked up by validates method" do
|
17
|
-
@class.expects(:validates_with).with(Mongoid::Validations::AssociatedValidator, { :attributes => [ :name ] })
|
18
|
-
@class.validates(:name, :associated => true)
|
19
|
-
end
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
describe ".validates_uniqueness_of" do
|
24
|
-
|
25
|
-
before do
|
26
|
-
@class = MixedDrink
|
27
|
-
end
|
28
|
-
|
29
|
-
it "adds the uniqueness validator" do
|
30
|
-
@class.expects(:validates_with).with(Mongoid::Validations::UniquenessValidator, { :attributes => [ :title ] })
|
31
|
-
@class.validates_uniqueness_of(:title)
|
32
|
-
end
|
33
|
-
|
34
|
-
it "is picked up by validates method" do
|
35
|
-
@class.expects(:validates_with).with(Mongoid::Validations::UniquenessValidator, { :attributes => [ :title ] })
|
36
|
-
@class.validates(:title, :uniqueness => true)
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
context "when running validations" do
|
42
|
-
|
43
|
-
before do
|
44
|
-
@person = Person.new
|
45
|
-
@canvas = Canvas.new
|
46
|
-
@firefox = Firefox.new
|
47
|
-
end
|
48
|
-
|
49
|
-
describe "#validates_acceptance_of" do
|
50
|
-
|
51
|
-
it "fails if field not accepted" do
|
52
|
-
Person.class_eval do
|
53
|
-
validates_acceptance_of :terms, :allow_nil => false
|
54
|
-
end
|
55
|
-
@person.valid?.should be_false
|
56
|
-
@person.errors[:terms].should_not be_nil
|
57
|
-
end
|
58
|
-
|
59
|
-
end
|
60
|
-
|
61
|
-
describe "#validates_associated" do
|
62
|
-
|
63
|
-
context "when association is a has_many" do
|
64
|
-
|
65
|
-
it "fails when any association fails validation" do
|
66
|
-
Person.class_eval do
|
67
|
-
validates_associated :addresses
|
68
|
-
end
|
69
|
-
Address.class_eval do
|
70
|
-
validates_presence_of :street
|
71
|
-
end
|
72
|
-
@person.addresses << Address.new
|
73
|
-
@person.valid?.should be_false
|
74
|
-
@person.errors[:addresses].should_not be_nil
|
75
|
-
end
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
context "when association is a has_one" do
|
80
|
-
|
81
|
-
context "when the associated is not nil" do
|
82
|
-
|
83
|
-
it "fails when the association fails validation" do
|
84
|
-
Person.class_eval do
|
85
|
-
validates_associated :name
|
86
|
-
end
|
87
|
-
Name.class_eval do
|
88
|
-
validates_presence_of :first_name
|
89
|
-
end
|
90
|
-
@person.name = Name.new
|
91
|
-
@person.valid?.should be_false
|
92
|
-
@person.errors[:name].should_not be_nil
|
93
|
-
end
|
94
|
-
|
95
|
-
end
|
96
|
-
|
97
|
-
context "when the associated is nil" do
|
98
|
-
|
99
|
-
it "returns true" do
|
100
|
-
Person.class_eval do
|
101
|
-
validates_associated :name
|
102
|
-
end
|
103
|
-
@person.valid?
|
104
|
-
@person.errors[:name].should be_empty
|
105
|
-
end
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
110
|
-
|
111
|
-
end
|
112
|
-
|
113
|
-
describe "#validates_format_of" do
|
114
|
-
|
115
|
-
it "fails if the field is in the wrong format" do
|
116
|
-
Person.class_eval do
|
117
|
-
validates_format_of :title, :with => /[A-Za-z]/
|
118
|
-
end
|
119
|
-
@person.title = 10
|
120
|
-
@person.valid?.should be_false
|
121
|
-
@person.errors[:title].should_not be_nil
|
122
|
-
end
|
123
|
-
|
124
|
-
end
|
125
|
-
|
126
|
-
describe "#validates_length_of" do
|
127
|
-
|
128
|
-
it "fails if the field is the wrong length" do
|
129
|
-
Person.class_eval do
|
130
|
-
validates_length_of :title, :minimum => 10
|
131
|
-
end
|
132
|
-
@person.title = "Testing"
|
133
|
-
@person.valid?.should be_false
|
134
|
-
@person.errors[:title].should_not be_nil
|
135
|
-
end
|
136
|
-
|
137
|
-
end
|
138
|
-
|
139
|
-
describe "#validates_numericality_of" do
|
140
|
-
|
141
|
-
it "fails if the field is not a number" do
|
142
|
-
Person.class_eval do
|
143
|
-
validates_numericality_of :age
|
144
|
-
end
|
145
|
-
@person.age = "foo"
|
146
|
-
@person.valid?.should be_false
|
147
|
-
@person.errors[:age].should_not be_nil
|
148
|
-
end
|
149
|
-
|
150
|
-
end
|
151
|
-
|
152
|
-
describe "#validates_presence_of" do
|
153
|
-
|
154
|
-
context "on a parent class" do
|
155
|
-
|
156
|
-
it "fails if the field is nil on the parent" do
|
157
|
-
Person.class_eval do
|
158
|
-
validates_presence_of :title
|
159
|
-
end
|
160
|
-
@person.valid?.should be_false
|
161
|
-
@person.errors[:title].should_not be_nil
|
162
|
-
end
|
163
|
-
|
164
|
-
it "fails if the field is nil on a subclass" do
|
165
|
-
Canvas.class_eval do
|
166
|
-
validates_presence_of :name
|
167
|
-
end
|
168
|
-
@firefox.valid?.should be_false
|
169
|
-
@firefox.errors[:name].should_not be_nil
|
170
|
-
end
|
171
|
-
|
172
|
-
end
|
173
|
-
|
174
|
-
context "on a subclass" do
|
175
|
-
|
176
|
-
it "parent class does not get subclass validations" do
|
177
|
-
Firefox.class_eval do
|
178
|
-
validates_presence_of :version
|
179
|
-
end
|
180
|
-
@canvas.name = "Testing"
|
181
|
-
@canvas.valid?.should be_true
|
182
|
-
end
|
183
|
-
|
184
|
-
end
|
185
|
-
|
186
|
-
end
|
187
|
-
|
188
|
-
end
|
189
|
-
|
190
|
-
end
|