mongoid-locomotive 2.0.0.beta9
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/MIT_LICENSE +20 -0
- data/README.rdoc +47 -0
- data/lib/mongoid.rb +141 -0
- data/lib/mongoid/associations.rb +306 -0
- data/lib/mongoid/associations/embedded_in.rb +74 -0
- data/lib/mongoid/associations/embeds_many.rb +280 -0
- data/lib/mongoid/associations/embeds_one.rb +97 -0
- data/lib/mongoid/associations/foreign_key.rb +35 -0
- data/lib/mongoid/associations/meta_data.rb +38 -0
- data/lib/mongoid/associations/options.rb +62 -0
- data/lib/mongoid/associations/proxy.rb +33 -0
- data/lib/mongoid/associations/referenced_in.rb +59 -0
- data/lib/mongoid/associations/references_many.rb +245 -0
- data/lib/mongoid/associations/references_many_as_array.rb +78 -0
- data/lib/mongoid/associations/references_one.rb +99 -0
- data/lib/mongoid/atomicity.rb +55 -0
- data/lib/mongoid/attributes.rb +242 -0
- data/lib/mongoid/callbacks.rb +21 -0
- data/lib/mongoid/collection.rb +120 -0
- data/lib/mongoid/collections.rb +71 -0
- data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
- data/lib/mongoid/collections/master.rb +29 -0
- data/lib/mongoid/collections/operations.rb +41 -0
- data/lib/mongoid/collections/slaves.rb +45 -0
- data/lib/mongoid/components.rb +34 -0
- data/lib/mongoid/config.rb +263 -0
- data/lib/mongoid/contexts.rb +24 -0
- data/lib/mongoid/contexts/enumerable.rb +156 -0
- data/lib/mongoid/contexts/ids.rb +25 -0
- data/lib/mongoid/contexts/mongo.rb +285 -0
- data/lib/mongoid/contexts/paging.rb +50 -0
- data/lib/mongoid/criteria.rb +248 -0
- data/lib/mongoid/criterion/complex.rb +21 -0
- data/lib/mongoid/criterion/exclusion.rb +65 -0
- data/lib/mongoid/criterion/inclusion.rb +110 -0
- data/lib/mongoid/criterion/optional.rb +189 -0
- data/lib/mongoid/cursor.rb +81 -0
- data/lib/mongoid/deprecation.rb +21 -0
- data/lib/mongoid/dirty.rb +252 -0
- data/lib/mongoid/document.rb +210 -0
- data/lib/mongoid/errors.rb +131 -0
- data/lib/mongoid/extensions.rb +115 -0
- data/lib/mongoid/extensions/array/accessors.rb +17 -0
- data/lib/mongoid/extensions/array/assimilation.rb +26 -0
- data/lib/mongoid/extensions/array/conversions.rb +23 -0
- data/lib/mongoid/extensions/array/parentization.rb +13 -0
- data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
- data/lib/mongoid/extensions/binary/conversions.rb +17 -0
- data/lib/mongoid/extensions/boolean/conversions.rb +27 -0
- data/lib/mongoid/extensions/date/conversions.rb +24 -0
- data/lib/mongoid/extensions/datetime/conversions.rb +12 -0
- data/lib/mongoid/extensions/false_class/equality.rb +13 -0
- data/lib/mongoid/extensions/float/conversions.rb +20 -0
- data/lib/mongoid/extensions/hash/accessors.rb +42 -0
- data/lib/mongoid/extensions/hash/assimilation.rb +40 -0
- data/lib/mongoid/extensions/hash/conversions.rb +42 -0
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +20 -0
- data/lib/mongoid/extensions/hash/scoping.rb +12 -0
- data/lib/mongoid/extensions/integer/conversions.rb +20 -0
- data/lib/mongoid/extensions/nil/assimilation.rb +17 -0
- data/lib/mongoid/extensions/object/conversions.rb +21 -0
- data/lib/mongoid/extensions/objectid/conversions.rb +15 -0
- data/lib/mongoid/extensions/proc/scoping.rb +12 -0
- data/lib/mongoid/extensions/set/conversions.rb +20 -0
- data/lib/mongoid/extensions/string/conversions.rb +15 -0
- data/lib/mongoid/extensions/string/inflections.rb +97 -0
- data/lib/mongoid/extensions/symbol/inflections.rb +40 -0
- data/lib/mongoid/extensions/time_conversions.rb +35 -0
- data/lib/mongoid/extensions/true_class/equality.rb +13 -0
- data/lib/mongoid/extras.rb +61 -0
- data/lib/mongoid/factory.rb +20 -0
- data/lib/mongoid/field.rb +83 -0
- data/lib/mongoid/fields.rb +62 -0
- data/lib/mongoid/finders.rb +145 -0
- data/lib/mongoid/hierarchy.rb +74 -0
- data/lib/mongoid/identity.rb +47 -0
- data/lib/mongoid/indexes.rb +27 -0
- data/lib/mongoid/javascript.rb +21 -0
- data/lib/mongoid/javascript/functions.yml +37 -0
- data/lib/mongoid/logger.rb +19 -0
- data/lib/mongoid/matchers.rb +35 -0
- data/lib/mongoid/matchers/all.rb +11 -0
- data/lib/mongoid/matchers/default.rb +26 -0
- data/lib/mongoid/matchers/exists.rb +13 -0
- data/lib/mongoid/matchers/gt.rb +11 -0
- data/lib/mongoid/matchers/gte.rb +11 -0
- data/lib/mongoid/matchers/in.rb +11 -0
- data/lib/mongoid/matchers/lt.rb +11 -0
- data/lib/mongoid/matchers/lte.rb +11 -0
- data/lib/mongoid/matchers/ne.rb +11 -0
- data/lib/mongoid/matchers/nin.rb +11 -0
- data/lib/mongoid/matchers/size.rb +11 -0
- data/lib/mongoid/memoization.rb +33 -0
- data/lib/mongoid/named_scope.rb +37 -0
- data/lib/mongoid/paranoia.rb +106 -0
- data/lib/mongoid/paths.rb +61 -0
- data/lib/mongoid/persistence.rb +216 -0
- data/lib/mongoid/persistence/command.rb +39 -0
- data/lib/mongoid/persistence/insert.rb +48 -0
- data/lib/mongoid/persistence/insert_embedded.rb +44 -0
- data/lib/mongoid/persistence/remove.rb +39 -0
- data/lib/mongoid/persistence/remove_all.rb +38 -0
- data/lib/mongoid/persistence/remove_embedded.rb +50 -0
- data/lib/mongoid/persistence/update.rb +71 -0
- data/lib/mongoid/railtie.rb +67 -0
- data/lib/mongoid/railties/database.rake +60 -0
- data/lib/mongoid/scope.rb +75 -0
- data/lib/mongoid/state.rb +32 -0
- data/lib/mongoid/timestamps.rb +27 -0
- data/lib/mongoid/validations.rb +51 -0
- data/lib/mongoid/validations/associated.rb +32 -0
- data/lib/mongoid/validations/locale/en.yml +5 -0
- data/lib/mongoid/validations/uniqueness.rb +56 -0
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +26 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -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
- data/spec/integration/mongoid/association_attributes_spec.rb +71 -0
- data/spec/integration/mongoid/associations_spec.rb +768 -0
- data/spec/integration/mongoid/attributes_spec.rb +59 -0
- data/spec/integration/mongoid/callback_spec.rb +33 -0
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +33 -0
- data/spec/integration/mongoid/criteria_spec.rb +281 -0
- data/spec/integration/mongoid/dirty_spec.rb +85 -0
- data/spec/integration/mongoid/document_spec.rb +741 -0
- data/spec/integration/mongoid/extensions_spec.rb +22 -0
- data/spec/integration/mongoid/finders_spec.rb +119 -0
- data/spec/integration/mongoid/inheritance_spec.rb +171 -0
- data/spec/integration/mongoid/named_scope_spec.rb +58 -0
- data/spec/integration/mongoid/paranoia_spec.rb +44 -0
- data/spec/integration/mongoid/persistence/update_spec.rb +46 -0
- data/spec/integration/mongoid/persistence_spec.rb +311 -0
- data/spec/integration/mongoid/validations/uniqueness_spec.rb +206 -0
- data/spec/models/account.rb +5 -0
- data/spec/models/address.rb +40 -0
- data/spec/models/agent.rb +7 -0
- data/spec/models/animal.rb +15 -0
- data/spec/models/answer.rb +4 -0
- data/spec/models/callbacks.rb +47 -0
- data/spec/models/category.rb +13 -0
- data/spec/models/comment.rb +10 -0
- data/spec/models/country_code.rb +6 -0
- data/spec/models/employer.rb +5 -0
- data/spec/models/favorite.rb +8 -0
- data/spec/models/game.rb +9 -0
- data/spec/models/inheritance.rb +72 -0
- data/spec/models/location.rb +5 -0
- data/spec/models/login.rb +6 -0
- data/spec/models/mixed_drink.rb +4 -0
- data/spec/models/name.rb +13 -0
- data/spec/models/namespacing.rb +11 -0
- data/spec/models/paranoid_post.rb +18 -0
- data/spec/models/parents.rb +32 -0
- data/spec/models/patient.rb +15 -0
- data/spec/models/person.rb +106 -0
- data/spec/models/pet.rb +7 -0
- data/spec/models/pet_owner.rb +6 -0
- data/spec/models/phone.rb +7 -0
- data/spec/models/post.rb +25 -0
- data/spec/models/preference.rb +7 -0
- data/spec/models/question.rb +8 -0
- data/spec/models/survey.rb +6 -0
- data/spec/models/translation.rb +5 -0
- data/spec/models/user.rb +6 -0
- data/spec/models/user_accout.rb +5 -0
- data/spec/models/vet_visit.rb +5 -0
- data/spec/models/video.rb +5 -0
- data/spec/spec_helper.rb +33 -0
- data/spec/unit/mongoid/associations/embedded_in_spec.rb +193 -0
- data/spec/unit/mongoid/associations/embeds_many_spec.rb +626 -0
- data/spec/unit/mongoid/associations/embeds_one_spec.rb +287 -0
- data/spec/unit/mongoid/associations/foreign_key_spec.rb +90 -0
- data/spec/unit/mongoid/associations/meta_data_spec.rb +110 -0
- data/spec/unit/mongoid/associations/options_spec.rb +215 -0
- data/spec/unit/mongoid/associations/referenced_in_spec.rb +145 -0
- data/spec/unit/mongoid/associations/references_many_as_array_spec.rb +424 -0
- data/spec/unit/mongoid/associations/references_many_spec.rb +502 -0
- data/spec/unit/mongoid/associations/references_one_spec.rb +204 -0
- data/spec/unit/mongoid/associations_spec.rb +688 -0
- data/spec/unit/mongoid/atomicity_spec.rb +164 -0
- data/spec/unit/mongoid/attributes_spec.rb +646 -0
- data/spec/unit/mongoid/callbacks_spec.rb +85 -0
- data/spec/unit/mongoid/collection_spec.rb +187 -0
- data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
- data/spec/unit/mongoid/collections/master_spec.rb +41 -0
- data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
- data/spec/unit/mongoid/collections_spec.rb +98 -0
- data/spec/unit/mongoid/config_spec.rb +298 -0
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +447 -0
- data/spec/unit/mongoid/contexts/mongo_spec.rb +703 -0
- data/spec/unit/mongoid/contexts_spec.rb +25 -0
- data/spec/unit/mongoid/criteria_spec.rb +873 -0
- data/spec/unit/mongoid/criterion/complex_spec.rb +17 -0
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +121 -0
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +274 -0
- data/spec/unit/mongoid/criterion/optional_spec.rb +483 -0
- data/spec/unit/mongoid/cursor_spec.rb +80 -0
- data/spec/unit/mongoid/deprecation_spec.rb +24 -0
- data/spec/unit/mongoid/dirty_spec.rb +430 -0
- data/spec/unit/mongoid/document_spec.rb +623 -0
- data/spec/unit/mongoid/errors_spec.rb +154 -0
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
- data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +24 -0
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +52 -0
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +20 -0
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +36 -0
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +22 -0
- data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +49 -0
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +145 -0
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +14 -0
- data/spec/unit/mongoid/extensions/false_class/equality_spec.rb +35 -0
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +61 -0
- data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +184 -0
- data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +59 -0
- data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +35 -0
- data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +17 -0
- data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +14 -0
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +61 -0
- data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +29 -0
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +44 -0
- data/spec/unit/mongoid/extensions/objectid/conversions_spec.rb +22 -0
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +34 -0
- data/spec/unit/mongoid/extensions/set/conversions_spec.rb +21 -0
- data/spec/unit/mongoid/extensions/string/conversions_spec.rb +28 -0
- data/spec/unit/mongoid/extensions/string/inflections_spec.rb +208 -0
- data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +107 -0
- data/spec/unit/mongoid/extensions/time_conversions_spec.rb +186 -0
- data/spec/unit/mongoid/extensions/true_class/equality_spec.rb +35 -0
- data/spec/unit/mongoid/extras_spec.rb +102 -0
- data/spec/unit/mongoid/factory_spec.rb +31 -0
- data/spec/unit/mongoid/field_spec.rb +169 -0
- data/spec/unit/mongoid/fields_spec.rb +181 -0
- data/spec/unit/mongoid/finders_spec.rb +439 -0
- data/spec/unit/mongoid/hierarchy_spec.rb +68 -0
- data/spec/unit/mongoid/identity_spec.rb +109 -0
- data/spec/unit/mongoid/indexes_spec.rb +99 -0
- data/spec/unit/mongoid/javascript_spec.rb +48 -0
- data/spec/unit/mongoid/logger_spec.rb +38 -0
- data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
- data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
- data/spec/unit/mongoid/matchers_spec.rb +329 -0
- data/spec/unit/mongoid/memoization_spec.rb +75 -0
- data/spec/unit/mongoid/named_scope_spec.rb +123 -0
- data/spec/unit/mongoid/paranoia_spec.rb +108 -0
- data/spec/unit/mongoid/paths_spec.rb +272 -0
- data/spec/unit/mongoid/persistence/insert_embedded_spec.rb +154 -0
- data/spec/unit/mongoid/persistence/insert_spec.rb +144 -0
- data/spec/unit/mongoid/persistence/remove_all_spec.rb +82 -0
- data/spec/unit/mongoid/persistence/remove_embedded_spec.rb +152 -0
- data/spec/unit/mongoid/persistence/remove_spec.rb +89 -0
- data/spec/unit/mongoid/persistence/update_spec.rb +177 -0
- data/spec/unit/mongoid/persistence_spec.rb +452 -0
- data/spec/unit/mongoid/scope_spec.rb +240 -0
- data/spec/unit/mongoid/serialization_spec.rb +43 -0
- data/spec/unit/mongoid/state_spec.rb +94 -0
- data/spec/unit/mongoid/timestamps_spec.rb +30 -0
- data/spec/unit/mongoid/validations/associated_spec.rb +103 -0
- data/spec/unit/mongoid/validations/uniqueness_spec.rb +201 -0
- data/spec/unit/mongoid/validations_spec.rb +43 -0
- data/spec/unit/mongoid/versioning_spec.rb +41 -0
- data/spec/unit/mongoid_spec.rb +46 -0
- metadata +433 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Extensions do
|
|
4
|
+
|
|
5
|
+
context "setting floating point numbers" do
|
|
6
|
+
|
|
7
|
+
context "when value is an empty string" do
|
|
8
|
+
|
|
9
|
+
let(:person) { Person.new(:ssn => "555555555555555") }
|
|
10
|
+
|
|
11
|
+
before do
|
|
12
|
+
Person.validates_numericality_of :blood_alcohol_content, :allow_blank => true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "does not set the value" do
|
|
16
|
+
person.save.should be_true
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Finders do
|
|
4
|
+
|
|
5
|
+
describe "#find" do
|
|
6
|
+
|
|
7
|
+
context "using string ids" do
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@documents = []
|
|
11
|
+
@document = Person.create(:title => "Mrs.", :ssn => "another")
|
|
12
|
+
3.times do |n|
|
|
13
|
+
@documents << Person.create(:title => "Mr.", :ssn => "#{n}22")
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
after do
|
|
18
|
+
Person.delete_all
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
context "with an id as an argument" do
|
|
22
|
+
|
|
23
|
+
context "when the document is found" do
|
|
24
|
+
|
|
25
|
+
it "returns the document" do
|
|
26
|
+
Person.find(@document.id).should == @document
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
context "when the document is not found" do
|
|
32
|
+
|
|
33
|
+
it "raises an error" do
|
|
34
|
+
lambda { Person.find("5") }.should raise_error
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
context "with an array of ids as args" do
|
|
42
|
+
|
|
43
|
+
context "when the documents are found" do
|
|
44
|
+
|
|
45
|
+
it "returns an array of the documents" do
|
|
46
|
+
@people = Person.find(@documents.map(&:id))
|
|
47
|
+
@people.should == @documents
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
context "when no documents found" do
|
|
53
|
+
|
|
54
|
+
it "raises an error" do
|
|
55
|
+
lambda { Person.find(["11", "21", "31"]) }.should raise_error
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
context "using object ids" do
|
|
63
|
+
|
|
64
|
+
before do
|
|
65
|
+
Mongoid.use_object_ids = true
|
|
66
|
+
@documents = []
|
|
67
|
+
@document = Person.create(:title => "Mrs.", :ssn => "another")
|
|
68
|
+
3.times do |n|
|
|
69
|
+
@documents << Person.create(:title => "Mr.", :ssn => "#{n}22")
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
after do
|
|
74
|
+
Mongoid.use_object_ids = false
|
|
75
|
+
Person.delete_all
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
context "with an id as an argument" do
|
|
79
|
+
|
|
80
|
+
context "when the document is found" do
|
|
81
|
+
|
|
82
|
+
it "returns the document" do
|
|
83
|
+
Person.find(@document.id).should == @document
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
context "when the document is not found" do
|
|
89
|
+
|
|
90
|
+
it "raises an error" do
|
|
91
|
+
lambda { Person.find("5") }.should raise_error
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
context "with an array of ids as args" do
|
|
99
|
+
|
|
100
|
+
context "when the documents are found" do
|
|
101
|
+
|
|
102
|
+
it "returns an array of the documents" do
|
|
103
|
+
@people = Person.find(@documents.map(&:id))
|
|
104
|
+
@people.should == @documents
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context "when no documents found" do
|
|
110
|
+
|
|
111
|
+
it "raises an error" do
|
|
112
|
+
lambda { Person.find(["11", "21", "31"]) }.should raise_error
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Document do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
Browser.delete_all
|
|
7
|
+
Firefox.delete_all
|
|
8
|
+
Canvas.delete_all
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
context "when document is a subclass of a root class" do
|
|
12
|
+
|
|
13
|
+
before do
|
|
14
|
+
Browser.delete_all
|
|
15
|
+
@browser = Browser.create(:version => 3, :name => "Test")
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
it "saves in the same collection as the root" do
|
|
19
|
+
collection = Mongoid.master.collection("canvases")
|
|
20
|
+
attributes = collection.find({ :name => "Test"}, {}).next_document
|
|
21
|
+
attributes["version"].should == 3
|
|
22
|
+
attributes["name"].should == "Test"
|
|
23
|
+
attributes["_type"].should == "Browser"
|
|
24
|
+
attributes["_id"].should == @browser.id
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context "when document is a subclass of a subclass" do
|
|
30
|
+
|
|
31
|
+
before do
|
|
32
|
+
Firefox.delete_all
|
|
33
|
+
@firefox = Firefox.create(:version => 2, :name => "Testy")
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "saves in the same collection as the root" do
|
|
37
|
+
collection = Mongoid.master.collection("canvases")
|
|
38
|
+
attributes = collection.find({ :name => "Testy"}, {}).next_document
|
|
39
|
+
attributes["version"].should == 2
|
|
40
|
+
attributes["name"].should == "Testy"
|
|
41
|
+
attributes["_type"].should == "Firefox"
|
|
42
|
+
attributes["_id"].should == @firefox.id
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
it "returns the document when querying for superclass" do
|
|
46
|
+
Browser.where(:name => "Testy").first.should == @firefox
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
it "returns the document when querying for root class" do
|
|
50
|
+
Canvas.where(:name => "Testy").first.should == @firefox
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
it 'should returns on of this subclasses if you find by _type' do
|
|
54
|
+
Browser.create(:name => 'Safari', :version => '4.0.0')
|
|
55
|
+
Canvas.where(:_type.in => ['Firefox']).count.should == 1
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
context "when document has associations" do
|
|
61
|
+
|
|
62
|
+
before do
|
|
63
|
+
Firefox.delete_all
|
|
64
|
+
@firefox = Firefox.new(:name => "firefox")
|
|
65
|
+
@writer = HtmlWriter.new(:speed => 100)
|
|
66
|
+
@circle = Circle.new(:radius => 50)
|
|
67
|
+
@square = Square.new(:width => 300, :height => 150)
|
|
68
|
+
@firefox.writer = @writer
|
|
69
|
+
@firefox.shapes << [ @circle, @square ]
|
|
70
|
+
@firefox.save!
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
after do
|
|
74
|
+
Firefox.delete_all
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
it "properly saves a has one subclass" do
|
|
78
|
+
from_db = Firefox.find(@firefox.id)
|
|
79
|
+
from_db.should be_a_kind_of(Firefox)
|
|
80
|
+
from_db.writer.should be_a_kind_of(HtmlWriter)
|
|
81
|
+
from_db.writer.should == @writer
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
it "properly saves a has many subclass" do
|
|
85
|
+
from_db = Firefox.find(@firefox.id)
|
|
86
|
+
from_db.shapes.first.should == @circle
|
|
87
|
+
from_db.shapes.first.should be_a_kind_of(Circle)
|
|
88
|
+
from_db.shapes.last.should == @square
|
|
89
|
+
from_db.shapes.last.should be_a_kind_of(Square)
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
it "properly sets up the belongs to" do
|
|
93
|
+
from_db = Firefox.find(@firefox.id)
|
|
94
|
+
circle = from_db.shapes.first
|
|
95
|
+
circle.should == @circle
|
|
96
|
+
circle.canvas.should == @firefox
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
context "when document has subclasses" do
|
|
102
|
+
|
|
103
|
+
before do
|
|
104
|
+
@firefox = Firefox.create(:name => "firefox")
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
after do
|
|
108
|
+
Firefox.delete_all
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
it "returns subclasses for querying parents" do
|
|
112
|
+
firefox = Canvas.where(:name => "firefox").first
|
|
113
|
+
firefox.should be_a_kind_of(Firefox)
|
|
114
|
+
firefox.should == @firefox
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
context "deleting subclasses" do
|
|
120
|
+
|
|
121
|
+
before do
|
|
122
|
+
@firefox = Firefox.create(:name => "firefox")
|
|
123
|
+
@firefox2 = Firefox.create(:name => "firefox 2")
|
|
124
|
+
@browser = Browser.create(:name => "browser")
|
|
125
|
+
@canvas = Canvas.create(:name => "canvas")
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
after do
|
|
129
|
+
Firefox.delete_all
|
|
130
|
+
Browser.delete_all
|
|
131
|
+
Canvas.delete_all
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
it "deletes from the parent class collection" do
|
|
135
|
+
@firefox.delete
|
|
136
|
+
Firefox.count.should == 1
|
|
137
|
+
Browser.count.should == 2
|
|
138
|
+
Canvas.count.should == 3
|
|
139
|
+
end
|
|
140
|
+
|
|
141
|
+
it "deletes all documents except for those belonging to parent class collection" do
|
|
142
|
+
Firefox.delete_all
|
|
143
|
+
Firefox.count.should == 0
|
|
144
|
+
Browser.count.should == 1
|
|
145
|
+
Canvas.count.should == 2
|
|
146
|
+
end
|
|
147
|
+
|
|
148
|
+
end
|
|
149
|
+
|
|
150
|
+
context "when document is a subclass and its parent is an embedded document" do
|
|
151
|
+
|
|
152
|
+
before do
|
|
153
|
+
@canvas = Canvas.new(:name => "canvas")
|
|
154
|
+
@canvas.build_palette({})
|
|
155
|
+
@canvas.palette.tools << Pencil.new
|
|
156
|
+
@canvas.palette.tools << Eraser.new
|
|
157
|
+
@canvas.save
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
after do
|
|
161
|
+
Canvas.delete_all
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
it "properly saves the subclasses" do
|
|
165
|
+
from_db = Canvas.find(@canvas.id)
|
|
166
|
+
from_db.palette.tools.map(&:class).should == [Pencil, Eraser]
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
end
|
|
170
|
+
|
|
171
|
+
end
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::NamedScope do
|
|
4
|
+
|
|
5
|
+
describe ".scope" do
|
|
6
|
+
|
|
7
|
+
before(:all) do
|
|
8
|
+
Person.class_eval do
|
|
9
|
+
scope :doctors, {:where => {:title => 'Dr.'} }
|
|
10
|
+
scope :old, criteria.where(:age.gt => 50)
|
|
11
|
+
scope :alki, where(:blood_alcohol_content.gt => 0.3).order_by(:blood_alcohol_content.asc)
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
before do
|
|
16
|
+
@document = Person.create(:title => "Dr.", :age => 65, :terms => true, :ssn => "123-22-8346")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
after do
|
|
20
|
+
Person.delete_all
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
context "accessing a single named scope" do
|
|
24
|
+
|
|
25
|
+
it "returns the document" do
|
|
26
|
+
Person.doctors.first.should == @document
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context "chaining named scopes" do
|
|
31
|
+
|
|
32
|
+
it "returns the document" do
|
|
33
|
+
Person.old.doctors.first.should == @document
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
context "mixing named scopes and class methods" do
|
|
38
|
+
|
|
39
|
+
it "returns the document" do
|
|
40
|
+
Person.accepted.old.doctors.first.should == @document
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
context "using order_by in a named scope" do
|
|
45
|
+
|
|
46
|
+
before do
|
|
47
|
+
Person.create(:blood_alcohol_content => 0.5, :ssn => "121-22-8346")
|
|
48
|
+
Person.create(:blood_alcohol_content => 0.4, :ssn => "124-22-8346")
|
|
49
|
+
Person.create(:blood_alcohol_content => 0.7, :ssn => "125-22-8346")
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
it "sorts the results" do
|
|
53
|
+
docs = Person.alki
|
|
54
|
+
docs.first.blood_alcohol_content.should == 0.4
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Paranoia do
|
|
4
|
+
|
|
5
|
+
before :all do
|
|
6
|
+
ParanoidPost.delete_all
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
context 'a soft deleted item' do
|
|
10
|
+
|
|
11
|
+
before :each do
|
|
12
|
+
@post = ParanoidPost.create(:title => 'Can I die more than once?')
|
|
13
|
+
@post.delete
|
|
14
|
+
@post.reload
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
after :each do
|
|
18
|
+
@post.destroy!
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
it 'should have a deletion date' do
|
|
22
|
+
@post.deleted_at.should_not be_nil
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
it 'should be restorable' do
|
|
26
|
+
@post.restore
|
|
27
|
+
@post.reload
|
|
28
|
+
@post.deleted_at.should be_nil
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
it 'should be invisible to searches' do
|
|
32
|
+
ParanoidPost.count.should == 0
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it 'should be found overriding default deleted_at scoping' do
|
|
36
|
+
ParanoidPost.where(:deleted_at.ne => nil).count.should == 1
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should be hard-destroyable' do
|
|
40
|
+
@post.destroy!
|
|
41
|
+
ParanoidPost.where(:deleted_at.ne => nil).count.should == 0
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Persistence::Update do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
Person.delete_all
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
after do
|
|
10
|
+
Person.delete_all
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
describe "#persist" do
|
|
14
|
+
|
|
15
|
+
let(:person) do
|
|
16
|
+
Person.create!(:ssn => "111-11-1111", :title => "Sir")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
context "when the document has changed" do
|
|
20
|
+
|
|
21
|
+
before do
|
|
22
|
+
@person = Person.find(person.id)
|
|
23
|
+
@person.title = "Grand Poobah"
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
it "updates the document in the database" do
|
|
27
|
+
update = Mongoid::Persistence::Update.new(@person)
|
|
28
|
+
update.persist
|
|
29
|
+
from_db = Person.find(@person.id)
|
|
30
|
+
from_db.title.should == "Grand Poobah"
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
context "when the document has not changed" do
|
|
35
|
+
|
|
36
|
+
before do
|
|
37
|
+
@person = Person.find(person.id)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
it "returns true" do
|
|
41
|
+
update = Mongoid::Persistence::Update.new(@person)
|
|
42
|
+
update.persist.should == true
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|