mongoid 5.4.1 → 6.0.0.beta

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.
Files changed (264) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/config/locales/en.yml +23 -16
  5. data/lib/mongoid.rb +4 -9
  6. data/lib/mongoid/atomic.rb +1 -1
  7. data/lib/mongoid/atomic/modifiers.rb +8 -12
  8. data/lib/mongoid/attributes.rb +9 -11
  9. data/lib/mongoid/attributes/dynamic.rb +5 -6
  10. data/lib/mongoid/attributes/nested.rb +1 -1
  11. data/lib/mongoid/attributes/processing.rb +4 -0
  12. data/lib/mongoid/attributes/readonly.rb +22 -0
  13. data/lib/mongoid/cacheable.rb +36 -0
  14. data/lib/mongoid/changeable.rb +37 -1
  15. data/lib/mongoid/clients.rb +0 -63
  16. data/lib/mongoid/clients/factory.rb +0 -2
  17. data/lib/mongoid/clients/options.rb +54 -249
  18. data/lib/mongoid/clients/storage_options.rb +1 -69
  19. data/lib/mongoid/composable.rb +26 -2
  20. data/lib/mongoid/config.rb +1 -1
  21. data/lib/mongoid/config/options.rb +1 -1
  22. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -0
  23. data/lib/mongoid/contextual/atomic.rb +6 -9
  24. data/lib/mongoid/contextual/geo_near.rb +2 -3
  25. data/lib/mongoid/contextual/map_reduce.rb +97 -24
  26. data/lib/mongoid/contextual/memory.rb +7 -4
  27. data/lib/mongoid/contextual/mongo.rb +63 -54
  28. data/lib/mongoid/contextual/none.rb +2 -2
  29. data/lib/mongoid/copyable.rb +19 -19
  30. data/lib/mongoid/criteria.rb +5 -4
  31. data/lib/mongoid/criteria/findable.rb +2 -3
  32. data/lib/mongoid/criteria/includable.rb +63 -16
  33. data/lib/mongoid/criteria/marshalable.rb +2 -2
  34. data/lib/mongoid/criteria/modifiable.rb +17 -1
  35. data/lib/mongoid/criteria/options.rb +25 -0
  36. data/lib/mongoid/criteria/queryable.rb +86 -0
  37. data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
  38. data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
  39. data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
  40. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
  41. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
  42. data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
  43. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
  44. data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
  45. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
  46. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
  47. data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
  48. data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
  49. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +45 -0
  50. data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
  51. data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
  52. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
  53. data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
  54. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
  55. data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
  56. data/lib/mongoid/criteria/queryable/key.rb +103 -0
  57. data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
  58. data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
  59. data/lib/mongoid/criteria/queryable/optional.rb +411 -0
  60. data/lib/mongoid/criteria/queryable/options.rb +136 -0
  61. data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
  62. data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
  63. data/lib/mongoid/criteria/queryable/selector.rb +196 -0
  64. data/lib/mongoid/criteria/queryable/smash.rb +103 -0
  65. data/lib/mongoid/document.rb +9 -23
  66. data/lib/mongoid/errors.rb +2 -1
  67. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
  68. data/lib/mongoid/errors/delete_restriction.rb +2 -2
  69. data/lib/mongoid/errors/invalid_field.rb +2 -2
  70. data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
  71. data/lib/mongoid/errors/invalid_relation.rb +66 -0
  72. data/lib/mongoid/errors/inverse_not_found.rb +1 -1
  73. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  74. data/lib/mongoid/evolvable.rb +1 -1
  75. data/lib/mongoid/extensions.rb +0 -5
  76. data/lib/mongoid/extensions/big_decimal.rb +17 -8
  77. data/lib/mongoid/extensions/date.rb +4 -1
  78. data/lib/mongoid/extensions/hash.rb +2 -3
  79. data/lib/mongoid/extensions/object.rb +2 -2
  80. data/lib/mongoid/extensions/string.rb +4 -3
  81. data/lib/mongoid/extensions/time.rb +5 -2
  82. data/lib/mongoid/factory.rb +1 -0
  83. data/lib/mongoid/fields/foreign_key.rb +2 -2
  84. data/lib/mongoid/fields/localized.rb +3 -8
  85. data/lib/mongoid/fields/validators/macro.rb +18 -0
  86. data/lib/mongoid/findable.rb +3 -3
  87. data/lib/mongoid/indexable.rb +17 -16
  88. data/lib/mongoid/indexable/specification.rb +1 -1
  89. data/lib/mongoid/indexable/validators/options.rb +1 -2
  90. data/lib/mongoid/interceptable.rb +6 -17
  91. data/lib/mongoid/loggable.rb +1 -1
  92. data/lib/mongoid/matchable.rb +3 -10
  93. data/lib/mongoid/matchable/gt.rb +2 -0
  94. data/lib/mongoid/matchable/gte.rb +2 -0
  95. data/lib/mongoid/matchable/lt.rb +2 -0
  96. data/lib/mongoid/matchable/lte.rb +2 -0
  97. data/lib/mongoid/persistable.rb +6 -5
  98. data/lib/mongoid/persistable/creatable.rb +2 -0
  99. data/lib/mongoid/persistable/deletable.rb +7 -3
  100. data/lib/mongoid/persistable/settable.rb +3 -16
  101. data/lib/mongoid/persistable/updatable.rb +10 -12
  102. data/lib/mongoid/persistence_context.rb +216 -0
  103. data/lib/mongoid/query_cache.rb +5 -30
  104. data/lib/mongoid/relations/accessors.rb +6 -2
  105. data/lib/mongoid/relations/auto_save.rb +12 -4
  106. data/lib/mongoid/relations/bindings/embedded/in.rb +4 -0
  107. data/lib/mongoid/relations/bindings/embedded/many.rb +8 -1
  108. data/lib/mongoid/relations/bindings/embedded/one.rb +10 -0
  109. data/lib/mongoid/relations/bindings/referenced/many.rb +4 -0
  110. data/lib/mongoid/relations/builders.rb +2 -2
  111. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  112. data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
  113. data/lib/mongoid/relations/conversions.rb +1 -1
  114. data/lib/mongoid/relations/counter_cache.rb +28 -18
  115. data/lib/mongoid/relations/eager.rb +19 -7
  116. data/lib/mongoid/relations/eager/base.rb +5 -5
  117. data/lib/mongoid/relations/embedded/batchable.rb +9 -33
  118. data/lib/mongoid/relations/embedded/in.rb +16 -2
  119. data/lib/mongoid/relations/embedded/many.rb +23 -8
  120. data/lib/mongoid/relations/embedded/one.rb +17 -2
  121. data/lib/mongoid/relations/macros.rb +9 -2
  122. data/lib/mongoid/relations/metadata.rb +3 -3
  123. data/lib/mongoid/relations/nested_builder.rb +1 -1
  124. data/lib/mongoid/relations/options.rb +2 -2
  125. data/lib/mongoid/relations/proxy.rb +2 -33
  126. data/lib/mongoid/relations/referenced/in.rb +23 -11
  127. data/lib/mongoid/relations/referenced/many.rb +24 -16
  128. data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
  129. data/lib/mongoid/relations/referenced/one.rb +17 -1
  130. data/lib/mongoid/relations/reflections.rb +3 -5
  131. data/lib/mongoid/relations/touchable.rb +1 -1
  132. data/lib/mongoid/reloadable.rb +1 -1
  133. data/lib/mongoid/scopable.rb +3 -3
  134. data/lib/mongoid/serializable.rb +2 -3
  135. data/lib/mongoid/tasks/database.rb +1 -2
  136. data/lib/mongoid/threaded.rb +4 -4
  137. data/lib/mongoid/traversable.rb +1 -1
  138. data/lib/mongoid/validatable.rb +1 -1
  139. data/lib/mongoid/validatable/macros.rb +2 -4
  140. data/lib/mongoid/validatable/uniqueness.rb +1 -2
  141. data/lib/mongoid/version.rb +1 -1
  142. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -7
  143. data/spec/app/models/album.rb +5 -1
  144. data/spec/app/models/artist.rb +21 -0
  145. data/spec/app/models/band.rb +0 -1
  146. data/spec/app/models/church.rb +0 -2
  147. data/spec/app/models/ordered_post.rb +5 -0
  148. data/spec/app/models/oscar.rb +1 -2
  149. data/spec/app/models/person.rb +3 -1
  150. data/spec/app/models/post.rb +0 -1
  151. data/spec/app/models/princess.rb +2 -0
  152. data/spec/app/models/record.rb +1 -0
  153. data/spec/app/models/thing.rb +1 -1
  154. data/spec/config/mongoid.yml +1 -5
  155. data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
  156. data/spec/mongoid/atomic_spec.rb +17 -17
  157. data/spec/mongoid/attributes/nested_spec.rb +14 -14
  158. data/spec/mongoid/attributes/readonly_spec.rb +87 -44
  159. data/spec/mongoid/attributes_spec.rb +63 -0
  160. data/spec/mongoid/cacheable_spec.rb +112 -0
  161. data/spec/mongoid/changeable_spec.rb +58 -0
  162. data/spec/mongoid/clients/factory_spec.rb +3 -11
  163. data/spec/mongoid/clients/options_spec.rb +378 -96
  164. data/spec/mongoid/clients_spec.rb +207 -170
  165. data/spec/mongoid/composable_spec.rb +7 -0
  166. data/spec/mongoid/config_spec.rb +41 -21
  167. data/spec/mongoid/contextual/atomic_spec.rb +77 -343
  168. data/spec/mongoid/contextual/map_reduce_spec.rb +119 -111
  169. data/spec/mongoid/contextual/memory_spec.rb +56 -316
  170. data/spec/mongoid/contextual/mongo_spec.rb +104 -378
  171. data/spec/mongoid/copyable_spec.rb +8 -15
  172. data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
  173. data/spec/mongoid/criteria/options_spec.rb +29 -0
  174. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
  175. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
  176. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
  177. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
  178. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
  179. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
  180. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
  181. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
  182. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
  183. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
  184. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
  185. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
  186. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
  187. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
  188. data/spec/mongoid/{extensions/origin/regexp_raw_spec.rb → criteria/queryable/extensions/regexp_spec.rb} +21 -20
  189. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
  190. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
  191. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
  192. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
  193. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
  194. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
  195. data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
  196. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
  197. data/spec/mongoid/criteria/queryable/optional_spec.rb +1786 -0
  198. data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
  199. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
  200. data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
  201. data/spec/mongoid/criteria/queryable/selectable_spec.rb +4159 -0
  202. data/spec/mongoid/criteria/queryable/selector_spec.rb +778 -0
  203. data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
  204. data/spec/mongoid/criteria_spec.rb +45 -63
  205. data/spec/mongoid/document_spec.rb +21 -88
  206. data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
  207. data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
  208. data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
  209. data/spec/mongoid/extensions/date_spec.rb +2 -6
  210. data/spec/mongoid/extensions/date_time_spec.rb +2 -6
  211. data/spec/mongoid/extensions/float_spec.rb +8 -1
  212. data/spec/mongoid/extensions/integer_spec.rb +8 -1
  213. data/spec/mongoid/extensions/object_spec.rb +11 -0
  214. data/spec/mongoid/extensions/string_spec.rb +21 -0
  215. data/spec/mongoid/extensions/time_spec.rb +4 -8
  216. data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
  217. data/spec/mongoid/fields/localized_spec.rb +0 -91
  218. data/spec/mongoid/findable_spec.rb +46 -1
  219. data/spec/mongoid/indexable_spec.rb +6 -46
  220. data/spec/mongoid/interceptable_spec.rb +49 -10
  221. data/spec/mongoid/matchable/gt_spec.rb +11 -0
  222. data/spec/mongoid/matchable/gte_spec.rb +10 -0
  223. data/spec/mongoid/matchable/lt_spec.rb +11 -0
  224. data/spec/mongoid/matchable/lte_spec.rb +11 -0
  225. data/spec/mongoid/matchable_spec.rb +1 -51
  226. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  227. data/spec/mongoid/persistable/deletable_spec.rb +1 -1
  228. data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
  229. data/spec/mongoid/persistable/savable_spec.rb +30 -30
  230. data/spec/mongoid/persistable/settable_spec.rb +0 -185
  231. data/spec/mongoid/persistable/updatable_spec.rb +166 -5
  232. data/spec/mongoid/persistence_context_spec.rb +654 -0
  233. data/spec/mongoid/positional_spec.rb +10 -10
  234. data/spec/mongoid/query_cache_spec.rb +89 -65
  235. data/spec/mongoid/relations/accessors_spec.rb +1 -1
  236. data/spec/mongoid/relations/auto_save_spec.rb +39 -6
  237. data/spec/mongoid/relations/builders_spec.rb +37 -10
  238. data/spec/mongoid/relations/counter_cache_spec.rb +64 -15
  239. data/spec/mongoid/relations/cyclic_spec.rb +0 -22
  240. data/spec/mongoid/relations/embedded/many_spec.rb +9 -41
  241. data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
  242. data/spec/mongoid/relations/macros_spec.rb +395 -7
  243. data/spec/mongoid/relations/proxy_spec.rb +3 -1
  244. data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
  245. data/spec/mongoid/relations/referenced/many_spec.rb +6 -29
  246. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +6 -29
  247. data/spec/mongoid/relations/reflections_spec.rb +9 -9
  248. data/spec/mongoid/reloadable_spec.rb +51 -0
  249. data/spec/mongoid/scopable_spec.rb +0 -12
  250. data/spec/mongoid/serializable_spec.rb +0 -50
  251. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  252. data/spec/mongoid/validatable/uniqueness_spec.rb +16 -9
  253. data/spec/mongoid/validatable_spec.rb +16 -0
  254. data/spec/spec_helper.rb +10 -10
  255. metadata +536 -479
  256. metadata.gz.sig +0 -0
  257. data/lib/mongoid/clients/thread_options.rb +0 -19
  258. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -20
  259. data/lib/mongoid/extensions/decimal128.rb +0 -39
  260. data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
  261. data/lib/mongoid/matchable/regexp.rb +0 -27
  262. data/spec/app/models/post_genre.rb +0 -6
  263. data/spec/mongoid/extensions/decimal128_spec.rb +0 -44
  264. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
