mongoid 7.2.6 → 7.3.0

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 (200) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +1 -1
  4. data/Rakefile +16 -0
  5. data/lib/config/locales/en.yml +2 -15
  6. data/lib/mongoid/association/accessors.rb +1 -1
  7. data/lib/mongoid/association/constrainable.rb +1 -1
  8. data/lib/mongoid/association/depending.rb +4 -4
  9. data/lib/mongoid/association/embedded/batchable.rb +1 -1
  10. data/lib/mongoid/association/embedded/embedded_in.rb +1 -1
  11. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +11 -4
  12. data/lib/mongoid/association/nested/many.rb +1 -1
  13. data/lib/mongoid/association/nested/one.rb +4 -2
  14. data/lib/mongoid/association/proxy.rb +7 -2
  15. data/lib/mongoid/association/referenced/auto_save.rb +2 -2
  16. data/lib/mongoid/association/referenced/has_many/enumerable.rb +493 -495
  17. data/lib/mongoid/association/referenced/has_many/proxy.rb +3 -3
  18. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +2 -2
  19. data/lib/mongoid/association/relatable.rb +0 -2
  20. data/lib/mongoid/attributes/projector.rb +120 -0
  21. data/lib/mongoid/attributes.rb +24 -13
  22. data/lib/mongoid/cacheable.rb +2 -2
  23. data/lib/mongoid/clients/factory.rb +22 -8
  24. data/lib/mongoid/clients.rb +1 -1
  25. data/lib/mongoid/config/environment.rb +1 -9
  26. data/lib/mongoid/config.rb +19 -2
  27. data/lib/mongoid/contextual/aggregable/mongo.rb +10 -8
  28. data/lib/mongoid/contextual/atomic.rb +2 -7
  29. data/lib/mongoid/contextual/none.rb +0 -3
  30. data/lib/mongoid/copyable.rb +1 -1
  31. data/lib/mongoid/criteria/findable.rb +1 -1
  32. data/lib/mongoid/criteria/queryable/expandable.rb +0 -24
  33. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +1 -1
  34. data/lib/mongoid/criteria/queryable/extensions.rb +0 -4
  35. data/lib/mongoid/criteria/queryable/mergeable.rb +46 -20
  36. data/lib/mongoid/criteria/queryable/selectable.rb +10 -10
  37. data/lib/mongoid/criteria/queryable/storable.rb +4 -4
  38. data/lib/mongoid/criteria.rb +5 -6
  39. data/lib/mongoid/document.rb +3 -18
  40. data/lib/mongoid/errors/delete_restriction.rb +8 -9
  41. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  42. data/lib/mongoid/errors.rb +0 -2
  43. data/lib/mongoid/evolvable.rb +1 -1
  44. data/lib/mongoid/extensions/boolean.rb +1 -2
  45. data/lib/mongoid/extensions/false_class.rb +1 -1
  46. data/lib/mongoid/extensions/hash.rb +2 -2
  47. data/lib/mongoid/extensions/true_class.rb +1 -1
  48. data/lib/mongoid/fields.rb +43 -5
  49. data/lib/mongoid/inspectable.rb +1 -1
  50. data/lib/mongoid/interceptable.rb +1 -1
  51. data/lib/mongoid/matcher/bits.rb +41 -0
  52. data/lib/mongoid/matcher/bits_all_clear.rb +20 -0
  53. data/lib/mongoid/matcher/bits_all_set.rb +20 -0
  54. data/lib/mongoid/matcher/bits_any_clear.rb +20 -0
  55. data/lib/mongoid/matcher/bits_any_set.rb +20 -0
  56. data/lib/mongoid/matcher/expression.rb +4 -0
  57. data/lib/mongoid/matcher/field_operator.rb +6 -0
  58. data/lib/mongoid/matcher/mod.rb +17 -0
  59. data/lib/mongoid/matcher/type.rb +99 -0
  60. data/lib/mongoid/matcher.rb +7 -0
  61. data/lib/mongoid/persistable/deletable.rb +1 -2
  62. data/lib/mongoid/persistable/destroyable.rb +8 -2
  63. data/lib/mongoid/persistable/updatable.rb +27 -2
  64. data/lib/mongoid/persistence_context.rb +1 -3
  65. data/lib/mongoid/query_cache.rb +36 -40
  66. data/lib/mongoid/selectable.rb +5 -7
  67. data/lib/mongoid/shardable.rb +21 -5
  68. data/lib/mongoid/tasks/database.rb +1 -1
  69. data/lib/mongoid/touchable.rb +23 -4
  70. data/lib/mongoid/validatable/associated.rb +1 -1
  71. data/lib/mongoid/validatable/presence.rb +3 -3
  72. data/lib/mongoid/validatable/uniqueness.rb +1 -1
  73. data/lib/mongoid/version.rb +1 -1
  74. data/lib/mongoid.rb +0 -1
  75. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +1 -1
  76. data/spec/integration/app_spec.rb +0 -3
  77. data/spec/integration/associations/embeds_many_spec.rb +44 -0
  78. data/spec/integration/associations/has_one_spec.rb +48 -0
  79. data/spec/integration/criteria/date_field_spec.rb +1 -1
  80. data/spec/integration/document_spec.rb +9 -0
  81. data/spec/integration/matcher_operator_data/bits_all_clear.yml +159 -0
  82. data/spec/integration/matcher_operator_data/bits_all_set.yml +159 -0
  83. data/spec/integration/matcher_operator_data/bits_any_clear.yml +159 -0
  84. data/spec/integration/matcher_operator_data/bits_any_set.yml +159 -0
  85. data/spec/integration/matcher_operator_data/comment.yml +22 -0
  86. data/spec/integration/matcher_operator_data/in.yml +16 -0
  87. data/spec/integration/matcher_operator_data/mod.yml +55 -0
  88. data/spec/integration/matcher_operator_data/type.yml +70 -0
  89. data/spec/integration/matcher_operator_data/type_array.yml +16 -0
  90. data/spec/integration/matcher_operator_data/type_binary.yml +18 -0
  91. data/spec/integration/matcher_operator_data/type_boolean.yml +39 -0
  92. data/spec/integration/matcher_operator_data/type_code.yml +26 -0
  93. data/spec/integration/matcher_operator_data/type_code_with_scope.yml +26 -0
  94. data/spec/integration/matcher_operator_data/type_date.yml +39 -0
  95. data/spec/integration/matcher_operator_data/type_db_pointer.yml +19 -0
  96. data/spec/integration/matcher_operator_data/type_decimal.yml +40 -0
  97. data/spec/integration/matcher_operator_data/type_double.yml +15 -0
  98. data/spec/integration/matcher_operator_data/type_int32.yml +33 -0
  99. data/spec/integration/matcher_operator_data/type_int64.yml +33 -0
  100. data/spec/integration/matcher_operator_data/type_max_key.yml +17 -0
  101. data/spec/integration/matcher_operator_data/type_min_key.yml +17 -0
  102. data/spec/integration/matcher_operator_data/type_null.yml +23 -0
  103. data/spec/integration/matcher_operator_data/type_object.yml +23 -0
  104. data/spec/integration/matcher_operator_data/type_object_id.yml +25 -0
  105. data/spec/integration/matcher_operator_data/type_regex.yml +44 -0
  106. data/spec/integration/matcher_operator_data/type_string.yml +15 -0
  107. data/spec/integration/matcher_operator_data/type_symbol.yml +32 -0
  108. data/spec/integration/matcher_operator_data/type_timestamp.yml +25 -0
  109. data/spec/integration/matcher_operator_data/type_undefined.yml +17 -0
  110. data/spec/integration/stringified_symbol_field_spec.rb +2 -2
  111. data/spec/lite_spec_helper.rb +2 -0
  112. data/spec/mongoid/association/depending_spec.rb +391 -352
  113. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +4 -17
  114. data/spec/mongoid/association/nested/one_spec.rb +18 -14
  115. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +25 -25
  116. data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +0 -20
  117. data/spec/mongoid/association/referenced/has_and_belongs_to_many/binding_spec.rb +1 -1
  118. data/spec/mongoid/association/referenced/has_many/binding_spec.rb +1 -1
  119. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +1 -1
  120. data/spec/mongoid/association/referenced/has_many_models.rb +0 -17
  121. data/spec/mongoid/association/referenced/has_one_models.rb +8 -0
  122. data/spec/mongoid/atomic/paths_spec.rb +64 -12
  123. data/spec/mongoid/attributes/projector_data/embedded.yml +105 -0
  124. data/spec/mongoid/attributes/projector_data/fields.yml +93 -0
  125. data/spec/mongoid/attributes/projector_spec.rb +41 -0
  126. data/spec/mongoid/attributes_spec.rb +98 -6
  127. data/spec/mongoid/clients/factory_spec.rb +51 -9
  128. data/spec/mongoid/clients/options_spec.rb +3 -11
  129. data/spec/mongoid/config/environment_spec.rb +8 -86
  130. data/spec/mongoid/config_spec.rb +32 -0
  131. data/spec/mongoid/contextual/atomic_spec.rb +25 -64
  132. data/spec/mongoid/contextual/geo_near_spec.rb +1 -1
  133. data/spec/mongoid/contextual/mongo_spec.rb +2 -2
  134. data/spec/mongoid/criteria/modifiable_spec.rb +1 -1
  135. data/spec/mongoid/criteria/queryable/expandable_spec.rb +0 -73
  136. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +1 -1
  137. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +105 -7
  138. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +229 -24
  139. data/spec/mongoid/criteria/queryable/selectable_shared_examples.rb +39 -0
  140. data/spec/mongoid/criteria/queryable/selectable_spec.rb +1 -565
  141. data/spec/mongoid/criteria/queryable/selectable_where_spec.rb +590 -0
  142. data/spec/mongoid/criteria_projection_spec.rb +411 -0
  143. data/spec/mongoid/criteria_spec.rb +0 -279
  144. data/spec/mongoid/document_query_spec.rb +0 -51
  145. data/spec/mongoid/document_spec.rb +14 -34
  146. data/spec/mongoid/errors/delete_restriction_spec.rb +1 -1
  147. data/spec/mongoid/errors/mongoid_error_spec.rb +8 -20
  148. data/spec/mongoid/extensions/false_class_spec.rb +1 -1
  149. data/spec/mongoid/extensions/string_spec.rb +5 -5
  150. data/spec/mongoid/extensions/true_class_spec.rb +1 -1
  151. data/spec/mongoid/fields/localized_spec.rb +4 -4
  152. data/spec/mongoid/fields_spec.rb +4 -4
  153. data/spec/mongoid/inspectable_spec.rb +12 -4
  154. data/spec/mongoid/persistable/deletable_spec.rb +175 -1
  155. data/spec/mongoid/persistable/destroyable_spec.rb +191 -3
  156. data/spec/mongoid/persistable/savable_spec.rb +3 -5
  157. data/spec/mongoid/persistable/updatable_spec.rb +0 -2
  158. data/spec/mongoid/persistable/upsertable_spec.rb +1 -1
  159. data/spec/mongoid/persistable_spec.rb +2 -2
  160. data/spec/mongoid/query_cache_middleware_spec.rb +8 -0
  161. data/spec/mongoid/query_cache_spec.rb +0 -24
  162. data/spec/mongoid/reloadable_spec.rb +18 -1
  163. data/spec/mongoid/shardable_spec.rb +44 -0
  164. data/spec/mongoid/touchable_spec.rb +104 -16
  165. data/spec/mongoid/touchable_spec_models.rb +52 -0
  166. data/spec/mongoid/validatable_spec.rb +1 -1
  167. data/spec/shared/lib/mrss/cluster_config.rb +3 -8
  168. data/spec/shared/lib/mrss/constraints.rb +10 -41
  169. data/spec/shared/lib/mrss/docker_runner.rb +1 -7
  170. data/spec/shared/lib/mrss/server_version_registry.rb +12 -17
  171. data/spec/shared/lib/mrss/spec_organizer.rb +1 -18
  172. data/spec/shared/share/Dockerfile.erb +33 -125
  173. data/spec/shared/shlib/server.sh +23 -100
  174. data/spec/shared/shlib/set_env.sh +1 -4
  175. data/spec/spec_helper.rb +7 -3
  176. data/spec/support/client_registry.rb +9 -0
  177. data/spec/support/models/address.rb +0 -4
  178. data/spec/support/models/bolt.rb +8 -0
  179. data/spec/support/models/hole.rb +13 -0
  180. data/spec/support/models/mop.rb +0 -1
  181. data/spec/support/models/nut.rb +8 -0
  182. data/spec/support/models/person.rb +6 -9
  183. data/spec/support/models/sealer.rb +8 -0
  184. data/spec/support/models/shirt.rb +12 -0
  185. data/spec/support/models/spacer.rb +8 -0
  186. data/spec/support/models/threadlocker.rb +8 -0
  187. data/spec/support/models/washer.rb +8 -0
  188. data.tar.gz.sig +0 -0
  189. metadata +609 -545
  190. metadata.gz.sig +0 -0
  191. data/lib/mongoid/errors/empty_config_file.rb +0 -26
  192. data/lib/mongoid/errors/invalid_config_file.rb +0 -26
  193. data/spec/integration/contextual/empty_spec.rb +0 -142
  194. data/spec/mongoid/errors/invalid_config_file_spec.rb +0 -32
  195. data/spec/shared/bin/s3-copy +0 -45
  196. data/spec/shared/bin/s3-upload +0 -69
  197. data/spec/shared/lib/mrss/event_subscriber.rb +0 -200
  198. data/spec/shared/share/haproxy-1.conf +0 -16
  199. data/spec/shared/share/haproxy-2.conf +0 -17
  200. data/spec/support/cluster_config.rb +0 -158
