mongoid 7.6.0 → 8.0.1

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 (313) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +2 -0
  3. data/README.md +3 -3
  4. data/Rakefile +21 -85
  5. data/lib/config/locales/en.yml +46 -30
  6. data/lib/mongoid/association/accessors.rb +32 -3
  7. data/lib/mongoid/association/bindable.rb +48 -0
  8. data/lib/mongoid/association/builders.rb +4 -2
  9. data/lib/mongoid/association/eager_loadable.rb +29 -7
  10. data/lib/mongoid/association/embedded/batchable.rb +28 -5
  11. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  12. data/lib/mongoid/association/embedded/embedded_in.rb +2 -1
  13. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  14. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +1 -1
  15. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +40 -18
  16. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +18 -4
  17. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +21 -2
  18. data/lib/mongoid/association/macros.rb +2 -1
  19. data/lib/mongoid/association/many.rb +5 -0
  20. data/lib/mongoid/association/nested/many.rb +2 -1
  21. data/lib/mongoid/association/proxy.rb +12 -0
  22. data/lib/mongoid/association/referenced/auto_save.rb +3 -2
  23. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  24. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  25. data/lib/mongoid/association/referenced/belongs_to.rb +1 -1
  26. data/lib/mongoid/association/referenced/counter_cache.rb +8 -8
  27. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +64 -11
  28. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +4 -1
  29. data/lib/mongoid/association/referenced/has_many/enumerable.rb +10 -18
  30. data/lib/mongoid/association/referenced/has_many/proxy.rb +12 -9
  31. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  32. data/lib/mongoid/association/referenced/has_one/proxy.rb +8 -11
  33. data/lib/mongoid/association/referenced/syncable.rb +2 -2
  34. data/lib/mongoid/association/relatable.rb +38 -4
  35. data/lib/mongoid/attributes/processing.rb +9 -2
  36. data/lib/mongoid/attributes.rb +30 -27
  37. data/lib/mongoid/cacheable.rb +2 -2
  38. data/lib/mongoid/changeable.rb +37 -2
  39. data/lib/mongoid/clients/options.rb +4 -0
  40. data/lib/mongoid/clients/sessions.rb +2 -14
  41. data/lib/mongoid/config.rb +15 -11
  42. data/lib/mongoid/contextual/aggregable/memory.rb +23 -15
  43. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
  44. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  45. data/lib/mongoid/contextual/memory.rb +55 -28
  46. data/lib/mongoid/contextual/mongo.rb +173 -287
  47. data/lib/mongoid/contextual/none.rb +33 -15
  48. data/lib/mongoid/copyable.rb +32 -8
  49. data/lib/mongoid/criteria/includable.rb +24 -20
  50. data/lib/mongoid/criteria/marshalable.rb +10 -2
  51. data/lib/mongoid/criteria/queryable/extensions/array.rb +2 -15
  52. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  53. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
  54. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  55. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  56. data/lib/mongoid/criteria/queryable/extensions/hash.rb +0 -16
  57. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +1 -1
  58. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  59. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  60. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +1 -1
  61. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
  62. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  63. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  64. data/lib/mongoid/criteria/queryable/optional.rb +3 -9
  65. data/lib/mongoid/criteria/queryable/options.rb +1 -1
  66. data/lib/mongoid/criteria/queryable/selectable.rb +2 -24
  67. data/lib/mongoid/criteria/queryable/selector.rb +90 -5
  68. data/lib/mongoid/criteria/queryable/smash.rb +39 -6
  69. data/lib/mongoid/criteria/queryable/storable.rb +1 -1
  70. data/lib/mongoid/criteria/queryable.rb +11 -6
  71. data/lib/mongoid/criteria.rb +1 -28
  72. data/lib/mongoid/deprecable.rb +36 -0
  73. data/lib/mongoid/deprecation.rb +25 -0
  74. data/lib/mongoid/document.rb +88 -33
  75. data/lib/mongoid/equality.rb +4 -4
  76. data/lib/mongoid/errors/document_not_found.rb +6 -2
  77. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  78. data/lib/mongoid/errors/invalid_field.rb +5 -1
  79. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  80. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  81. data/lib/mongoid/errors.rb +2 -2
  82. data/lib/mongoid/extensions/array.rb +8 -6
  83. data/lib/mongoid/extensions/big_decimal.rb +29 -10
  84. data/lib/mongoid/extensions/binary.rb +42 -0
  85. data/lib/mongoid/extensions/boolean.rb +8 -2
  86. data/lib/mongoid/extensions/date.rb +26 -20
  87. data/lib/mongoid/extensions/date_time.rb +1 -1
  88. data/lib/mongoid/extensions/float.rb +4 -5
  89. data/lib/mongoid/extensions/hash.rb +12 -5
  90. data/lib/mongoid/extensions/integer.rb +4 -5
  91. data/lib/mongoid/extensions/object.rb +2 -0
  92. data/lib/mongoid/extensions/range.rb +41 -10
  93. data/lib/mongoid/extensions/regexp.rb +11 -4
  94. data/lib/mongoid/extensions/set.rb +11 -4
  95. data/lib/mongoid/extensions/string.rb +2 -13
  96. data/lib/mongoid/extensions/symbol.rb +3 -14
  97. data/lib/mongoid/extensions/time.rb +27 -16
  98. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  99. data/lib/mongoid/extensions.rb +1 -0
  100. data/lib/mongoid/factory.rb +42 -7
  101. data/lib/mongoid/fields/foreign_key.rb +7 -0
  102. data/lib/mongoid/fields/validators/macro.rb +3 -9
  103. data/lib/mongoid/fields.rb +49 -7
  104. data/lib/mongoid/findable.rb +21 -16
  105. data/lib/mongoid/indexable/specification.rb +1 -1
  106. data/lib/mongoid/indexable/validators/options.rb +4 -1
  107. data/lib/mongoid/interceptable.rb +69 -9
  108. data/lib/mongoid/persistable/creatable.rb +14 -5
  109. data/lib/mongoid/persistable/updatable.rb +12 -5
  110. data/lib/mongoid/persistence_context.rb +8 -42
  111. data/lib/mongoid/query_cache.rb +6 -258
  112. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  113. data/lib/mongoid/reloadable.rb +7 -3
  114. data/lib/mongoid/scopable.rb +9 -11
  115. data/lib/mongoid/selectable.rb +1 -2
  116. data/lib/mongoid/shardable.rb +11 -35
  117. data/lib/mongoid/stateful.rb +27 -1
  118. data/lib/mongoid/timestamps/created.rb +1 -1
  119. data/lib/mongoid/timestamps/updated.rb +1 -1
  120. data/lib/mongoid/touchable.rb +2 -3
  121. data/lib/mongoid/traversable.rb +1 -0
  122. data/lib/mongoid/validatable/uniqueness.rb +2 -1
  123. data/lib/mongoid/version.rb +1 -5
  124. data/lib/mongoid/warnings.rb +3 -4
  125. data/lib/mongoid.rb +1 -0
  126. data/spec/config/mongoid.yml +16 -0
  127. data/spec/integration/app_spec.rb +8 -12
  128. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  129. data/spec/integration/associations/embedded_spec.rb +15 -0
  130. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  131. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  132. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  133. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +21 -0
  134. data/spec/integration/associations/has_one_spec.rb +97 -1
  135. data/spec/integration/associations/scope_option_spec.rb +1 -1
  136. data/spec/integration/callbacks_models.rb +95 -1
  137. data/spec/integration/callbacks_spec.rb +226 -4
  138. data/spec/integration/criteria/range_spec.rb +95 -1
  139. data/spec/integration/discriminator_key_spec.rb +115 -76
  140. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  141. data/spec/integration/i18n_fallbacks_spec.rb +1 -15
  142. data/spec/integration/matcher_examples_spec.rb +20 -13
  143. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  144. data/spec/integration/matcher_operator_spec.rb +3 -5
  145. data/spec/integration/persistence/range_field_spec.rb +350 -0
  146. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  147. data/spec/mongoid/association/depending_spec.rb +9 -9
  148. data/spec/mongoid/association/eager_spec.rb +2 -1
  149. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  150. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  151. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +69 -9
  152. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  153. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +198 -8
  154. data/spec/mongoid/association/embedded/embeds_many_models.rb +36 -0
  155. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +12 -0
  156. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  157. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  158. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  159. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  160. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  161. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  162. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +15 -0
  163. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  164. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2 -2
  165. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +38 -5
  166. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  167. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  168. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  169. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  170. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +62 -13
  171. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  172. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  173. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  174. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  175. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  176. data/spec/mongoid/association/syncable_spec.rb +14 -0
  177. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  178. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  179. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  180. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  181. data/spec/mongoid/attributes_spec.rb +480 -27
  182. data/spec/mongoid/cacheable_spec.rb +3 -3
  183. data/spec/mongoid/changeable_spec.rb +130 -13
  184. data/spec/mongoid/clients/factory_spec.rb +23 -30
  185. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  186. data/spec/mongoid/clients_spec.rb +2 -2
  187. data/spec/mongoid/config_spec.rb +52 -15
  188. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  189. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  190. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  191. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  192. data/spec/mongoid/contextual/memory_spec.rb +521 -14
  193. data/spec/mongoid/contextual/mongo_spec.rb +566 -426
  194. data/spec/mongoid/contextual/none_spec.rb +11 -19
  195. data/spec/mongoid/copyable_spec.rb +451 -2
  196. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  197. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  198. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  199. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  200. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  201. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  202. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +1 -2
  203. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  204. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  205. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +1 -2
  206. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  207. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  208. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  209. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  210. data/spec/mongoid/criteria/queryable/optional_spec.rb +0 -484
  211. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +50 -0
  212. data/spec/mongoid/criteria/queryable/selectable_spec.rb +77 -85
  213. data/spec/mongoid/criteria/queryable/selector_spec.rb +16 -77
  214. data/spec/mongoid/criteria/queryable/storable_spec.rb +0 -72
  215. data/spec/mongoid/criteria_spec.rb +469 -1201
  216. data/spec/mongoid/document_fields_spec.rb +173 -24
  217. data/spec/mongoid/document_spec.rb +32 -41
  218. data/spec/mongoid/equality_spec.rb +12 -12
  219. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  220. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  221. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  222. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  223. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  224. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  225. data/spec/mongoid/extensions/array_spec.rb +16 -2
  226. data/spec/mongoid/extensions/big_decimal_spec.rb +697 -212
  227. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  228. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  229. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  230. data/spec/mongoid/extensions/date_spec.rb +71 -1
  231. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  232. data/spec/mongoid/extensions/float_spec.rb +48 -76
  233. data/spec/mongoid/extensions/hash_spec.rb +30 -0
  234. data/spec/mongoid/extensions/integer_spec.rb +45 -66
  235. data/spec/mongoid/extensions/range_spec.rb +255 -54
  236. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  237. data/spec/mongoid/extensions/set_spec.rb +106 -0
  238. data/spec/mongoid/extensions/string_spec.rb +53 -25
  239. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  240. data/spec/mongoid/extensions/time_spec.rb +634 -66
  241. data/spec/mongoid/extensions/time_with_zone_spec.rb +17 -31
  242. data/spec/mongoid/factory_spec.rb +61 -1
  243. data/spec/mongoid/fields_spec.rb +321 -50
  244. data/spec/mongoid/findable_spec.rb +64 -29
  245. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  246. data/spec/mongoid/indexable_spec.rb +16 -19
  247. data/spec/mongoid/interceptable_spec.rb +584 -5
  248. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  249. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  250. data/spec/mongoid/mongoizable_spec.rb +285 -0
  251. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  252. data/spec/mongoid/persistable/deletable_spec.rb +2 -2
  253. data/spec/mongoid/persistable/destroyable_spec.rb +2 -2
  254. data/spec/mongoid/persistable/upsertable_spec.rb +14 -0
  255. data/spec/mongoid/persistence_context_spec.rb +24 -0
  256. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  257. data/spec/mongoid/query_cache_spec.rb +1 -156
  258. data/spec/mongoid/reloadable_spec.rb +35 -2
  259. data/spec/mongoid/scopable_spec.rb +36 -34
  260. data/spec/mongoid/serializable_spec.rb +14 -7
  261. data/spec/mongoid/shardable_models.rb +0 -14
  262. data/spec/mongoid/shardable_spec.rb +61 -153
  263. data/spec/mongoid/stateful_spec.rb +28 -0
  264. data/spec/mongoid/timestamps_spec.rb +390 -0
  265. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  266. data/spec/mongoid/touchable_spec.rb +116 -0
  267. data/spec/mongoid/touchable_spec_models.rb +12 -8
  268. data/spec/mongoid/traversable_spec.rb +4 -11
  269. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  270. data/spec/mongoid/validatable/uniqueness_spec.rb +60 -31
  271. data/spec/mongoid/warnings_spec.rb +35 -0
  272. data/spec/mongoid_spec.rb +1 -7
  273. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  274. data/spec/rails/mongoid_spec.rb +4 -16
  275. data/spec/shared/lib/mrss/docker_runner.rb +1 -8
  276. data/spec/shared/lib/mrss/event_subscriber.rb +5 -15
  277. data/spec/shared/lib/mrss/lite_constraints.rb +2 -10
  278. data/spec/shared/lib/mrss/server_version_registry.rb +24 -17
  279. data/spec/shared/lib/mrss/spec_organizer.rb +3 -32
  280. data/spec/shared/lib/mrss/utils.rb +6 -28
  281. data/spec/shared/share/Dockerfile.erb +107 -33
  282. data/spec/shared/shlib/distro.sh +0 -10
  283. data/spec/shared/shlib/server.sh +33 -64
  284. data/spec/shared/shlib/set_env.sh +71 -12
  285. data/spec/support/constraints.rb +24 -0
  286. data/spec/support/expectations.rb +17 -20
  287. data/spec/support/macros.rb +30 -0
  288. data/spec/support/models/augmentation.rb +12 -0
  289. data/spec/support/models/band.rb +3 -0
  290. data/spec/support/models/catalog.rb +24 -0
  291. data/spec/support/models/circus.rb +3 -0
  292. data/spec/support/models/fanatic.rb +8 -0
  293. data/spec/support/models/implant.rb +9 -0
  294. data/spec/support/models/label.rb +2 -0
  295. data/spec/support/models/passport.rb +9 -0
  296. data/spec/support/models/person.rb +1 -0
  297. data/spec/support/models/player.rb +2 -0
  298. data/spec/support/models/powerup.rb +12 -0
  299. data/spec/support/models/registry.rb +1 -0
  300. data/spec/support/models/school.rb +14 -0
  301. data/spec/support/models/shield.rb +18 -0
  302. data/spec/support/models/student.rb +14 -0
  303. data/spec/support/models/weapon.rb +12 -0
  304. data.tar.gz.sig +0 -0
  305. metadata +695 -641
  306. metadata.gz.sig +0 -0
  307. data/lib/mongoid/errors/eager_load.rb +0 -23
  308. data/lib/mongoid/errors/invalid_value.rb +0 -17
  309. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  310. data/spec/shared/CANDIDATE.md +0 -28
  311. data/spec/shared/lib/mrss/release/candidate.rb +0 -281
  312. data/spec/shared/lib/mrss/release/product_data.rb +0 -144
  313. data/spec/shared/lib/tasks/candidate.rake +0 -64
