mongoid 5.4.1 → 6.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -19,7 +19,9 @@ describe Mongoid::Relations::Proxy do
19
19
 
20
20
  it 'uses the new persistence options' do
21
21
  expect {
22
- animal.with(write: { w: 100 }).update_attribute(:name, 'kangaroo')
22
+ animal.with(write: { w: 100 }) do |an|
23
+ an.update_attribute(:name, 'kangaroo')
24
+ end
23
25
  }.to raise_exception(Mongo::Error::OperationFailure)
24
26
  end
25
27
  end
@@ -264,6 +264,44 @@ describe Mongoid::Relations::Referenced::In do
264
264
 
265
265
  context "when the relation is not polymorphic" do
266
266
 
267
+ context 'when the child has persistence options set' do
268
+
269
+ let(:person) do
270
+ Person.new
271
+ end
272
+
273
+ let(:post) do
274
+ Post.new
275
+ end
276
+
277
+ before do
278
+ post.with(collection: 'other-posts') do |p|
279
+ person.with(collection: 'other-people') do |per|
280
+ p.person = person
281
+ per.save
282
+ p.save
283
+ end
284
+ end
285
+ end
286
+
287
+ let(:other_people_count) do
288
+ Person.with(collection: 'other-people') do |person_class|
289
+ person_class.count
290
+ end
291
+ end
292
+
293
+ let(:other_posts_count) do
294
+ Post.with(collection: 'other-posts') do |post_class|
295
+ post_class.count
296
+ end
297
+ end
298
+
299
+ it 'applies the persistence options when saving the child' do
300
+ expect(other_people_count).to eq(1)
301
+ expect(other_posts_count).to eq(1)
302
+ end
303
+ end
304
+
267
305
  context "when the child is a new record" do
268
306
 
269
307
  let(:person) do
@@ -1028,7 +1066,9 @@ describe Mongoid::Relations::Referenced::In do
1028
1066
  :index,
1029
1067
  :polymorphic,
1030
1068
  :primary_key,
1031
- :touch
1069
+ :touch,
1070
+ :optional,
1071
+ :required
1032
1072
  ]
1033
1073
  )
1034
1074
  end
@@ -2936,17 +2936,6 @@ describe Mongoid::Relations::Referenced::Many do
2936
2936
  end
2937
2937
  end
2938
2938
 
2939
- context 'when providing a collation', if: collation_supported? do
2940
-
2941
- let(:posts) do
2942
- person.posts.where(title: "FIRST").collation(locale: 'en_US', strength: 2)
2943
- end
2944
-
2945
- it "applies the collation option to the query" do
2946
- expect(posts).to eq([ post_one ])
2947
- end
2948
- end
2949
-
2950
2939
  context "when providing a criteria class method" do
2951
2940
 
2952
2941
  let(:posts) do
@@ -3504,12 +3493,10 @@ describe Mongoid::Relations::Referenced::Many do
3504
3493
 
3505
3494
  before do
3506
3495
  expect(artist).to receive(:before_add_album).and_raise
3496
+ begin; artist.albums << album; rescue; end
3507
3497
  end
3508
3498
 
3509
3499
  it "does not add the document to the relation" do
3510
- expect {
3511
- artist.albums << album
3512
- }.to raise_error
3513
3500
  expect(artist.albums).to be_empty
3514
3501
  end
3515
3502
  end
@@ -3534,12 +3521,10 @@ describe Mongoid::Relations::Referenced::Many do
3534
3521
 
3535
3522
  before do
3536
3523
  expect(artist).to receive(:after_add_album).and_raise
3524
+ begin; artist.albums << album; rescue; end
3537
3525
  end
3538
3526
 
3539
3527
  it "adds the document to the relation" do
3540
- expect {
3541
- artist.albums << album
3542
- }.to raise_error
3543
3528
  expect(artist.albums).to eq([ album ])
3544
3529
  end
3545
3530
  end
@@ -3618,9 +3603,7 @@ describe Mongoid::Relations::Referenced::Many do
3618
3603
  describe "#delete" do
3619
3604
 
3620
3605
  before do
3621
- expect {
3622
- artist.albums.delete album
3623
- }.to raise_error
3606
+ begin; artist.albums.delete(album); rescue; end
3624
3607
  end
3625
3608
 
