mongoid 5.4.1 → 6.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (260) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -3
  3. data/lib/config/locales/en.yml +19 -0
  4. data/lib/mongoid.rb +4 -4
  5. data/lib/mongoid/atomic.rb +2 -2
  6. data/lib/mongoid/atomic/modifiers.rb +8 -12
  7. data/lib/mongoid/attributes.rb +22 -21
  8. data/lib/mongoid/attributes/readonly.rb +22 -0
  9. data/lib/mongoid/cacheable.rb +36 -0
  10. data/lib/mongoid/changeable.rb +36 -0
  11. data/lib/mongoid/clients.rb +8 -63
  12. data/lib/mongoid/clients/options.rb +55 -250
  13. data/lib/mongoid/clients/storage_options.rb +1 -69
  14. data/lib/mongoid/composable.rb +29 -3
  15. data/lib/mongoid/config.rb +1 -0
  16. data/lib/mongoid/contextual/atomic.rb +5 -8
  17. data/lib/mongoid/contextual/map_reduce.rb +0 -4
  18. data/lib/mongoid/contextual/memory.rb +2 -2
  19. data/lib/mongoid/contextual/mongo.rb +40 -22
  20. data/lib/mongoid/contextual/none.rb +12 -0
  21. data/lib/mongoid/copyable.rb +13 -6
  22. data/lib/mongoid/criteria.rb +5 -2
  23. data/lib/mongoid/criteria/marshalable.rb +2 -2
  24. data/lib/mongoid/criteria/modifiable.rb +17 -1
  25. data/lib/mongoid/criteria/options.rb +25 -0
  26. data/lib/mongoid/criteria/queryable.rb +87 -0
  27. data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
  28. data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
  29. data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
  30. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
  31. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
  32. data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
  33. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
  34. data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
  35. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
  36. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
  37. data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
  38. data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
  39. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +79 -0
  40. data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
  41. data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
  42. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
  43. data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
  44. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
  45. data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
  46. data/lib/mongoid/criteria/queryable/key.rb +103 -0
  47. data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
  48. data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
  49. data/lib/mongoid/criteria/queryable/optional.rb +429 -0
  50. data/lib/mongoid/criteria/queryable/options.rb +153 -0
  51. data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
  52. data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
  53. data/lib/mongoid/criteria/queryable/selector.rb +212 -0
  54. data/lib/mongoid/criteria/queryable/smash.rb +104 -0
  55. data/lib/mongoid/document.rb +30 -37
  56. data/lib/mongoid/errors.rb +2 -0
  57. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
  58. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -1
  59. data/lib/mongoid/errors/invalid_field.rb +2 -2
  60. data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
  61. data/lib/mongoid/errors/invalid_relation.rb +66 -0
  62. data/lib/mongoid/evolvable.rb +1 -1
  63. data/lib/mongoid/extensions.rb +0 -4
  64. data/lib/mongoid/extensions/big_decimal.rb +17 -8
  65. data/lib/mongoid/extensions/date.rb +4 -1
  66. data/lib/mongoid/extensions/decimal128.rb +3 -3
  67. data/lib/mongoid/extensions/hash.rb +1 -0
  68. data/lib/mongoid/extensions/string.rb +4 -3
  69. data/lib/mongoid/extensions/time.rb +4 -1
  70. data/lib/mongoid/fields/validators/macro.rb +18 -0
  71. data/lib/mongoid/findable.rb +2 -2
  72. data/lib/mongoid/indexable.rb +15 -13
  73. data/lib/mongoid/interceptable.rb +5 -22
  74. data/lib/mongoid/matchable.rb +13 -7
  75. data/lib/mongoid/matchable/all.rb +2 -2
  76. data/lib/mongoid/matchable/and.rb +3 -3
  77. data/lib/mongoid/matchable/default.rb +2 -2
  78. data/lib/mongoid/matchable/elem_match.rb +28 -0
  79. data/lib/mongoid/matchable/exists.rb +2 -2
  80. data/lib/mongoid/matchable/gt.rb +4 -2
  81. data/lib/mongoid/matchable/gte.rb +4 -2
  82. data/lib/mongoid/matchable/in.rb +2 -2
  83. data/lib/mongoid/matchable/lt.rb +4 -2
  84. data/lib/mongoid/matchable/lte.rb +4 -2
  85. data/lib/mongoid/matchable/ne.rb +2 -2
  86. data/lib/mongoid/matchable/nin.rb +2 -2
  87. data/lib/mongoid/matchable/or.rb +3 -3
  88. data/lib/mongoid/matchable/regexp.rb +3 -3
  89. data/lib/mongoid/matchable/size.rb +2 -2
  90. data/lib/mongoid/persistable.rb +3 -5
  91. data/lib/mongoid/persistable/creatable.rb +2 -2
  92. data/lib/mongoid/persistable/deletable.rb +1 -1
  93. data/lib/mongoid/persistable/settable.rb +1 -1
  94. data/lib/mongoid/persistable/updatable.rb +5 -12
  95. data/lib/mongoid/persistable/upsertable.rb +1 -1
  96. data/lib/mongoid/persistence_context.rb +215 -0
  97. data/lib/mongoid/query_cache.rb +3 -6
  98. data/lib/mongoid/relations/accessors.rb +3 -0
  99. data/lib/mongoid/relations/auto_save.rb +12 -4
  100. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -4
  101. data/lib/mongoid/relations/counter_cache.rb +15 -5
  102. data/lib/mongoid/relations/eager.rb +6 -11
  103. data/lib/mongoid/relations/eager/base.rb +3 -3
  104. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +2 -2
  105. data/lib/mongoid/relations/eager/has_many.rb +1 -1
  106. data/lib/mongoid/relations/embedded/batchable.rb +12 -36
  107. data/lib/mongoid/relations/embedded/in.rb +13 -1
  108. data/lib/mongoid/relations/embedded/many.rb +28 -10
  109. data/lib/mongoid/relations/embedded/one.rb +14 -1
  110. data/lib/mongoid/relations/macros.rb +9 -1
  111. data/lib/mongoid/relations/metadata.rb +3 -3
  112. data/lib/mongoid/relations/options.rb +2 -2
  113. data/lib/mongoid/relations/proxy.rb +1 -31
  114. data/lib/mongoid/relations/referenced/in.rb +19 -10
  115. data/lib/mongoid/relations/referenced/many.rb +23 -17
  116. data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
  117. data/lib/mongoid/relations/referenced/one.rb +15 -1
  118. data/lib/mongoid/relations/synchronization.rb +11 -11
  119. data/lib/mongoid/relations/touchable.rb +6 -3
  120. data/lib/mongoid/reloadable.rb +1 -1
  121. data/lib/mongoid/serializable.rb +1 -1
  122. data/lib/mongoid/traversable.rb +1 -1
  123. data/lib/mongoid/validatable/uniqueness.rb +1 -2
  124. data/lib/mongoid/version.rb +1 -1
  125. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +14 -3
  126. data/spec/app/models/album.rb +5 -1
  127. data/spec/app/models/artist.rb +21 -0
  128. data/spec/app/models/book.rb +2 -1
  129. data/spec/app/models/dokument.rb +1 -0
  130. data/spec/app/models/ordered_post.rb +5 -0
  131. data/spec/app/models/oscar.rb +1 -2
  132. data/spec/app/models/page.rb +1 -1
  133. data/spec/app/models/person.rb +3 -3
  134. data/spec/app/models/princess.rb +2 -0
  135. data/spec/app/models/record.rb +1 -0
  136. data/spec/app/models/subscription.rb +1 -0
  137. data/spec/app/models/thing.rb +1 -1
  138. data/spec/config/mongoid.yml +15 -0
  139. data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
  140. data/spec/mongoid/atomic_spec.rb +17 -17
  141. data/spec/mongoid/attributes/nested_spec.rb +14 -14
  142. data/spec/mongoid/attributes/readonly_spec.rb +87 -44
  143. data/spec/mongoid/attributes_spec.rb +90 -5
  144. data/spec/mongoid/cacheable_spec.rb +112 -0
  145. data/spec/mongoid/changeable_spec.rb +58 -0
  146. data/spec/mongoid/clients/factory_spec.rb +31 -3
  147. data/spec/mongoid/clients/options_spec.rb +382 -96
  148. data/spec/mongoid/clients_spec.rb +243 -101
  149. data/spec/mongoid/composable_spec.rb +7 -0
  150. data/spec/mongoid/config_spec.rb +67 -11
  151. data/spec/mongoid/contextual/atomic_spec.rb +3 -3
  152. data/spec/mongoid/contextual/mongo_spec.rb +165 -20
  153. data/spec/mongoid/contextual/none_spec.rb +15 -0
  154. data/spec/mongoid/copyable_spec.rb +13 -4
  155. data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
  156. data/spec/mongoid/criteria/options_spec.rb +29 -0
  157. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
  158. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
  159. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
  160. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
  161. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
  162. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
  163. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
  164. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
  165. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
  166. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
  167. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
  168. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
  169. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
  170. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
  171. data/spec/mongoid/{extensions/origin → criteria/queryable/extensions}/regexp_raw_spec.rb +2 -2
  172. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +90 -0
  173. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
  174. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
  175. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
  176. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
  177. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
  178. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
  179. data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
  180. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
  181. data/spec/mongoid/criteria/queryable/optional_spec.rb +1799 -0
  182. data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
  183. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
  184. data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
  185. data/spec/mongoid/criteria/queryable/selectable_spec.rb +4174 -0
  186. data/spec/mongoid/criteria/queryable/selector_spec.rb +844 -0
  187. data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
  188. data/spec/mongoid/criteria_spec.rb +152 -21
  189. data/spec/mongoid/document_spec.rb +37 -88
  190. data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
  191. data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
  192. data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
  193. data/spec/mongoid/extensions/boolean_spec.rb +14 -0
  194. data/spec/mongoid/extensions/date_spec.rb +2 -6
  195. data/spec/mongoid/extensions/date_time_spec.rb +2 -6
  196. data/spec/mongoid/extensions/decimal128_spec.rb +1 -1
  197. data/spec/mongoid/extensions/float_spec.rb +8 -1
  198. data/spec/mongoid/extensions/hash_spec.rb +15 -0
  199. data/spec/mongoid/extensions/integer_spec.rb +8 -1
  200. data/spec/mongoid/extensions/object_spec.rb +11 -0
  201. data/spec/mongoid/extensions/string_spec.rb +21 -0
  202. data/spec/mongoid/extensions/time_spec.rb +2 -6
  203. data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
  204. data/spec/mongoid/findable_spec.rb +46 -1
  205. data/spec/mongoid/indexable_spec.rb +15 -3
  206. data/spec/mongoid/interceptable_spec.rb +68 -10
  207. data/spec/mongoid/matchable/all_spec.rb +4 -4
  208. data/spec/mongoid/matchable/and_spec.rb +10 -10
  209. data/spec/mongoid/matchable/default_spec.rb +12 -12
  210. data/spec/mongoid/matchable/elem_match_spec.rb +86 -0
  211. data/spec/mongoid/matchable/exists_spec.rb +5 -5
  212. data/spec/mongoid/matchable/gt_spec.rb +18 -7
  213. data/spec/mongoid/matchable/gte_spec.rb +17 -7
  214. data/spec/mongoid/matchable/in_spec.rb +5 -5
  215. data/spec/mongoid/matchable/lt_spec.rb +18 -7
  216. data/spec/mongoid/matchable/lte_spec.rb +18 -7
  217. data/spec/mongoid/matchable/ne_spec.rb +5 -5
  218. data/spec/mongoid/matchable/nin_spec.rb +5 -5
  219. data/spec/mongoid/matchable/or_spec.rb +7 -7
  220. data/spec/mongoid/matchable/regexp_spec.rb +5 -5
  221. data/spec/mongoid/matchable/size_spec.rb +3 -3
  222. data/spec/mongoid/matchable_spec.rb +173 -53
  223. data/spec/mongoid/persistable/creatable_spec.rb +7 -2
  224. data/spec/mongoid/persistable/deletable_spec.rb +16 -1
  225. data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
  226. data/spec/mongoid/persistable/savable_spec.rb +35 -30
  227. data/spec/mongoid/persistable/settable_spec.rb +45 -29
  228. data/spec/mongoid/persistable/updatable_spec.rb +184 -5
  229. data/spec/mongoid/persistence_context_spec.rb +680 -0
  230. data/spec/mongoid/positional_spec.rb +10 -10
  231. data/spec/mongoid/query_cache_spec.rb +89 -0
  232. data/spec/mongoid/relations/accessors_spec.rb +1 -1
  233. data/spec/mongoid/relations/auto_save_spec.rb +39 -6
  234. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +4 -4
  235. data/spec/mongoid/relations/builders_spec.rb +37 -10
  236. data/spec/mongoid/relations/counter_cache_spec.rb +64 -3
  237. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +16 -0
  238. data/spec/mongoid/relations/eager_spec.rb +40 -0
  239. data/spec/mongoid/relations/embedded/many_spec.rb +63 -47
  240. data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
  241. data/spec/mongoid/relations/macros_spec.rb +395 -7
  242. data/spec/mongoid/relations/metadata_spec.rb +15 -1
  243. data/spec/mongoid/relations/proxy_spec.rb +27 -1
  244. data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
  245. data/spec/mongoid/relations/referenced/many_spec.rb +13 -25
  246. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +14 -26
  247. data/spec/mongoid/relations/synchronization_spec.rb +48 -2
  248. data/spec/mongoid/relations/touchable_spec.rb +40 -0
  249. data/spec/mongoid/reloadable_spec.rb +51 -0
  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 +18 -9
  253. data/spec/mongoid/validatable_spec.rb +16 -0
  254. data/spec/spec_helper.rb +20 -11
  255. metadata +524 -469
  256. checksums.yaml.gz.sig +0 -0
  257. data.tar.gz.sig +0 -0
  258. data/lib/mongoid/clients/thread_options.rb +0 -19
  259. data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
  260. metadata.gz.sig +0 -0