@@ -0,0 +1,277 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "spec_helper"
4
+
5
+ describe "Dots and Dollars" do
6
+ min_server_version '5.0'
7
+
8
+ before(:all) do
9
+ class DADMUser
10
+ include Mongoid::Document
11
+ field :"first.last", type: String, default: "Neil.Shweky"
12
+ field :"$_amount", type: Integer, default: 0
13
+ field :"$a.b", type: Boolean, default: true
14
+ end
15
+ end
16
+
17
+ let!(:user) { DADMUser.create! }
18
+
19
+ describe "accessing the fields" do
20
+
21
+ context "when using the field getters" do
22
+
23
+ context "on dotted fields" do
24
+ it "gets the right value" do
25
+ expect(user.send(:"first.last")).to eq("Neil.Shweky")
26
+ end
27
+ end
28
+
29
+ context "on dollared fields" do
30
+ it "gets the right value" do
31
+ expect(user.send(:"$_amount")).to eq(0)
32
+ end
33
+ end
34
+
35
+ context "on dotted and dollared fields" do
36
+ it "gets the right value" do
37
+ expect(user.send(:"$a.b")).to be true
38
+ end
39
+ end
40
+ end
41
+
42
+ context "when using the read_attribute" do
43
+
44
+ context "on dotted fields" do
45
+ it "gets the right value" do
46
+ expect(user.read_attribute("first.last")).to eq("Neil.Shweky")
47
+ end
48
+ end
49
+
50
+ context "on dollared fields" do
51
+ it "gets the right value" do
52
+ expect(user.read_attribute("$_amount")).to eq(0)
53
+ end
54
+ end
55
+
56
+ context "on dotted and dollared fields" do
57
+ it "gets the right value" do
58
+ expect(user.read_attribute("$a.b")).to be true
59
+ end
60
+ end
61
+ end
62
+
63
+ context "when using the field setters" do
64
+
65
+ context "on dotted fields" do
66
+ it "raises an error" do
67
+ expect do
68
+ user.send(:"first.last=", "Nissim.Shweky")
69
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
70
+ end
71
+ end
72
+
73
+ context "on dollared fields" do
74
+ it "raises an error" do
75
+ expect do
76
+ user.send(:"$_amount=", 1)
77
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
78
+ end
79
+ end
80
+
81
+ context "on dotted and dollared fields" do
82
+ it "raises an error" do
83
+ expect do
84
+ user.send(:"$a.b=", false)
85
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
86
+ end
87
+ end
88
+ end
89
+
90
+ context "when updating via write_attribute" do
91
+
92
+ context "on dotted fields" do
93
+ it "raises an error" do
94
+ expect do
95
+ user.write_attribute("first.last", "Nissim.Shweky")
96
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
97
+ end
98
+ end
99
+
100
+ context "on dollared fields" do
101
+ it "raises an error" do
102
+ expect do
103
+ user.write_attribute("$_amount", 1)
104
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
105
+ end
106
+ end
107
+
108
+ context "on dotted and dollared fields" do
109
+ it "raises an error" do
110
+ expect do
111
+ user.write_attribute("$a.b", false)
112
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
113
+ end
114
+ end
115
+ end
116
+
117
+ context "when updating via update_attribute" do
118
+
119
+ context "on dotted fields" do
120
+ it "raises an error" do
121
+ expect do
122
+ user.update_attribute("first.last", "Nissim.Shweky")
123
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
124
+ end
125
+ end
126
+
127
+ context "on dollared fields" do
128
+ it "raises an error" do
129
+ expect do
130
+ user.update_attribute("$_amount", 1)
131
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
132
+ end
133
+ end
134
+
135
+ context "on dotted and dollared fields" do
136
+ it "raises an error" do
137
+ expect do
138
+ user.update_attribute("$a.b", false)
139
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
140
+ end
141
+ end
142
+ end
143
+
144
+ context "when updating via update_attributes!" do
145
+
146
+ context "on dotted fields" do
147
+ it "raises an error" do
148
+ expect do
149
+ user.update_attributes!("first.last": "Nissim.Shweky")
150
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
151
+ end
152
+ end
153
+
154
+ context "on dollared fields" do
155
+ it "raises an error" do
156
+ expect do
157
+ user.update_attributes!("$_amount": 1)
158
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
159
+ end
160
+ end
161
+
162
+ context "on dotted and dollared fields" do
163
+ it "raises an error" do
164
+ expect do
165
+ user.update_attributes!("$a.b": false)
166
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
167
+ end
168
+ end
169
+ end
170
+
171
+ context "when updating via []=" do
172
+
173
+ context "on dotted fields" do
174
+ it "raises an error" do
175
+ expect do
176
+ user[:"first.last"] = "Nissim.Shweky"
177
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
178
+ end
179
+ end
180
+
181
+ context "on dollared fields" do
182
+ it "raises an error" do
183
+ expect do
184
+ user[:"$_amount"] = 1
185
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
186
+ end
187
+ end
188
+
189
+ context "on dotted and dollared fields" do
190
+ it "raises an error" do
191
+ expect do
192
+ user[:"$a.b"] = false
193
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
194
+ end
195
+ end
196
+ end
197
+
198
+ context "when updating via remove_attribute" do
199
+
200
+ context "on dotted fields" do
201
+ it "raises an error" do
202
+ expect do
203
+ user.remove_attribute("first.last")
204
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
205
+ end
206
+ end
207
+
208
+ context "on dollared fields" do
209
+ it "raises an error" do
210
+ expect do
211
+ user.remove_attribute("$_amount")
212
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
213
+ end
214
+ end
215
+
216
+ context "on dotted and dollared fields" do
217
+ it "raises an error" do
218
+ expect do
219
+ user.remove_attribute("$a.b")
220
+ end.to raise_error(Mongoid::Errors::InvalidDotDollarAssignment)
221
+ end
222
+ end
223
+ end
224
+ end
225
+
226
+ describe "persisting to the db" do
227
+
228
+ context "when saving to the db" do
229
+
230
+ let(:user) { DADMUser.new }
231
+
232
+ it "the save succeeds" do
233
+ expect do
234
+ user.save!
235
+ end.to_not raise_error
236
+ end
237
+ end
238
+
239
+ context "when retrieving it from the db" do
240
+
241
+ let(:from_db) { DADMUser.first }
242
+
243
+ it "has the fields populated correctly" do
244
+ expect(from_db.attributes["first.last"]).to eq("Neil.Shweky")
245
+ expect(from_db.attributes["$_amount"]).to eq(0)
246
+ expect(from_db.attributes["$a.b"]).to eq(true)
247
+ end
248
+ end
249
+ end
250
+
251
+ describe "querying that field" do
252
+
253
+ context "when attempting to query a dotted field" do
254
+
255
+ let(:queried) do
256
+ DADMUser.where("first.last": "Neil.Shweky").first
257
+ end
258
+
259
+ it "does not work" do
260
+ expect(queried).to be nil
261
+ end
262
+ end
263
+
264
+ context "when attempting to query a dollared field" do
265
+
266
+ let(:queried) do
267
+ DADMUser.where("$_amount": 0).first
268
+ end
269
+
270
+ it "raise an error" do
271
+ expect do
272
+ queried
273
+ end.to raise_error(Mongo::Error::OperationFailure)
274
+ end
275
+ end
276
+ end
277
+ end
@@ -23,10 +23,6 @@ describe 'i18n fallbacks' do
23
23
  I18n.fallbacks[:de] = [ :en ]