3626
3609
  it "does not remove the document from the relation" do
@@ -3631,9 +3614,7 @@ describe Mongoid::Relations::Referenced::Many do
3631
3614
  describe "#clear" do
3632
3615
 
3633
3616
  before do
3634
- expect {
3635
- artist.albums.clear
3636
- }.to raise_error
3617
+ begin; artist.albums.clear; rescue; end
3637
3618
  end
3638
3619
 
3639
3620
  it "does not clear the relation" do
@@ -3693,9 +3674,7 @@ describe Mongoid::Relations::Referenced::Many do
3693
3674
  describe "#delete" do
3694
3675
 
3695
3676
  before do
3696
- expect {
3697
- artist.albums.delete album
3698
- }.to raise_error
3677
+ begin; artist.albums.delete(album); rescue; end
3699
3678
  end
3700
3679
 
3701
3680
  it "removes the documents from the relation" do
@@ -3706,9 +3685,7 @@ describe Mongoid::Relations::Referenced::Many do
3706
3685
  describe "#clear" do
3707
3686
 
3708
3687
  before do
3709
- expect {
3710
- artist.albums.clear
3711
- }.to raise_error
3688
+ begin; artist.albums.clear; rescue; end
3712
3689
  end
3713
3690
 
3714
3691
  it "removes the documents from the relation" do
@@ -516,12 +516,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
516
516
 
517
517
  before do
518
518
  expect(post).to receive(:before_add_tag).and_raise
519
+ begin; post.tags.send(method, tag); rescue; end;
519
520
  end
520
521
 
521
522
  it "does not add the document to the relation" do
522
- expect {
523
- post.tags.send(method, tag)
524
- }.to raise_error
525
523
  expect(post.tags).to be_empty
526
524
  end
527
525
  end
@@ -538,12 +536,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
538
536
 
539
537
  before do
540
538
  expect(post).to receive(:after_add_tag).and_raise
539
+ begin; post.tags.send(method, tag); rescue; end
541
540
  end
542
541
 
543
542
  it "adds the document to the relation" do
544
- expect {
545
- post.tags.send(method, tag)
546
- }.to raise_error
547
543
  expect(post.tags).to eq([ tag ])
548
544
  end
549
545
  end
@@ -1186,12 +1182,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
1186
1182
 
1187
1183
  before do
1188
1184
  expect(post).to receive(:before_remove_tag).and_raise
1185
+ begin; post.tags.clear; rescue; end
1189
1186
  end
1190
1187
 
1191
1188
  it "does not remove the document from the relation" do
1192
- expect {
1193
- post.tags.clear
1194
- }.to raise_error
1195
1189
  expect(post.tags).to eq([ tag ])
1196
1190
  end
1197
1191
  end
@@ -1218,12 +1212,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
1218
1212
 
1219
1213
  before do
1220
1214
  expect(post).to receive(:after_remove_tag).and_raise
1215
+ begin; post.tags.clear; rescue; end
1221
1216
  end
1222
1217
 
1223
1218
  it "removes the document from the relation" do
1224
- expect {
1225
- post.tags.clear
1226
- }.to raise_error
1227
1219
  expect(post.tags).to be_empty
1228
1220
  end
1229
1221
  end
@@ -2120,12 +2112,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2120
2112
 
2121
2113
  before do
2122
2114
  expect(post).to receive(:before_remove_tag).and_raise
2115
+ begin; post.tags.delete(tag); rescue; end
2123
2116
  end
2124
2117
 
2125
2118
  it "does not remove the document from the relation" do
2126
- expect {
2127
- post.tags.delete tag
2128
- }.to raise_error
2129
2119
  expect(post.tags).to eq([ tag ])
2130
2120
  end
2131
2121
  end
@@ -2152,12 +2142,10 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2152
2142
 
2153
2143
  before do
2154
2144
  expect(post).to receive(:after_remove_tag).and_raise
2145
+ begin; post.tags.delete(tag); rescue; end
2155
2146
  end
2156
2147
 
2157
2148
  it "removes the document from the relation" do
2158
- expect {
2159
- post.tags.delete(tag)
2160
- }.to raise_error
2161
2149
  expect(post.tags).to be_empty
2162
2150
  end
2163
2151
  end
