mongoid 7.5.4 → 8.1.7

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 (442) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +3 -3
  3. data/README.md +6 -6
  4. data/Rakefile +44 -46
  5. data/lib/config/locales/en.yml +92 -43
  6. data/lib/mongoid/association/accessors.rb +44 -11
  7. data/lib/mongoid/association/bindable.rb +50 -2
  8. data/lib/mongoid/association/builders.rb +5 -3
  9. data/lib/mongoid/association/constrainable.rb +0 -1
  10. data/lib/mongoid/association/eager_loadable.rb +29 -7
  11. data/lib/mongoid/association/embedded/batchable.rb +34 -11
  12. data/lib/mongoid/association/embedded/cyclic.rb +1 -1
  13. data/lib/mongoid/association/embedded/embedded_in/binding.rb +24 -2
  14. data/lib/mongoid/association/embedded/embedded_in/buildable.rb +2 -2
  15. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +4 -3
  16. data/lib/mongoid/association/embedded/embedded_in.rb +3 -2
  17. data/lib/mongoid/association/embedded/embeds_many/binding.rb +1 -0
  18. data/lib/mongoid/association/embedded/embeds_many/buildable.rb +4 -3
  19. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +85 -46
  20. data/lib/mongoid/association/embedded/embeds_many.rb +2 -2
  21. data/lib/mongoid/association/embedded/embeds_one/buildable.rb +19 -5
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +24 -5
  23. data/lib/mongoid/association/embedded/embeds_one.rb +3 -3
  24. data/lib/mongoid/association/macros.rb +8 -1
  25. data/lib/mongoid/association/many.rb +11 -7
  26. data/lib/mongoid/association/nested/many.rb +5 -4
  27. data/lib/mongoid/association/nested/nested_buildable.rb +4 -4
  28. data/lib/mongoid/association/nested/one.rb +45 -7
  29. data/lib/mongoid/association/one.rb +2 -2
  30. data/lib/mongoid/association/options.rb +9 -9
  31. data/lib/mongoid/association/proxy.rb +15 -4
  32. data/lib/mongoid/association/referenced/auto_save.rb +4 -3
  33. data/lib/mongoid/association/referenced/belongs_to/binding.rb +1 -0
  34. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +1 -1
  35. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +5 -6
  36. data/lib/mongoid/association/referenced/belongs_to.rb +2 -2
  37. data/lib/mongoid/association/referenced/counter_cache.rb +10 -10
  38. data/lib/mongoid/association/referenced/eager.rb +2 -2
  39. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +70 -13
  40. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +6 -3
  41. data/lib/mongoid/association/referenced/has_many/enumerable.rb +22 -30
  42. data/lib/mongoid/association/referenced/has_many/proxy.rb +40 -21
  43. data/lib/mongoid/association/referenced/has_many.rb +3 -3
  44. data/lib/mongoid/association/referenced/has_one/buildable.rb +1 -1
  45. data/lib/mongoid/association/referenced/has_one/nested_builder.rb +5 -5
  46. data/lib/mongoid/association/referenced/has_one/proxy.rb +9 -12
  47. data/lib/mongoid/association/referenced/has_one.rb +3 -3
  48. data/lib/mongoid/association/referenced/syncable.rb +4 -4
  49. data/lib/mongoid/association/reflections.rb +4 -4
  50. data/lib/mongoid/association/relatable.rb +44 -10
  51. data/lib/mongoid/association.rb +5 -5
  52. data/lib/mongoid/atomic/modifiers.rb +2 -2
  53. data/lib/mongoid/atomic.rb +16 -7
  54. data/lib/mongoid/attributes/dynamic.rb +4 -4
  55. data/lib/mongoid/attributes/nested.rb +6 -6
  56. data/lib/mongoid/attributes/processing.rb +37 -6
  57. data/lib/mongoid/attributes/projector.rb +2 -2
  58. data/lib/mongoid/attributes/readonly.rb +3 -3
  59. data/lib/mongoid/attributes.rb +51 -42
  60. data/lib/mongoid/changeable.rb +147 -14
  61. data/lib/mongoid/clients/options.rb +5 -1
  62. data/lib/mongoid/clients/sessions.rb +2 -14
  63. data/lib/mongoid/clients/storage_options.rb +2 -5
  64. data/lib/mongoid/clients/validators/storage.rb +3 -15
  65. data/lib/mongoid/collection_configurable.rb +58 -0
  66. data/lib/mongoid/composable.rb +2 -0
  67. data/lib/mongoid/config/defaults.rb +60 -0
  68. data/lib/mongoid/config/options.rb +3 -0
  69. data/lib/mongoid/config/validators/async_query_executor.rb +24 -0
  70. data/lib/mongoid/config/validators/client.rb +6 -6
  71. data/lib/mongoid/config/validators.rb +1 -0
  72. data/lib/mongoid/config.rb +153 -18
  73. data/lib/mongoid/contextual/aggregable/memory.rb +24 -16
  74. data/lib/mongoid/contextual/aggregable/mongo.rb +5 -5
  75. data/lib/mongoid/contextual/aggregable/none.rb +1 -1
  76. data/lib/mongoid/contextual/atomic.rb +1 -1
  77. data/lib/mongoid/contextual/geo_near.rb +7 -7
  78. data/lib/mongoid/contextual/map_reduce.rb +2 -2
  79. data/lib/mongoid/contextual/memory.rb +285 -58
  80. data/lib/mongoid/contextual/mongo/documents_loader.rb +177 -0
  81. data/lib/mongoid/contextual/mongo.rb +540 -346
  82. data/lib/mongoid/contextual/none.rb +193 -20
  83. data/lib/mongoid/contextual/queryable.rb +1 -1
  84. data/lib/mongoid/contextual.rb +14 -2
  85. data/lib/mongoid/copyable.rb +32 -8
  86. data/lib/mongoid/criteria/findable.rb +8 -5
  87. data/lib/mongoid/criteria/includable.rb +27 -22
  88. data/lib/mongoid/criteria/marshalable.rb +10 -2
  89. data/lib/mongoid/criteria/permission.rb +1 -1
  90. data/lib/mongoid/criteria/queryable/aggregable.rb +2 -2
  91. data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -16
  92. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +25 -4
  93. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -2
  94. data/lib/mongoid/criteria/queryable/extensions/date.rb +6 -1
  95. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +6 -1
  96. data/lib/mongoid/criteria/queryable/extensions/hash.rb +1 -17
  97. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +15 -9
  98. data/lib/mongoid/criteria/queryable/extensions/object.rb +2 -1
  99. data/lib/mongoid/criteria/queryable/extensions/range.rb +13 -5
  100. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +3 -3
  101. data/lib/mongoid/criteria/queryable/extensions/set.rb +1 -1
  102. data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -14
  103. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +4 -12
  104. data/lib/mongoid/criteria/queryable/extensions/time.rb +6 -1
  105. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +6 -1
  106. data/lib/mongoid/criteria/queryable/key.rb +4 -4
  107. data/lib/mongoid/criteria/queryable/mergeable.rb +1 -1
  108. data/lib/mongoid/criteria/queryable/optional.rb +11 -17
  109. data/lib/mongoid/criteria/queryable/options.rb +2 -2
  110. data/lib/mongoid/criteria/queryable/pipeline.rb +1 -1
  111. data/lib/mongoid/criteria/queryable/selectable.rb +47 -38
  112. data/lib/mongoid/criteria/queryable/selector.rb +92 -7
  113. data/lib/mongoid/criteria/queryable/smash.rb +40 -7
  114. data/lib/mongoid/criteria/queryable.rb +12 -7
  115. data/lib/mongoid/criteria/scopable.rb +2 -2
  116. data/lib/mongoid/criteria/translator.rb +45 -0
  117. data/lib/mongoid/criteria.rb +20 -40
  118. data/lib/mongoid/deprecable.rb +37 -0
  119. data/lib/mongoid/deprecation.rb +25 -0
  120. data/lib/mongoid/document.rb +127 -35
  121. data/lib/mongoid/equality.rb +8 -8
  122. data/lib/mongoid/errors/create_collection_failure.rb +33 -0
  123. data/lib/mongoid/errors/document_not_found.rb +10 -6
  124. data/lib/mongoid/errors/drop_collection_failure.rb +27 -0
  125. data/lib/mongoid/errors/immutable_attribute.rb +26 -0
  126. data/lib/mongoid/errors/invalid_async_query_executor.rb +25 -0
  127. data/lib/mongoid/errors/invalid_config_option.rb +1 -1
  128. data/lib/mongoid/errors/invalid_dependent_strategy.rb +1 -1
  129. data/lib/mongoid/errors/invalid_dot_dollar_assignment.rb +23 -0
  130. data/lib/mongoid/errors/invalid_field.rb +6 -2
  131. data/lib/mongoid/errors/invalid_field_type.rb +26 -0
  132. data/lib/mongoid/errors/invalid_global_executor_concurrency.rb +22 -0
  133. data/lib/mongoid/errors/invalid_relation.rb +1 -1
  134. data/lib/mongoid/errors/invalid_relation_option.rb +1 -1
  135. data/lib/mongoid/errors/invalid_session_use.rb +1 -1
  136. data/lib/mongoid/errors/invalid_storage_options.rb +1 -1
  137. data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
  138. data/lib/mongoid/errors/mongoid_error.rb +3 -3
  139. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +1 -1
  140. data/lib/mongoid/errors/no_client_database.rb +1 -1
  141. data/lib/mongoid/errors/no_client_hosts.rb +1 -1
  142. data/lib/mongoid/errors/readonly_attribute.rb +1 -1
  143. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +1 -1
  144. data/lib/mongoid/errors/unknown_attribute.rb +1 -1
  145. data/lib/mongoid/errors.rb +6 -3
  146. data/lib/mongoid/extensions/array.rb +9 -7
  147. data/lib/mongoid/extensions/big_decimal.rb +33 -10
  148. data/lib/mongoid/extensions/binary.rb +42 -0
  149. data/lib/mongoid/extensions/boolean.rb +8 -2
  150. data/lib/mongoid/extensions/date.rb +26 -20
  151. data/lib/mongoid/extensions/date_time.rb +1 -1
  152. data/lib/mongoid/extensions/false_class.rb +1 -1
  153. data/lib/mongoid/extensions/float.rb +7 -4
  154. data/lib/mongoid/extensions/hash.rb +38 -9
  155. data/lib/mongoid/extensions/integer.rb +7 -4
  156. data/lib/mongoid/extensions/module.rb +1 -1
  157. data/lib/mongoid/extensions/object.rb +10 -8
  158. data/lib/mongoid/extensions/range.rb +41 -10
  159. data/lib/mongoid/extensions/regexp.rb +11 -4
  160. data/lib/mongoid/extensions/set.rb +11 -4
  161. data/lib/mongoid/extensions/string.rb +11 -22
  162. data/lib/mongoid/extensions/symbol.rb +4 -15
  163. data/lib/mongoid/extensions/time.rb +29 -16
  164. data/lib/mongoid/extensions/time_with_zone.rb +1 -2
  165. data/lib/mongoid/extensions/true_class.rb +1 -1
  166. data/lib/mongoid/extensions.rb +1 -0
  167. data/lib/mongoid/factory.rb +55 -7
  168. data/lib/mongoid/fields/foreign_key.rb +11 -4
  169. data/lib/mongoid/fields/localized.rb +19 -4
  170. data/lib/mongoid/fields/standard.rb +17 -7
  171. data/lib/mongoid/fields/validators/macro.rb +3 -9
  172. data/lib/mongoid/fields.rb +142 -28
  173. data/lib/mongoid/findable.rb +54 -24
  174. data/lib/mongoid/indexable/specification.rb +2 -2
  175. data/lib/mongoid/indexable/validators/options.rb +6 -2
  176. data/lib/mongoid/interceptable.rb +186 -16
  177. data/lib/mongoid/matchable.rb +1 -1
  178. data/lib/mongoid/matcher/eq_impl.rb +1 -1
  179. data/lib/mongoid/matcher/type.rb +1 -1
  180. data/lib/mongoid/matcher.rb +48 -14
  181. data/lib/mongoid/persistable/creatable.rb +19 -9
  182. data/lib/mongoid/persistable/deletable.rb +2 -2
  183. data/lib/mongoid/persistable/destroyable.rb +1 -1
  184. data/lib/mongoid/persistable/savable.rb +14 -2
  185. data/lib/mongoid/persistable/unsettable.rb +2 -2
  186. data/lib/mongoid/persistable/updatable.rb +69 -12
  187. data/lib/mongoid/persistable/upsertable.rb +21 -2
  188. data/lib/mongoid/persistable.rb +6 -3
  189. data/lib/mongoid/persistence_context.rb +6 -4
  190. data/lib/mongoid/query_cache.rb +13 -261
  191. data/lib/mongoid/railties/controller_runtime.rb +1 -1
  192. data/lib/mongoid/railties/database.rake +7 -2
  193. data/lib/mongoid/reloadable.rb +10 -8
  194. data/lib/mongoid/scopable.rb +15 -13
  195. data/lib/mongoid/selectable.rb +1 -2
  196. data/lib/mongoid/serializable.rb +17 -13
  197. data/lib/mongoid/stateful.rb +57 -10
  198. data/lib/mongoid/tasks/database.rake +12 -0
  199. data/lib/mongoid/tasks/database.rb +20 -2
  200. data/lib/mongoid/threaded/lifecycle.rb +5 -5
  201. data/lib/mongoid/threaded.rb +42 -12
  202. data/lib/mongoid/timestamps/created.rb +1 -1
  203. data/lib/mongoid/timestamps/updated.rb +2 -2
  204. data/lib/mongoid/touchable.rb +3 -4
  205. data/lib/mongoid/traversable.rb +10 -5
  206. data/lib/mongoid/utils.rb +22 -0
  207. data/lib/mongoid/validatable/associated.rb +98 -17
  208. data/lib/mongoid/validatable/localizable.rb +1 -1
  209. data/lib/mongoid/validatable/macros.rb +5 -7
  210. data/lib/mongoid/validatable/presence.rb +2 -2
  211. data/lib/mongoid/validatable/uniqueness.rb +9 -8
  212. data/lib/mongoid/validatable.rb +17 -6
  213. data/lib/mongoid/version.rb +1 -1
  214. data/lib/mongoid/warnings.rb +19 -4
  215. data/lib/mongoid.rb +17 -3
  216. data/spec/config/mongoid.yml +16 -0
  217. data/spec/integration/app_spec.rb +24 -19
  218. data/spec/integration/associations/belongs_to_spec.rb +18 -0
  219. data/spec/integration/associations/embedded_spec.rb +15 -0
  220. data/spec/integration/associations/embeds_many_spec.rb +15 -2
  221. data/spec/integration/associations/embeds_one_spec.rb +18 -0
  222. data/spec/integration/associations/foreign_key_spec.rb +9 -0
  223. data/spec/integration/associations/has_and_belongs_to_many_spec.rb +61 -0
  224. data/spec/integration/associations/has_one_spec.rb +97 -1
  225. data/spec/integration/associations/scope_option_spec.rb +1 -1
  226. data/spec/integration/callbacks_models.rb +132 -1
  227. data/spec/integration/callbacks_spec.rb +381 -4
  228. data/spec/integration/criteria/range_spec.rb +95 -1
  229. data/spec/integration/discriminator_key_spec.rb +118 -80
  230. data/spec/integration/dots_and_dollars_spec.rb +277 -0
  231. data/spec/integration/i18n_fallbacks_spec.rb +3 -32
  232. data/spec/integration/matcher_examples_spec.rb +20 -13
  233. data/spec/integration/matcher_operator_data/type_decimal.yml +3 -2
  234. data/spec/integration/matcher_operator_spec.rb +3 -5
  235. data/spec/integration/persistence/range_field_spec.rb +350 -0
  236. data/spec/mongoid/association/counter_cache_spec.rb +1 -1
  237. data/spec/mongoid/association/depending_spec.rb +9 -9
  238. data/spec/mongoid/association/eager_spec.rb +2 -1
  239. data/spec/mongoid/association/embedded/embedded_in/binding_spec.rb +2 -1
  240. data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +54 -0
  241. data/spec/mongoid/association/embedded/embedded_in/proxy_spec.rb +96 -9
  242. data/spec/mongoid/association/embedded/embeds_many/buildable_spec.rb +112 -0
  243. data/spec/mongoid/association/embedded/embeds_many/proxy_spec.rb +290 -65
  244. data/spec/mongoid/association/embedded/embeds_many_models.rb +37 -0
  245. data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +16 -0
  246. data/spec/mongoid/association/embedded/embeds_many_spec.rb +68 -0
  247. data/spec/mongoid/association/embedded/embeds_one/buildable_spec.rb +25 -0
  248. data/spec/mongoid/association/embedded/embeds_one/proxy_spec.rb +15 -2
  249. data/spec/mongoid/association/embedded/embeds_one_models.rb +19 -0
  250. data/spec/mongoid/association/embedded/embeds_one_spec.rb +28 -0
  251. data/spec/mongoid/association/referenced/belongs_to/binding_spec.rb +2 -1
  252. data/spec/mongoid/association/referenced/belongs_to/buildable_spec.rb +54 -0
  253. data/spec/mongoid/association/referenced/belongs_to/proxy_spec.rb +19 -0
  254. data/spec/mongoid/association/referenced/belongs_to_models.rb +11 -0
  255. data/spec/mongoid/association/referenced/belongs_to_spec.rb +4 -20
  256. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_spec.rb +186 -229
  257. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +25 -0
  258. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +35 -2
  259. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +109 -0
  260. data/spec/mongoid/association/referenced/has_many/enumerable_spec.rb +2 -56
  261. data/spec/mongoid/association/referenced/has_many/proxy_spec.rb +215 -177
  262. data/spec/mongoid/association/referenced/has_many_models.rb +3 -1
  263. data/spec/mongoid/association/referenced/has_many_spec.rb +25 -0
  264. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +2 -2
  265. data/spec/mongoid/association/referenced/has_one/proxy_spec.rb +107 -1
  266. data/spec/mongoid/association/referenced/has_one_models.rb +16 -0
  267. data/spec/mongoid/association/syncable_spec.rb +15 -1
  268. data/spec/mongoid/atomic/paths_spec.rb +0 -14
  269. data/spec/mongoid/attributes/nested_spec.rb +80 -11
  270. data/spec/mongoid/attributes/nested_spec_models.rb +48 -0
  271. data/spec/mongoid/attributes/projector_spec.rb +1 -5
  272. data/spec/mongoid/attributes_spec.rb +526 -33
  273. data/spec/mongoid/changeable_spec.rb +429 -37
  274. data/spec/mongoid/clients/factory_spec.rb +23 -30
  275. data/spec/mongoid/clients/sessions_spec.rb +0 -38
  276. data/spec/mongoid/clients_spec.rb +149 -15
  277. data/spec/mongoid/collection_configurable_spec.rb +158 -0
  278. data/spec/mongoid/config/defaults_spec.rb +160 -0
  279. data/spec/mongoid/config_spec.rb +214 -31
  280. data/spec/mongoid/contextual/aggregable/memory_spec.rb +396 -158
  281. data/spec/mongoid/contextual/aggregable/memory_table.yml +88 -0
  282. data/spec/mongoid/contextual/aggregable/memory_table_spec.rb +62 -0
  283. data/spec/mongoid/contextual/map_reduce_spec.rb +2 -16
  284. data/spec/mongoid/contextual/memory_spec.rb +850 -88
  285. data/spec/mongoid/contextual/mongo/documents_loader_spec.rb +187 -0
  286. data/spec/mongoid/contextual/mongo_spec.rb +2256 -1005
  287. data/spec/mongoid/contextual/none_spec.rb +60 -21
  288. data/spec/mongoid/copyable_spec.rb +453 -11
  289. data/spec/mongoid/criteria/findable_spec.rb +86 -210
  290. data/spec/mongoid/criteria/includable_spec.rb +1492 -0
  291. data/spec/mongoid/criteria/includable_spec_models.rb +54 -0
  292. data/spec/mongoid/criteria/marshalable_spec.rb +18 -1
  293. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +7 -19
  294. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +134 -26
  295. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +11 -0
  296. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +11 -0
  297. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +0 -15
  298. data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +73 -7
  299. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +4 -69
  300. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +0 -59
  301. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +11 -0
  302. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +11 -0
  303. data/spec/mongoid/criteria/queryable/optional_spec.rb +15 -484
  304. data/spec/mongoid/criteria/queryable/options_spec.rb +1 -1
  305. data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +469 -0
  306. data/spec/mongoid/criteria/queryable/selectable_spec.rb +78 -86
  307. data/spec/mongoid/criteria/queryable/selector_spec.rb +15 -3
  308. data/spec/mongoid/criteria/translator_spec.rb +132 -0
  309. data/spec/mongoid/criteria_projection_spec.rb +1 -5
  310. data/spec/mongoid/criteria_spec.rb +469 -1205
  311. data/spec/mongoid/document_fields_spec.rb +173 -24
  312. data/spec/mongoid/document_spec.rb +32 -41
  313. data/spec/mongoid/errors/document_not_found_spec.rb +29 -2
  314. data/spec/mongoid/errors/invalid_field_spec.rb +1 -1
  315. data/spec/mongoid/errors/invalid_field_type_spec.rb +55 -0
  316. data/spec/mongoid/errors/mongoid_error_spec.rb +3 -1
  317. data/spec/mongoid/errors/no_environment_spec.rb +3 -3
  318. data/spec/mongoid/errors/readonly_document_spec.rb +2 -2
  319. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +1 -1
  320. data/spec/mongoid/extensions/array_spec.rb +16 -2
  321. data/spec/mongoid/extensions/big_decimal_spec.rb +712 -212
  322. data/spec/mongoid/extensions/binary_spec.rb +44 -9
  323. data/spec/mongoid/extensions/boolean_spec.rb +68 -82
  324. data/spec/mongoid/extensions/date_class_mongoize_spec.rb +7 -3
  325. data/spec/mongoid/extensions/date_spec.rb +71 -1
  326. data/spec/mongoid/extensions/date_time_spec.rb +15 -9
  327. data/spec/mongoid/extensions/float_spec.rb +53 -74
  328. data/spec/mongoid/extensions/hash_spec.rb +33 -3
  329. data/spec/mongoid/extensions/integer_spec.rb +50 -64
  330. data/spec/mongoid/extensions/range_spec.rb +255 -54
  331. data/spec/mongoid/extensions/regexp_spec.rb +58 -33
  332. data/spec/mongoid/extensions/set_spec.rb +106 -0
  333. data/spec/mongoid/extensions/string_spec.rb +53 -25
  334. data/spec/mongoid/extensions/symbol_spec.rb +18 -25
  335. data/spec/mongoid/extensions/time_spec.rb +639 -106
  336. data/spec/mongoid/extensions/time_with_zone_spec.rb +24 -83
  337. data/spec/mongoid/factory_spec.rb +61 -1
  338. data/spec/mongoid/fields/localized_spec.rb +80 -37
  339. data/spec/mongoid/fields_spec.rb +503 -87
  340. data/spec/mongoid/findable_spec.rb +450 -58
  341. data/spec/mongoid/indexable/specification_spec.rb +2 -2
  342. data/spec/mongoid/indexable_spec.rb +55 -30
  343. data/spec/mongoid/interceptable_spec.rb +824 -22
  344. data/spec/mongoid/interceptable_spec_models.rb +235 -4
  345. data/spec/mongoid/matcher/extract_attribute_spec.rb +1 -5
  346. data/spec/mongoid/mongoizable_spec.rb +285 -0
  347. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  348. data/spec/mongoid/persistable/deletable_spec.rb +28 -8
  349. data/spec/mongoid/persistable/destroyable_spec.rb +28 -8
  350. data/spec/mongoid/persistable/incrementable_spec.rb +37 -0
  351. data/spec/mongoid/persistable/logical_spec.rb +37 -0
  352. data/spec/mongoid/persistable/poppable_spec.rb +36 -0
  353. data/spec/mongoid/persistable/pullable_spec.rb +72 -0
  354. data/spec/mongoid/persistable/pushable_spec.rb +72 -0
  355. data/spec/mongoid/persistable/renamable_spec.rb +36 -0
  356. data/spec/mongoid/persistable/savable_spec.rb +96 -0
  357. data/spec/mongoid/persistable/settable_spec.rb +37 -0
  358. data/spec/mongoid/persistable/unsettable_spec.rb +36 -0
  359. data/spec/mongoid/persistable/updatable_spec.rb +20 -28
  360. data/spec/mongoid/persistable/upsertable_spec.rb +89 -1
  361. data/spec/mongoid/persistence_context_spec.rb +31 -57
  362. data/spec/mongoid/query_cache_middleware_spec.rb +0 -18
  363. data/spec/mongoid/query_cache_spec.rb +56 -215
  364. data/spec/mongoid/reloadable_spec.rb +83 -6
  365. data/spec/mongoid/scopable_spec.rb +91 -1
  366. data/spec/mongoid/serializable_spec.rb +25 -39
  367. data/spec/mongoid/shardable_spec.rb +4 -4
  368. data/spec/mongoid/stateful_spec.rb +150 -8
  369. data/spec/mongoid/tasks/database_rake_spec.rb +74 -0
  370. data/spec/mongoid/tasks/database_spec.rb +127 -0
  371. data/spec/mongoid/timestamps_spec.rb +392 -4
  372. data/spec/mongoid/timestamps_spec_models.rb +67 -0
  373. data/spec/mongoid/touchable_spec.rb +390 -2
  374. data/spec/mongoid/touchable_spec_models.rb +14 -8
  375. data/spec/mongoid/traversable_spec.rb +13 -35
  376. data/spec/mongoid/validatable/associated_spec.rb +27 -34
  377. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  378. data/spec/mongoid/validatable/uniqueness_spec.rb +58 -31
  379. data/spec/mongoid/warnings_spec.rb +35 -0
  380. data/spec/mongoid_spec.rb +34 -16
  381. data/spec/rails/controller_extension/controller_runtime_spec.rb +2 -2
  382. data/spec/rails/mongoid_spec.rb +4 -16
  383. data/spec/spec_helper.rb +5 -0
  384. data/spec/support/constraints.rb +24 -0
  385. data/spec/support/immutable_ids.rb +118 -0
  386. data/spec/support/macros.rb +78 -0
  387. data/spec/support/models/artist.rb +0 -1
  388. data/spec/support/models/augmentation.rb +12 -0
  389. data/spec/support/models/band.rb +5 -0
  390. data/spec/support/models/book.rb +1 -0
  391. data/spec/support/models/building.rb +2 -0
  392. data/spec/support/models/catalog.rb +24 -0
  393. data/spec/support/models/circus.rb +3 -0
  394. data/spec/support/models/cover.rb +10 -0
  395. data/spec/support/models/fanatic.rb +8 -0
  396. data/spec/support/models/implant.rb +9 -0
  397. data/spec/support/models/label.rb +2 -0
  398. data/spec/support/models/lat_lng.rb +6 -0
  399. data/spec/support/models/name.rb +10 -0
  400. data/spec/support/models/passport.rb +9 -0
  401. data/spec/support/models/person.rb +2 -0
  402. data/spec/support/models/player.rb +2 -0
  403. data/spec/support/models/powerup.rb +12 -0
  404. data/spec/support/models/product.rb +1 -0
  405. data/spec/support/models/purse.rb +9 -0
  406. data/spec/support/models/registry.rb +1 -0
  407. data/spec/support/models/school.rb +14 -0
  408. data/spec/support/models/shield.rb +18 -0
  409. data/spec/support/models/student.rb +14 -0
  410. data/spec/support/models/weapon.rb +12 -0
  411. metadata +101 -96
  412. checksums.yaml.gz.sig +0 -0
  413. data/lib/mongoid/errors/eager_load.rb +0 -23
  414. data/lib/mongoid/errors/invalid_value.rb +0 -17
  415. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +0 -60
  416. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +0 -60
  417. data/spec/mongoid/errors/eager_load_spec.rb +0 -31
  418. data/spec/shared/LICENSE +0 -20
  419. data/spec/shared/bin/get-mongodb-download-url +0 -17
  420. data/spec/shared/bin/s3-copy +0 -45
  421. data/spec/shared/bin/s3-upload +0 -69
  422. data/spec/shared/lib/mrss/child_process_helper.rb +0 -80
  423. data/spec/shared/lib/mrss/cluster_config.rb +0 -231
  424. data/spec/shared/lib/mrss/constraints.rb +0 -378
  425. data/spec/shared/lib/mrss/docker_runner.rb +0 -291
  426. data/spec/shared/lib/mrss/eg_config_utils.rb +0 -51
  427. data/spec/shared/lib/mrss/event_subscriber.rb +0 -210
  428. data/spec/shared/lib/mrss/lite_constraints.rb +0 -238
  429. data/spec/shared/lib/mrss/server_version_registry.rb +0 -120
  430. data/spec/shared/lib/mrss/session_registry.rb +0 -69
  431. data/spec/shared/lib/mrss/session_registry_legacy.rb +0 -60
  432. data/spec/shared/lib/mrss/spec_organizer.rb +0 -179
  433. data/spec/shared/lib/mrss/utils.rb +0 -15
  434. data/spec/shared/share/Dockerfile.erb +0 -325
  435. data/spec/shared/share/haproxy-1.conf +0 -16
  436. data/spec/shared/share/haproxy-2.conf +0 -17
  437. data/spec/shared/shlib/config.sh +0 -27
  438. data/spec/shared/shlib/distro.sh +0 -74
  439. data/spec/shared/shlib/server.sh +0 -392
  440. data/spec/shared/shlib/set_env.sh +0 -169
  441. data.tar.gz.sig +0 -0
  442. metadata.gz.sig +0 -3
