mongoid 6.4.2 → 7.0.3

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 (318) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/lib/config/locales/en.yml +17 -0
  4. data/lib/mongoid/association/accessors.rb +339 -0
  5. data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +32 -52
  6. data/lib/mongoid/association/builders.rb +92 -0
  7. data/lib/mongoid/{relations/constraint.rb → association/constrainable.rb} +11 -22
  8. data/lib/mongoid/association/depending.rb +137 -0
  9. data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +11 -11
  10. data/lib/mongoid/{relations → association}/embedded/batchable.rb +19 -19
  11. data/lib/mongoid/association/embedded/cyclic.rb +109 -0
  12. data/lib/mongoid/association/embedded/embedded_in/binding.rb +56 -0
  13. data/lib/mongoid/{relations/builders/embedded/in.rb → association/embedded/embedded_in/buildable.rb} +12 -6
  14. data/lib/mongoid/association/embedded/embedded_in/proxy.rb +121 -0
  15. data/lib/mongoid/association/embedded/embedded_in.rb +154 -0
  16. data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +11 -9
  17. data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +13 -7
  18. data/lib/mongoid/association/embedded/embeds_many/proxy.rb +552 -0
  19. data/lib/mongoid/association/embedded/embeds_many.rb +210 -0
  20. data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +12 -10
  21. data/lib/mongoid/{relations/builders/embedded/one.rb → association/embedded/embeds_one/buildable.rb} +13 -7
  22. data/lib/mongoid/association/embedded/embeds_one/proxy.rb +130 -0
  23. data/lib/mongoid/association/embedded/embeds_one.rb +173 -0
  24. data/lib/mongoid/association/embedded.rb +4 -0
  25. data/lib/mongoid/association/macros.rb +204 -0
  26. data/lib/mongoid/{relations → association}/many.rb +19 -49
  27. data/lib/mongoid/{relations → association}/marshalable.rb +6 -4
  28. data/lib/mongoid/association/nested/many.rb +200 -0
  29. data/lib/mongoid/association/nested/nested_buildable.rb +72 -0
  30. data/lib/mongoid/association/nested/one.rb +127 -0
  31. data/lib/mongoid/association/nested.rb +15 -0
  32. data/lib/mongoid/{relations → association}/one.rb +6 -6
  33. data/lib/mongoid/association/options.rb +152 -0
  34. data/lib/mongoid/{relations → association}/proxy.rb +31 -58
  35. data/lib/mongoid/association/referenced/auto_save.rb +79 -0
  36. data/lib/mongoid/association/referenced/belongs_to/binding.rb +87 -0
  37. data/lib/mongoid/association/referenced/belongs_to/buildable.rb +46 -0
  38. data/lib/mongoid/association/referenced/belongs_to/eager.rb +36 -0
  39. data/lib/mongoid/association/referenced/belongs_to/proxy.rb +136 -0
  40. data/lib/mongoid/association/referenced/belongs_to.rb +248 -0
  41. data/lib/mongoid/association/referenced/counter_cache.rb +163 -0
  42. data/lib/mongoid/association/referenced/eager.rb +162 -0
  43. data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +71 -0
  44. data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +40 -0
  45. data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +52 -0
  46. data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +312 -0
  47. data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +290 -0
  48. data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +6 -5
  49. data/lib/mongoid/association/referenced/has_many/buildable.rb +38 -0
  50. data/lib/mongoid/association/referenced/has_many/eager.rb +43 -0
  51. data/lib/mongoid/association/referenced/has_many/enumerable.rb +510 -0
  52. data/lib/mongoid/association/referenced/has_many/proxy.rb +578 -0
  53. data/lib/mongoid/association/referenced/has_many.rb +275 -0
  54. data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +11 -8
  55. data/lib/mongoid/association/referenced/has_one/buildable.rb +60 -0
  56. data/lib/mongoid/association/referenced/has_one/eager.rb +35 -0
  57. data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +9 -9
  58. data/lib/mongoid/association/referenced/has_one/proxy.rb +113 -0
  59. data/lib/mongoid/association/referenced/has_one.rb +204 -0
  60. data/lib/mongoid/association/referenced/syncable.rb +170 -0
  61. data/lib/mongoid/association/referenced.rb +7 -0
  62. data/lib/mongoid/{relations → association}/reflections.rb +21 -17
  63. data/lib/mongoid/association/relatable.rb +509 -0
  64. data/lib/mongoid/{relations.rb → association.rb} +57 -56
  65. data/lib/mongoid/atomic/paths/embedded/many.rb +1 -1
  66. data/lib/mongoid/atomic/paths/embedded/one.rb +1 -1
  67. data/lib/mongoid/atomic.rb +4 -4
  68. data/lib/mongoid/attributes/dynamic.rb +2 -2
  69. data/lib/mongoid/attributes/nested.rb +22 -11
  70. data/lib/mongoid/attributes/processing.rb +2 -2
  71. data/lib/mongoid/attributes/readonly.rb +2 -4
  72. data/lib/mongoid/attributes.rb +22 -13
  73. data/lib/mongoid/changeable.rb +1 -1
  74. data/lib/mongoid/clients/options.rb +7 -5
  75. data/lib/mongoid/composable.rb +4 -4
  76. data/lib/mongoid/config.rb +1 -0
  77. data/lib/mongoid/contextual/atomic.rb +1 -1
  78. data/lib/mongoid/contextual/geo_near.rb +1 -1
  79. data/lib/mongoid/contextual/memory.rb +21 -3
  80. data/lib/mongoid/contextual/mongo.rb +10 -8
  81. data/lib/mongoid/copyable.rb +7 -6
  82. data/lib/mongoid/criteria/includable.rb +14 -14
  83. data/lib/mongoid/criteria/modifiable.rb +8 -14
  84. data/lib/mongoid/criteria/options.rb +2 -2
  85. data/lib/mongoid/criteria/queryable/extensions/string.rb +1 -1
  86. data/lib/mongoid/criteria/queryable/pipeline.rb +10 -5
  87. data/lib/mongoid/criteria/queryable/selectable.rb +37 -7
  88. data/lib/mongoid/criteria.rb +2 -2
  89. data/lib/mongoid/document.rb +15 -6
  90. data/lib/mongoid/errors/invalid_dependent_strategy.rb +32 -0
  91. data/lib/mongoid/errors/invalid_relation_option.rb +29 -0
  92. data/lib/mongoid/errors/unknown_model.rb +25 -0
  93. data/lib/mongoid/errors.rb +3 -0
  94. data/lib/mongoid/extensions/array.rb +5 -5
  95. data/lib/mongoid/extensions/big_decimal.rb +1 -1
  96. data/lib/mongoid/extensions/hash.rb +5 -2
  97. data/lib/mongoid/extensions/object.rb +4 -4
  98. data/lib/mongoid/extensions/range.rb +1 -0
  99. data/lib/mongoid/extensions/regexp.rb +1 -0
  100. data/lib/mongoid/extensions.rb +0 -4
  101. data/lib/mongoid/factory.rb +13 -3
  102. data/lib/mongoid/fields/foreign_key.rb +5 -5
  103. data/lib/mongoid/fields/standard.rb +2 -14
  104. data/lib/mongoid/fields/validators/macro.rb +1 -1
  105. data/lib/mongoid/fields.rb +3 -3
  106. data/lib/mongoid/indexable.rb +4 -1
  107. data/lib/mongoid/interceptable.rb +5 -5
  108. data/lib/mongoid/matchable/and.rb +1 -1
  109. data/lib/mongoid/matchable/elem_match.rb +9 -3
  110. data/lib/mongoid/matchable/eq.rb +22 -0
  111. data/lib/mongoid/matchable/ne.rb +1 -1
  112. data/lib/mongoid/matchable.rb +3 -1
  113. data/lib/mongoid/persistable/deletable.rb +7 -6
  114. data/lib/mongoid/persistable/incrementable.rb +1 -1
  115. data/lib/mongoid/persistable/logical.rb +1 -1
  116. data/lib/mongoid/persistable/settable.rb +57 -12
  117. data/lib/mongoid/persistable.rb +4 -5
  118. data/lib/mongoid/persistence_context.rb +20 -5
  119. data/lib/mongoid/query_cache.rb +8 -4
  120. data/lib/mongoid/railtie.rb +17 -0
  121. data/lib/mongoid/railties/controller_runtime.rb +86 -0
  122. data/lib/mongoid/scopable.rb +3 -3
  123. data/lib/mongoid/serializable.rb +4 -4
  124. data/lib/mongoid/shardable.rb +1 -1
  125. data/lib/mongoid/threaded.rb +36 -0
  126. data/lib/mongoid/touchable.rb +102 -0
  127. data/lib/mongoid/traversable.rb +3 -3
  128. data/lib/mongoid/validatable/presence.rb +2 -2
  129. data/lib/mongoid/validatable/uniqueness.rb +4 -4
  130. data/lib/mongoid/validatable.rb +8 -8
  131. data/lib/mongoid/version.rb +1 -1
  132. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +3 -0
  133. data/spec/app/models/animal.rb +2 -1
  134. data/spec/app/models/bomb.rb +1 -1
  135. data/spec/app/models/message.rb +1 -1
  136. data/spec/app/models/minim.rb +7 -0
  137. data/spec/app/models/person.rb +5 -2
  138. data/spec/app/models/shipment_address.rb +1 -0
  139. data/spec/app/models/store_as_dup_test3.rb +7 -0
  140. data/spec/app/models/store_as_dup_test4.rb +7 -0
  141. data/spec/app/models/updatable.rb +7 -0
  142. data/spec/app/models/vertex.rb +6 -0
  143. data/spec/app/models/wiki_page.rb +1 -1
  144. data/spec/config/mongoid.yml +13 -3
  145. data/spec/integration/associations/belongs_to_spec.rb +13 -0
  146. data/spec/lite_spec_helper.rb +56 -0
  147. data/spec/mongoid/{relations → association}/accessors_spec.rb +40 -1
  148. data/spec/mongoid/{relations → association}/auto_save_spec.rb +60 -12
  149. data/spec/mongoid/{relations → association}/builders_spec.rb +1 -1
  150. data/spec/mongoid/association/constrainable_spec.rb +115 -0
  151. data/spec/mongoid/{relations → association}/counter_cache_spec.rb +1 -1
  152. data/spec/mongoid/association/depending_spec.rb +866 -0
  153. data/spec/mongoid/{relations → association}/eager_spec.rb +12 -12
  154. data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +1 -1
  155. data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +13 -13
  156. data/spec/mongoid/{relations/builders/embedded/in_spec.rb → association/embedded/embedded_in/buildable_spec.rb} +9 -9
  157. data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +5 -77
  158. data/spec/mongoid/association/embedded/embedded_in_spec.rb +843 -0
  159. data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +3 -3
  160. data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +17 -45
  161. data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +124 -182
  162. data/spec/mongoid/association/embedded/embeds_many_spec.rb +852 -0
  163. data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +4 -4
  164. data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +14 -34
  165. data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +39 -84
  166. data/spec/mongoid/association/embedded/embeds_one_spec.rb +908 -0
  167. data/spec/mongoid/{relations → association}/macros_spec.rb +148 -73
  168. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +16 -19
  169. data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +17 -20
  170. data/spec/mongoid/association/options_spec.rb +1321 -0
  171. data/spec/mongoid/{relations → association}/polymorphic_spec.rb +66 -34
  172. data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +7 -7
  173. data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +46 -79
  174. data/spec/mongoid/{relations/eager/belongs_to_spec.rb → association/referenced/belongs_to/eager_spec.rb} +33 -14
  175. data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +57 -91
  176. data/spec/mongoid/association/referenced/belongs_to_spec.rb +2006 -0
  177. data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +5 -5
  178. data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +121 -0
  179. data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +26 -7
  180. data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +56 -0
  181. data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +107 -98
  182. data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +26 -0
  183. data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1027 -0
  184. data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +5 -5
  185. data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +119 -0
  186. data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +26 -11
  187. data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +122 -1
  188. data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +23 -0
  189. data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +28 -93
  190. data/spec/mongoid/association/referenced/has_many_models.rb +37 -0
  191. data/spec/mongoid/association/referenced/has_many_spec.rb +1225 -0
  192. data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +4 -4
  193. data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +113 -0
  194. data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +10 -10
  195. data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +9 -109
  196. data/spec/mongoid/association/referenced/has_one_models.rb +48 -0
  197. data/spec/mongoid/association/referenced/has_one_spec.rb +1350 -0
  198. data/spec/mongoid/{relations → association}/reflections_spec.rb +1 -12
  199. data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +4 -2
  200. data/spec/mongoid/{relations_spec.rb → association_spec.rb} +1 -1
  201. data/spec/mongoid/atomic/modifiers_spec.rb +2 -2
  202. data/spec/mongoid/atomic_spec.rb +4 -4
  203. data/spec/mongoid/attributes/nested_spec.rb +29 -11
  204. data/spec/mongoid/attributes/readonly_spec.rb +80 -125
  205. data/spec/mongoid/attributes_spec.rb +38 -2
  206. data/spec/mongoid/clients/factory_spec.rb +24 -18
  207. data/spec/mongoid/clients/options_spec.rb +58 -44
  208. data/spec/mongoid/clients/sessions_spec.rb +1 -1
  209. data/spec/mongoid/clients/transactions_spec.rb +369 -0
  210. data/spec/mongoid/clients_spec.rb +68 -8
  211. data/spec/mongoid/config_spec.rb +27 -1
  212. data/spec/mongoid/contextual/memory_spec.rb +19 -0
  213. data/spec/mongoid/contextual/mongo_spec.rb +33 -5
  214. data/spec/mongoid/copyable_spec.rb +90 -6
  215. data/spec/mongoid/copyable_spec_models.rb +17 -0
  216. data/spec/mongoid/criteria/modifiable_spec.rb +183 -60
  217. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -3
  218. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +43 -0
  219. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +12 -0
  220. data/spec/mongoid/criteria/queryable/selectable_spec.rb +42 -3
  221. data/spec/mongoid/criteria/queryable/selector_spec.rb +2 -2
  222. data/spec/mongoid/criteria/scopable_spec.rb +81 -0
  223. data/spec/mongoid/criteria_spec.rb +33 -18
  224. data/spec/mongoid/document_spec.rb +83 -4
  225. data/spec/mongoid/extensions/array_spec.rb +11 -15
  226. data/spec/mongoid/extensions/big_decimal_spec.rb +9 -9
  227. data/spec/mongoid/extensions/hash_spec.rb +18 -1
  228. data/spec/mongoid/extensions/object_spec.rb +7 -11
  229. data/spec/mongoid/extensions/range_spec.rb +7 -0
  230. data/spec/mongoid/extensions/regexp_spec.rb +23 -0
  231. data/spec/mongoid/factory_spec.rb +19 -1
  232. data/spec/mongoid/fields/foreign_key_spec.rb +24 -32
  233. data/spec/mongoid/fields_spec.rb +2 -2
  234. data/spec/mongoid/findable_spec.rb +1 -1
  235. data/spec/mongoid/indexable_spec.rb +18 -8
  236. data/spec/mongoid/interceptable_spec.rb +22 -1
  237. data/spec/mongoid/matchable/elem_match_spec.rb +20 -0
  238. data/spec/mongoid/matchable/eq_spec.rb +48 -0
  239. data/spec/mongoid/persistable/incrementable_spec.rb +6 -6
  240. data/spec/mongoid/persistable/savable_spec.rb +2 -2
  241. data/spec/mongoid/persistable/settable_spec.rb +95 -10
  242. data/spec/mongoid/persistable_spec.rb +21 -6
  243. data/spec/mongoid/persistence_context_spec.rb +1 -1
  244. data/spec/mongoid/query_cache_spec.rb +61 -22
  245. data/spec/mongoid/relations/proxy_spec.rb +124 -124
  246. data/spec/mongoid/scopable_spec.rb +13 -0
  247. data/spec/mongoid/shardable_spec.rb +32 -12
  248. data/spec/mongoid/threaded_spec.rb +68 -0
  249. data/spec/mongoid/{relations/touchable_spec.rb → touchable_spec.rb} +40 -1
  250. data/spec/mongoid/validatable/associated_spec.rb +1 -1
  251. data/spec/mongoid/validatable/presence_spec.rb +7 -6
  252. data/spec/mongoid/validatable_spec.rb +1 -1
  253. data/spec/rails/controller_extension/controller_runtime_spec.rb +110 -0
  254. data/spec/spec_helper.rb +51 -25
  255. data/spec/support/constraints.rb +101 -0
  256. data/spec/support/macros.rb +20 -0
  257. data/spec/support/spec_config.rb +39 -0
  258. metadata +602 -582
  259. checksums.yaml.gz.sig +0 -2
  260. data/lib/mongoid/relations/accessors.rb +0 -267
  261. data/lib/mongoid/relations/auto_save.rb +0 -94
  262. data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
  263. data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
  264. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
  265. data/lib/mongoid/relations/bindings.rb +0 -9
  266. data/lib/mongoid/relations/builder.rb +0 -57
  267. data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
  268. data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
  269. data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
  270. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
  271. data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
  272. data/lib/mongoid/relations/builders.rb +0 -106
  273. data/lib/mongoid/relations/cascading/delete.rb +0 -44
  274. data/lib/mongoid/relations/cascading/destroy.rb +0 -43
  275. data/lib/mongoid/relations/cascading/nullify.rb +0 -35
  276. data/lib/mongoid/relations/cascading/restrict.rb +0 -39
  277. data/lib/mongoid/relations/cascading.rb +0 -56
  278. data/lib/mongoid/relations/conversions.rb +0 -34
  279. data/lib/mongoid/relations/counter_cache.rb +0 -160
  280. data/lib/mongoid/relations/cyclic.rb +0 -107
  281. data/lib/mongoid/relations/eager/base.rb +0 -153
  282. data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
  283. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
  284. data/lib/mongoid/relations/eager/has_many.rb +0 -38
  285. data/lib/mongoid/relations/eager/has_one.rb +0 -30
  286. data/lib/mongoid/relations/embedded/in.rb +0 -241
  287. data/lib/mongoid/relations/embedded/many.rb +0 -683
  288. data/lib/mongoid/relations/embedded/one.rb +0 -235
  289. data/lib/mongoid/relations/macros.rb +0 -367
  290. data/lib/mongoid/relations/metadata.rb +0 -1179
  291. data/lib/mongoid/relations/nested_builder.rb +0 -74
  292. data/lib/mongoid/relations/options.rb +0 -49
  293. data/lib/mongoid/relations/polymorphic.rb +0 -39
  294. data/lib/mongoid/relations/referenced/in.rb +0 -304
  295. data/lib/mongoid/relations/referenced/many.rb +0 -812
  296. data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
  297. data/lib/mongoid/relations/referenced/one.rb +0 -290
  298. data/lib/mongoid/relations/synchronization.rb +0 -169
  299. data/lib/mongoid/relations/targets/enumerable.rb +0 -493
  300. data/lib/mongoid/relations/targets.rb +0 -2
  301. data/lib/mongoid/relations/touchable.rb +0 -97
  302. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
  303. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
  304. data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
  305. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
  306. data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
  307. data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
  308. data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
  309. data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
  310. data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
  311. data/spec/mongoid/relations/cascading_spec.rb +0 -355
  312. data/spec/mongoid/relations/constraint_spec.rb +0 -75
  313. data/spec/mongoid/relations/conversions_spec.rb +0 -128
  314. data/spec/mongoid/relations/metadata_spec.rb +0 -1985
  315. data/spec/mongoid/relations/options_spec.rb +0 -35
  316. data.tar.gz.sig +0 -0
  317. metadata.gz.sig +0 -0
  318. /data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +0 -0