@@ -2654,17 +2642,6 @@ describe Mongoid::Relations::Referenced::ManyToMany do
2654
2642
  end
2655
2643
  end
2656
2644
 
2657
- context 'when providing a collation', if: collation_supported? do
2658
-
2659
- let(:preferences) do
2660
- person.preferences.where(name: "FIRST").collation(locale: 'en_US', strength: 2).to_a
2661
- end
2662
-
2663
- it "applies the collation option to the query" do
2664
- expect(preferences).to eq([ preference_one ])
2665
- end
2666
- end
2667
-
2668
2645
  context "when providing a criteria on id" do
2669
2646
 
2670
2647
  let(:preferences) do
@@ -74,23 +74,23 @@ describe Mongoid::Relations::Reflections do
74
74
  expect(relations.size).to eq(1)
75
75
  end
76
76
  end
77
+ end
77
78
 
78
- context "when no argument supplied" do
79
+ context "when no relations exist for the macros" do
79
80
 
80
- let(:relations) do
81
- klass.reflect_on_all_associations
82
- end
81
+ let(:relations) do
82
+ klass.reflect_on_all_associations(:embeds_one)
83
+ end
83
84
 
84
- it "returns an array of all relations" do
85
- expect(relations.size).to eq(3)
86
- end
85
+ it "returns an empty array" do
86
+ expect(relations).to be_empty
87
87
  end
88
88
  end
89
89
 
90
- context "when no relations exist for the macros" do
90
+ context "when no argument supplied" do
91
91
 
92
92
  let(:relations) do
93
- klass.reflect_on_all_associations(:embeds_one)
93
+ klass.reflect_on_all_associations
94
94
  end
95
95
 
96
96
  it "returns an empty array" do
@@ -4,6 +4,25 @@ describe Mongoid::Reloadable do
4
4
 
5
5
  describe "#reload" do
6
6
 
7
+ context 'when persistence options are set' do
8
+
9
+ let(:person) do
10
+ Person.with(collection: 'other') do |person_class|
11
+ person_class.create
12
+ end
13
+ end
14
+
15
+ let(:reloaded) do
16
+ Person.with(collection: 'other') do |person_class|
17
+ person_class.first
18
+ end
19
+ end
20
+
21
+ it 'applies the persistence options' do
22
+ expect(person).to eq(reloaded)
23
+ end
24
+ end
25
+
7
26
  context "when using bson ids" do
8
27
 
9
28
  let(:person) do
@@ -106,6 +125,38 @@ describe Mongoid::Reloadable do
106
125
 
107
126
  context "when embedded a single level" do
108
127
 
128
+ context 'when persistence options are set' do
129
+
130
+ let(:person) do
131
+ Person.with(collection: 'other') do |person_class|
132
+ person_class.create
133
+ end
134
+ end
135
+
136
+ let!(:address) do
137
+ person.with(collection: 'other') do |person_object|
138
+ person_object.addresses.create(street: "Abbey Road", number: 4)
139
+ end
140
+ end
141
+
142
+ before do
143
+ Person.mongo_client[:other].find(
144
+ { "_id" => person.id }
145
+ ).update_one({ "$set" => { "addresses.0.number" => 3 }})
146
+ end
147
+
148
+ let!(:reloaded) do
149
+ person.with(collection: 'other') do |person_class|
150
+ person.addresses.first.reload
151
+ end
152
+ end
153
+
154
+ it "reloads the embedded document attributes" do
155
+ expect(reloaded.number).to eq(3)
156
+ end
157
+
158
+ end
159
+
109
160
  context "when the relation is an embeds many" do
110
161
 
111
162
  let!(:address) do
@@ -227,18 +227,6 @@ describe Mongoid::Scopable do
227
227
 
228
228
  context "when provided a criteria" do
229
229
 
230
- context 'when a collation is defined on the criteria', if: collation_supported? do
231
-
232
- before do
233
- Band.scope(:tests, ->{ Band.where(name: 'TESTING').collation(locale: 'en_US', strength: 2) })
234
- Band.create(name: 'testing')
235
- end
236
-
237
- it 'applies the collation' do
238
- expect(Band.tests.first['name']).to eq('testing')
239
- end
240
- end
241
-
242
230
  context "when the lambda includes a geo_near query" do
243
231
 
244
232
  before do
