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
@@ -0,0 +1,30 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Criteria::Queryable::Smash do
4
+
5
+ let(:smash) do
6
+ described_class.new(ns: :namespace)
7
+ end
8
+
9
+ describe "#[]" do
10
+
11
+ before do
12
+ smash.store(:namespace, :default)
13
+ smash.store(:some_field, 42)
14
+ end
15
+
16
+ context "when accessing aliased field" do
17
+
18
+ it "returns value for original field" do
19
+ expect(smash[:ns]).to eq(:default)
20
+ end
21
+ end
22
+
23
+ context "when accessing non-aliased field" do
24
+
25
+ it "returns value for the field" do
26
+ expect(smash[:some_field]).to eq(42)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -590,7 +590,8 @@ describe Mongoid::Criteria do
590
590
 
591
591
  let!(:match) do
592
592
  Band.create(name: "Depeche Mode").tap do |band|
593
- band.records.create(name: "101")
593
+ r = band.records
594
+ r.create(name: "101")
594
595
  end
595
596
  end
596
597
 
@@ -1147,29 +1148,6 @@ describe Mongoid::Criteria do
1147
1148
  end
1148
1149
  end
1149
1150
 
1150
- context "when providing one association" do
1151
-
1152
- let!(:user) do
1153
- User.create(posts: [ post1 ])
1154
- end
1155
-
1156
- let!(:post1) do
1157
- Post.create
1158
- end
1159
-
1160
- let(:result) do
1161
- User.includes(:posts).first
1162
- end
1163
-
1164
- it "executes the query" do
1165
- expect(result).to eq(user)
1166
- end
1167
-
1168
- it "includes the related objects" do
1169
- expect(result.posts).to eq([ post1 ])
1170
- end
1171
- end
1172
-
1173
1151
  context "when providing a list of associations" do
1174
1152
 
1175
1153
  let!(:user) do
@@ -1527,6 +1505,13 @@ describe Mongoid::Criteria do
1527
1505
  end
1528
1506
  end
1529
1507
 
1508
+ it "does not eager load the first document" do
1509
+ doc = criteria.first
1510
+ expect_query(1) do
1511
+ expect(doc.person).to eq(person)
1512
+ end
1513
+ end
1514
+
1530
1515
  it "returns the last document" do
1531
1516
  expect(document).to eq(post_two)
1532
1517
  end
@@ -1582,6 +1567,13 @@ describe Mongoid::Criteria do
1582
1567
  end
1583
1568
  end
1584
1569
 
1570
+ it "does not eager load the last document" do
1571
+ doc = criteria.last
1572
+ expect_query(1) do
1573
+ expect(doc.band).to eq(tool)
1574
+ end
1575
+ end
1576
+
1585
1577
  it "returns the document" do
1586
1578
  expect(document).to eq(address_one)
1587
1579
  end
@@ -1607,6 +1599,13 @@ describe Mongoid::Criteria do
1607
1599
  end
1608
1600
  end
1609
1601
 
1602
+ it "does not eager load the first document" do
1603
+ doc = criteria.first
1604
+ expect_query(1) do
1605
+ expect(doc.band).to eq(depeche)
1606
+ end
1607
+ end
1608
+
1610
1609
  it "returns the document" do
1611
1610
  expect(document).to eq(address_two)
1612
1611
  end
@@ -1700,7 +1699,7 @@ describe Mongoid::Criteria do
1700
1699
  end
1701
1700
 
1702
1701
  before do
1703
- expect(new_context).to receive(:eager_load).with([person]).once.and_call_original
1702
+ expect(new_context).to receive(:eager_load_one).with(person).once.and_call_original
1704
1703
  end
1705
1704
 
1706
1705
  let!(:from_db) do
@@ -1751,7 +1750,7 @@ describe Mongoid::Criteria do
1751
1750
  end
1752
1751
 
1753
1752
  before do
