mongoid 5.4.1 → 6.1.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 (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
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Origin::Extensions::Regexp::Raw do
3
+ describe Mongoid::Criteria::Queryable::Extensions::Regexp::Raw do
4
4
 
5
5
  describe ".evolve" do
6
6
 
@@ -86,4 +86,4 @@ describe Origin::Extensions::Regexp::Raw do
86
86
  expect(regexp).to be_regexp
87
87
  end
88
88
  end
89
- end
89
+ end
@@ -0,0 +1,90 @@
1
+ require "spec_helper"
2
+
3
+
4
+ describe Mongoid::Criteria::Queryable::Extensions::Regexp do
5
+
6
+ describe ".evolve" do
7
+
8
+ context "when provided a regexp" do
9
+
10
+ let(:regexp) do
11
+ /^[123]/
12
+ end
13
+
14
+ let(:evolved) do
15
+ Regexp.evolve(regexp)
16
+ end
17
+
18
+ it "returns the regexp" do
19
+ expect(evolved).to eq(regexp)
20
+ end
21
+ end
22
+
23
+ context "when provided a string" do
24
+
25
+ let(:regexp) do
26
+ "^[123]"
27
+ end
28
+
29
+ let(:evolved) do
30
+ Regexp.evolve(regexp)
31
+ end
32
+
33
+ it "returns the converted regexp" do
34
+ expect(evolved).to eq(/^[123]/)
35
+ end
36
+ end
37
+
38
+ context "when provided an array" do
39
+
40
+ context "when the elements are regexps" do
41
+
42
+ let(:regexp) do
43
+ /^[123]/
44
+ end
45
+
46
+ let(:array) do
47
+ [ regexp ]
48
+ end
49
+
50
+ let(:evolved) do
51
+ Regexp.evolve(array)
52
+ end
53
+
54
+ it "returns the regexps" do
55
+ expect(evolved).to eq([ regexp ])
56
+ end
57
+
58
+ it "does not evolve in place" do
59
+ expect(evolved).to_not equal(array)
60
+ end
61
+ end
62
+
63
+ context "when the elements are strings" do
64
+
65
+ let(:regexp) do
66
+ "^[123]"
67
+ end
68
+
69
+ let(:evolved) do
70
+ Regexp.evolve([ regexp ])
71
+ end
72
+
73
+ it "returns the regexps" do
74
+ expect(evolved).to eq([ /^[123]/ ])
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+ describe "#regexp?" do
81
+
82
+ let(:regexp) do
83
+ /^[123]/
84
+ end
85
+
86
+ it "returns true" do
87
+ expect(regexp).to be_regexp
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,39 @@
1
+ require "spec_helper"
2
+
3
+ describe Set do
4
+
5
+ describe ".evolve" do
6
+
7
+ context "when provided a set" do
8
+
9
+ let(:set) do
10
+ ::Set.new([ 1, 2, 3 ])
11
+ end
12
+
13
+ it "returns an array" do
14
+ expect(described_class.evolve(set)).to eq([ 1, 2, 3 ])
15
+ end
16
+ end
17
+
18
+ context "when provided an array" do
19
+
20
+ it "returns an array" do
21
+ expect(described_class.evolve([ 1, 2, 3 ])).to eq([ 1, 2, 3 ])
22
+ end
23
+ end
24
+
25
+ context "when provided another object" do
26
+
27
+ it "returns the object" do
28
+ expect(described_class.evolve("testing")).to eq("testing")
29
+ end
30
+ end
31
+
32
+ context "when provided nil" do
33
+
34
+ it "returns nil" do
35
+ expect(described_class.evolve(nil)).to be_nil
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,302 @@
1
+ require "spec_helper"
2
+
3
+ describe String do
4
+
5
+ describe "#__evolve_date__" do
6
+
7
+ context "when the string is verbose" do
8
+
9
+ let(:date) do
10
+ "1st Jan 2010"
11
+ end
12
+
13
+ let(:evolved) do
14
+ date.__evolve_date__
15
+ end
16
+
17
+ it "returns the strings as a times" do
18
+ expect(evolved).to eq(Time.new(2010, 1, 1, 0, 0, 0, 0).utc)
19
+ end
20
+ end
21
+
22
+ context "when the string is in international format" do
23
+
24
+ let(:date) do
25
+ "2010-1-1"
26
+ end
27
+
28
+ let(:evolved) do
29
+ date.__evolve_date__
30
+ end
31
+
32
+ it "returns the strings as a times" do
33
+ expect(evolved).to eq(Time.new(2010, 1, 1, 0, 0, 0, 0).utc)
34
+ end
35
+ end
36
+ end
37
+
38
+ describe "#__evolve_time__" do
39
+
40
+ context "when the string is verbose" do
41
+
42
+ let(:date) do
43
+ "1st Jan 2010 12:00:00+01:00"
44
+ end
45
+
46
+ let(:evolved) do
47
+ date.__evolve_time__
48
+ end
49
+
50
+ it "returns the string as a utc time" do
51
+ expect(evolved).to eq(Time.new(2010, 1, 1, 11, 0, 0, 0).utc)
52
+ end
53
+ end
54
+
55
+ context "when the string is in international format" do
56
+
57
+ let(:date) do
58
+ "2010-01-01 12:00:00+01:00"
59
+ end
60
+
61
+ let(:evolved) do
62
+ date.__evolve_time__
63
+ end
64
+
65
+ it "returns the string as a utc time" do
66
+ expect(evolved).to eq(Time.new(2010, 1, 1, 11, 0, 0, 0).utc)
67
+ end
68
+ end
69
+ end
70
+
71
+ describe "#__sort_option__" do
72
+
73
+ context "when the string contains ascending" do
74
+
75
+ let(:option) do
76
+ "field_one ascending, field_two ascending".__sort_option__
77
+ end
78
+
79
+ it "returns the ascending sort option hash" do
80
+ expect(option).to eq({ field_one: 1, field_two: 1 })
81
+ end
82
+ end
83
+
84
+ context "when the string contains asc" do
85
+
86
+ let(:option) do
87
+ "field_one asc, field_two asc".__sort_option__
88
+ end
89
+
90
+ it "returns the ascending sort option hash" do
91
+ expect(option).to eq({ field_one: 1, field_two: 1 })
92
+ end
93
+ end
94
+
95
+ context "when the string contains ASCENDING" do
96
+
97
+ let(:option) do
98
+ "field_one ASCENDING, field_two ASCENDING".__sort_option__
99
+ end
100
+
101
+ it "returns the ascending sort option hash" do
102
+ expect(option).to eq({ field_one: 1, field_two: 1 })
103
+ end
104
+ end
105
+
106
+ context "when the string contains ASC" do
107
+
108
+ let(:option) do
109
+ "field_one ASC, field_two ASC".__sort_option__
110
+ end
111
+
112
+ it "returns the ascending sort option hash" do
113
+ expect(option).to eq({ field_one: 1, field_two: 1 })
114
+ end
115
+ end
116
+
117
+ context "when the string contains descending" do
118
+
119
+ let(:option) do
120
+ "field_one descending, field_two descending".__sort_option__
121
+ end
122
+
123
+ it "returns the descending sort option hash" do
124
+ expect(option).to eq({ field_one: -1, field_two: -1 })
125
+ end
126
+ end
127
+
128
+ context "when the string contains desc" do
129
+
130
+ let(:option) do
131
+ "field_one desc, field_two desc".__sort_option__
132
+ end
133
+
134
+ it "returns the descending sort option hash" do
135
+ expect(option).to eq({ field_one: -1, field_two: -1 })
136
+ end
137
+ end
138
+
139
+ context "when the string contains DESCENDING" do
140
+
141
+ let(:option) do
142
+ "field_one DESCENDING, field_two DESCENDING".__sort_option__
143
+ end
144
+
145
+ it "returns the descending sort option hash" do
146
+ expect(option).to eq({ field_one: -1, field_two: -1 })
147
+ end
148
+ end
149
+
150
+ context "when the string contains DESC" do
151
+
152
+ let(:option) do
153
+ "field_one DESC, field_two DESC".__sort_option__
154
+ end
155
+
156
+ it "returns the descending sort option hash" do
157
+ expect(option).to eq({ field_one: -1, field_two: -1 })
158
+ end
159
+ end
160
+ end
161
+
162
+ describe "#__expr_part__" do
163
+
164
+ let(:specified) do
165
+ "field".__expr_part__(10)
166
+ end
167
+
168
+ it "returns the string with the value" do
169
+ expect(specified).to eq({ "field" => 10 })
170
+ end
171
+
172
+ context "with a regexp" do
173
+
174
+ let(:specified) do
175
+ "field".__expr_part__(/test/)
176
+ end
177
+
178
+ it "returns the symbol with the value" do
179
+ expect(specified).to eq({ "field" => /test/ })
180
+ end
181
+
182
+ end
183
+
184
+ context "when negated" do
185
+
186
+ context "with a regexp" do
187
+
188
+ let(:specified) do
189
+ "field".__expr_part__(/test/, true)
190
+ end
191
+
192
+ it "returns the string with the value negated" do
193
+ expect(specified).to eq({ "field" => { "$not" => /test/ } })
194
+ end
195
+
196
+ end
197
+
198
+ context "with anything else" do
199
+
200
+ let(:specified) do
201
+ "field".__expr_part__('test', true)
202
+ end
203
+
204
+ it "returns the string with the value negated" do
205
+ expect(specified).to eq({ "field" => { "$ne" => "test" }})
206
+ end
207
+ end
208
+ end
209
+ end
210
+
211
+ describe "#to_direction" do
212
+
213
+ context "when ascending" do
214
+
215
+ it "returns 1" do
216
+ expect("ascending".to_direction).to eq(1)
217
+ end
218
+ end
219
+
220
+ context "when asc" do
221
+
222
+ it "returns 1" do
223
+ expect("asc".to_direction).to eq(1)
224
+ end
225
+ end
226
+
227
+ context "when ASCENDING" do
228
+
229
+ it "returns 1" do
230
+ expect("ASCENDING".to_direction).to eq(1)
231
+ end
232
+ end
233
+
234
+ context "when ASC" do
235
+
236
+ it "returns 1" do
237
+ expect("ASC".to_direction).to eq(1)
238
+ end
239
+ end
240
+
241
+ context "when descending" do
242
+
243
+ it "returns -1" do
244
+ expect("descending".to_direction).to eq(-1)
245
+ end
246
+ end
247
+
248
+ context "when desc" do
249
+
250
+ it "returns -1" do
251
+ expect("desc".to_direction).to eq(-1)
252
+ end
253
+ end
254
+
255
+ context "when DESCENDING" do
256
+
257
+ it "returns -1" do
258
+ expect("DESCENDING".to_direction).to eq(-1)
259
+ end
260
+ end
261
+
262
+ context "when DESC" do
263
+
264
+ it "returns -1" do
265
+ expect("DESC".to_direction).to eq(-1)
266
+ end
267
+ end
268
+ end
269
+
270
+ describe ".evolve" do
271
+
272
+ context "when provided a regex" do
273
+
274
+ let(:regex) do
275
+ /^[123]/
276
+ end
277
+
278
+ let(:evolved) do
279
+ described_class.evolve(regex)
280
+ end
281
+
282
+ it "returns the regex" do
283
+ expect(evolved).to eq(regex)
284
+ end
285
+ end
286
+
287
+ context "when provided an object" do
288
+
289
+ let(:object) do
290
+ 1234
291
+ end
292
+
293
+ let(:evolved) do
294
+ described_class.evolve(object)
295
+ end
296
+
297
+ it "returns the object as a string" do
298
+ expect(evolved).to eq("1234")
299
+ end
300
+ end
301
+ end
302
+ end
@@ -0,0 +1,167 @@
1
+ require "spec_helper"
2
+
3
+ describe Symbol do
4
+
5
+ describe ".add_key" do
6
+
7
+ before do
8
+ described_class.add_key(:fubar, :union, "$fu", "$bar") do |value|
9
+ value.to_s
10
+ end
11
+ end
12
+
13
+ let(:fubar) do
14
+ :testing.fubar
15
+ end
16
+
17
+ it "adds the method to symbol" do
18
+ expect(fubar).to be_a(Mongoid::Criteria::Queryable::Key)
19
+ end
20
+
21
+ it "sets the key name" do
22
+ expect(fubar.name).to eq(:testing)
23
+ end
24
+
25
+ it "sets the key strategy" do
26
+ expect(fubar.strategy).to eq(:__union__)
27
+ end
28
+
29
+ it "sets the key operator" do
30
+ expect(fubar.operator).to eq("$fu")
31
+ end
32
+
33
+ it "sets the additional key operator" do
34
+ expect(fubar.expanded).to eq("$bar")
35
+ end
36
+
37
+ it "sets the transform block" do
38
+ expect(fubar.block).to be
39
+ end
40
+ end
41
+
42
+ describe ".evolve" do
43
+
44
+ context "when provided nil" do
45
+
46
+ it "returns nil" do
47
+ expect(described_class.evolve(nil)).to be_nil
48
+ end
49
+ end
50
+
51
+ context "when provided a string" do
52
+
53
+ it "returns the string as a symbol" do
54
+ expect(described_class.evolve("test")).to eq(:test)
55
+ end
56
+ end
57
+ end
58
+
59
+ describe "#__expr_part__" do
60
+
61
+ let(:specified) do
62
+ :field.__expr_part__(10)
63
+ end
64
+
65
+ it "returns the string with the value" do
66
+ expect(specified).to eq({ field: 10 })
67
+ end
68
+
69
+ context "with a regexp" do
70
+
71
+ let(:specified) do
72
+ :field.__expr_part__(/test/)
73
+ end
74
+
75
+ it "returns the symbol with the value" do
76
+ expect(specified).to eq({ field: /test/ })
77
+ end
78
+
79
+ end
80
+
81
+ context "when negated" do
82
+
83
+ context "with a regexp" do
84
+
85
+ let(:specified) do
86
+ :field.__expr_part__(/test/, true)
87
+ end
88
+
89
+ it "returns the symbol with the value negated" do
90
+ expect(specified).to eq({ field: { "$not" => /test/ } })
91
+ end
92
+
93
+ end
94
+
95
+ context "with anything else" do
96
+
97
+ let(:specified) do
98
+ :field.__expr_part__('test', true)
99
+ end
100
+
101
+ it "returns the symbol with the value negated" do
102
+ expect(specified).to eq({ field: { "$ne" => "test" }})
103
+ end
104
+
105
+ end
106
+ end
107
+ end
108
+
109
+ describe "#to_direction" do
110
+
111
+ context "when ascending" do
112
+
113
+ it "returns 1" do
114
+ expect(:ascending.to_direction).to eq(1)
115
+ end
116
+ end
117
+
118
+ context "when asc" do
119
+
120
+ it "returns 1" do
121
+ expect(:asc.to_direction).to eq(1)
122
+ end
123
+ end
124
+
125
+ context "when ASCENDING" do
126
+
127
+ it "returns 1" do
128
+ expect(:ASCENDING.to_direction).to eq(1)
129
+ end
130
+ end
131
+
132
+ context "when ASC" do
133
+
134
+ it "returns 1" do
135
+ expect(:ASC.to_direction).to eq(1)
136
+ end
137
+ end
138
+
139
+ context "when descending" do
140
+
141
+ it "returns -1" do
142
+ expect(:descending.to_direction).to eq(-1)
143
+ end
144
+ end
145
+
146
+ context "when desc" do
147
+
148
+ it "returns -1" do
149
+ expect(:desc.to_direction).to eq(-1)
150
+ end
151
+ end
152
+
153
+ context "when DESCENDING" do
154
+
155
+ it "returns -1" do
156
+ expect(:DESCENDING.to_direction).to eq(-1)
157
+ end
158
+ end
159
+
160
+ context "when DESC" do
161
+
162
+ it "returns -1" do
163
+ expect(:DESC.to_direction).to eq(-1)
164
+ end
165
+ end
166
+ end
167
+ end