@@ -829,54 +829,4 @@ describe Mongoid::Serializable do
829
829
  end
830
830
  end
831
831
  end
832
-
833
- describe "#to_xml" do
834
-
835
- context "BSON::ObjectId" do
836
-
837
- let(:person) do
838
- Person.new
839
- end
840
-
841
- it "serializes as string" do
842
- expect(person.to_xml).to include("<_id>#{person.id}</_id>")
843
- end
844
- end
845
-
846
- context "when an Array field is defined" do
847
-
848
- let(:person) do
849
- Person.new(
850
- aliases: [ "Kelly", "Machine Gun" ]
851
- )
852
- end
853
-
854
- it "properly types the array" do
855
- expect(person.to_xml).to include("<aliases type=\"array\">")
856
- end
857
-
858
- it "serializes the array" do
859
- expect(person.to_xml).to include("<alias>Kelly</alias>")
860
- expect(person.to_xml).to include("<alias>Machine Gun</alias>")
861
- end
862
- end
863
-
864
- context "when a Hash field is defined" do
865
-
866
- let(:person) do
867
- Person.new(
868
- map: { lat: 24.5, long: 22.1 }
869
- )
870
- end
871
-
872
- it "properly types the hash" do
873
- expect(person.to_xml).to include("<map>")
874
- end
875
-
876
- it "serializes the hash" do
877
- expect(person.to_xml).to include("<lat type=\"float\">24.5</lat>")
878
- expect(person.to_xml).to include("<long type=\"float\">22.1</long>")
879
- end
880
- end
881
- end
882
832
  end
@@ -280,7 +280,7 @@ describe Mongoid::Validatable::PresenceValidator do
280
280
  end
281
281
 
282
282
  it "does not save the relation" do
283
- expect { game.reload }.to raise_error
283
+ expect { game.reload }.to raise_error(Mongoid::Errors::DocumentNotFound)
284
284
  end
285
285
  end
286
286
  end
@@ -19,34 +19,41 @@ describe Mongoid::Validatable::UniquenessValidator do
19
19
  context "when persisting to another collection" do
20
20
 
21
21
  before do
22
- Dictionary.with(collection: "dicts").create(name: "websters")
22
+ Dictionary.with(collection: "dicts") do |klass|
23
+ klass.create(name: "websters")
24
+ end
23
25
  end
24
26
 
25
27
  context "when the document is not valid" do
26
28
 
27
29
  let(:websters) do
28
- Dictionary.with(collection: "dicts").new(name: "websters")
30
+ object = nil
31
+ valid = Dictionary.with(collection: "dicts") do |klass|
32
+ object = klass.new(name: "websters")
33
+ object.valid?
34
+ end
35
+ { :valid => valid, :object => object }
29
36
  end
30
37
 
31
38
  it "performs the validation on the correct collection" do
32
- expect(websters).to_not be_valid
39
+ expect(websters[:valid]).to be(false)
33
40
  end
34
41
 
35
42
  it "adds the uniqueness error" do
36
- websters.valid?
37
- expect(websters.errors[:name]).to_not be_nil
43
+ expect(websters[:object].errors[:name]).to_not be_nil
38
44
  end
39
45
 
40
46
  it "clears the persistence options in the thread local" do
41
- websters.valid?
42
- expect(Dictionary.persistence_options).to be_nil
47
+ expect(Dictionary.persistence_context).to eq(Mongoid::PersistenceContext.new(Dictionary))
43
48
  end
44
49
  end
45
50
 
46
51
  context "when the document is valid" do
47
52
 
48
53
  let(:oxford) do
49
- Dictionary.with(collection: "dicts").new(name: "oxford")
54
+ Dictionary.with(collection: "dicts") do |klass|
55
+ klass.new(name: "oxford")
56
+ end
50
57
  end
51
58
 
52
59
  it "performs the validation on the correct collection" do
@@ -2431,7 +2438,7 @@ describe Mongoid::Validatable::UniquenessValidator do
2431
2438
  it "transfers the options to the cloned client" do
2432
2439
  expect {
2433
2440
  Person.create!(ssn: "132-11-1111", username: "asdfsdfA")
2434
- }.to raise_error
2441
+ }.to raise_error(Mongo::Error::OperationFailure)
2435
2442
  end
2436
2443
  end
2437
2444
  end