@@ -1,6 +1,6 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Macros do
3
+ describe Mongoid::Association::Macros do
4
4
 
5
5
  class TestClass
6
6
  include Mongoid::Document
@@ -65,7 +65,7 @@ describe Mongoid::Relations::Macros do
65
65
  klass.embedded_in(:person)
66
66
  end
67
67
 
68
- it "adds the metadata to the klass" do
68
+ it "adds the association to the klass" do
69
69
  expect(klass.relations["person"]).to_not be_nil
70
70
  end
71
71
 
@@ -78,8 +78,8 @@ describe Mongoid::Relations::Macros do
78
78
  end
79
79
 
80
80
  it "creates the correct relation" do
81
- expect(klass.relations["person"].relation).to eq(
82
- Mongoid::Relations::Embedded::In
81
+ expect(klass.relations["person"]).to be_a(
82
+ Mongoid::Association::Embedded::EmbeddedIn
83
83
  )
84
84
  end
85
85
 
@@ -87,18 +87,27 @@ describe Mongoid::Relations::Macros do
87
87
  expect(klass._validators).to be_empty
88
88
  end
89
89
 
90
- context "metadata properties" do
90
+ context 'when an invalid option is provided' do
91
91
 
92
- let(:metadata) do
92
+ it 'raises an InvalidRelationOption exception' do
93
+ expect {
94
+ klass.embedded_in(:person, sandwich: true)
95
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
96
+ end
97
+ end
98
+
99
+ context "association properties" do
100
+
101
+ let(:association) do
93
102
  klass.relations["person"]
94
103
  end
95
104
 
96
105
  it "automatically adds the name" do
97
- expect(metadata.name).to eq(:person)
106
+ expect(association.name).to eq(:person)
98
107
  end
99
108
 
100
109
  it "automatically adds the inverse class name" do
101
- expect(metadata.inverse_class_name).to eq("TestClass")
110
+ expect(association.inverse_class_name).to eq("TestClass")
102
111
  end
103
112
  end
104
113
  end
@@ -129,7 +138,7 @@ describe Mongoid::Relations::Macros do
129
138
  klass.embeds_many(:addresses)
130
139
  end
131
140
 
132
- it "adds the metadata to the klass" do
141
+ it "adds the association to the klass" do
133
142
  expect(klass.relations["addresses"]).to_not be_nil
134
143
  end
135
144
 
@@ -142,8 +151,8 @@ describe Mongoid::Relations::Macros do
142
151
  end
143
152
 
144
153
  it "creates the correct relation" do
145
- expect(klass.relations["addresses"].relation).to eq(
146
- Mongoid::Relations::Embedded::Many
154
+ expect(klass.relations["addresses"]).to be_a(
155
+ Mongoid::Association::Embedded::EmbedsMany
147
156
  )
148
157
  end
149
158
 
@@ -153,18 +162,27 @@ describe Mongoid::Relations::Macros do
153
162
  )
154
163
  end
155
164
 
156
- context "metadata properties" do
165
+ context 'when an invalid option is provided' do
157
166
 
158
- let(:metadata) do
167
+ it 'raises an InvalidRelationOption exception' do
168
+ expect {
169
+ klass.embeds_many(:addresses, sandwich: true)
170
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
171
+ end
172
+ end
173
+
174
+ context "association properties" do
175
+
176
+ let(:association) do
159
177
  klass.relations["addresses"]
160
178
  end
161
179
 
162
180
  it "automatically adds the name" do
163
- expect(metadata.name).to eq(:addresses)
181
+ expect(association.name).to eq(:addresses)
164
182
  end
165
183
 
166
184
  it "automatically adds the inverse class name" do
167
- expect(metadata.inverse_class_name).to eq("TestClass")
185
+ expect(association.inverse_class_name).to eq("TestClass")
168
186
  end
169
187
  end
170
188
  end
@@ -175,16 +193,16 @@ describe Mongoid::Relations::Macros do
175
193
  klass.embeds_many(:addresses, order: :number.asc)
176
194
  end
177
195
 
178
- let(:metadata) do
196
+ let(:association) do
179
197
  klass.relations["addresses"]
180
198
  end
181
199
 
182
- it "adds metadata to klass" do
183
- expect(metadata.order).to_not be_nil
200
+ it "adds association to klass" do
201
+ expect(association.order).to_not be_nil
184
202
  end
185
203
 
186
204
  it "returns Mongoid::Criteria::Queryable::Key" do
187
- expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
205
+ expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
188
206
  end
189
207
  end
190
208
 
@@ -225,7 +243,7 @@ describe Mongoid::Relations::Macros do
225
243
  klass.embeds_one(:name)
226
244
  end
227
245
 
228
- it "adds the metadata to the klass" do
246
+ it "adds the association to the klass" do
229
247
  expect(klass.relations["name"]).to_not be_nil
230
248
  end
231
249
 
@@ -246,8 +264,8 @@ describe Mongoid::Relations::Macros do
246
264
  end
247
265
 
248
266
  it "creates the correct relation" do
249
- expect(klass.relations["name"].relation).to eq(
250
- Mongoid::Relations::Embedded::One
267
+ expect(klass.relations["name"]).to be_a(
268
+ Mongoid::Association::Embedded::EmbedsOne
251
269
  )
252
270
  end
253
271
 
@@ -257,18 +275,27 @@ describe Mongoid::Relations::Macros do
257
275
  )
258
276
  end
259
277
 
260
- context "metadata properties" do
278
+ context 'when an invalid option is provided' do
279
+
280
+ it 'raises an InvalidRelationOption exception' do
281
+ expect {
282
+ klass.embeds_one(:name, sandwich: true)
283
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
284
+ end
285
+ end
286
+
287
+ context "association properties" do
261
288
 
262
- let(:metadata) do
289
+ let(:association) do
263
290
  klass.relations["name"]
264
291
  end
265
292
 
266
293
  it "automatically adds the name" do
267
- expect(metadata.name).to eq(:name)
294
+ expect(association.name).to eq(:name)
268
295
  end
269
296
 
270
297
  it "automatically adds the inverse class name" do
271
- expect(metadata.inverse_class_name).to eq("TestClass")
298
+ expect(association.inverse_class_name).to eq("TestClass")
272
299
  end
273
300
  end
274
301
  end
@@ -328,6 +355,15 @@ describe Mongoid::Relations::Macros do
328
355
 
329
356
  context 'when the relation has options' do
330
357
 
358
+ context 'when an invalid option is provided' do
359
+
360
+ it 'raises an InvalidRelationOption exception' do
361
+ expect {
362
+ klass.belongs_to(:person, sandwich: true)
363
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
364
+ end
365
+ end
366
+
331
367
  context 'when the relation has the option :required' do
332
368
 
333
369
  context 'when the relation does not have the :optional option' do
@@ -620,7 +656,7 @@ describe Mongoid::Relations::Macros do
620
656
  klass.belongs_to(:person)
621
657
  end
622
658
 
623
- it "adds the metadata to the klass" do
659
+ it "adds the association to the klass" do
624
660
  expect(klass.relations["person"]).to_not be_nil
625
661
  end
626
662
 
@@ -641,8 +677,8 @@ describe Mongoid::Relations::Macros do
641
677
  end
642
678
 
643
679
  it "creates the correct relation" do
644
- expect(klass.relations["person"].relation).to eq(
645
- Mongoid::Relations::Referenced::In
680
+ expect(klass.relations["person"]).to be_a(
681
+ Mongoid::Association::Referenced::BelongsTo
646
682
  )
647
683
  end
648
684
 
@@ -650,18 +686,18 @@ describe Mongoid::Relations::Macros do
650
686
  expect(klass.allocate).to respond_to(:person_id)
651
687
  end
652
688
 
653
- context "metadata properties" do
689
+ context "association properties" do
654
690
 
655
- let(:metadata) do
691
+ let(:association) do
656
692
  klass.relations["person"]
657
693
  end
658
694
 
659
695
  it "automatically adds the name" do
660
- expect(metadata.name).to eq(:person)
696
+ expect(association.name).to eq(:person)
661
697
  end
662
698
 
663
699
  it "automatically adds the inverse class name" do
664
- expect(metadata.inverse_class_name).to eq("TestClass")
700
+ expect(association.inverse_class_name).to eq("TestClass")
665
701
  end
666
702
  end
667
703
  end
@@ -692,7 +728,7 @@ describe Mongoid::Relations::Macros do
692
728
  klass.has_many(:posts)
693
729
  end
694
730
 
695
- it "adds the metadata to the klass" do
731
+ it "adds the association to the klass" do
696
732
  expect(klass.relations["posts"]).to_not be_nil
697
733
  end
698
734
 
@@ -705,8 +741,8 @@ describe Mongoid::Relations::Macros do
705
741
  end
706
742
 
707
743
  it "creates the correct relation" do
708
- expect(klass.relations["posts"].relation).to eq(
709
- Mongoid::Relations::Referenced::Many
744
+ expect(klass.relations["posts"]).to be_a(
745
+ Mongoid::Association::Referenced::HasMany
710
746
  )
711
747
  end
712
748
 
@@ -716,18 +752,27 @@ describe Mongoid::Relations::Macros do
716
752
  )
717
753
  end
718
754
 
719
- context "metadata properties" do
755
+ context "association properties" do
720
756
 
721
- let(:metadata) do
757
+ let(:association) do
722
758
  klass.relations["posts"]
723
759
  end
724
760
 
725
761
  it "automatically adds the name" do
726
- expect(metadata.name).to eq(:posts)
762
+ expect(association.name).to eq(:posts)
727
763
  end
728
764
 
729
765
  it "automatically adds the inverse class name" do
730
- expect(metadata.inverse_class_name).to eq("TestClass")
766
+ expect(association.inverse_class_name).to eq("TestClass")
767
+ end
768
+ end
769
+
770
+ context 'when an invalid option is provided' do
771
+
772
+ it 'raises an InvalidRelationOption exception' do
773
+ expect {
774
+ klass.has_many(:names, sandwich: true)
775
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
731
776
  end
732
777
  end
733
778
  end
@@ -738,16 +783,16 @@ describe Mongoid::Relations::Macros do
738
783
  klass.has_many(:posts, order: :rating.asc)
739
784
  end
740
785
 
741
- let(:metadata) do
786
+ let(:association) do
742
787
  klass.relations["posts"]
743
788
  end
744
789
 
745
- it "adds metadata to klass" do
746
- expect(metadata.order).to_not be_nil
790
+ it "adds association to klass" do
791
+ expect(association.order).to_not be_nil
747
792
  end
748
793
 
749
794
  it "returns Mongoid::Criteria::Queryable::Key" do
750
- expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
795
+ expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
751
796
  end
752
797
  end
753
798
 
@@ -784,11 +829,20 @@ describe Mongoid::Relations::Macros do
784
829
  end
785
830
  end
786
831
 
832
+ context 'when an invalid option is provided' do
833
+
834
+ it 'raises an InvalidRelationOption exception' do
835
+ expect {
836
+ klass.has_and_belongs_to_many(:fields, sandwich: true)
837
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
838
+ end
839
+ end
840
+
787
841
  before do
788
842
  klass.has_and_belongs_to_many(:preferences)
789
843
  end
790
844
 
791
- it "adds the metadata to the klass" do
845
+ it "adds the association to the klass" do
792
846
  expect(klass.relations["preferences"]).to_not be_nil
793
847
  end
794
848
 
@@ -801,8 +855,8 @@ describe Mongoid::Relations::Macros do
801
855
  end
802
856
 
803
857
  it "creates the correct relation" do
804
- expect(klass.relations["preferences"].relation).to eq(
805
- Mongoid::Relations::Referenced::ManyToMany
858
+ expect(klass.relations["preferences"]).to be_a(
859
+ Mongoid::Association::Referenced::HasAndBelongsToMany
806
860
  )
807
861
  end
808
862
 
@@ -816,31 +870,31 @@ describe Mongoid::Relations::Macros do
816
870
  klass.has_and_belongs_to_many(:preferences, order: :ranking.asc)
817
871
  end
818
872
 
819
- let(:metadata) do
873
+ let(:association) do
820
874
  klass.relations["preferences"]
821
875
  end
822
876
 
823
- it "adds metadata to klass" do
824
- expect(metadata.order).to_not be_nil
877
+ it "adds association to klass" do
878
+ expect(association.order).to_not be_nil
825
879
  end
826
880
 
827
881
  it "returns Mongoid::Criteria::Queryable::Key" do
828
- expect(metadata.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
882
+ expect(association.order).to be_kind_of(Mongoid::Criteria::Queryable::Key)
829
883
  end
830
884
  end
831
885
 
832
- context "metadata properties" do
886
+ context "association properties" do
833
887
 
834
- let(:metadata) do
888
+ let(:association) do
835
889
  klass.relations["preferences"]
836
890
  end
837
891
 
838
892
  it "automatically adds the name" do
839
- expect(metadata.name).to eq(:preferences)
893
+ expect(association.name).to eq(:preferences)
840
894
  end
841
895
 
842
896
  it "automatically adds the inverse class name" do
843
- expect(metadata.inverse_class_name).to eq("TestClass")
897
+ expect(association.inverse_class_name).to eq("TestClass")
844
898
  end
845
899
  end
846
900
  end
@@ -867,11 +921,20 @@ describe Mongoid::Relations::Macros do
867
921
  end
868
922
  end
869
923
 
924
+ context 'when an invalid option is provided' do
925
+
926
+ it 'raises an InvalidRelationOption exception' do
927
+ expect {
928
+ klass.has_one(:game, sandwich: true)
929
+ }.to raise_exception(Mongoid::Errors::InvalidRelationOption)
930
+ end
931
+ end
932
+
870
933
  before do
871
934
  klass.has_one(:game)
872
935
  end
873
936
 
874
- it "adds the metadata to the klass" do
937
+ it "adds the association to the klass" do
875
938
  expect(klass.relations["game"]).to_not be_nil
876
939
  end
877
940
 
@@ -892,8 +955,8 @@ describe Mongoid::Relations::Macros do
892
955
  end
893
956
 
894
957
  it "creates the correct relation" do
895
- expect(klass.relations["game"].relation).to eq(
896
- Mongoid::Relations::Referenced::One
958
+ expect(klass.relations["game"]).to be_a(
959
+ Mongoid::Association::Referenced::HasOne
897
960
  )
898
961
  end
899
962
 
@@ -903,18 +966,18 @@ describe Mongoid::Relations::Macros do
903
966
  )
904
967
  end
905
968
 
906
- context "metadata properties" do
969
+ context "association properties" do
907
970
 
908
- let(:metadata) do
971
+ let(:association) do
909
972
  klass.relations["game"]
910
973
  end
911
974
 
912
975
  it "automatically adds the name" do
913
- expect(metadata.name).to eq(:game)
976
+ expect(association.name).to eq(:game)
914
977
  end
915
978
 
916
979
  it "automatically adds the inverse class name" do
917
- expect(metadata.inverse_class_name).to eq("TestClass")
980
+ expect(association.inverse_class_name).to eq("TestClass")
918
981
  end
919
982
  end
920
983
  end
@@ -937,18 +1000,26 @@ describe Mongoid::Relations::Macros do
937
1000
  klass.embeds_one(:name)
938
1001
  end
939
1002
 
940
- it "returns a hash of relations" do
941
- expect(klass.allocate.relations).to be_a_kind_of(Hash)
1003
+ it "returns a bson document of relations" do
1004
+ expect(klass.allocate.relations).to be_a_kind_of(BSON::Document)
942
1005
  end
943
1006
 
944
1007
  it "has keys that are the relation name" do
945
- expect(klass.allocate.relations.keys.first).to eq("name")
1008
+ expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1009
+ end
1010
+
1011
+ it "has keys that can be accessed by a String" do
1012
+ expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1013
+ end
1014
+
1015
+ it "has keys that can be accessed by a Symbol" do
1016
+ expect(klass.allocate.relations[:name]).to be_a(Mongoid::Association::Embedded::EmbedsOne)
946
1017
  end
947
1018
 
948
- it "has values that are metadata" do
1019
+ it "has values that are association" do
949
1020
  expect(
950
1021
  klass.allocate.relations.values.first
951
- ).to be_a_kind_of(Mongoid::Relations::Metadata)
1022
+ ).to be_a_kind_of(Mongoid::Association::Embedded::EmbedsOne)
952
1023
  end
953
1024
  end
954
1025
 
@@ -958,18 +1029,22 @@ describe Mongoid::Relations::Macros do
958
1029
  klass.embeds_one(:name)
959
1030
  end
960
1031
 
961
- it "returns a hash of relations" do
962
- expect(klass.relations).to be_a_kind_of(Hash)
1032
+ it "has keys that are the relation name" do
1033
+ expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
963
1034
  end
964
1035
 
965
- it "has keys that are the relation name" do
966
- expect(klass.relations.keys.first).to eq("name")
1036
+ it "has keys that can be accessed by a String" do
1037
+ expect(klass.allocate.relations['name']).to be_a(Mongoid::Association::Embedded::EmbedsOne)
1038
+ end
1039
+
1040
+ it "has keys that can be accessed by a Symbol" do
1041
+ expect(klass.allocate.relations[:name]).to be_a(Mongoid::Association::Embedded::EmbedsOne)
967
1042
  end
968
1043
 
969
- it "has values that are metadata" do
1044
+ it "has values that are association" do
970
1045
  expect(
971
1046
  klass.relations.values.first
972
- ).to be_a_kind_of(Mongoid::Relations::Metadata)
1047
+ ).to be_a(Mongoid::Association::Embedded::EmbedsOne)
973
1048
  end
974
1049
  end
975
1050
 
@@ -1,12 +1,9 @@
1
1
  require "spec_helper"
2
2
 
3
- describe Mongoid::Relations::Builders::NestedAttributes::Many do
3
+ describe Mongoid::Association::Nested::Many do
4
4
 
5
- let(:metadata) do
6
- Mongoid::Relations::Metadata.new(
7
- name: :addresses,
8
- relation: Mongoid::Relations::Embedded::Many
9
- )
5
+ let(:association) do
6
+ Person.relations['addresses']
10
7
  end
11
8
 
12
9
  let(:person) do
@@ -18,7 +15,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
18
15
  context "when the option is provided" do
19
16
 
20
17
  let(:builder) do
21
- described_class.new(metadata, {}, allow_destroy: true)
18
+ described_class.new(association, {}, allow_destroy: true)
22
19
  end
23
20
 
24
21
  it "returns the option" do
@@ -29,7 +26,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
29
26
  context "when the option is not provided" do
30
27
 
31
28
  let(:builder) do
32
- described_class.new(metadata, {}, {})
29
+ described_class.new(association, {}, {})
33
30
  end
34
31
 
35
32
  it "returns false" do
@@ -51,7 +48,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
51
48
  context "when attributes are over limit" do
52
49
 
53
50
  let(:builder) do
54
- described_class.new(metadata, attributes, limit: 2)
51
+ described_class.new(association, attributes, limit: 2)
55
52
  end
56
53
 
57
54
  it "raises an error" do
@@ -65,7 +62,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
65
62
 
66
63
  let(:builder) do
67
64
  described_class.new(
68
- metadata,
65
+ association,
69
66
  attributes,
70
67
  reject_if: ->(attrs){ attrs[:city].blank? }
71
68
  )
@@ -85,7 +82,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
85
82
 
86
83
  let(:builder) do
87
84
  described_class.new(
88
- metadata,
85
+ association,
89
86
  attributes,
90
87
  reject_if: :reject_if_city_is_empty
91
88
  )
@@ -112,7 +109,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
112
109
  end
113
110
 
114
111
  let(:builder) do
115
- described_class.new(metadata, attributes)
112
+ described_class.new(association, attributes)
116
113
  end
117
114
 
118
115
  before do
@@ -131,7 +128,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
131
128
  end
132
129
 
133
130
  let(:builder) do
134
- described_class.new(metadata, attributes)
131
+ described_class.new(association, attributes)
135
132
  end
136
133
 
137
134
  before do
@@ -155,7 +152,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
155
152
  end
156
153
 
157
154
  let(:builder) do
158
- described_class.new(metadata, attributes, {})
155
+ described_class.new(association, attributes, {})
159
156
  end
160
157
 
161
158
  it "sorts the attributes" do
@@ -174,7 +171,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
174
171
  context "when the proc matches" do
175
172
 
176
173
  let(:builder) do
177
- described_class.new(metadata, {}, options)
174
+ described_class.new(association, {}, options)
178
175
  end
179
176
 
180
177
  it "returns true" do
@@ -185,7 +182,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
185
182
  context "when the proc does not match" do
186
183
 
187
184
  let(:builder) do
188
- described_class.new(metadata, {}, options)
185
+ described_class.new(association, {}, options)
189
186
  end
190
187
 
191
188
  it "returns false" do
@@ -197,7 +194,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
197
194
  context "when the proc is not provided" do
198
195
 
199
196
  let(:builder) do
200
- described_class.new(metadata, {}, {})
197
+ described_class.new(association, {}, {})
201
198
  end
202
199
 
203
200
  it "returns false" do
@@ -211,7 +208,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
211
208
  context "when the option is provided" do
212
209
 
213
210
  let(:builder) do
214
- described_class.new(metadata, {}, update_only: true)
211
+ described_class.new(association, {}, update_only: true)
215
212
  end
216
213
 
217
214
  it "returns the option" do
@@ -222,7 +219,7 @@ describe Mongoid::Relations::Builders::NestedAttributes::Many do
222
219
  context "when the option is not provided" do
223
220
 
224
221
  let(:builder) do
225
- described_class.new(metadata, {}, {})
222
+ described_class.new(association, {}, {})
226
223
  end
227
224
 
228
225
  it "returns false" do