1754
- expect(context).to receive(:eager_load).with([person]).once.and_call_original
1753
+ expect(context).to receive(:eager_load_one).with(person).once.and_call_original
1755
1754
  end
1756
1755
 
1757
1756
  let!(:from_db) do
@@ -2130,7 +2129,7 @@ describe Mongoid::Criteria do
2130
2129
  end
2131
2130
 
2132
2131
  before do
2133
- expect(context).to receive(:preload).twice.and_call_original
2132
+ expect(context).to receive(:eager_load).with([ game_one, game_two ]).once.and_call_original
2134
2133
  end
2135
2134
 
2136
2135
  let!(:documents) do
@@ -2193,7 +2192,7 @@ describe Mongoid::Criteria do
2193
2192
  end
2194
2193
 
2195
2194
  before do
2196
- expect(context).to receive(:preload).twice.and_call_original
2195
+ expect(context).to receive(:eager_load).with([ person ]).once.and_call_original
2197
2196
  end
2198
2197
 
2199
2198
  let!(:documents) do
@@ -3078,14 +3077,14 @@ describe Mongoid::Criteria do
3078
3077
  context "when not including private methods" do
3079
3078
 
3080
3079
  it "returns false" do
3081
- expect(criteria).to_not respond_to(:initialize_copy)
3080
+ expect(criteria).to_not respond_to(:fork)
3082
3081
  end
3083
3082
  end
3084
3083
 
3085
3084
  context "when including private methods" do
3086
3085
 
3087
3086
  it "returns true" do
3088
- expect(criteria.respond_to?(:initialize_copy, true)).to be true
3087
+ expect(criteria.respond_to?(:fork, true)).to be true
3089
3088
  end
3090
3089
  end
3091
3090
  end
@@ -3314,17 +3313,6 @@ describe Mongoid::Criteria do
3314
3313
  end
3315
3314
  end
3316
3315
 
3317
- context 'when the criteria contains a BSON::Regexp::Raw' do
3318
-
3319
- let(:criteria) do
3320
- Band.where(name: BSON::Regexp::Raw.new("^Depeche"))
3321
- end
3322
-
3323
- it "returns the matching documents" do
3324
- expect(criteria).to eq([ match ])
3325
- end
3326
- end
3327
-
3328
3316
  context "when the criteria is an exact fk array match" do
3329
3317
 
3330
3318
  let(:id_one) do
@@ -3363,25 +3351,6 @@ describe Mongoid::Criteria do
3363
3351
  end
3364
3352
  end
3365
3353
 
3366
- context "when querying on a BSON::Decimal128", if: decimal128_supported? do
3367
-
3368
- let(:decimal) do
3369
- BSON::Decimal128.new("0.0005")
3370
- end
3371
-
3372
- let!(:band) do
3373
- Band.create(name: "Boards of Canada", decimal: decimal)
3374
- end
3375
-
3376
- let(:from_db) do
3377
- Band.where(decimal: decimal).first
3378
- end
3379
-
3380
- it "finds the document by the big decimal value" do
3381
- expect(from_db).to eq(band)
3382
- end
3383
- end
3384
-
3385
3354
  context 'when querying on a polymorphic relation' do
3386
3355
 
3387
3356
  let(:movie) do
@@ -3502,8 +3471,21 @@ describe Mongoid::Criteria do
3502
3471
 
3503
3472
  describe "#with" do
3504
3473
 
3505
- let!(:criteria) do
3506
- Band.where(name: "Depeche Mode").with(collection: "artists")
3474
+ let!(:criteria_and_collection) do
3475
+ collection = nil
3476
+ criteria = Band.where(name: "Depeche Mode").with(collection: "artists") do |crit|
3477
+ collection = crit.collection
3478
+ crit
3479
+ end
3480
+ [ criteria, collection ]
3481
+ end
3482
+
3483
+ let(:criteria) do
3484
+ criteria_and_collection[0]
3485
+ end
3486
+
3487
+ let(:collection) do
3488
+ criteria_and_collection[1]
3507
3489
  end