@@ -6,34 +6,38 @@ describe Mongoid::Clients do
6
6
 
7
7
  shared_examples_for "an overridden collection at the class level" do
8
8
 
9
- let(:band) do
10
- klass.new
11
- end
12
-
13
9
  it "returns the collection for the model" do
14
- expect(band.collection).to be_a(Mongo::Collection)
10
+ expect(instance_collection).to be_a(Mongo::Collection)
15
11
  end
16
12
 
17
13
  it "sets the correct collection name" do
18
- expect(band.collection.name).to eq("artists")
14
+ expect(instance_collection.name).to eq("artists")
19
15
  end
20
16
 
21
17
  context "when accessing from the class level" do
22
18
 
23
19
  it "returns the collection for the model" do
24
- expect(klass.collection).to be_a(Mongo::Collection)
20
+ expect(class_collection).to be_a(Mongo::Collection)
25
21
  end
26
22
 
27
23
  it "sets the correct collection name" do
28
- expect(klass.collection.name).to eq("artists")
24
+ expect(class_collection.name).to eq("artists")
29
25
  end
30
26
  end
31
27
  end
32
28
 
33
29
  context "when overriding the persistence options" do
34
30
 
35
- let(:klass) do
36
- Band.with(collection: "artists")
31
+ let(:instance_collection) do
32
+ Band.with(collection: "artists") do |klass|
33
+ klass.new.collection
34
+ end
35
+ end
36
+
37
+ let(:class_collection) do
38
+ Band.with(collection: "artists") do |klass|
39
+ klass.collection
40
+ end
37
41
  end