24
24
  end
25
25
 
26
- after do
27
- I18n.locale = :en
28
- end
29
-
30
26
  context 'when translation is present in active locale' do
31
27
  it 'uses active locale' do
32
28
  product = Product.new
@@ -40,9 +36,6 @@ describe 'i18n fallbacks' do
40
36
  end
41
37
 
42
38
  context 'when translation is missing in active locale and present in fallback locale' do
43
- after do
44
- I18n.locale = :en
45
- end
46
39
 
47
40
  it 'falls back on default locale' do
48
41
  product = Product.new
@@ -64,10 +57,6 @@ describe 'i18n fallbacks' do
64
57
  end
65
58
  end
66
59
 
67
- after do
68
- I18n.locale = :en
69
- end
70
-
71
60
  it 'returns nil' do
72
61
  product = Product.new
73
62
  I18n.locale = :en
@@ -86,10 +75,6 @@ describe 'i18n fallbacks' do
86
75
  end
87
76
  end
88
77
 
89
- after do
90
- I18n.locale = :en
91
- end
92
-
93
78
  it 'falls back on default locale' do
94
79
  product = Product.new
95
80
  I18n.locale = :en
@@ -97,6 +82,7 @@ describe 'i18n fallbacks' do
97
82
  I18n.locale = :ru