@@ -0,0 +1,54 @@
1
+ # frozen_string_literal: true
2
+
3
+ class IncUser
4
+ include Mongoid::Document
5
+ has_many :posts, class_name: 'IncPost'
6
+ has_many :comments, class_name: 'IncComment'
7
+ end
8
+
9
+ class IncPost
10
+ include Mongoid::Document
11
+ belongs_to :user, class_name: 'IncUser'
12
+ has_many :comments, class_name: 'IncComment'
13
+ end
14
+
15
+ class IncComment
16
+ include Mongoid::Document
17
+ belongs_to :posts, class_name: 'IncPost'
18
+ belongs_to :user, class_name: 'IncUser'
19
+ belongs_to :thread, class_name: 'IncThread'
20
+ end
21
+
22
+ class IncThread
23
+ include Mongoid::Document
24
+ has_many :comments, class_name: 'IncComment'
25
+ end
26
+
27
+ class IncBlog
28
+ include Mongoid::Document
29
+
30
+ has_and_belongs_to_many :posts, class_name: "IncBlogPost"
31
+ belongs_to :highlighted_post, class_name: "IncBlogPost"
32
+ belongs_to :pinned_post, class_name: "IncBlogPost"
33
+ end
34
+
35
+ class IncBlogPost
36
+ include Mongoid::Document
37
+
38
+ belongs_to :author, class_name: "IncAuthor"
39
+ end
40
+
41
+ class IncAuthor
42
+ include Mongoid::Document
43
+ end
44
+
45
+ class IncPost
46
+ include Mongoid::Document
47
+ belongs_to :person, class_name: "IncPerson"
48
+ end
49
+
50
+ class IncPerson
51
+ include Mongoid::Document
52
+ has_many :posts, class_name: "IncPost"
53
+ field :name
54
+ end
@@ -3,7 +3,6 @@
3
3
  require "spec_helper"