38
42
 
39
43
  it_behaves_like "an overridden collection at the class level"
@@ -41,10 +45,6 @@ describe Mongoid::Clients do
41
45
 
42
46
  context "when overriding store_in and persistence options" do
43
47
 
44
- let(:klass) do
45
- Band.with(collection: "artists")
46
- end
47
-
48
48
  before do
49
49
  Band.store_in collection: "foo"
50
50
  end
@@ -53,6 +53,18 @@ describe Mongoid::Clients do
53
53
  Band.reset_storage_options!
54
54
  end
55
55
 
56
+ let(:instance_collection) do
57
+ Band.with(collection: "artists") do |klass|
58
+ klass.new.collection
59
+ end
60
+ end
61
+
62
+ let(:class_collection) do
63
+ Band.with(collection: "artists") do |klass|
64
+ klass.collection
65
+ end
66
+ end
67
+
56
68
  it_behaves_like "an overridden collection at the class level"
57
69
  end
58
70
 
@@ -77,19 +89,23 @@ describe Mongoid::Clients do
77
89
 
78
90
  context "when overriding with a proc" do
79
91
 
80
- let(:klass) { Band }
81
-
82
92
  before do
83
93
  Band.store_in(collection: ->{ "artists" })
84
94
  end
85
95
 
96
+ let(:instance_collection) do
97
+ Band.new.collection
98
+ end
99
+
100
+ let(:class_collection) do
101
+ Band.collection
102
+ end
103
+
86
104
  it_behaves_like "an overridden collection at the class level"