3508
3490
 
3509
3491
  it "retains the criteria selection" do
@@ -3511,7 +3493,7 @@ describe Mongoid::Criteria do
3511
3493
  end
3512
3494
 
3513
3495
  it "sets the persistence options" do
3514
- expect(criteria.persistence_options).to eq(collection: "artists")
3496
+ expect(collection.name).to eq("artists")
3515
3497
  end
3516
3498
  end
3517
3499
 
@@ -122,75 +122,6 @@ describe Mongoid::Document do
122
122
  end
123
123
  end
124
124
 
125
- describe "#cache_key" do
126
-
127
- let(:document) do
128
- Dokument.new
129
- end
130
-
131
- context "when the document is new" do
132
-
133
- it "has a new key name" do
134
- expect(document.cache_key).to eq("dokuments/new")
135
- end
136
- end
137
-
138
- context "when persisted" do
139
-
140
- before do
141
- document.save
142
- end
143
-
144
- context "with updated_at" do
145
-
146
- let!(:updated_at) do
147
- document.updated_at.utc.to_s(:nsec)
148
- end
149
-
150
- it "has the id and updated_at key name" do
151
- expect(document.cache_key).to eq("dokuments/#{document.id}-#{updated_at}")
152
- end
153
- end
154
-
155
- context "without updated_at, with Timestamps" do
156
-
157
- before do
158
- document.updated_at = nil
159
- end
160
-
161
- it "has the id key name" do
162
- expect(document.cache_key).to eq("dokuments/#{document.id}")
163
- end
164
- end
165
- end
166
-
167
- context "when model dont have Timestamps" do
168
-
169
- let(:artist) do
170
- Artist.create!
171
- end
172
-
173
- it "should have the id key name" do
174
- expect(artist.cache_key).to eq("artists/#{artist.id}")
175
- end
176
- end
177
-
178
- context "when model has Short Timestamps" do
179
-
180
- let(:agent) do
181
- ShortAgent.create!
182
- end
183
-
184
- let!(:updated_at) do
185
- agent.updated_at.utc.to_s(:nsec)
186
- end
187
-
188
- it "has the id and updated_at key name" do
189
- expect(agent.cache_key).to eq("short_agents/#{agent.id}-#{updated_at}")
190
- end
191
- end
192
- end
193
-
194
125
  describe "#identity" do
195
126
 
196
127
  let(:person) do
@@ -675,7 +606,7 @@ describe Mongoid::Document do
675
606
 
676
607
  it "freezes attributes" do
677
608
  expect(person.freeze).to eq(person)
678
- expect { person.title = "something" }.to raise_error
609
+ expect { person.title = "something" }.to raise_error(RuntimeError)
679
610
  end
680
611
  end
681
612
 
@@ -689,7 +620,7 @@ describe Mongoid::Document do
689
620
  person.freeze
690
621
  expect {
691
622
  person.title = "something"
692
- }.to raise_error
623
+ }.to raise_error(RuntimeError)
693
624
  end
694
625
  end
695
626
  end
@@ -1215,22 +1146,20 @@ describe Mongoid::Document do
1215
1146
 
1216
1147
  context "when marshalling the document" do
1217
1148
 
1218
- let(:person) do
1219
- Person.new.tap do |person|
1220
- person.addresses.extension
1221
- end
1149
+ let(:agency) do
1150
+ Agency.new
1222
1151
  end
1223
1152
 
1224
- let!(:account) do
1225
- person.create_account(name: "savings")
1153
+ let!(:agent) do
1154
+ agency.agents.build(title: "VIP")
1226
1155
  end
1227
1156
 
1228
1157
  describe Marshal, ".dump" do
1229
1158
 
1230
1159
  it "successfully dumps the document" do
1231
1160
  expect {
1232
- Marshal.dump(person)
1233
- Marshal.dump(account)
1161
+ Marshal.dump(agency)
1162
+ Marshal.dump(agent)
1234
1163
  }.not_to raise_error