4
4
 
5
5
  describe Mongoid::Criteria::Marshalable do
6
-
7
6
  describe "Marshal.dump" do
8
7
 
9
8
  let(:criteria) do
@@ -26,5 +25,23 @@ describe Mongoid::Criteria::Marshalable do
26
25
  it "loads the proper attributes" do
27
26
  expect(Marshal.load(Marshal.dump(criteria))).to eq(criteria)
28
27
  end
28
+
29
+ context "when it receives driver mongo1x" do
30
+ let(:dump) { Marshal.dump(criteria) }
31
+
32
+ before do
33
+ expect_any_instance_of(Mongoid::Criteria).to receive(:marshal_dump).and_wrap_original do |m, *args|
34
+ data = m.call(*args)
35
+ data[1] = :mongo1x
36
+ data
37
+ end
38
+ end
39
+
40
+ it "raises an error" do
41
+ expect do
42
+ Marshal.load(dump)
43
+ end.to raise_error(NotImplementedError, /Mongoid no longer supports marshalling with driver version 1.x./)
44
+ end
45
+ end
29
46
  end
30
47
  end
@@ -33,6 +33,13 @@ describe Array do
33
33
  expect(described_class.evolve("testing")).to eq("testing")
34
34
  end
35
35
  end
36
+
37
+ context "when providing a set" do
38
+
39
+ it "returns an array" do
40
+ expect(described_class.evolve([ 1, 2, 3 ].to_set)).to eq([ 1, 2, 3 ])
41
+ end
42
+ end
36
43
  end