@@ -6,25 +6,25 @@ describe Mongoid::Matchable::All do
6
6
  described_class.new(["first", "second", "third"])
7
7
  end
8
8
 
9
- describe "#matches?" do
9
+ describe "#_matches?" do
10
10
 
11
11
  context "when the attribute includes all of the values" do
12
12
 
13
13
  it "returns true" do
14
- expect(matcher.matches?("$all" => ["first", /\Asec.*\z/])).to be true
14
+ expect(matcher._matches?("$all" => ["first", /\Asec.*\z/])).to be true
15
15
  end
16
16
  end
17
17
 
18
18
  context "when the attributes doesn't include all of the values" do
19
19
 
20
20
  it "returns false" do
21
- expect(matcher.matches?("$all" => ["second", "third", "fourth"])).to be false
21
+ expect(matcher._matches?("$all" => ["second", "third", "fourth"])).to be false
22
22
  end
23
23
  end
24
24
 
25
25
  context "when the value is empty" do
26
26
  it "returns false" do
27
- expect(matcher.matches?("$all" => [])).to be false
27
+ expect(matcher._matches?("$all" => [])).to be false
28
28
  end
29
29
  end
30
30
  end
@@ -10,7 +10,7 @@ describe Mongoid::Matchable::And do
10
10
  described_class.new("value", person)