87
105
  end
88
106
 
89
107
  context "when overriding with a string" do
90
108
 
91
- let(:klass) { Band }
92
-
93
109
  before do
94
110
  Band.store_in(collection: "artists")
95
111
  end
@@ -98,19 +114,33 @@ describe Mongoid::Clients do
98
114
  Band.reset_storage_options!
99
115
  end
100
116
 
117
+ let(:instance_collection) do
118
+ Band.new.collection
119
+ end
120
+
121
+ let(:class_collection) do
122
+ Band.collection
123
+ end
124
+
101
125
  it_behaves_like "an overridden collection at the class level"
102
126
  end
103
127
 
104
128
  context "when overriding with a symbol" do
105
129
 
106
- let(:klass) { Band }
107
-
108
130
  before do
109
- klass.store_in(collection: :artists)
131
+ Band.store_in(collection: :artists)
110
132
  end
111
133
 
112
134
  after do
113
- klass.reset_storage_options!
135
+ Band.reset_storage_options!
136
+ end
137
+
138
+ let(:instance_collection) do
139
+ Band.new.collection
140
+ end
141
+
142
+ let(:class_collection) do
143
+ Band.collection
114
144
  end
115
145
 
116
146
  it_behaves_like "an overridden collection at the class level"
@@ -148,29 +178,33 @@ describe Mongoid::Clients do
148
178
 