37
44
 
38
45
  describe "#__add__" do
@@ -503,23 +510,4 @@ describe Array do
503
510
  end
504
511
  end
505
512
  end
506
-
507
- describe "#update_values" do
508
-
509
- let(:array) do
510
- [ 1, 2, 3 ]
511
- end
512
-
513
- let(:updated) do
514
- array.update_values(&:to_s)
515
- end
516
-
517
- it "replaces each of the values with the result of the block" do
518
- expect(updated).to eq([ "1", "2", "3" ])
519
- end
520
-
521
- it "returns the same instance of the array" do
522
- expect(updated).to equal(array)
523
- end
524
- end
525
513
  end
@@ -6,55 +6,163 @@ describe BigDecimal do
6
6
 
7
7
  describe ".evolve" do
8
8
 
9
- context "when provided a big decimal" do
9
+ context 'when map_big_decimal_to_decimal128 is false' do
10
+ config_override :map_big_decimal_to_decimal128, false
10
11
 
11
- let(:big_decimal) do
12
- BigDecimal("123456.789")
12
+ context "when provided a big decimal" do
13
+
14
+ let(:big_decimal) do
15
+ BigDecimal("123456.789")
16
+ end
17
+
18
+ it "returns the decimal as a string" do
19
+ expect(described_class.evolve(big_decimal)).to eq(big_decimal.to_s)
20
+ end
13
21
  end