11
11
  end
12
12
 
13
- describe "#matches?" do
13
+ describe "#_matches?" do
14
14
 
15
15
  context "when provided a simple expression" do
16
16
 
@@ -19,7 +19,7 @@ describe Mongoid::Matchable::And do
19
19
  context "when the value matches" do
20
20
 
21
21
  let(:matches) do
22
- matcher.matches?([ { title: "Sir" } ])
22
+ matcher._matches?([ { title: "Sir" } ])
23
23
  end
24
24
 
25
25
  before do
@@ -34,7 +34,7 @@ describe Mongoid::Matchable::And do
34
34
  context "when the expression is a $not" do
35
35
 
36
36
  let(:matches) do
37
- matcher.matches?([ { title: {:$not => /Foobar/ } }])
37
+ matcher._matches?([ { title: {:$not => /Foobar/ } }])
38
38
  end
39
39
 
40
40
  context "when the value matches" do
@@ -59,7 +59,7 @@ describe Mongoid::Matchable::And do
59
59
  context "when the value does not match" do
60
60
 
61
61
  let(:matches) do
62
- matcher.matches?([ { title: "Sir" } ])
62
+ matcher._matches?([ { title: "Sir" } ])
63
63
  end
64
64
 
65
65
  it "returns false" do
@@ -73,7 +73,7 @@ describe Mongoid::Matchable::And do
73
73
  context "when all of the values are equal" do