149
179
  shared_examples_for "an overridden collection name at the class level" do
150
180
 
151
- let(:band) do
152
- klass.new
153
- end
154
-
155
181
  context "when accessing from the instance" do
156
182
 
157
183
  it "returns the overridden value" do
158
- expect(band.collection_name).to eq(:artists)
184
+ expect(instance_collection_name).to eq(:artists)
159
185
  end
160
186
  end
161
187
 
162
188
  context "when accessing from the class level" do
163
189
 
164
190
  it "returns the overridden value" do
165
- expect(klass.collection_name).to eq(:artists)
191
+ expect(class_collection_name).to eq(:artists)
166
192
  end
167
193
  end
168
194
  end
169
195
 
170
196
  context "when overriding the persistence options" do
171
197
 
172
- let(:klass) do
173
- Band.with(collection: "artists")
198
+ let(:instance_collection_name) do
199
+ Band.with(collection: "artists") do |klass|
200
+ klass.new.collection_name
201
+ end
202
+ end
203
+
204
+ let(:class_collection_name) do
205
+ Band.with(collection: "artists") do |klass|
206
+ klass.collection_name
207
+ end
174
208
  end
175
209
 
176
210
  it_behaves_like "an overridden collection name at the class level"
@@ -178,8 +212,16 @@ describe Mongoid::Clients do
178
212
 
179
213
  context "when overriding store_in and persistence options" do
180
214
 
181
- let(:klass) do
182
- Band.with(collection: "artists")
215
+ let(:instance_collection_name) do
216
+ Band.with(collection: "artists") do |klass|
217
+ klass.new.collection_name
218
+ end
219
+ end
220
+
221
+ let(:class_collection_name) do
222
+ Band.with(collection: "artists") do |klass|
223
+ klass.collection_name
224
+ end
183
225
  end
184
226
 
185
227
  before do
@@ -195,7 +237,13 @@ describe Mongoid::Clients do
195
237
 
196
238
  context "when overriding the default with store_in" do
197
239
 
198
- let(:klass) { Band }
240
+ let(:instance_collection_name) do
241
+ Band.new.collection_name
242
+ end
243
+
244
+ let(:class_collection_name) do
245
+ Band.collection_name
246
+ end
199
247
 
200
248
  after do
201
249
  Band.reset_storage_options!
@@ -266,38 +314,47 @@ describe Mongoid::Clients do
266
314
  end
267
315
  end
268
316
 
269
- describe "#database_name", if: non_legacy_server? do
317
+ describe "#database_name" do
270
318
 
271
319
  shared_examples_for "an overridden database name" do
272
320
 
273
- let(:band) do
274
- klass.new
275
- end
276
-
277
321
  context "when accessing from the instance" do
278
322
 
279
323
  it "returns the overridden value" do
280
- # @todo
281
- # expect(band.mongo_client.options[:database].to_s).to eq(database_id_alt)
324
+ expect(instance_database.name.to_s).to eq(database_id_alt)
282
325
  end
283
326
  end
284
327
 
285
328
  context "when accessing from the class level" do
286
329
 
287
330
  it "returns the overridden value" do
288
- expect(klass.database_name.to_s).to eq(database_id_alt)
331
+ expect(class_database.name.to_s).to eq(database_id_alt)
289
332
  end