14
22
 
15
- it "returns the decimal as a string" do
16
- expect(described_class.evolve(big_decimal)).to eq(big_decimal.to_s)
23
+ context "when provided a non big decimal" do
24
+
25
+ it "returns the object as a string" do
26
+ expect(described_class.evolve("testing")).to eq("testing")
27
+ end
28
+ end
29
+
30
+ context "when provided an array of big decimals" do
31
+
32
+ let(:bd_one) do
33
+ BigDecimal("123456.789")
34
+ end
35
+
36
+ let(:bd_two) do
37
+ BigDecimal("123333.789")
38
+ end
39
+
40
+ let(:array) do
41
+ [ bd_one, bd_two ]
42
+ end
43
+
44
+ let(:evolved) do
45
+ described_class.evolve(array)
46
+ end
47
+
48
+ it "returns the array as strings" do
49
+ expect(evolved).to eq([ bd_one.to_s, bd_two.to_s ])
50
+ end
51
+
52
+ it "does not evolve in place" do
53
+ expect(evolved).to_not equal(array)
54
+ end
55
+ end
56
+
57
+ context "when provided nil" do
58
+
59
+ it "returns nil" do
60
+ expect(described_class.evolve(nil)).to be_nil
61
+ end
62
+ end
63
+
64
+ context "when provided a numeric" do
65
+ it "returns a string" do
66
+ expect(described_class.evolve(1)).to eq('1')
67
+ end
68
+ end
69
+
70
+ context "when provided a bogus value" do
71
+ it "returns the value" do
72
+ expect(described_class.evolve(:bogus)).to eq(:bogus)
73
+ end
17
74
  end