@@ -0,0 +1,70 @@
1
+ - name: type is 0
2
+ document:
3
+ pi: 3.14
4
+ query:
5
+ pi:
6
+ $type: 0
7
+ error: true
8
+ min_server_version: 4.2
9
+
10
+ - name: type is too negative
11
+ document:
12
+ pi: 3.14
13
+ query:
14
+ pi:
15
+ $type: -2
16
+ error: true
17
+ min_server_version: 3.2
18
+
19
+ - name: type is too large
20
+ document:
21
+ pi: 3.14
22
+ query:
23
+ pi:
24
+ $type: 42
25
+ error: true
26
+ min_server_version: 3.2
27
+
28
+ - name: array argument for type - matches
29
+ document:
30
+ pi: 3.14
31
+ query:
32
+ pi:
33
+ $type: [1]
34
+ matches: true
35
+ min_server_version: 3.6
36
+
37
+ - name: array argument for type - does not match
38
+ document:
39
+ pi: 3.14
40
+ query:
41
+ pi:
42
+ $type: [2]
43
+ matches: false
44
+ min_server_version: 3.6
45
+
46
+ - name: hash argument
47
+ document:
48
+ pi: 3
49
+ query:
50
+ pi:
51
+ $type: {}
52
+ error: true
53
+
54
+ - name: array with multiple elements - matches
55
+ document:
56
+ pi: 3.14
57
+ query:
58
+ pi:
59
+ $type: [1, 2]
60
+ matches: true
61
+ min_server_version: 3.6
62
+
63
+ - name: array with multiple elements - does not match
64
+ document:
65
+ pi: 3.14
66
+ query:
67
+ pi:
68
+ $type: [2, 3]
69
+ matches: false
70
+ min_server_version: 3.6
@@ -0,0 +1,16 @@
1
+ - name: existing field - matches array
2
+ document:
3
+ prices: [1, 2, 3]
4
+ query:
5
+ prices:
6
+ $type: 4
7
+ matches: true
8
+ min_server_version: 3.6
9
+
10
+ - name: existing field - does not match array
11
+ document:
12
+ pi: 3
13
+ query:
14
+ pi:
15
+ $type: 4
16
+ matches: false
@@ -0,0 +1,18 @@
1
+ - name: existing field - matches binData
2
+ document:
3
+ price: !ruby/object:BSON::Binary
4
+ data: !binary |-
5
+ IW==
6
+ type: :generic
7
+ query:
8
+ price:
9
+ $type: 5
10
+ matches: true
11
+
12
+ - name: existing field - does not match binData
13
+ document:
14
+ price: 5
15
+ query:
16
+ price:
17
+ $type: 5
18
+ matches: false
@@ -0,0 +1,39 @@
1
+ - name: true value - matches
2
+ document:
3
+ status: true
4
+ query:
5
+ status:
6
+ $type: 8
7
+ matches: true
8
+
9
+ - name: false value - matches
10
+ document:
11
+ status: false
12
+ query:
13
+ status:
14
+ $type: 8
15
+ matches: true
16
+
17
+ - name: nil value - does not match
18
+ document:
19
+ status:
20
+ query:
21
+ status:
22
+ $type: 8
23
+ matches: false
24
+
25
+ - name: integer field - does not match
26
+ document:
27
+ pi: 3
28
+ query:
29
+ pi:
30
+ $type: 8
31
+ matches: false
32
+
33
+ - name: missing value - does not match
34
+ document:
35
+ x:
36
+ query:
37
+ status:
38
+ $type: 8
39
+ matches: false
@@ -0,0 +1,26 @@
1
+ - name: existing field - matches Code
2
+ document:
3
+ code: !ruby/object:BSON::Code
4
+ javascript: "var foo = 42;"
5
+ query:
6
+ code:
7
+ $type: 13
8
+ matches: true
9
+
10
+ - name: existing field - does not match Code
11
+ document:
12
+ code: 42
13
+ query:
14
+ code:
15
+ $type: 13
16
+ matches: false
17
+
18
+ - name: Code with Scope - does not match
19
+ document:
20
+ code: !ruby/object:BSON::CodeWithScope
21
+ javascript: "this.value = name"
22
+ scope: {name: "sid"}
23
+ query:
24
+ code:
25
+ $type: 13
26
+ matches: false
@@ -0,0 +1,26 @@
1
+ - name: existing field - matches Code with Scope
2
+ document:
3
+ code: !ruby/object:BSON::CodeWithScope
4
+ javascript: "this.value = name"
5
+ scope: {name: "sid"}
6
+ query:
7
+ code:
8
+ $type: 15
9
+ matches: true
10
+
11
+ - name: existing field - does not match Code with Scope
12
+ document:
13
+ code: 42
14
+ query:
15
+ code:
16
+ $type: 15
17
+ matches: false
18
+
19
+ - name: Code - does not match
20
+ document:
21
+ code: !ruby/object:BSON::Code
22
+ javascript: "var foo = 42;"
23
+ query:
24
+ code:
25
+ $type: 15
26
+ matches: false
@@ -0,0 +1,39 @@
1
+ - name: existing field - matches date with date_field
2
+ document:
3
+ date_field: 2020-11-19
4
+ query:
5
+ date_field:
6
+ $type: 9
7
+ matches: true
8
+
9
+ - name: existing field - matches date with time_field
10
+ document:
11
+ time_field: 2020-11-19 00:00:00
12
+ query:
13
+ time_field:
14
+ $type: 9
15
+ matches: true
16
+
17
+ - name: existing field - matches date with datetime_field
18
+ document:
19
+ datetime_field: 2020-11-19 00:00:00
20
+ query:
21
+ datetime_field:
22
+ $type: 9
23
+ matches: true
24
+
25
+ - name: existing field - matches date with default field
26
+ document:
27
+ day: 2020-11-19
28
+ query:
29
+ day:
30
+ $type: 9
31
+ matches: true
32
+
33
+ - name: existing field - does not match date
34
+ document:
35
+ name: 3
36
+ query:
37
+ name:
38
+ $type: 9
39
+ matches: false
@@ -0,0 +1,19 @@
1
+ - name: existing field - matches DBPointer
2
+ document:
3
+ ptr: !ruby/object:BSON::DbPointer
4
+ ref: "collection"
5
+ id: !ruby/object:BSON::ObjectId
6
+ raw_data: !binary |-
7
+ Xt0Zj+G4MlyV5hyJ
8
+ query:
9
+ ptr:
10
+ $type: 12
11
+ matches: true
12
+
13
+ - name: existing field - does not match DBPointer
14
+ document:
15
+ ptr: 3
16
+ query:
17
+ ptr:
18
+ $type: 12
19
+ matches: false
@@ -0,0 +1,40 @@
1
+ - name: Decimal128 in untyped field - matches
2
+ document:
3
+ number: !ruby/object:BSON::Decimal128
4
+ low: 4224
5
+ high: 3475653012423180288
6
+ query:
7
+ number:
8
+ $type: 19
9
+ matches: true
10
+ min_server_version: 3.4
11
+
12
+ - name: Decimal128 field - matches
13
+ document:
14
+ decimal128_field: !ruby/object:BSON::Decimal128
15
+ low: 4224
16
+ high: 3475653012423180288
17
+ query:
18
+ decimal128_field:
19
+ $type: 19
20
+ matches: true
21
+ min_server_version: 3.4
22
+
23
+ - name: existing field - does not match decimal
24
+ document:
25
+ name: "foo"
26
+ query:
27
+ name:
28
+ $type: 19
29
+ matches: false
30
+ min_server_version: 3.4
31
+
32
+ - name: BigDecimal field - does not match
33
+ document:
34
+ big_decimal_field: !ruby/object:BigDecimal
35
+ 18:0.42e2
36
+ query:
37
+ big_decimal_field:
38
+ $type: 19
39
+ matches: false
40
+ min_server_version: 3.4
@@ -0,0 +1,15 @@
1
+ - name: float - matches
2
+ document:
3
+ pi: 3.14
4
+ query:
5
+ pi:
6
+ $type: 1
7
+ matches: true
8
+
9
+ - name: integer - does not match
10
+ document:
11
+ pi: 3
12
+ query:
13
+ pi:
14
+ $type: 1
15
+ matches: false
@@ -0,0 +1,33 @@
1
+ - name: bson int32 - matches
2
+ document:
3
+ pi: !ruby/object:BSON::Int32
4
+ value: 3
5
+ query:
6
+ pi:
7
+ $type: 16
8
+ matches: true
9
+
10
+ - name: small integer - matches
11
+ document:
12
+ pi: 3
13
+ query:
14
+ pi:
15
+ $type: 16
16
+ matches: true
17
+
18
+ - name: big integer - does not match
19
+ document:
20
+ # Exactly 2**32
21
+ pi: 4294967296
22
+ query:
23
+ pi:
24
+ $type: 16
25
+ matches: false
26
+
27
+ - name: float - does not match
28
+ document:
29
+ pi: 3.14
30
+ query:
31
+ pi:
32
+ $type: 16
33
+ matches: false
@@ -0,0 +1,33 @@
1
+ - name: bson int64 - matches
2
+ document:
3
+ number: !ruby/object:BSON::Int64
4
+ value: 392141
5
+ query:
6
+ number:
7
+ $type: 18
8
+ matches: true
9
+
10
+ - name: small integer - does not match
11
+ document:
12
+ pi: 3
13
+ query:
14
+ pi:
15
+ $type: 18
16
+ matches: false
17
+
18
+ - name: big integer - matches
19
+ document:
20
+ # Exactly 2**32
21
+ pi: 4294967296
22
+ query:
23
+ pi:
24
+ $type: 18
25
+ matches: true
26
+
27
+ - name: existing field - does not match long
28
+ document:
29
+ name: "foo"
30
+ query:
31
+ name:
32
+ $type: 18
33
+ matches: false
@@ -0,0 +1,17 @@
1
+ - name: existing field - matches MaxKey
2
+ document:
3
+ pi: !ruby/object:BSON::MaxKey
4
+ # dummy field so MaxKey gets constructed
5
+ test: 42
6
+ query:
7
+ pi:
8
+ $type: 127
9
+ matches: true
10
+
11
+ - name: existing field - does not match MaxKey
12
+ document:
13
+ pi: 3
14
+ query:
15
+ pi:
16
+ $type: 127
17
+ matches: false
@@ -0,0 +1,17 @@
1
+ - name: existing field - matches MinKey
2
+ document:
3
+ pi: !ruby/object:BSON::MinKey
4
+ # dummy field so MinKey gets constructed
5
+ test: 42
6
+ query:
7
+ pi:
8
+ $type: -1
9
+ matches: true
10
+
11
+ - name: existing field - does not match MinKey
12
+ document:
13
+ pi: 3
14
+ query:
15
+ pi:
16
+ $type: -1
17
+ matches: false
@@ -0,0 +1,23 @@
1
+ - name: existing field - matches
2
+ document:
3
+ name:
4
+ query:
5
+ name:
6
+ $type: 10
7
+ matches: true
8
+
9
+ - name: missing field - does not match
10
+ document:
11
+ x:
12
+ query:
13
+ name:
14
+ $type: 10
15
+ matches: false
16
+
17
+ - name: existing field - does not match
18
+ document:
19
+ pi: 3
20
+ query:
21
+ pi:
22
+ $type: 10
23
+ matches: false
@@ -0,0 +1,23 @@
1
+ - name: hash value - matches
2
+ document:
3
+ name: {first_name: "bob"}
4
+ query:
5
+ name:
6
+ $type: 3
7
+ matches: true
8
+
9
+ - name: array value - does not match
10
+ document:
11
+ name: [1]
12
+ query:
13
+ name:
14
+ $type: 3
15
+ matches: false
16
+
17
+ - name: existing field - does not match Object
18
+ document:
19
+ pi: 3
20
+ query:
21
+ pi:
22
+ $type: 3
23
+ matches: false
@@ -0,0 +1,25 @@
1
+ - name: existing field - matches ObjectId
2
+ document:
3
+ new_id: !ruby/object:BSON::ObjectId
4
+ raw_data: !binary |-
5
+ Xt0Zj+G4MlyV5hyJ
6
+ query:
7
+ new_id:
8
+ $type: 7
9
+ matches: true
10
+
11
+ - name: integer - does not match
12
+ document:
13
+ pi: 3
14
+ query:
15
+ pi:
16
+ $type: 7
17
+ matches: false
18
+
19
+ - name: string - does not match
20
+ document:
21
+ pi: hello
22
+ query:
23
+ pi:
24
+ $type: 7
25
+ matches: false
@@ -0,0 +1,44 @@
1
+ - name: bson regexp in untyped field - matches
2
+ document:
3
+ name: !ruby/object:BSON::Regexp::Raw
4
+ pattern: /test/
5
+ options: ''
6
+ query:
7
+ name:
8
+ $type: 11
9
+ matches: true
10
+
11
+ - name: ruby regexp in untyped field - matches
12
+ document:
13
+ name: /test/
14
+ query:
15
+ name:
16
+ $type: 11
17
+ # Regexp is serialized as a string
18
+ matches: false
19
+
20
+ - name: ruby regexp field - matches
21
+ document:
22
+ regexp_field: /test/
23
+ query:
24
+ regexp_field:
25
+ $type: 11
26
+ matches: true
27
+
28
+ - name: bson regexp field - matches
29
+ document:
30
+ bson_regexp_field: !ruby/object:BSON::Regexp::Raw
31
+ pattern: /test/
32
+ options: ''
33
+ query:
34
+ bson_regexp_field:
35
+ $type: 11
36
+ matches: true
37
+
38
+ - name: existing field - does not match regex
39
+ document:
40
+ pi: 3
41
+ query:
42
+ pi:
43
+ $type: 11
44
+ matches: false
@@ -0,0 +1,15 @@
1
+ - name: existing field - matches string
2
+ document:
3
+ name: bob
4
+ query:
5
+ name:
6
+ $type: 2
7
+ matches: true
8
+
9
+ - name: existing field - does not match string
10
+ document:
11
+ pi: 3
12
+ query:
13
+ pi:
14
+ $type: 2
15
+ matches: false
@@ -0,0 +1,32 @@
1
+ - name: symbol in untyped field - matches
2
+ document:
3
+ name: :hello
4
+ query:
5
+ name:
6
+ $type: 14
7
+ matches: true
8
+
9
+ - name: symbol field - matches
10
+ document:
11
+ symbol_field: :hello
12
+ query:
13
+ symbol_field:
14
+ $type: 14
15
+ matches: true
16
+
17
+ - name: bson symbol - matches
18
+ document:
19
+ bson_symbol_field: !ruby/object:BSON::Symbol::Raw
20
+ symbol: hello
21
+ query:
22
+ bson_symbol_field:
23
+ $type: 14
24
+ matches: true
25
+
26
+ - name: string field - does not match
27
+ document:
28
+ pi: hello
29
+ query:
30
+ pi:
31
+ $type: 14
32
+ matches: false
@@ -0,0 +1,25 @@
1
+ - name: existing field - matches timestamp
2
+ document:
3
+ time: !ruby/object:BSON::Timestamp
4
+ seconds: 4
5
+ increment: 2
6
+ query:
7
+ time:
8
+ $type: 17
9
+ matches: true
10
+
11
+ - name: existing field - does not match timestamp
12
+ document:
13
+ name: 3
14
+ query:
15
+ name:
16
+ $type: 17
17
+ matches: false
18
+
19
+ - name: Ruby Time instance - does not match
20
+ document:
21
+ time_field: 2020-11-19 00:00:00
22
+ query:
23
+ time_field:
24
+ $type: 17
25
+ matches: false
@@ -0,0 +1,17 @@
1
+ - name: existing field - matches undefined
2
+ document:
3
+ price: !ruby/object:BSON::Undefined
4
+ # dummy field so Undefined gets constructed
5
+ test: 42
6
+ query:
7
+ price:
8
+ $type: 6
9
+ matches: true
10
+
11
+ - name: existing field - does not match undefined
12
+ document:
13
+ pi: 3
14
+ query:
15
+ pi:
16
+ $type: 6
17
+ matches: false
@@ -31,8 +31,8 @@ describe "StringifiedSymbol fields" do
31
31
  end
32
32
  end
33
33
 
34
- # Using command monitoring to test that StringifiedSymbol sends a string and returns a symbol
35
- let(:client) { Order.collection.client }
34
+ # Using command monitoring to test that StringifiedSymbol sends a string and returns a symbol
35
+ let(:client) { Order.collection.client }
36
36
 
37
37
  before do
38
38
  client.subscribe(Mongo::Monitoring::COMMAND, subscriber)
@@ -15,6 +15,8 @@ require "mongo"
15
15
  # https://github.com/jruby/jruby/issues/5599
16
16
  require 'pp'
17
17
 
18
+ autoload :Timecop, 'timecop'
19
+
18
20
  require 'support/spec_config'
19
21
  require 'mrss/lite_constraints'
20
22
  require "support/session_registry"