74
74
 
75
75
  let(:matches) do
76
- matcher.matches?(
76
+ matcher._matches?(
77
77
  [ { title: "Sir" }, { _id: person.id } ]
78
78
  )
79
79
  end
@@ -90,7 +90,7 @@ describe Mongoid::Matchable::And do
90
90
  context "when one of the values does not match" do
91
91
 
92
92
  let(:matches) do
93
- matcher.matches?(
93
+ matcher._matches?(
94
94
  [ { title: "Sir" }, { _id: BSON::ObjectId.new } ]
95
95
  )
96
96
  end
@@ -107,7 +107,7 @@ describe Mongoid::Matchable::And do
107
107
  context "when provided no expressions" do
108
108
 
109
109
  let(:matches) do
110
- matcher.matches?([])
110
+ matcher._matches?([])
111
111
  end
112
112
 
113
113
  it "returns true" do
@@ -122,7 +122,7 @@ describe Mongoid::Matchable::And do
122
122
  context "when all of the values are equal" do
123
123
 
124
124
  let(:matches) do
125
- matcher.matches?(
125
+ matcher._matches?(
126
126
  [
127
127
  { title: { "$in" => [ "Sir", "Madam" ] } },
128
128
  { _id: person.id }
@@ -142,7 +142,7 @@ describe Mongoid::Matchable::And do
142
142
  context "when one of the values does not match" do
143
143
 
144
144
  let(:matches) do
145
- matcher.matches?(
145
+ matcher._matches?(
146
146
  [
147
147
  { title: { "$in" => [ "Prince", "Madam" ] } },
148
148
  { _id: BSON::ObjectId.new }
@@ -164,7 +164,7 @@ describe Mongoid::Matchable::And do
164
164
  context "when all the expressions match" do
165
165
 
166
166
  let(:matches) do
167
- matcher.matches?(
167
+ matcher._matches?(
168
168
  [
169
169
  { title: "Sir", age: 23 },
170
170
  { _id: person.id }
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe Mongoid::Matchable::Default do
4
4
 
5
- describe "#matches?" do
5
+ describe "#_matches?" do
6
6
 
7
7
  context "when comparing strings" do
8
8
 
@@ -13,14 +13,14 @@ describe Mongoid::Matchable::Default do
13
13
  context "when the values are equal" do
14
14
 
15
15
  it "returns true" do
16
- expect(matcher.matches?("Testing")).to be true
16
+ expect(matcher._matches?("Testing")).to be true
17
17
  end
18
18
  end
19
19
 
20
20
  context "when the values are not equal" do
21
21
 
22
22
  it "returns false" do
23
- expect(matcher.matches?("Other")).to be false
23
+ expect(matcher._matches?("Other")).to be false
24
24
  end
25
25
  end
26
26
  end
@@ -38,14 +38,14 @@ describe Mongoid::Matchable::Default do
38
38
  context "when the values are equal" do
39
39
 
40
40
  it "returns true" do
41
- expect(matcher.matches?(object_id)).to be true
41
+ expect(matcher._matches?(object_id)).to be true
42
42
  end
43
43
  end
44
44
 
45
45
  context "when the values are not equal" do
46
46
 
47
47
  it "returns false" do
48
- expect(matcher.matches?(BSON::ObjectId.new)).to be false
48
+ expect(matcher._matches?(BSON::ObjectId.new)).to be false
49
49
  end
50
50
  end
51
51
  end
@@ -61,14 +61,14 @@ describe Mongoid::Matchable::Default do
61
61
  context "when the value is a string" do
62
62
 
63
63
  it "returns true" do
64
- expect(matcher.matches?("Test1")).to be true
64
+ expect(matcher._matches?("Test1")).to be true
65
65
  end
66
66
  end
67
67
 
68
68
  context "when the value is a regexp" do
69
69
 
70
70
  it "returns true" do
71
- expect(matcher.matches?(/^Test[3-5]$/)).to be true
71
+ expect(matcher._matches?(/^Test[3-5]$/)).to be true
72
72
  end
73
73
  end
74
74
  end
@@ -76,7 +76,7 @@ describe Mongoid::Matchable::Default do
76
76
  context "when the attribute does not contain the value" do
77
77
 
78
78
  it "returns false" do
79
- expect(matcher.matches?("Test4")).to be false
79
+ expect(matcher._matches?("Test4")).to be false
80
80
  end
81
81
  end
82
82
  end
@@ -94,14 +94,14 @@ describe Mongoid::Matchable::Default do
94
94
  context "when the attribute contains the value" do
95
95
 
96
96
  it "returns true" do
97
- expect(matcher.matches?(object_id)).to be true
97
+ expect(matcher._matches?(object_id)).to be true
98
98
  end
99
99
  end
100
100
 
101
101
  context "when the attribute does not contain the value" do
102
102
 
103
103
  it "returns false" do
104
- expect(matcher.matches?(BSON::ObjectId.new)).to be false
104
+ expect(matcher._matches?(BSON::ObjectId.new)).to be false
105
105
  end
106
106
  end
107
107
  end
@@ -115,14 +115,14 @@ describe Mongoid::Matchable::Default do
115
115
  context "when the attribute contains the value" do
116
116
 
117
117
  it "returns true" do
118
- expect(matcher.matches?(["Test1", "Test2", "Test3"])).to be true
118
+ expect(matcher._matches?(["Test1", "Test2", "Test3"])).to be true
119
119
  end
120
120
  end
121
121
 
122
122
  context "when the attribute does not contain the value" do
123
123
 
124
124
  it "returns false" do
125
- expect(matcher.matches?(["Test1", "Test2"])).to be false
125
+ expect(matcher._matches?(["Test1", "Test2"])).to be false
126
126
  end
127
127
  end
128
128
  end
@@ -0,0 +1,86 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::ElemMatch do
4
+
5
+ let(:attribute) {[{"a" => 1, "b" => 2}, {"a" => 2, "b" => 2}, {"a" => 3, "b" => 1}]}
6
+ let(:matcher) do
7
+ described_class.new(attribute)
8
+ end
9
+
10
+ describe "#_matches?" do
11
+
12
+ context "when the attribute is not an array" do
13
+
14
+ let(:attribute) {"string"}
15
+
16
+ it "returns false" do
17
+ expect(matcher._matches?("$elemMatch" => {"a" => 1})).to be false
18
+ end
19
+ end
20
+
21
+ context "when the $elemMatch is not a hash" do
22
+
23
+ let(:attribute) {"string"}
24
+
25
+ it "returns false" do
26
+ expect(matcher._matches?("$elemMatch" => [])).to be false
27
+ end
28
+ end
29
+
30
+ context "when there is a sub document that matches the criteria" do
31
+
32
+ it "returns true" do
33
+ expect(matcher._matches?("$elemMatch" => {"a" => 1})).to be true
34
+ end
35
+
36
+ context "when evaluating multiple fields of the subdocument" do
37
+
38
+ it "returns true" do
39
+ expect(matcher._matches?("$elemMatch" => {"a" => 1, "b" => 2})).to be true
40
+ end
41
+
42
+ context "when the $elemMatch document keys are out of order" do
43
+
44
+ it "returns true" do
45
+ expect(matcher._matches?("$elemMatch" => {"b" => 2, "a" => 1})).to be true
46
+ end
47
+ end
48
+ end
49
+
50
+ context "when using other operators that match" do
51
+
52
+ it "returns true" do
53
+ expect(matcher._matches?("$elemMatch" => {"a" => {"$in" => [1]}, "b" => {"$gt" => 1}})).to be true
54
+ end
55
+ end
56
+ end
57
+
58
+ context "when there is not a sub document that matches the criteria" do
59
+
60
+ it "returns false" do
61
+ expect(matcher._matches?("$elemMatch" => {"a" => 10})).to be false
62
+ end
63
+
64
+ context "when evaluating multiple fields of the subdocument" do
65
+
66
+ it "returns false" do
67
+ expect(matcher._matches?("$elemMatch" => {"a" => 1, "b" => 3})).to be false
68
+ end
69
+ end
70
+
71
+ context "when using other operators that do not match" do
72
+
73
+ it "returns true" do
74
+ expect(matcher._matches?("$elemMatch" => {"a" => {"$in" => [1]}, "b" => {"$gt" => 10}})).to be false
75
+ end
76
+ end
77
+ end
78
+
79
+ context "when using a criteria that matches partially but not a single sub document" do
80
+
81
+ it "returns false" do
82
+ expect(matcher._matches?("$elemMatch" => {"a" => 3, "b" => 2})).to be false
83
+ end
84
+ end
85
+ end
86
+ end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe Mongoid::Matchable::Exists do
4
4
 
5
- describe "#matches?" do
5
+ describe "#_matches?" do
6
6
 
7
7
  context "when checking for existence" do
8
8
 
@@ -13,7 +13,7 @@ describe Mongoid::Matchable::Exists do
13
13
  end
14
14
 
15
15
  it "returns true" do
16
- expect(matcher.matches?("$exists" => true)).to be true
16
+ expect(matcher._matches?("$exists" => true)).to be true
17
17
  end
18
18
  end
19
19
 
@@ -24,7 +24,7 @@ describe Mongoid::Matchable::Exists do
24
24
  end
25
25
 
26
26
  it "returns false" do
27
- expect(matcher.matches?("$exists" => true)).to be false
27
+ expect(matcher._matches?("$exists" => true)).to be false
28
28
  end
29
29
  end
30
30
  end
@@ -38,7 +38,7 @@ describe Mongoid::Matchable::Exists do
38
38
  end
39
39
 
40
40
  it "returns false" do
41
- expect(matcher.matches?("$exists" => false)).to be false
41
+ expect(matcher._matches?("$exists" => false)).to be false
42
42
  end
43
43
  end
44
44
 
@@ -49,7 +49,7 @@ describe Mongoid::Matchable::Exists do
49
49
  end
50
50
 
51
51
  it "returns true" do
52
- expect(matcher.matches?("$exists" => false)).to be true
52
+ expect(matcher._matches?("$exists" => false)).to be true
53
53
  end
54
54
  end
55
55
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe Mongoid::Matchable::Gt do
4
4
 
5
- describe "#matches?" do
5
+ describe "#_matches?" do
6
6
 
7
7
  context "when the value is larger" do
8
8
 
@@ -11,7 +11,7 @@ describe Mongoid::Matchable::Gt do
11
11
  end
12
12
 
13
13
  it "returns true" do
14
- expect(matcher.matches?("$gt" => 3)).to be true
14
+ expect(matcher._matches?("$gt" => 3)).to be true
15
15
  end
16
16
  end
17
17
 
@@ -22,7 +22,7 @@ describe Mongoid::Matchable::Gt do
22
22
  end
23
23
 
24
24
  it "returns false" do
25
- expect(matcher.matches?("$gt" => 3)).to be false
25
+ expect(matcher._matches?("$gt" => 3)).to be false
26
26
  end
27
27
  end
28
28
 
@@ -33,7 +33,7 @@ describe Mongoid::Matchable::Gt do
33
33
  end
34
34
 
35
35
  it "returns false" do
36
- expect(matcher.matches?("$gt" => 10)).to be false
36
+ expect(matcher._matches?("$gt" => 10)).to be false
37
37
  end
38
38
  end
39
39
 
@@ -44,7 +44,7 @@ describe Mongoid::Matchable::Gt do
44
44
  end
45
45
 
46
46
  it "returns false" do
47
- expect(matcher.matches?("$gt" => 5)).to be false
47
+ expect(matcher._matches?("$gt" => 5)).to be false
48
48
  end
49
49
  end
50
50
 
@@ -56,7 +56,7 @@ describe Mongoid::Matchable::Gt do
56
56
  end
57
57
 
58
58
  it "returns false" do
59
- expect(matcher.matches?("$gt" => 5)).to be true
59
+ expect(matcher._matches?("$gt" => 5)).to be true
60
60
  end
61
61
  end
62
62
 
@@ -67,9 +67,20 @@ describe Mongoid::Matchable::Gt do
67
67
  end
68
68
 
69
69
  it "returns false" do
70
- expect(matcher.matches?("$gt" => 5)).to be false
70
+ expect(matcher._matches?("$gt" => 5)).to be false
71
71
  end
72
72
  end
73
73
  end
74
+
75
+ context "when the value is not numeric" do
76
+
77
+ let(:matcher) do
78
+ described_class.new(5)
79
+ end
80
+
81
+ it "returns false" do
82
+ expect(matcher._matches?("$gt" => '4.9')).to be false
83
+ end
84
+ end
74
85
  end
75
86
  end
@@ -2,7 +2,7 @@ require "spec_helper"
2
2
 
3
3
  describe Mongoid::Matchable::Gte do
4
4
 
5
- describe "#matches?" do
5
+ describe "#_matches?" do
6
6
 
7
7
  context "when the value is larger" do
8
8
 
@@ -11,7 +11,7 @@ describe Mongoid::Matchable::Gte do
11
11
  end
12
12
 
13
13
  it "returns true" do
14
- expect(matcher.matches?("$gte" => 3)).to be true
14
+ expect(matcher._matches?("$gte" => 3)).to be true
15
15
  end
16
16
  end
17
17
 
@@ -22,7 +22,7 @@ describe Mongoid::Matchable::Gte do
22
22
  end
23
23
 
24
24
  it "returns false" do
25
- expect(matcher.matches?("$gte" => 10)).to be false
25
+ expect(matcher._matches?("$gte" => 10)).to be false
26
26
  end
27
27
  end
28
28
 
@@ -33,7 +33,7 @@ describe Mongoid::Matchable::Gte do
33
33
  end
34
34
 
35
35
  it "returns true" do
36
- expect(matcher.matches?("$gte" => 5)).to be true
36
+ expect(matcher._matches?("$gte" => 5)).to be true
37
37
  end
38
38
  end
39
39
 
@@ -44,7 +44,7 @@ describe Mongoid::Matchable::Gte do
44
44
  end
45
45
 
46
46
  it "returns false" do
47
- expect(matcher.matches?("$gte" => 5)).to be false
47
+ expect(matcher._matches?("$gte" => 5)).to be false
48
48
  end
49
49
  end
50
50
 
@@ -55,7 +55,7 @@ describe Mongoid::Matchable::Gte do
55
55
  end
56
56
 
57
57
  it "returns false" do
58
- expect(matcher.matches?("$gte" => 5)).to be true
58
+ expect(matcher._matches?("$gte" => 5)).to be true
59
59
  end
60
60
  end
61
61
 
@@ -65,9 +65,19 @@ describe Mongoid::Matchable::Gte do
65
65
  end
66
66
 
67
67
  it "returns false" do
68
- expect(matcher.matches?("$gte" => 5)).to be false
68
+ expect(matcher._matches?("$gte" => 5)).to be false
69
69
  end
70
+ end
71
+ end
72
+
73
+ context "when the value is not numeric" do
74
+
75
+ let(:matcher) do
76
+ described_class.new(5)
77
+ end
70
78
 
79
+ it "returns false" do
80
+ expect(matcher._matches?("$gte" => '4.9')).to be false
71
81
  end
72
82
  end
73
83
  end