18
- end
19
75
 
20
- context "when provided a non big decimal" do
76
+ context "when provided a bogus string" do
77
+ it "returns the string" do
78
+ expect(described_class.evolve("bogus")).to eq("bogus")
79
+ end
80
+ end
21
81
 
22
- it "returns the object as a string" do
23
- expect(described_class.evolve("testing")).to eq("testing")
82
+ context "when provided a valid string" do
83
+ it "returns the string" do
84
+ expect(described_class.evolve("1")).to eq("1")
85
+ end
24
86
  end
25
87
  end
26
88
 
27
- context "when provided an array of big decimals" do
89
+ context 'when map_big_decimal_to_decimal128 is true' do
90
+ config_override :map_big_decimal_to_decimal128, true
28
91
 
29
- let(:bd_one) do
30
- BigDecimal("123456.789")
92
+ context "when provided a big decimal" do
93
+
94
+ let(:big_decimal) do
95
+ BigDecimal("123456.789")
96
+ end
97
+
98
+ it "returns the decimal as a BSON::Decimal128 object" do
99
+ expect(described_class.evolve(big_decimal)).to eq(BSON::Decimal128.new(big_decimal))
100
+ end
31
101
  end
32
102
 
33
- let(:bd_two) do
34
- BigDecimal("123333.789")
103
+ context "when provided a non big decimal" do
104
+
105
+ it "returns the object as a string" do
106
+ expect(described_class.evolve("testing")).to eq("testing")
107
+ end
35
108
  end