290
333
 
291
334
  it "client returns the overridden value" do
292
- expect(klass.mongo_client.options[:database].to_s).to eq(database_id_alt)
335
+ expect(class_mongo_client.database.name).to eq(database_id_alt)
293
336
  end
294
337
  end
295
338
  end
296
339
 
297
340
  context "when overriding the persistence options" do
298
341
 
299
- let(:klass) do
300
- Band.with(database: database_id_alt)
342
+ let(:instance_database) do
343
+ Band.with(database: database_id_alt) do |klass|
344
+ klass.new.mongo_client.database
345
+ end
346
+ end
347
+
348
+ let(:class_database) do
349
+ Band.with(database: database_id_alt) do |klass|
350
+ klass.mongo_client.database
351
+ end
352
+ end
353
+
354
+ let(:class_mongo_client) do
355
+ Band.with(database: database_id_alt) do |klass|
356
+ klass.new.mongo_client
357
+ end
301
358
  end
302
359
 
303
360
  it_behaves_like "an overridden database name"
@@ -305,7 +362,17 @@ describe Mongoid::Clients do
305
362
 
306
363
  context "when overriding with store_in" do
307
364
 
308
- let(:klass) { Band }
365
+ let(:instance_database) do
366
+ Band.new.mongo_client.database
367
+ end
368
+
369
+ let(:class_database) do
370
+ Band.mongo_client.database
371
+ end
372
+
373
+ let(:class_mongo_client) do
374
+ Band.mongo_client
375
+ end
309
376
 
310
377
  before do
311
378
  Band.store_in database: database_id_alt
@@ -320,8 +387,22 @@ describe Mongoid::Clients do
320
387
 
321
388
  context "when overriding store_in and persistence options" do
322
389
 
323
- let(:klass) do
324
- Band.with(database: database_id_alt)
390
+ let(:instance_database) do
391
+ Band.with(database: database_id_alt) do |klass|
392
+ klass.new.mongo_client.database
393
+ end
394
+ end
395
+
396
+ let(:class_database) do
397
+ Band.with(database: database_id_alt) do |klass|
398
+ klass.mongo_client.database
399
+ end
400
+ end
401
+
402
+ let(:class_mongo_client) do
403
+ Band.with(database: database_id_alt) do |klass|
404
+ klass.new.mongo_client
405
+ end
325
406
  end
326
407
 
327
408
  before do
@@ -349,8 +430,22 @@ describe Mongoid::Clients do
349
430
 
350
431
  context "when overriding the persistence options" do
351
432
 
352
- let(:klass) do
353
- Band.with(client: client_name)
433
+ let(:instance_database) do
434
+ Band.with(client: :alternative) do |klass|
435
+ klass.new.mongo_client.database
436
+ end
437
+ end
438
+
439
+ let(:class_database) do
440
+ Band.with(client: :alternative) do |klass|
441
+ klass.mongo_client.database
442
+ end
443
+ end
444
+
445
+ let(:class_mongo_client) do
446
+ Band.with(client: :alternative) do |klass|
447
+ klass.new.mongo_client
448
+ end
354
449
  end
355
450
 
356
451
  it_behaves_like "an overridden database name"
@@ -358,7 +453,17 @@ describe Mongoid::Clients do
358
453
 
359
454
  context "when overriding with store_in" do
360
455
 
361
- let(:klass) { Band }
456
+ let(:instance_database) do
457
+ Band.new.mongo_client.database
458
+ end
459
+
460
+ let(:class_database) do
461
+ Band.mongo_client.database
462
+ end
463
+
464
+ let(:class_mongo_client) do
465
+ Band.mongo_client
466
+ end
362
467
 
363
468
  before do
364
469
  Band.store_in(client: client_name)
@@ -373,7 +478,7 @@ describe Mongoid::Clients do
373
478
  end
374
479
  end
375
480
 
376
- describe "#mongo_client", if: non_legacy_server? do
481
+ describe "#mongo_client" do
377
482
 
378
483
  let(:file) do
379
484
  File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
@@ -408,14 +513,6 @@ describe Mongoid::Clients do
408
513
  it "returns the default client" do
409
514
  expect(mongo_client.options[:database].to_s).to eq(database_id)
410
515
  end