98
83
  product.description.should == 'Marvelous!'
99
84
  end
85
+
100
86
  end
101
87
  end
102
88
  end
@@ -652,10 +652,12 @@ describe 'Matcher' do
652
652
 
653
653
  describe 'range match on array element' do
654
654
 
655
+ let(:record) do
656
+ Record.new(producers: [123, 456])
657
+ end
658
+
655
659
  let!(:band) do
656
- Band.create!(records: [
657
- Record.new(producers: [123, 456]),
658
- ])
660
+ Band.create!(records: [ record ])
659
661
  end
660
662
 
661
663
  describe 'MongoDB query' do
@@ -667,14 +669,13 @@ describe 'Matcher' do
667
669
  expect(found_band).to eq(band)
668
670
  end
669
671
 
670
- # https://jira.mongodb.org/browse/MONGOID-4911
671
672
  context 'no match' do
672
673
 
673
- let!(:band) do
674
- Band.create!(records: [
675
- Record.new(producers: [50]),
676
- ])
677
- end
674
+ let!(:band) do
675
+ Band.create!(records: [
676
+ Record.new(producers: [50, 250]),
677
+ ])
678
+ end
678
679
 
679
680
  it 'does not find' do
680
681
  expect(found_band).to be nil
@@ -687,10 +688,16 @@ describe 'Matcher' do
687
688
  band.records.where(producers: 100..200).first