36
109
 
37
- let(:array) do
38
- [ bd_one, bd_two ]
110
+ context "when provided an array of big decimals" do
111
+
112
+ let(:bd_one) do
113
+ BigDecimal("123456.789")
114
+ end
115
+
116
+ let(:bd_two) do
117
+ BigDecimal("123333.789")
118
+ end
119
+
120
+ let(:array) do
121
+ [ bd_one, bd_two ]
122
+ end
123
+
124
+ let(:evolved) do
125
+ described_class.evolve(array)
126
+ end
127
+
128
+ it "returns the array as BSON::Decimal128s" do
129
+ expect(evolved).to eq([ BSON::Decimal128.new(bd_one), BSON::Decimal128.new(bd_two) ])
130
+ end
131
+
132
+ it "does not evolve in place" do
133
+ expect(evolved).to_not equal(array)
134
+ end
39
135
  end
40
136
 
41
- let(:evolved) do
42
- described_class.evolve(array)
137
+ context "when provided nil" do
138
+
139
+ it "returns nil" do
140
+ expect(described_class.evolve(nil)).to be_nil
141
+ end
43
142
  end
44
143
 
45
- it "returns the array as strings" do
46
- expect(evolved).to eq([ bd_one.to_s, bd_two.to_s ])
144
+ context "when provided a numeric" do
145
+ it "returns a string" do
146
+ expect(described_class.evolve(1)).to eq(BSON::Decimal128.new('1'))
147
+ end
47
148
  end
48
149
 
49
- it "does not evolve in place" do
50
- expect(evolved).to_not equal(array)
150
+ context "when provided a bogus value" do
151
+ it "returns the value" do
152
+ expect(described_class.evolve(:bogus)).to eq(:bogus)
153
+ end
51
154
  end
52
- end
53
155
 
54
- context "when provided nil" do
156
+ context "when provided a bogus string" do
157
+ it "returns the string" do
158
+ expect(described_class.evolve("bogus")).to eq("bogus")
159
+ end
160
+ end
55
161
 
56
- it "returns nil" do
57
- expect(described_class.evolve(nil)).to be_nil
162
+ context "when provided a valid string" do
163
+ it "returns the string" do
164
+ expect(described_class.evolve("1")).to eq("1")
165
+ end
58
166
  end
59
167
  end
60
168
  end
@@ -322,6 +322,17 @@ describe Date do
322
322
  end
323
323
  end
324
324
 
325
+ context "when provided an invalid string" do
326
+
327
+ let(:evolved) do
328
+ described_class.evolve("bogus")
329
+ end
330
+
331
+ it "returns that string" do
332
+ expect(evolved).to eq("bogus")
333
+ end
334
+ end
335
+
325
336
  context "when provided nil" do
326
337
 
327
338
  it "returns nil" do
@@ -413,6 +413,17 @@ describe DateTime do
413
413
  end
414
414
  end
415
415
 
416
+ context "when provided an invalid string" do
417
+
418
+ let(:evolved) do
419
+ described_class.evolve("bogus")
420
+ end
421
+
422
+ it "returns that string" do
423
+ expect(evolved).to eq("bogus")
424
+ end
425
+ end
426
+
416
427
  context "when provided nil" do
417
428
 
418
429
  it "returns nil" do
@@ -311,19 +311,4 @@ describe Hash do
311
311
  end
312
312
  end
313
313
  end
314
-
315
- describe "#update_values" do
316
-
317
- let(:hash) do
318
- { field: "1" }
319
- end
320
-
321
- before do
322
- hash.update_values(&:to_i)
323
- end
324
-
325
- it "updates each value in the hash" do
326
- expect(hash).to eq({ field: 1 })
327
- end
328
- end
329
314
  end
@@ -11,42 +11,108 @@ describe Mongoid::Criteria::Queryable::Extensions::Numeric::ClassMethods do
11
11
  end
12
12
 
13
13
  describe "#__numeric__" do
14
-
15
14
  let(:actual) { host.__numeric__(str) }
16
15
 
17
16
  context "when the string is a whole number" do
18
-
19
17
  let(:str) { '123' }
20
18
 
21
- it "returns the value as integer" do
19
+ it "returns the value as an integer" do
22
20
  expect(actual).to eq(123)
21
+ expect(actual).to be_a Integer
23
22
  end
24
23
  end
25
24
 
26
25
  context "when the string is a floating point number" do
27
-
28
26
  let(:str) { '123.45' }
29
27
 
30
28
  it "returns the value as a float" do
31
29
  expect(actual).to eq(123.45)
30
+ expect(actual).to be_a Float
32
31
  end
33
32
  end
34
33
 
35
- context "when the string is a dot only" do
34
+ context "when the string is a floating point number with a leading dot" do
35
+ let(:str) { '.45' }
36
36
 
37
+ it "returns the value as a float" do
38
+ expect(actual).to eq(0.45)
39
+ expect(actual).to be_a Float
40
+ end
41
+ end
42
+
43
+ context "when the string is a dot only" do
37
44
  let(:str) { '.' }
38
45
 
39
46
  it "returns zero" do
40
47
  expect(actual).to eq(0)
48
+ expect(actual).to be_a Integer
41
49
  end
42
50
  end
43
51
 
44
- context "when the string is a number with fractional part consisting of zeros" do
52
+ context "when the string is a number with a trailing dot" do
53
+ let(:str) { '123.' }
45
54
 
55
+ it "returns zero" do
56
+ expect(actual).to eq(123)
57
+ expect(actual).to be_a Integer
58
+ end
59
+ end
60
+
61
+ context "when the string is a number with fractional part consisting of zeros" do
46
62
  let(:str) { '12.000' }
47
63
 
48
- it "returns the value as integer" do
64
+ it "returns the value as an integer" do
49
65
  expect(actual).to eq(12)