1235
1164
  end
1236
1165
  end
@@ -1238,7 +1167,7 @@ describe Mongoid::Document do
1238
1167
  describe Marshal, ".load" do
1239
1168
 
1240
1169
  it "successfully loads the document" do
1241
- expect { Marshal.load(Marshal.dump(person)) }.not_to raise_error
1170
+ expect(Marshal.load(Marshal.dump(agency))).to eq(agency)
1242
1171
  end
1243
1172
  end
1244
1173
  end
@@ -1253,22 +1182,26 @@ describe Mongoid::Document do
1253
1182
 
1254
1183
  describe "#fetch" do
1255
1184
 
1256
- let!(:person) do
1257
- Person.new
1185
+ let(:agency) do
1186
+ Agency.new
1187
+ end
1188
+
1189
+ let(:agent) do
1190
+ agency.agents.build(title: "VIP", address: address)
1258
1191
  end
1259
1192
 
1260
- let!(:account) do
1261
- person.create_account(name: "savings")
1193
+ let(:address) do
1194
+ Address.new(city: 'Berlin')
1262
1195
  end
1263
1196
 
1264
1197
  it "stores the parent object" do
1265
- expect(cache.fetch("key") { person }).to eq(person)
1266
- expect(cache.fetch("key")).to eq(person)
1198
+ expect(cache.fetch("key") { agency }).to eq(agency)
1199
+ expect(cache.fetch("key")).to eq(agency)
1267
1200
  end
1268
1201
 
1269
1202
  it "stores the embedded object" do
1270
- expect(cache.fetch("key") { account }).to eq(account)
1271
- expect(cache.fetch("key")).to eq(account)
1203
+ expect(cache.fetch("key") { agent }).to eq(agent)
1204
+ expect(cache.fetch("key").address).to eq(agent.address)
1272
1205
  end
1273
1206
  end
1274
1207
  end
@@ -0,0 +1,37 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Errors::InvalidRelation do
4
+
5
+ describe "#message" do
6
+
7
+ module MyModule
8
+ def crazy_method; self; end
9
+ end
10
+
11
+ before do
12
+ Object.send(:include, MyModule)
13
+ end
14
+
15
+ let(:error) do
16
+ described_class.new(Person, :crazy_method)
17
+ end
18
+
19
+ it "contains the problem in the message" do
20
+ expect(error.message).to include(
21
+ "Defining a relation named 'crazy_method' is not allowed."
22
+ )
23
+ end
24
+
25
+ it "contains the summary in the message" do
26
+ expect(error.message).to include(
27
+ "Defining this relation would override the method 'crazy_method'"
28
+ )
29
+ end
30
+
31
+ it "contains the resolution in the message" do
32
+ expect(error.message).to include(
33
+ "Use Mongoid.destructive_fields to see what names are not allowed"
34
+ )
35
+ end
36
+ end
37
+ end
@@ -50,15 +50,18 @@ describe Mongoid::Errors::MongoidError do
50
50
  describe "#to_json" do
51
51
 
52
52
  it "has problem" do
53
- expect(error.to_json).to include('"problem":"message"')
53
+ # @todo: uncomment if https://github.com/rails/rails/pull/24628 is merged
54
+ #expect(error.to_json).to include('"problem":"message"')
54
55
  end
55
56
 
56
57
  it "has summary" do
57
- expect(error.to_json).to include('"summary":"summary"')
58
+ # @todo: uncomment if https://github.com/rails/rails/pull/24628 is merged
59
+ #expect(error.to_json).to include('"summary":"summary"')
58
60
  end
59
61
 
60
62
  it "has resolution" do
61
- expect(error.to_json).to include('"resolution":"resolution"')
63
+ # @todo: uncomment if https://github.com/rails/rails/pull/24628 is merged
64
+ #expect(error.to_json).to include('"resolution":"resolution"')
62
65
  end
63
66
  end
64
67
  end