688
689
  end
689
690
 
690
- it 'raises InvalidQuery' do
691
- lambda do
692
- found_record
693
- end.should raise_error(Mongoid::Errors::InvalidQuery)
691
+ let(:no_record) do
692
+ band.records.where(producers: 199..200).first
693
+ end
694
+
695
+ it 'finds correctly' do
696
+ expect(found_record).to eq(record)
697
+ end
698
+
699
+ it "correctly does not find" do
700
+ expect(no_record).to eq(nil)
694
701
  end
695
702
  end
696
703
  end
@@ -29,12 +29,13 @@
29
29
  matches: false
30
30
  min_server_version: 3.4
31
31
 
32
- - name: BigDecimal field - does not match
32
+ # Requires :map_big_decimal_to_decimal128 option to be true.
33
+ - name: BigDecimal field - matches
33
34
  document:
34
35
  big_decimal_field: !ruby/object:BigDecimal
35
36
  18:0.42e2
36
37
  query:
37
38
  big_decimal_field:
38
39
  $type: 19
39
- matches: false
40
+ matches: true
40
41
  min_server_version: 3.4
@@ -12,6 +12,8 @@ def mop_error?(spec, kind)
12
12
  end
13
13
 
14
14
  describe 'Matcher operators' do
15
+ config_override :map_big_decimal_to_decimal128, true
16
+
15
17
  Dir[File.join(File.dirname(__FILE__), 'matcher_operator_data', '*.yml')].sort.each do |path|
16
18
  context File.basename(path) do
17
19
  permitted_classes = [ BigDecimal,
@@ -35,11 +37,7 @@ describe 'Matcher operators' do
35
37
  BSON::Timestamp,
36
38
  BSON::Undefined ]
37
39
 
38
- specs = if RUBY_VERSION.start_with?("2.5")
39
- YAML.safe_load(File.read(path), permitted_classes, [], true)
40
- else
41
- YAML.safe_load(File.read(path), permitted_classes: permitted_classes, aliases: true)
42
- end
40
+ specs = YAML.safe_load(File.read(path), permitted_classes: permitted_classes, aliases: true)
43
41
 
44
42
  specs.each do |spec|
45
43
  context spec['name'] do