66
+ expect(actual).to be_a Integer
67
+ end
68
+ end
69
+
70
+ context "when the string is a number with leading dot then zeros" do
71
+ let(:str) { '.000' }
72
+
73
+ it "returns the value as an integer" do
74
+ expect(actual).to eq(0)
75
+ expect(actual).to be_a Integer
76
+ end
77
+ end
78
+
79
+ context "when the string is non-numeric" do
80
+ let(:str) { 'foo' }
81
+
82
+ it "raises ArgumentError" do
83
+ expect { actual }.to raise_error(ArgumentError)
84
+ end
85
+ end
86
+
87
+ context "when the string is non-numeric with leading dot" do
88
+ let(:str) { '.foo' }
89
+
90
+ it "raises ArgumentError" do
91
+ expect { actual }.to raise_error(ArgumentError)
92
+ end
93
+ end
94
+
95
+ context "when the string is non-numeric with trailing dot" do
96
+ let(:str) { 'foo.' }
97
+
98
+ it "raises ArgumentError" do
99
+ expect { actual }.to raise_error(ArgumentError)
100
+ end
101
+ end
102
+
103
+ context "when the string is non-numeric with trailing dot and zeroes" do
104
+ let(:str) { 'foo.000' }
105
+
106
+ it "raises ArgumentError" do
107
+ expect { actual }.to raise_error(ArgumentError)
108
+ end
109
+ end
110
+
111
+ context "when the string is empty" do
112
+ let(:str) { '' }
113
+
114
+ it "raises ArgumentError" do
115
+ expect { actual }.to raise_error(ArgumentError)
50
116
  end
51
117
  end
52
118
  end
@@ -72,11 +72,8 @@ describe String do
72
72
  context "when the string without timezone" do
73
73
 
74
74
  context "when using active support's time zone" do
75
-
76
- before do
77
- Mongoid.use_activesupport_time_zone = true
78
- ::Time.zone = "Tokyo"
79
- end
75
+ config_override :use_activesupport_time_zone, true
76
+ time_zone_override "Tokyo"
80
77
 
81
78
  let(:date) do
82
79
  "2010-01-01 5:00:00"
@@ -92,11 +89,8 @@ describe String do
92
89
  end
93
90
 
94
91
  context "when not using active support's time zone" do
95
-
96
- before do
97
- Mongoid.use_activesupport_time_zone = false
98
- ::Time.zone = nil
99
- end
92
+ config_override :use_activesupport_time_zone, false
93
+ time_zone_override nil
100
94
 
101
95
  let(:date) do
102
96
  "2010-01-01 5:00:00"
@@ -253,65 +247,6 @@ describe String do
253
247
  end
254
248
  end
255
249
 
256
- describe "#to_direction" do
257
-
258
- context "when ascending" do
259
-
260
- it "returns 1" do
261
- expect("ascending".to_direction).to eq(1)
262
- end
263
- end
264
-
265
- context "when asc" do
266
-
267
- it "returns 1" do
268
- expect("asc".to_direction).to eq(1)
269
- end
270
- end
271
-
272
- context "when ASCENDING" do
273
-
274
- it "returns 1" do
275
- expect("ASCENDING".to_direction).to eq(1)
276
- end
277
- end
278
-
279
- context "when ASC" do
280
-
281
- it "returns 1" do
282
- expect("ASC".to_direction).to eq(1)
283
- end
284
- end
285
-
286
- context "when descending" do
287
-
288
- it "returns -1" do
289
- expect("descending".to_direction).to eq(-1)
290
- end
291
- end
292
-
293
- context "when desc" do
294
-
295
- it "returns -1" do
296
- expect("desc".to_direction).to eq(-1)
297
- end
298
- end
299
-
300
- context "when DESCENDING" do
301
-
302
- it "returns -1" do
303
- expect("DESCENDING".to_direction).to eq(-1)
304
- end
305
- end
306
-
307
- context "when DESC" do
308
-
309
- it "returns -1" do
310
- expect("DESC".to_direction).to eq(-1)
311
- end
312
- end
313
- end
314
-
315
250
  describe ".evolve" do
316
251
 
317
252
  context "when provided a regex" do
@@ -107,63 +107,4 @@ describe Symbol do
107
107
  end
108
108
  end
109
109
  end
110
-
111
- describe "#to_direction" do
112
-
113
- context "when ascending" do
114
-
115
- it "returns 1" do
116
- expect(:ascending.to_direction).to eq(1)
117
- end
118
- end
119
-
120
- context "when asc" do
121
-
122
- it "returns 1" do
123
- expect(:asc.to_direction).to eq(1)
124
- end
125
- end
126
-
127
- context "when ASCENDING" do
128
-
129
- it "returns 1" do
130
- expect(:ASCENDING.to_direction).to eq(1)
131
- end
132
- end
133
-
134
- context "when ASC" do
135
-
136
- it "returns 1" do
137
- expect(:ASC.to_direction).to eq(1)
138
- end
139
- end
140
-
141
- context "when descending" do
142
-
143
- it "returns -1" do
144
- expect(:descending.to_direction).to eq(-1)
145
- end
146
- end
147
-
148
- context "when desc" do
149
-
150
- it "returns -1" do
151
- expect(:desc.to_direction).to eq(-1)
152
- end
153
- end
154
-
155
- context "when DESCENDING" do
156
-
157
- it "returns -1" do
158
- expect(:DESCENDING.to_direction).to eq(-1)
159
- end
160
- end
161
-
162
- context "when DESC" do
163
-
164
- it "returns -1" do
165
- expect(:DESC.to_direction).to eq(-1)
166
- end
167
- end
168
- end
169
110
  end
@@ -343,6 +343,17 @@ describe Time do
343
343
  end
344
344
  end
345
345
 
346
+ context "when provided an invalid string" do
347
+
348
+ let(:evolved) do
349
+ described_class.evolve("bogus")
350
+ end
351
+
352
+ it "returns that string" do
353
+ expect(evolved).to eq("bogus")
354
+ end
355
+ end
356
+
346
357
  context "when provided nil" do
347
358
 
348
359
  it "returns nil" do
@@ -316,6 +316,17 @@ describe ActiveSupport::TimeWithZone do
316
316
  end
317
317
  end
318
318
 
319
+ context "when provided an invalid string" do
320
+
321
+ let(:evolved) do
322
+ described_class.evolve("bogus")
323
+ end
324
+
325
+ it "returns that string" do
326
+ expect(evolved).to eq("bogus")
327
+ end
328
+ end
329
+
319
330
  context "when provided nil" do
320
331
 
321
332
  it "returns nil" do