411
-
412
- it "sets the platform to Mongoid's platform constant" do
413
- expect(mongo_client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
414
- end
415
-
416
- it "sets the app_name to the config value" do
417
- expect(mongo_client.options[:app_name]).to eq('testing')
418
- end
419
516
  end
420
517
 
421
518
  context "when no client exists with the key" do
@@ -424,10 +521,6 @@ describe Mongoid::Clients do
424
521
  Band.store_in(client: :nonexistent)
425
522
  end
426
523
 
427
- after do
428
- Band.reset_storage_options!
429
- end
430
-
431
524
  let(:band) do
432
525
  Band.new
433
526
  end
@@ -438,66 +531,9 @@ describe Mongoid::Clients do
438
531
  }.to raise_error(Mongoid::Errors::NoClientConfig)
439
532
  end
440
533
  end
441
-
442
- context "when getting a client by name", if: testing_locally? do
443
-
444
- let(:file) do
445
- File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
446
- end
447
-
448
- before do
449
- described_class.clear
450
- Mongoid.load!(file, :test)
451
- Band.store_in(client: :reports)
452
- end
453
-
454
- after do
455
- mongo_client.close
456
- Mongoid::Config.reset
457
- Band.reset_storage_options!
458
- end
459
-
460
- let!(:band) do
461
- Band.store_in(client: :reports)
462
- end
463
-
464
- let!(:mongo_client) do
465
- Band.new.mongo_client
466
- end
467
-
468
- it "uses the reports client" do
469
- expect(mongo_client.options[:database].to_s).to eq('reports')
470
- end
471
-
472
- it "sets the platform to Mongoid's platform constant" do
473
- expect(mongo_client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
474
- end
475
-
476
- it "sets the app_name to the config value" do
477
- expect(mongo_client.options[:app_name]).to eq('testing')
478
- end
479
- end
480
-
481
- context 'when the app_name is not set in the config' do
482
-
483
- before do
484
- Mongoid::Config.reset
485
- Mongoid.configure do |config|
486
- config.load_configuration(CONFIG)
487
- end
488
- end
489
-
490
- let(:mongo_client) do
491
- Band.new.mongo_client
492
- end
493
-
494
- it 'does not set the Mongoid.app_name option' do
495
- expect(mongo_client.options.has_key?(:app_name)).to be(false)
496
- end
497
- end
498
534
  end
499
535
 
500
- describe ".mongo_client", if: non_legacy_server? do
536
+ describe ".mongo_client" do
501
537
 
502
538
  let(:file) do
503
539
  File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
@@ -526,21 +562,13 @@ describe Mongoid::Clients do
526
562
  Mongoid.clients[:default][:database] = database_id
527
563
  end
528
564
 
529
- let(:mongo_client) do
565
+ let!(:mongo_client) do
530
566
  Band.mongo_client
531
567
  end
532
568
 
533
569
  it "returns the default client" do
534
570
  expect(mongo_client.options[:database].to_s).to eq(database_id)
535
571
  end
536
-
537
- it "sets the platform to Mongoid's platform constant" do
538
- expect(mongo_client.options[:platform]).to eq(Mongoid::PLATFORM_DETAILS)
539
- end
540
-
541
- it "sets the app_name to the config value" do
542
- expect(mongo_client.options[:app_name]).to eq('testing')
543
- end
544
572
  end
545
573
 
546
574
  context "when no client exists with the key" do
@@ -568,7 +596,7 @@ describe Mongoid::Clients do
568
596
  end
569
597
  end
570
598
 
571
- context "when provided a class that extend another document" do
599
+ context "when provided a class that extends another document" do
572
600
 
573
601
  let(:klass) do
574
602
  Class.new(Band)
@@ -599,7 +627,9 @@ describe Mongoid::Clients do
599
627
  context "when changing write concern options" do
600
628
 
601
629
  let(:client_one) do
602
- Band.with(write: { w: 2 }).mongo_client
630
+ Band.with(write: { w: 2 }) do |klass|
631
+ klass.mongo_client
632
+ end
603
633
  end
604
634
 
605
635
  let(:client_two) do
@@ -614,13 +644,17 @@ describe Mongoid::Clients do
614
644
  context "when sending operations to a different database" do
615
645
 
616
646
  after do
617
- Band.with(database: database_id_alt).delete_all
647
+ Band.with(database: database_id_alt) do |klass|
648
+ klass.delete_all
649
+ end
618
650
  end
619
651
 
620
652
  describe ".create" do
621
653
 
622
654
  let!(:band) do
623
- Band.with(database: database_id_alt).create
655
+ Band.with(database: database_id_alt) do |klass|
656
+ klass.create
657
+ end
624
658
  end
625
659
 
626
660
  it "does not persist to the default database" do
@@ -630,15 +664,23 @@ describe Mongoid::Clients do
630
664
  end
631
665
 
632
666
  let(:from_db) do
633
- Band.with(database: database_id_alt).find(band.id)
667
+ Band.with(database: database_id_alt) do |klass|
668
+ klass.find(band.id)
669
+ end
634
670
  end
635
671
 
636
672
  it "persists to the specified database" do
637
673
  expect(from_db).to eq(band)
638
674
  end
639
675
 
676
+ let(:count) do
677
+ Band.with(database: database_id_alt) do |klass|
678
+ klass.count
679
+ end
680
+ end
681
+
640
682
  it "persists the correct number of documents" do
641
- expect(Band.with(database: database_id_alt).count).to eq(1)
683
+ expect(count).to eq(1)
642
684
  end
643
685
  end
644
686
  end
@@ -648,7 +690,9 @@ describe Mongoid::Clients do
648
690
  describe ".create" do
649
691
 
650
692
  let!(:band) do
651
- Band.with(collection: "artists").create
693
+ Band.with(collection: "artists") do |klass|
694
+ klass.create
695
+ end
652
696
  end
653
697
 
654
698
  it "does not persist to the default database" do
@@ -658,15 +702,23 @@ describe Mongoid::Clients do
658
702
  end
659
703
 
660
704
  let(:from_db) do
661
- Band.with(collection: "artists").find(band.id)
705
+ Band.with(collection: "artists") do |klass|
706
+ klass.find(band.id)
707
+ end
662
708
  end
663
709
 
664
710
  it "persists to the specified database" do
665
711
  expect(from_db).to eq(band)
666
712
  end
667
713
 
714
+ let(:count) do
715
+ Band.with(collection: "artists") do |klass|
716
+ klass.count
717
+ end
718
+ end
719
+
668
720
  it "persists the correct number of documents" do
669
- expect(Band.with(collection: "artists").count).to eq(1)
721
+ expect(count).to eq(1)
670
722
  end
671
723
  end
672
724
  end
@@ -796,7 +848,7 @@ describe Mongoid::Clients do
796
848
  end
797
849
  end
798
850
 
799
- context "when overriding the default database", if: non_legacy_server? do
851
+ context "when overriding the default database" do
800
852
 
801
853
  let(:file) do
802
854
  File.join(File.dirname(__FILE__), "..", "config", "mongoid.yml")
@@ -808,42 +860,27 @@ describe Mongoid::Clients do
808
860
 
809
861
  context "when the override is global" do
810
862
 
811
- shared_examples_for "a global database override" do
812
-
813
- before do
814
- Mongoid.override_database(:mongoid_optional)
815
- end
816
-
817
- after do
818
- Band.delete_all
819
- Mongoid.override_database(nil)
820
- end
821
-
822
- let!(:band) do
823
- klass.create(name: "Tool")
824
- end
825
-
826
- it "persists to the overridden database" do
827
- mongo_client = Band.mongo_client.with(database: :mongoid_optional)
828
- expect(mongo_client[:bands].count(name: "Tool")).to eq(1)
829
- end
830
-
831
- it 'uses that database for the model mongo_client' do
832
- expect(Band.mongo_client.database.name).to eq('mongoid_optional')
833
- end
863
+ before do
864
+ Mongoid.override_database(:mongoid_optional)
834
865
  end
835
866
 
836
- context "when normal usage" do
837
- let(:klass) { Band }
838
-
839
- it_behaves_like "a global database override"
867
+ after do
868
+ Band.delete_all
869
+ Mongoid.override_database(nil)
840
870
  end
841
871
 
842
- context "when overriding the persistence options" do
872
+ let!(:band) do
873
+ Band.create(name: "Tool")
874
+ end
843
875
 
844
- let(:klass) { Band.with(connect_timeout: 10) }
876
+ it "persists to the overridden database" do
877
+ Band.mongo_client.with(database: :mongoid_optional) do |sess|
878
+ expect(sess[:bands].find(name: "Tool")).to_not be_nil
879
+ end
880
+ end
845
881
 
846
- it_behaves_like "a global database override"
882
+ it 'uses that database for the model mongo_client' do
883
+ expect(Band.mongo_client.database.name).to eq('mongoid_optional')
847
884
  end
848
885
  end
849
886
  end