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,240 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Scope do
|
|
4
|
+
|
|
5
|
+
before do
|
|
6
|
+
Person.delete_all
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
describe "#==" do
|
|
10
|
+
|
|
11
|
+
before do
|
|
12
|
+
@scope = Mongoid::Scope.new(Person, {})
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context "when other is a scope" do
|
|
16
|
+
|
|
17
|
+
context "when the parent and conditions match" do
|
|
18
|
+
|
|
19
|
+
before do
|
|
20
|
+
@other = Mongoid::Scope.new(Person, {})
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
it "returns true" do
|
|
24
|
+
@scope.should == @other
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
context "when the conditions do not match" do
|
|
30
|
+
|
|
31
|
+
before do
|
|
32
|
+
@other = Mongoid::Scope.new(Person, { :where => { :field => "value" } })
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
it "returns false" do
|
|
36
|
+
@scope.should_not == @other
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
context "when other is an enumerable" do
|
|
43
|
+
|
|
44
|
+
context "when the array contents are equal" do
|
|
45
|
+
|
|
46
|
+
before do
|
|
47
|
+
@other = []
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "returns true" do
|
|
51
|
+
@scope.should == @other
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
context "when the array contents are not equal" do
|
|
57
|
+
|
|
58
|
+
before do
|
|
59
|
+
@other = [ stub ]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
it "returns false" do
|
|
63
|
+
@scope.should_not == @other
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
context "when other is an invalid type" do
|
|
70
|
+
|
|
71
|
+
it "returns false" do
|
|
72
|
+
Mongoid::Scope.new(Person, {}).should_not == stub
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
describe ".initialize" do
|
|
80
|
+
|
|
81
|
+
before do
|
|
82
|
+
@parent = Mongoid::Scope.new(Person, {})
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
context "when parent is another scope" do
|
|
86
|
+
|
|
87
|
+
before do
|
|
88
|
+
@scope = Mongoid::Scope.new(@parent, {})
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
it "does not set the class" do
|
|
92
|
+
@scope.klass.should be_nil
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
context "when parent is a class" do
|
|
98
|
+
|
|
99
|
+
before do
|
|
100
|
+
@scope = Mongoid::Scope.new(Person, {})
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
it "returns the parent class" do
|
|
104
|
+
@scope.klass.should == Person
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
context "when a block is passed in" do
|
|
110
|
+
|
|
111
|
+
before do
|
|
112
|
+
@scope = Mongoid::Scope.new(Person, {}) do
|
|
113
|
+
def extended
|
|
114
|
+
"extended"
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it "extends the block" do
|
|
120
|
+
@scope.extended.should == "extended"
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
describe "#method_missing" do
|
|
128
|
+
|
|
129
|
+
context "when a scope has been defined for the name" do
|
|
130
|
+
|
|
131
|
+
before do
|
|
132
|
+
@defined = mock
|
|
133
|
+
@class = mock
|
|
134
|
+
@class.expects(:scopes).twice.returns({ :testing => @defined })
|
|
135
|
+
@scope = Mongoid::Scope.new(@class, {})
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
it "calls the matching scope" do
|
|
139
|
+
@defined.expects(:call).with(@scope, "Testing").returns(true)
|
|
140
|
+
@scope.testing("Testing").should be_true
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
context "when a scope is not defined for the name" do
|
|
146
|
+
|
|
147
|
+
context "when the scope is the parent" do
|
|
148
|
+
|
|
149
|
+
before do
|
|
150
|
+
@target = mock
|
|
151
|
+
@scope = Mongoid::Scope.new(Person, {})
|
|
152
|
+
@scope.instance_variable_set("@target", @target)
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it "sends the call to the target" do
|
|
156
|
+
@target.expects(:testing).with("Testing").returns(true)
|
|
157
|
+
@scope.testing("Testing").should be_true
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
context "when the scope is not the parent" do
|
|
163
|
+
|
|
164
|
+
before do
|
|
165
|
+
@parent = mock
|
|
166
|
+
@criteria = mock
|
|
167
|
+
@parent.expects(:scopes).returns({})
|
|
168
|
+
@parent.expects(:is_a?).with(Mongoid::Scope).returns(true)
|
|
169
|
+
@parent.expects(:fuse)
|
|
170
|
+
@scope = Mongoid::Scope.new(@parent, {})
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
it "creates a criteria from the parent scope" do
|
|
174
|
+
@parent.expects(:testing).returns(true)
|
|
175
|
+
@scope.testing.should be_true
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
end
|
|
181
|
+
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
describe "#respond_to?" do
|
|
185
|
+
|
|
186
|
+
context "when parent is a class" do
|
|
187
|
+
|
|
188
|
+
before do
|
|
189
|
+
@scope = Mongoid::Scope.new(Person, {})
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
it "delegates to the target" do
|
|
193
|
+
@scope.respond_to?(:only).should be_true
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
end
|
|
197
|
+
|
|
198
|
+
context "when parent is a scope" do
|
|
199
|
+
|
|
200
|
+
before do
|
|
201
|
+
@parent = Mongoid::Scope.new(Person, {})
|
|
202
|
+
@scope = Mongoid::Scope.new(@parent, {})
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
it "delegates to the parent" do
|
|
206
|
+
@scope.respond_to?(:only).should be_true
|
|
207
|
+
end
|
|
208
|
+
|
|
209
|
+
end
|
|
210
|
+
|
|
211
|
+
end
|
|
212
|
+
|
|
213
|
+
describe "#scopes" do
|
|
214
|
+
|
|
215
|
+
before do
|
|
216
|
+
@parent = mock
|
|
217
|
+
@scope = Mongoid::Scope.new(@parent, {})
|
|
218
|
+
end
|
|
219
|
+
|
|
220
|
+
it "delegates to the parent" do
|
|
221
|
+
@parent.expects(:scopes).returns({})
|
|
222
|
+
@scope.scopes.should == {}
|
|
223
|
+
end
|
|
224
|
+
|
|
225
|
+
end
|
|
226
|
+
|
|
227
|
+
describe "#target" do
|
|
228
|
+
|
|
229
|
+
before do
|
|
230
|
+
@scope = Mongoid::Scope.new(Person, { :where => { :title => "Sir" } })
|
|
231
|
+
end
|
|
232
|
+
|
|
233
|
+
it "returns the conditions criteria" do
|
|
234
|
+
@scope.target.selector.should ==
|
|
235
|
+
{ :title => "Sir" }
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
end
|
|
239
|
+
|
|
240
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::Document do
|
|
4
|
+
|
|
5
|
+
describe "#to_xml" do
|
|
6
|
+
|
|
7
|
+
context "when an Array field is defined" do
|
|
8
|
+
|
|
9
|
+
let(:person) do
|
|
10
|
+
Person.new(
|
|
11
|
+
:aliases => [ "Kelly", "Machine Gun" ]
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
it "properly types the array" do
|
|
16
|
+
person.to_xml.should include("<aliases type=\"array\">")
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
it "serializes the array" do
|
|
20
|
+
person.to_xml.should include("<alias>Kelly</alias>")
|
|
21
|
+
person.to_xml.should include("<alias>Machine Gun</alias>")
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
context "when a Hash field is defined" do
|
|
26
|
+
|
|
27
|
+
let(:person) do
|
|
28
|
+
Person.new(
|
|
29
|
+
:map => { :lat => 24.5, :long => 22.1 }
|
|
30
|
+
)
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
it "properly types the hash" do
|
|
34
|
+
person.to_xml.should include("<map>")
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
it "serializes the hash" do
|
|
38
|
+
person.to_xml.should include("<lat type=\"float\">24.5</lat>")
|
|
39
|
+
person.to_xml.should include("<long type=\"float\">22.1</long>")
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
require "spec_helper"
|
|
2
|
+
|
|
3
|
+
describe Mongoid::State do
|
|
4
|
+
|
|
5
|
+
describe "#new_record?" do
|
|
6
|
+
|
|
7
|
+
context "when calling new on the document" do
|
|
8
|
+
|
|
9
|
+
before do
|
|
10
|
+
@person = Person.new("_id" => "1")
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
it "returns true" do
|
|
14
|
+
@person.new_record?.should == true
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
context "when the object has been saved" do
|
|
19
|
+
|
|
20
|
+
before do
|
|
21
|
+
@person = Person.instantiate("_id" => "1")
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "returns false" do
|
|
25
|
+
@person.new_record?.should be_false
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
context "when the object has not been saved" do
|
|
31
|
+
|
|
32
|
+
before do
|
|
33
|
+
@person = Person.new
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
it "returns true" do
|
|
37
|
+
@person.new_record?.should be_true
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
describe "#persisted?" do
|
|
45
|
+
|
|
46
|
+
before do
|
|
47
|
+
@person = Person.new
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
it "delegates to new_record?" do
|
|
51
|
+
@person.persisted?.should be_false
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
describe "destroyed?" do
|
|
56
|
+
|
|
57
|
+
before do
|
|
58
|
+
@person = Person.new
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
context "when destroyed is true" do
|
|
62
|
+
|
|
63
|
+
before do
|
|
64
|
+
@person.destroyed = true
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
it "returns true" do
|
|
68
|
+
@person.destroyed?.should be_true
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
context "when destroyed is false" do
|
|
73
|
+
|
|
74
|
+
before do
|
|
75
|
+
@person.destroyed = false
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
it "returns true" do
|
|
79
|
+
@person.destroyed?.should be_false
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
context "when destroyed is nil" do
|
|
84
|
+
|
|
85
|
+
before do
|
|
86
|
+
@person.destroyed = nil
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
it "returns false" do
|
|
90
|
+
@person.destroyed?.should be_false
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
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(:create)
|
|
19
|
+
@person.run_callbacks(:save)
|
|
20
|
+
@person.created_at.should be_close(Time.now.utc, 10.seconds)
|
|
21
|
+
@person.updated_at.should be_close(Time.now.utc, 10.seconds)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
it "includes a record_timestamps class_accessor to ease AR compatibility" do
|
|
25
|
+
Person.should.respond_to? :record_timestamps
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
end
|
|
@@ -0,0 +1,103 @@
|
|
|
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
|