mongoid_rails4 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (659) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +3213 -0
  3. data/LICENSE +20 -0
  4. data/README.md +62 -0
  5. data/Rakefile +35 -0
  6. data/lib/config/locales/en.yml +448 -0
  7. data/lib/mongoid.rb +104 -0
  8. data/lib/mongoid/atomic.rb +384 -0
  9. data/lib/mongoid/atomic/modifiers.rb +317 -0
  10. data/lib/mongoid/atomic/paths.rb +3 -0
  11. data/lib/mongoid/atomic/paths/embedded.rb +28 -0
  12. data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
  13. data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
  14. data/lib/mongoid/atomic/paths/root.rb +39 -0
  15. data/lib/mongoid/attributes.rb +284 -0
  16. data/lib/mongoid/attributes/dynamic.rb +154 -0
  17. data/lib/mongoid/attributes/nested.rb +82 -0
  18. data/lib/mongoid/attributes/processing.rb +147 -0
  19. data/lib/mongoid/attributes/readonly.rb +56 -0
  20. data/lib/mongoid/changeable.rb +379 -0
  21. data/lib/mongoid/composable.rb +104 -0
  22. data/lib/mongoid/config.rb +263 -0
  23. data/lib/mongoid/config/environment.rb +44 -0
  24. data/lib/mongoid/config/options.rb +74 -0
  25. data/lib/mongoid/config/validators.rb +3 -0
  26. data/lib/mongoid/config/validators/option.rb +25 -0
  27. data/lib/mongoid/config/validators/session.rb +140 -0
  28. data/lib/mongoid/contextual.rb +54 -0
  29. data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
  30. data/lib/mongoid/contextual/aggregable/mongo.rb +147 -0
  31. data/lib/mongoid/contextual/atomic.rb +180 -0
  32. data/lib/mongoid/contextual/command.rb +61 -0
  33. data/lib/mongoid/contextual/eager.rb +158 -0
  34. data/lib/mongoid/contextual/find_and_modify.rb +69 -0
  35. data/lib/mongoid/contextual/geo_near.rb +238 -0
  36. data/lib/mongoid/contextual/map_reduce.rb +324 -0
  37. data/lib/mongoid/contextual/memory.rb +440 -0
  38. data/lib/mongoid/contextual/mongo.rb +676 -0
  39. data/lib/mongoid/contextual/queryable.rb +25 -0
  40. data/lib/mongoid/contextual/text_search.rb +180 -0
  41. data/lib/mongoid/copyable.rb +67 -0
  42. data/lib/mongoid/criteria.rb +562 -0
  43. data/lib/mongoid/criteria/findable.rb +179 -0
  44. data/lib/mongoid/criteria/inspectable.rb +25 -0
  45. data/lib/mongoid/criteria/marshalable.rb +50 -0
  46. data/lib/mongoid/criteria/modifiable.rb +189 -0
  47. data/lib/mongoid/criteria/scopable.rb +158 -0
  48. data/lib/mongoid/document.rb +361 -0
  49. data/lib/mongoid/equality.rb +66 -0
  50. data/lib/mongoid/errors.rb +40 -0
  51. data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
  52. data/lib/mongoid/errors/callback.rb +25 -0
  53. data/lib/mongoid/errors/delete_restriction.rb +29 -0
  54. data/lib/mongoid/errors/document_not_found.rb +111 -0
  55. data/lib/mongoid/errors/eager_load.rb +22 -0
  56. data/lib/mongoid/errors/invalid_collection.rb +18 -0
  57. data/lib/mongoid/errors/invalid_config_option.rb +27 -0
  58. data/lib/mongoid/errors/invalid_field.rb +64 -0
  59. data/lib/mongoid/errors/invalid_field_option.rb +35 -0
  60. data/lib/mongoid/errors/invalid_find.rb +19 -0
  61. data/lib/mongoid/errors/invalid_includes.rb +32 -0
  62. data/lib/mongoid/errors/invalid_index.rb +28 -0
  63. data/lib/mongoid/errors/invalid_options.rb +28 -0
  64. data/lib/mongoid/errors/invalid_path.rb +21 -0
  65. data/lib/mongoid/errors/invalid_scope.rb +24 -0
  66. data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
  67. data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
  68. data/lib/mongoid/errors/invalid_time.rb +22 -0
  69. data/lib/mongoid/errors/inverse_not_found.rb +29 -0
  70. data/lib/mongoid/errors/mixed_relations.rb +32 -0
  71. data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
  72. data/lib/mongoid/errors/mongoid_error.rb +92 -0
  73. data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
  74. data/lib/mongoid/errors/no_default_session.rb +23 -0
  75. data/lib/mongoid/errors/no_environment.rb +19 -0
  76. data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
  77. data/lib/mongoid/errors/no_metadata.rb +21 -0
  78. data/lib/mongoid/errors/no_parent.rb +24 -0
  79. data/lib/mongoid/errors/no_session_config.rb +22 -0
  80. data/lib/mongoid/errors/no_session_database.rb +27 -0
  81. data/lib/mongoid/errors/no_session_hosts.rb +27 -0
  82. data/lib/mongoid/errors/no_sessions_config.rb +20 -0
  83. data/lib/mongoid/errors/readonly_attribute.rb +25 -0
  84. data/lib/mongoid/errors/scope_overwrite.rb +21 -0
  85. data/lib/mongoid/errors/too_many_nested_attribute_records.rb +20 -0
  86. data/lib/mongoid/errors/unknown_attribute.rb +25 -0
  87. data/lib/mongoid/errors/unsaved_document.rb +19 -0
  88. data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
  89. data/lib/mongoid/errors/validations.rb +29 -0
  90. data/lib/mongoid/evolvable.rb +19 -0
  91. data/lib/mongoid/extensions.rb +35 -0
  92. data/lib/mongoid/extensions/array.rb +180 -0
  93. data/lib/mongoid/extensions/big_decimal.rb +69 -0
  94. data/lib/mongoid/extensions/boolean.rb +21 -0
  95. data/lib/mongoid/extensions/date.rb +77 -0
  96. data/lib/mongoid/extensions/date_time.rb +73 -0
  97. data/lib/mongoid/extensions/false_class.rb +38 -0
  98. data/lib/mongoid/extensions/float.rb +56 -0
  99. data/lib/mongoid/extensions/hash.rb +209 -0
  100. data/lib/mongoid/extensions/integer.rb +67 -0
  101. data/lib/mongoid/extensions/module.rb +28 -0
  102. data/lib/mongoid/extensions/nil_class.rb +33 -0
  103. data/lib/mongoid/extensions/object.rb +274 -0
  104. data/lib/mongoid/extensions/object_id.rb +54 -0
  105. data/lib/mongoid/extensions/range.rb +79 -0
  106. data/lib/mongoid/extensions/regexp.rb +27 -0
  107. data/lib/mongoid/extensions/set.rb +55 -0
  108. data/lib/mongoid/extensions/string.rb +199 -0
  109. data/lib/mongoid/extensions/symbol.rb +54 -0
  110. data/lib/mongoid/extensions/time.rb +88 -0
  111. data/lib/mongoid/extensions/time_with_zone.rb +56 -0
  112. data/lib/mongoid/extensions/true_class.rb +38 -0
  113. data/lib/mongoid/factory.rb +46 -0
  114. data/lib/mongoid/fields.rb +542 -0
  115. data/lib/mongoid/fields/foreign_key.rb +174 -0
  116. data/lib/mongoid/fields/localized.rb +73 -0
  117. data/lib/mongoid/fields/standard.rb +273 -0
  118. data/lib/mongoid/fields/validators.rb +2 -0
  119. data/lib/mongoid/fields/validators/macro.rb +92 -0
  120. data/lib/mongoid/findable.rb +133 -0
  121. data/lib/mongoid/identity_map.rb +163 -0
  122. data/lib/mongoid/indexable.rb +147 -0
  123. data/lib/mongoid/indexable/specification.rb +115 -0
  124. data/lib/mongoid/indexable/validators/options.rb +103 -0
  125. data/lib/mongoid/inspectable.rb +59 -0
  126. data/lib/mongoid/interceptable.rb +265 -0
  127. data/lib/mongoid/loggable.rb +69 -0
  128. data/lib/mongoid/matchable.rb +152 -0
  129. data/lib/mongoid/matchable/all.rb +27 -0
  130. data/lib/mongoid/matchable/and.rb +30 -0
  131. data/lib/mongoid/matchable/default.rb +72 -0
  132. data/lib/mongoid/matchable/exists.rb +23 -0
  133. data/lib/mongoid/matchable/gt.rb +21 -0
  134. data/lib/mongoid/matchable/gte.rb +21 -0
  135. data/lib/mongoid/matchable/in.rb +24 -0
  136. data/lib/mongoid/matchable/lt.rb +21 -0
  137. data/lib/mongoid/matchable/lte.rb +21 -0
  138. data/lib/mongoid/matchable/ne.rb +21 -0
  139. data/lib/mongoid/matchable/nin.rb +21 -0
  140. data/lib/mongoid/matchable/or.rb +33 -0
  141. data/lib/mongoid/matchable/size.rb +21 -0
  142. data/lib/mongoid/persistable.rb +207 -0
  143. data/lib/mongoid/persistable/creatable.rb +189 -0
  144. data/lib/mongoid/persistable/deletable.rb +149 -0
  145. data/lib/mongoid/persistable/destroyable.rb +55 -0
  146. data/lib/mongoid/persistable/incrementable.rb +36 -0
  147. data/lib/mongoid/persistable/logical.rb +38 -0
  148. data/lib/mongoid/persistable/poppable.rb +39 -0
  149. data/lib/mongoid/persistable/pullable.rb +55 -0
  150. data/lib/mongoid/persistable/pushable.rb +62 -0
  151. data/lib/mongoid/persistable/renamable.rb +35 -0
  152. data/lib/mongoid/persistable/savable.rb +52 -0
  153. data/lib/mongoid/persistable/settable.rb +33 -0
  154. data/lib/mongoid/persistable/unsettable.rb +36 -0
  155. data/lib/mongoid/persistable/updatable.rb +151 -0
  156. data/lib/mongoid/persistable/upsertable.rb +55 -0
  157. data/lib/mongoid/positional.rb +71 -0
  158. data/lib/mongoid/railtie.rb +156 -0
  159. data/lib/mongoid/railties/database.rake +97 -0
  160. data/lib/mongoid/railties/document.rb +12 -0
  161. data/lib/mongoid/relations.rb +162 -0
  162. data/lib/mongoid/relations/accessors.rb +299 -0
  163. data/lib/mongoid/relations/auto_save.rb +106 -0
  164. data/lib/mongoid/relations/binding.rb +218 -0
  165. data/lib/mongoid/relations/bindings.rb +9 -0
  166. data/lib/mongoid/relations/bindings/embedded/in.rb +63 -0
  167. data/lib/mongoid/relations/bindings/embedded/many.rb +50 -0
  168. data/lib/mongoid/relations/bindings/embedded/one.rb +55 -0
  169. data/lib/mongoid/relations/bindings/referenced/in.rb +65 -0
  170. data/lib/mongoid/relations/bindings/referenced/many.rb +42 -0
  171. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +67 -0
  172. data/lib/mongoid/relations/bindings/referenced/one.rb +44 -0
  173. data/lib/mongoid/relations/builder.rb +57 -0
  174. data/lib/mongoid/relations/builders.rb +104 -0
  175. data/lib/mongoid/relations/builders/embedded/in.rb +29 -0
  176. data/lib/mongoid/relations/builders/embedded/many.rb +36 -0
  177. data/lib/mongoid/relations/builders/embedded/one.rb +30 -0
  178. data/lib/mongoid/relations/builders/nested_attributes/many.rb +174 -0
  179. data/lib/mongoid/relations/builders/nested_attributes/one.rb +126 -0
  180. data/lib/mongoid/relations/builders/referenced/in.rb +26 -0
  181. data/lib/mongoid/relations/builders/referenced/many.rb +27 -0
  182. data/lib/mongoid/relations/builders/referenced/many_to_many.rb +40 -0
  183. data/lib/mongoid/relations/builders/referenced/one.rb +26 -0
  184. data/lib/mongoid/relations/cascading.rb +56 -0
  185. data/lib/mongoid/relations/cascading/delete.rb +44 -0
  186. data/lib/mongoid/relations/cascading/destroy.rb +43 -0
  187. data/lib/mongoid/relations/cascading/nullify.rb +35 -0
  188. data/lib/mongoid/relations/cascading/restrict.rb +39 -0
  189. data/lib/mongoid/relations/constraint.rb +49 -0
  190. data/lib/mongoid/relations/conversions.rb +34 -0
  191. data/lib/mongoid/relations/counter_cache.rb +105 -0
  192. data/lib/mongoid/relations/cyclic.rb +107 -0
  193. data/lib/mongoid/relations/embedded/batchable.rb +355 -0
  194. data/lib/mongoid/relations/embedded/in.rb +231 -0
  195. data/lib/mongoid/relations/embedded/many.rb +639 -0
  196. data/lib/mongoid/relations/embedded/one.rb +223 -0
  197. data/lib/mongoid/relations/macros.rb +356 -0
  198. data/lib/mongoid/relations/many.rb +208 -0
  199. data/lib/mongoid/relations/marshalable.rb +32 -0
  200. data/lib/mongoid/relations/metadata.rb +1174 -0
  201. data/lib/mongoid/relations/nested_builder.rb +74 -0
  202. data/lib/mongoid/relations/one.rb +48 -0
  203. data/lib/mongoid/relations/options.rb +48 -0
  204. data/lib/mongoid/relations/polymorphic.rb +39 -0
  205. data/lib/mongoid/relations/proxy.rb +270 -0
  206. data/lib/mongoid/relations/referenced/in.rb +297 -0
  207. data/lib/mongoid/relations/referenced/many.rb +787 -0
  208. data/lib/mongoid/relations/referenced/many_to_many.rb +486 -0
  209. data/lib/mongoid/relations/referenced/one.rb +290 -0
  210. data/lib/mongoid/relations/reflections.rb +62 -0
  211. data/lib/mongoid/relations/synchronization.rb +169 -0
  212. data/lib/mongoid/relations/targets.rb +2 -0
  213. data/lib/mongoid/relations/targets/enumerable.rb +473 -0
  214. data/lib/mongoid/relations/touchable.rb +94 -0
  215. data/lib/mongoid/reloadable.rb +95 -0
  216. data/lib/mongoid/scopable.rb +379 -0
  217. data/lib/mongoid/selectable.rb +59 -0
  218. data/lib/mongoid/serializable.rb +170 -0
  219. data/lib/mongoid/sessions.rb +330 -0
  220. data/lib/mongoid/sessions/factory.rb +129 -0
  221. data/lib/mongoid/sessions/mongo_uri.rb +93 -0
  222. data/lib/mongoid/sessions/options.rb +141 -0
  223. data/lib/mongoid/sessions/validators.rb +2 -0
  224. data/lib/mongoid/sessions/validators/storage.rb +49 -0
  225. data/lib/mongoid/shardable.rb +65 -0
  226. data/lib/mongoid/state.rb +97 -0
  227. data/lib/mongoid/threaded.rb +383 -0
  228. data/lib/mongoid/threaded/lifecycle.rb +164 -0
  229. data/lib/mongoid/timestamps.rb +15 -0
  230. data/lib/mongoid/timestamps/created.rb +30 -0
  231. data/lib/mongoid/timestamps/created/short.rb +19 -0
  232. data/lib/mongoid/timestamps/short.rb +10 -0
  233. data/lib/mongoid/timestamps/updated.rb +39 -0
  234. data/lib/mongoid/timestamps/updated/short.rb +19 -0
  235. data/lib/mongoid/traversable.rb +192 -0
  236. data/lib/mongoid/unit_of_work.rb +61 -0
  237. data/lib/mongoid/validatable.rb +180 -0
  238. data/lib/mongoid/validatable/associated.rb +48 -0
  239. data/lib/mongoid/validatable/format.rb +20 -0
  240. data/lib/mongoid/validatable/length.rb +20 -0
  241. data/lib/mongoid/validatable/localizable.rb +30 -0
  242. data/lib/mongoid/validatable/macros.rb +94 -0
  243. data/lib/mongoid/validatable/presence.rb +86 -0
  244. data/lib/mongoid/validatable/queryable.rb +30 -0
  245. data/lib/mongoid/validatable/uniqueness.rb +330 -0
  246. data/lib/mongoid/version.rb +4 -0
  247. data/lib/rack/mongoid.rb +2 -0
  248. data/lib/rack/mongoid/middleware/identity_map.rb +39 -0
  249. data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
  250. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +76 -0
  251. data/lib/rails/generators/mongoid/model/model_generator.rb +25 -0
  252. data/lib/rails/generators/mongoid/model/templates/model.rb.tt +19 -0
  253. data/lib/rails/generators/mongoid/observer/observer_generator.rb +17 -0
  254. data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +4 -0
  255. data/lib/rails/generators/mongoid_generator.rb +65 -0
  256. data/lib/rails/mongoid.rb +180 -0
  257. data/lib/support/ruby_version.rb +26 -0
  258. data/spec/app/models/account.rb +28 -0
  259. data/spec/app/models/acolyte.rb +17 -0
  260. data/spec/app/models/actor.rb +18 -0
  261. data/spec/app/models/actress.rb +2 -0
  262. data/spec/app/models/address.rb +77 -0
  263. data/spec/app/models/address_component.rb +5 -0
  264. data/spec/app/models/address_number.rb +6 -0
  265. data/spec/app/models/agency.rb +5 -0
  266. data/spec/app/models/agent.rb +12 -0
  267. data/spec/app/models/album.rb +14 -0
  268. data/spec/app/models/alert.rb +5 -0
  269. data/spec/app/models/animal.rb +25 -0
  270. data/spec/app/models/answer.rb +4 -0
  271. data/spec/app/models/appointment.rb +7 -0
  272. data/spec/app/models/article.rb +10 -0
  273. data/spec/app/models/artist.rb +66 -0
  274. data/spec/app/models/artwork.rb +4 -0
  275. data/spec/app/models/audio.rb +5 -0
  276. data/spec/app/models/augmentation.rb +11 -0
  277. data/spec/app/models/author.rb +4 -0
  278. data/spec/app/models/band.rb +26 -0
  279. data/spec/app/models/bar.rb +10 -0
  280. data/spec/app/models/basic.rb +6 -0
  281. data/spec/app/models/bed.rb +1 -0
  282. data/spec/app/models/big_palette.rb +2 -0
  283. data/spec/app/models/birthday.rb +13 -0
  284. data/spec/app/models/book.rb +13 -0
  285. data/spec/app/models/breed.rb +4 -0
  286. data/spec/app/models/browser.rb +6 -0
  287. data/spec/app/models/building.rb +5 -0
  288. data/spec/app/models/building_address.rb +5 -0
  289. data/spec/app/models/bus.rb +7 -0
  290. data/spec/app/models/business.rb +5 -0
  291. data/spec/app/models/callback_recorder.rb +25 -0
  292. data/spec/app/models/callback_test.rb +9 -0
  293. data/spec/app/models/canvas.rb +25 -0
  294. data/spec/app/models/car.rb +1 -0
  295. data/spec/app/models/cat.rb +8 -0
  296. data/spec/app/models/category.rb +8 -0
  297. data/spec/app/models/child.rb +4 -0
  298. data/spec/app/models/child_doc.rb +22 -0
  299. data/spec/app/models/church.rb +4 -0
  300. data/spec/app/models/circle.rb +3 -0
  301. data/spec/app/models/circuit.rb +4 -0
  302. data/spec/app/models/circus.rb +7 -0
  303. data/spec/app/models/code.rb +5 -0
  304. data/spec/app/models/comment.rb +16 -0
  305. data/spec/app/models/contractor.rb +5 -0
  306. data/spec/app/models/cookie.rb +6 -0
  307. data/spec/app/models/country_code.rb +8 -0
  308. data/spec/app/models/definition.rb +7 -0
  309. data/spec/app/models/description.rb +11 -0
  310. data/spec/app/models/dictionary.rb +10 -0
  311. data/spec/app/models/division.rb +10 -0
  312. data/spec/app/models/doctor.rb +12 -0
  313. data/spec/app/models/dog.rb +7 -0
  314. data/spec/app/models/dokument.rb +5 -0
  315. data/spec/app/models/dragon.rb +4 -0
  316. data/spec/app/models/driver.rb +7 -0
  317. data/spec/app/models/drug.rb +6 -0
  318. data/spec/app/models/dungeon.rb +4 -0
  319. data/spec/app/models/email.rb +6 -0
  320. data/spec/app/models/employer.rb +5 -0
  321. data/spec/app/models/entry.rb +6 -0
  322. data/spec/app/models/eraser.rb +1 -0
  323. data/spec/app/models/event.rb +22 -0
  324. data/spec/app/models/exhibition.rb +4 -0
  325. data/spec/app/models/exhibitor.rb +5 -0
  326. data/spec/app/models/eye.rb +9 -0
  327. data/spec/app/models/eye_bowl.rb +9 -0
  328. data/spec/app/models/face.rb +8 -0
  329. data/spec/app/models/favorite.rb +6 -0
  330. data/spec/app/models/filesystem.rb +5 -0
  331. data/spec/app/models/fire_hydrant.rb +6 -0
  332. data/spec/app/models/firefox.rb +4 -0
  333. data/spec/app/models/fish.rb +7 -0
  334. data/spec/app/models/folder.rb +7 -0
  335. data/spec/app/models/folder_item.rb +9 -0
  336. data/spec/app/models/fruits.rb +28 -0
  337. data/spec/app/models/game.rb +19 -0
  338. data/spec/app/models/ghost.rb +7 -0
  339. data/spec/app/models/home.rb +4 -0
  340. data/spec/app/models/house.rb +6 -0
  341. data/spec/app/models/html_writer.rb +3 -0
  342. data/spec/app/models/image.rb +22 -0
  343. data/spec/app/models/implant.rb +16 -0
  344. data/spec/app/models/item.rb +8 -0
  345. data/spec/app/models/jar.rb +7 -0
  346. data/spec/app/models/label.rb +40 -0
  347. data/spec/app/models/language.rb +5 -0
  348. data/spec/app/models/lat_lng.rb +15 -0
  349. data/spec/app/models/league.rb +11 -0
  350. data/spec/app/models/learner.rb +2 -0
  351. data/spec/app/models/line_item.rb +6 -0
  352. data/spec/app/models/location.rb +8 -0
  353. data/spec/app/models/login.rb +8 -0
  354. data/spec/app/models/manufacturer.rb +7 -0
  355. data/spec/app/models/meat.rb +4 -0
  356. data/spec/app/models/membership.rb +4 -0
  357. data/spec/app/models/mixed_drink.rb +4 -0
  358. data/spec/app/models/movie.rb +13 -0
  359. data/spec/app/models/my_hash.rb +2 -0
  360. data/spec/app/models/name.rb +23 -0
  361. data/spec/app/models/node.rb +5 -0
  362. data/spec/app/models/note.rb +12 -0
  363. data/spec/app/models/ordered_post.rb +6 -0
  364. data/spec/app/models/ordered_preference.rb +6 -0
  365. data/spec/app/models/oscar.rb +15 -0
  366. data/spec/app/models/override.rb +16 -0
  367. data/spec/app/models/ownable.rb +6 -0
  368. data/spec/app/models/owner.rb +6 -0
  369. data/spec/app/models/pack.rb +3 -0
  370. data/spec/app/models/page.rb +5 -0
  371. data/spec/app/models/page_question.rb +4 -0
  372. data/spec/app/models/palette.rb +7 -0
  373. data/spec/app/models/parent.rb +5 -0
  374. data/spec/app/models/parent_doc.rb +6 -0
  375. data/spec/app/models/passport.rb +5 -0
  376. data/spec/app/models/patient.rb +9 -0
  377. data/spec/app/models/pdf_writer.rb +3 -0
  378. data/spec/app/models/pencil.rb +1 -0
  379. data/spec/app/models/person.rb +205 -0
  380. data/spec/app/models/pet.rb +23 -0
  381. data/spec/app/models/pet_owner.rb +6 -0
  382. data/spec/app/models/phone.rb +11 -0
  383. data/spec/app/models/pizza.rb +7 -0
  384. data/spec/app/models/player.rb +35 -0
  385. data/spec/app/models/post.rb +44 -0
  386. data/spec/app/models/powerup.rb +11 -0
  387. data/spec/app/models/preference.rb +9 -0
  388. data/spec/app/models/princess.rb +8 -0
  389. data/spec/app/models/product.rb +15 -0
  390. data/spec/app/models/profile.rb +5 -0
  391. data/spec/app/models/pronunciation.rb +5 -0
  392. data/spec/app/models/purchase.rb +4 -0
  393. data/spec/app/models/question.rb +8 -0
  394. data/spec/app/models/quiz.rb +7 -0
  395. data/spec/app/models/rating.rb +8 -0
  396. data/spec/app/models/record.rb +46 -0
  397. data/spec/app/models/registry.rb +4 -0
  398. data/spec/app/models/role.rb +7 -0
  399. data/spec/app/models/root_category.rb +4 -0
  400. data/spec/app/models/sandwich.rb +4 -0
  401. data/spec/app/models/scheduler.rb +7 -0
  402. data/spec/app/models/seo.rb +7 -0
  403. data/spec/app/models/series.rb +4 -0
  404. data/spec/app/models/server.rb +13 -0
  405. data/spec/app/models/service.rb +22 -0
  406. data/spec/app/models/shape.rb +12 -0
  407. data/spec/app/models/shelf.rb +5 -0
  408. data/spec/app/models/shipping_container.rb +5 -0
  409. data/spec/app/models/shipping_pack.rb +3 -0
  410. data/spec/app/models/shop.rb +6 -0
  411. data/spec/app/models/short_agent.rb +4 -0
  412. data/spec/app/models/short_quiz.rb +5 -0
  413. data/spec/app/models/slave.rb +6 -0
  414. data/spec/app/models/song.rb +8 -0
  415. data/spec/app/models/sound.rb +5 -0
  416. data/spec/app/models/square.rb +4 -0
  417. data/spec/app/models/strategy.rb +3 -0
  418. data/spec/app/models/sub_item.rb +3 -0
  419. data/spec/app/models/subscription.rb +4 -0
  420. data/spec/app/models/survey.rb +5 -0
  421. data/spec/app/models/symptom.rb +6 -0
  422. data/spec/app/models/tag.rb +8 -0
  423. data/spec/app/models/target.rb +5 -0
  424. data/spec/app/models/template.rb +5 -0
  425. data/spec/app/models/thing.rb +9 -0
  426. data/spec/app/models/title.rb +3 -0
  427. data/spec/app/models/tool.rb +8 -0
  428. data/spec/app/models/topping.rb +5 -0
  429. data/spec/app/models/track.rb +38 -0
  430. data/spec/app/models/translation.rb +5 -0
  431. data/spec/app/models/tree.rb +9 -0
  432. data/spec/app/models/truck.rb +3 -0
  433. data/spec/app/models/user.rb +21 -0
  434. data/spec/app/models/user_account.rb +10 -0
  435. data/spec/app/models/validation_callback.rb +10 -0
  436. data/spec/app/models/vehicle.rb +11 -0
  437. data/spec/app/models/version.rb +5 -0
  438. data/spec/app/models/vet_visit.rb +5 -0
  439. data/spec/app/models/video.rb +13 -0
  440. data/spec/app/models/weapon.rb +11 -0
  441. data/spec/app/models/wiki_page.rb +14 -0
  442. data/spec/app/models/word.rb +15 -0
  443. data/spec/app/models/word_origin.rb +11 -0
  444. data/spec/app/models/writer.rb +11 -0
  445. data/spec/config/mongoid.yml +38 -0
  446. data/spec/mongoid/atomic/modifiers_spec.rb +456 -0
  447. data/spec/mongoid/atomic/paths/embedded/many_spec.rb +118 -0
  448. data/spec/mongoid/atomic/paths/embedded/one_spec.rb +110 -0
  449. data/spec/mongoid/atomic/paths/root_spec.rb +48 -0
  450. data/spec/mongoid/atomic/paths_spec.rb +270 -0
  451. data/spec/mongoid/atomic_spec.rb +365 -0
  452. data/spec/mongoid/attributes/nested_spec.rb +4832 -0
  453. data/spec/mongoid/attributes/readonly_spec.rb +169 -0
  454. data/spec/mongoid/attributes_spec.rb +1412 -0
  455. data/spec/mongoid/changeable_spec.rb +1507 -0
  456. data/spec/mongoid/composable_spec.rb +24 -0
  457. data/spec/mongoid/config/environment_spec.rb +83 -0
  458. data/spec/mongoid/config/options_spec.rb +56 -0
  459. data/spec/mongoid/config_spec.rb +318 -0
  460. data/spec/mongoid/contextual/aggregable/memory_spec.rb +293 -0
  461. data/spec/mongoid/contextual/aggregable/mongo_spec.rb +455 -0
  462. data/spec/mongoid/contextual/atomic_spec.rb +529 -0
  463. data/spec/mongoid/contextual/find_and_modify_spec.rb +220 -0
  464. data/spec/mongoid/contextual/geo_near_spec.rb +405 -0
  465. data/spec/mongoid/contextual/map_reduce_spec.rb +464 -0
  466. data/spec/mongoid/contextual/memory_spec.rb +1236 -0
  467. data/spec/mongoid/contextual/mongo_spec.rb +1843 -0
  468. data/spec/mongoid/contextual/text_search_spec.rb +207 -0
  469. data/spec/mongoid/copyable_spec.rb +393 -0
  470. data/spec/mongoid/criteria/findable_spec.rb +1189 -0
  471. data/spec/mongoid/criteria/inspectable_spec.rb +27 -0
  472. data/spec/mongoid/criteria/marshalable_spec.rb +28 -0
  473. data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
  474. data/spec/mongoid/criteria/scopable_spec.rb +391 -0
  475. data/spec/mongoid/criteria_spec.rb +3821 -0
  476. data/spec/mongoid/document_spec.rb +1205 -0
  477. data/spec/mongoid/equality_spec.rb +241 -0
  478. data/spec/mongoid/errors/ambiguous_relationship_spec.rb +29 -0
  479. data/spec/mongoid/errors/callback_spec.rb +29 -0
  480. data/spec/mongoid/errors/delete_restriction_spec.rb +29 -0
  481. data/spec/mongoid/errors/document_not_found_spec.rb +104 -0
  482. data/spec/mongoid/errors/eager_load_spec.rb +29 -0
  483. data/spec/mongoid/errors/invalid_collection_spec.rb +36 -0
  484. data/spec/mongoid/errors/invalid_config_option_spec.rb +29 -0
  485. data/spec/mongoid/errors/invalid_field_option_spec.rb +29 -0
  486. data/spec/mongoid/errors/invalid_field_spec.rb +37 -0
  487. data/spec/mongoid/errors/invalid_find_spec.rb +29 -0
  488. data/spec/mongoid/errors/invalid_includes_spec.rb +40 -0
  489. data/spec/mongoid/errors/invalid_index_spec.rb +29 -0
  490. data/spec/mongoid/errors/invalid_options_spec.rb +29 -0
  491. data/spec/mongoid/errors/invalid_path_spec.rb +23 -0
  492. data/spec/mongoid/errors/invalid_scope_spec.rb +29 -0
  493. data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +17 -0
  494. data/spec/mongoid/errors/invalid_storage_options_spec.rb +29 -0
  495. data/spec/mongoid/errors/invalid_time_spec.rb +29 -0
  496. data/spec/mongoid/errors/inverse_not_found_spec.rb +29 -0
  497. data/spec/mongoid/errors/mixed_relations_spec.rb +29 -0
  498. data/spec/mongoid/errors/mixed_session_configuration_spec.rb +29 -0
  499. data/spec/mongoid/errors/mongoid_error_spec.rb +48 -0
  500. data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +29 -0
  501. data/spec/mongoid/errors/no_environment_spec.rb +29 -0
  502. data/spec/mongoid/errors/no_map_reduce_output_spec.rb +29 -0
  503. data/spec/mongoid/errors/no_metadata_spec.rb +23 -0
  504. data/spec/mongoid/errors/no_parent_spec.rb +29 -0
  505. data/spec/mongoid/errors/no_session_config_spec.rb +29 -0
  506. data/spec/mongoid/errors/no_session_database_spec.rb +29 -0
  507. data/spec/mongoid/errors/no_session_hosts_spec.rb +29 -0
  508. data/spec/mongoid/errors/no_sessions_config_spec.rb +29 -0
  509. data/spec/mongoid/errors/readonly_attribute_spec.rb +29 -0
  510. data/spec/mongoid/errors/scope_overwrite_spec.rb +29 -0
  511. data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +29 -0
  512. data/spec/mongoid/errors/unknown_attribute_spec.rb +29 -0
  513. data/spec/mongoid/errors/unsaved_document_spec.rb +37 -0
  514. data/spec/mongoid/errors/unsupported_javascript_spec.rb +29 -0
  515. data/spec/mongoid/errors/validations_spec.rb +45 -0
  516. data/spec/mongoid/extensions/array_spec.rb +638 -0
  517. data/spec/mongoid/extensions/big_decimal_spec.rb +104 -0
  518. data/spec/mongoid/extensions/binary_spec.rb +60 -0
  519. data/spec/mongoid/extensions/boolean_spec.rb +135 -0
  520. data/spec/mongoid/extensions/date_spec.rb +235 -0
  521. data/spec/mongoid/extensions/date_time_spec.rb +155 -0
  522. data/spec/mongoid/extensions/false_class_spec.rb +42 -0
  523. data/spec/mongoid/extensions/float_spec.rb +133 -0
  524. data/spec/mongoid/extensions/hash_spec.rb +333 -0
  525. data/spec/mongoid/extensions/integer_spec.rb +136 -0
  526. data/spec/mongoid/extensions/module_spec.rb +42 -0
  527. data/spec/mongoid/extensions/nil_class_spec.rb +11 -0
  528. data/spec/mongoid/extensions/object_id_spec.rb +946 -0
  529. data/spec/mongoid/extensions/object_spec.rb +292 -0
  530. data/spec/mongoid/extensions/range_spec.rb +105 -0
  531. data/spec/mongoid/extensions/regexp_spec.rb +47 -0
  532. data/spec/mongoid/extensions/set_spec.rb +33 -0
  533. data/spec/mongoid/extensions/string_spec.rb +357 -0
  534. data/spec/mongoid/extensions/symbol_spec.rb +76 -0
  535. data/spec/mongoid/extensions/time_spec.rb +467 -0
  536. data/spec/mongoid/extensions/time_with_zone_spec.rb +405 -0
  537. data/spec/mongoid/extensions/true_class_spec.rb +42 -0
  538. data/spec/mongoid/extensions_spec.rb +15 -0
  539. data/spec/mongoid/factory_spec.rb +185 -0
  540. data/spec/mongoid/fields/foreign_key_spec.rb +694 -0
  541. data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +184 -0
  542. data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +201 -0
  543. data/spec/mongoid/fields/localized_spec.rb +386 -0
  544. data/spec/mongoid/fields/standard_spec.rb +166 -0
  545. data/spec/mongoid/fields_spec.rb +1229 -0
  546. data/spec/mongoid/findable_spec.rb +342 -0
  547. data/spec/mongoid/identity_map_spec.rb +564 -0
  548. data/spec/mongoid/indexable/specification_spec.rb +87 -0
  549. data/spec/mongoid/indexable_spec.rb +504 -0
  550. data/spec/mongoid/inspectable_spec.rb +49 -0
  551. data/spec/mongoid/interceptable_spec.rb +1564 -0
  552. data/spec/mongoid/loggable_spec.rb +21 -0
  553. data/spec/mongoid/matchable/all_spec.rb +31 -0
  554. data/spec/mongoid/matchable/and_spec.rb +162 -0
  555. data/spec/mongoid/matchable/default_spec.rb +130 -0
  556. data/spec/mongoid/matchable/exists_spec.rb +57 -0
  557. data/spec/mongoid/matchable/gt_spec.rb +75 -0
  558. data/spec/mongoid/matchable/gte_spec.rb +74 -0
  559. data/spec/mongoid/matchable/in_spec.rb +25 -0
  560. data/spec/mongoid/matchable/lt_spec.rb +74 -0
  561. data/spec/mongoid/matchable/lte_spec.rb +74 -0
  562. data/spec/mongoid/matchable/ne_spec.rb +25 -0
  563. data/spec/mongoid/matchable/nin_spec.rb +25 -0
  564. data/spec/mongoid/matchable/or_spec.rb +106 -0
  565. data/spec/mongoid/matchable/size_spec.rb +25 -0
  566. data/spec/mongoid/matchable_spec.rb +532 -0
  567. data/spec/mongoid/persistable/creatable_spec.rb +512 -0
  568. data/spec/mongoid/persistable/deletable_spec.rb +205 -0
  569. data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
  570. data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
  571. data/spec/mongoid/persistable/logical_spec.rb +143 -0
  572. data/spec/mongoid/persistable/poppable_spec.rb +115 -0
  573. data/spec/mongoid/persistable/pullable_spec.rb +228 -0
  574. data/spec/mongoid/persistable/pushable_spec.rb +258 -0
  575. data/spec/mongoid/persistable/renamable_spec.rb +135 -0
  576. data/spec/mongoid/persistable/savable_spec.rb +432 -0
  577. data/spec/mongoid/persistable/settable_spec.rb +139 -0
  578. data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
  579. data/spec/mongoid/persistable/updatable_spec.rb +522 -0
  580. data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
  581. data/spec/mongoid/persistable_spec.rb +206 -0
  582. data/spec/mongoid/positional_spec.rb +227 -0
  583. data/spec/mongoid/railties/document_spec.rb +24 -0
  584. data/spec/mongoid/relations/accessors_spec.rb +736 -0
  585. data/spec/mongoid/relations/auto_save_spec.rb +261 -0
  586. data/spec/mongoid/relations/bindings/embedded/in_spec.rb +171 -0
  587. data/spec/mongoid/relations/bindings/embedded/many_spec.rb +54 -0
  588. data/spec/mongoid/relations/bindings/embedded/one_spec.rb +77 -0
  589. data/spec/mongoid/relations/bindings/referenced/in_spec.rb +241 -0
  590. data/spec/mongoid/relations/bindings/referenced/many_spec.rb +153 -0
  591. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +178 -0
  592. data/spec/mongoid/relations/bindings/referenced/one_spec.rb +131 -0
  593. data/spec/mongoid/relations/builders/embedded/in_spec.rb +34 -0
  594. data/spec/mongoid/relations/builders/embedded/many_spec.rb +132 -0
  595. data/spec/mongoid/relations/builders/embedded/one_spec.rb +99 -0
  596. data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +234 -0
  597. data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +250 -0
  598. data/spec/mongoid/relations/builders/referenced/in_spec.rb +241 -0
  599. data/spec/mongoid/relations/builders/referenced/many_spec.rb +137 -0
  600. data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +178 -0
  601. data/spec/mongoid/relations/builders/referenced/one_spec.rb +124 -0
  602. data/spec/mongoid/relations/builders_spec.rb +226 -0
  603. data/spec/mongoid/relations/cascading/delete_spec.rb +101 -0
  604. data/spec/mongoid/relations/cascading/destroy_spec.rb +47 -0
  605. data/spec/mongoid/relations/cascading/nullify_spec.rb +32 -0
  606. data/spec/mongoid/relations/cascading/restrict_spec.rb +68 -0
  607. data/spec/mongoid/relations/cascading_spec.rb +355 -0
  608. data/spec/mongoid/relations/constraint_spec.rb +74 -0
  609. data/spec/mongoid/relations/conversions_spec.rb +126 -0
  610. data/spec/mongoid/relations/counter_cache_spec.rb +205 -0
  611. data/spec/mongoid/relations/cyclic_spec.rb +156 -0
  612. data/spec/mongoid/relations/embedded/dirty_spec.rb +65 -0
  613. data/spec/mongoid/relations/embedded/in_spec.rb +579 -0
  614. data/spec/mongoid/relations/embedded/many_spec.rb +3781 -0
  615. data/spec/mongoid/relations/embedded/one_spec.rb +1014 -0
  616. data/spec/mongoid/relations/macros_spec.rb +613 -0
  617. data/spec/mongoid/relations/metadata_spec.rb +1917 -0
  618. data/spec/mongoid/relations/options_spec.rb +35 -0
  619. data/spec/mongoid/relations/polymorphic_spec.rb +128 -0
  620. data/spec/mongoid/relations/proxy_spec.rb +48 -0
  621. data/spec/mongoid/relations/referenced/in_spec.rb +1435 -0
  622. data/spec/mongoid/relations/referenced/many_spec.rb +3546 -0
  623. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +3556 -0
  624. data/spec/mongoid/relations/referenced/one_spec.rb +1289 -0
  625. data/spec/mongoid/relations/reflections_spec.rb +101 -0
  626. data/spec/mongoid/relations/synchronization_spec.rb +449 -0
  627. data/spec/mongoid/relations/targets/enumerable_spec.rb +1710 -0
  628. data/spec/mongoid/relations/touchable_spec.rb +296 -0
  629. data/spec/mongoid/relations_spec.rb +188 -0
  630. data/spec/mongoid/reloadable_spec.rb +305 -0
  631. data/spec/mongoid/scopable_spec.rb +926 -0
  632. data/spec/mongoid/selectable_spec.rb +134 -0
  633. data/spec/mongoid/serializable_spec.rb +862 -0
  634. data/spec/mongoid/sessions/factory_spec.rb +312 -0
  635. data/spec/mongoid/sessions/mongo_uri_spec.rb +103 -0
  636. data/spec/mongoid/sessions/options_spec.rb +71 -0
  637. data/spec/mongoid/sessions_spec.rb +1078 -0
  638. data/spec/mongoid/shardable_spec.rb +61 -0
  639. data/spec/mongoid/state_spec.rb +102 -0
  640. data/spec/mongoid/threaded_spec.rb +258 -0
  641. data/spec/mongoid/timestamps/created/short_spec.rb +51 -0
  642. data/spec/mongoid/timestamps/created_spec.rb +44 -0
  643. data/spec/mongoid/timestamps/updated/short_spec.rb +90 -0
  644. data/spec/mongoid/timestamps/updated_spec.rb +86 -0
  645. data/spec/mongoid/timestamps_spec.rb +112 -0
  646. data/spec/mongoid/traversable_spec.rb +244 -0
  647. data/spec/mongoid/unit_of_work_spec.rb +196 -0
  648. data/spec/mongoid/validatable/associated_spec.rb +183 -0
  649. data/spec/mongoid/validatable/format_spec.rb +83 -0
  650. data/spec/mongoid/validatable/length_spec.rb +119 -0
  651. data/spec/mongoid/validatable/numericality_spec.rb +30 -0
  652. data/spec/mongoid/validatable/presence_spec.rb +511 -0
  653. data/spec/mongoid/validatable/uniqueness_spec.rb +2305 -0
  654. data/spec/mongoid/validatable_spec.rb +309 -0
  655. data/spec/mongoid_spec.rb +74 -0
  656. data/spec/rack/mongoid/middleware/identity_map_spec.rb +72 -0
  657. data/spec/rails/mongoid_spec.rb +462 -0
  658. data/spec/spec_helper.rb +103 -0
  659. metadata +1159 -0
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::Gte do
4
+
5
+ describe "#matches?" do
6
+
7
+ context "when the value is larger" do
8
+
9
+ let(:matcher) do
10
+ described_class.new(5)
11
+ end
12
+
13
+ it "returns true" do
14
+ expect(matcher.matches?("$gte" => 3)).to be_true
15
+ end
16
+ end
17
+
18
+ context "when the value is smaller" do
19
+
20
+ let(:matcher) do
21
+ described_class.new(5)
22
+ end
23
+
24
+ it "returns false" do
25
+ expect(matcher.matches?("$gte" => 10)).to be_false
26
+ end
27
+ end
28
+
29
+ context "when the value is equal" do
30
+
31
+ let(:matcher) do
32
+ described_class.new(5)
33
+ end
34
+
35
+ it "returns true" do
36
+ expect(matcher.matches?("$gte" => 5)).to be_true
37
+ end
38
+ end
39
+
40
+ context "when the value is nil" do
41
+
42
+ let(:matcher) do
43
+ described_class.new(nil)
44
+ end
45
+
46
+ it "returns false" do
47
+ expect(matcher.matches?("$gte" => 5)).to be_false
48
+ end
49
+ end
50
+
51
+ context "when the value is an array" do
52
+ context "there are value valid" do
53
+ let(:matcher) do
54
+ described_class.new([6,4])
55
+ end
56
+
57
+ it "returns false" do
58
+ expect(matcher.matches?("$gte" => 5)).to be_true
59
+ end
60
+ end
61
+
62
+ context "there are not value valid" do
63
+ let(:matcher) do
64
+ described_class.new([3,4])
65
+ end
66
+
67
+ it "returns false" do
68
+ expect(matcher.matches?("$gte" => 5)).to be_false
69
+ end
70
+
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::In do
4
+
5
+ let(:matcher) do
6
+ described_class.new("first")
7
+ end
8
+
9
+ describe "#matches?" do
10
+
11
+ context "when the values include the attribute" do
12
+
13
+ it "returns true" do
14
+ expect(matcher.matches?("$in" => [/\Afir.*\z/, "second"])).to be_true
15
+ end
16
+ end
17
+
18
+ context "when the values don't include the attribute" do
19
+
20
+ it "returns false" do
21
+ expect(matcher.matches?("$in" => ["third"])).to be_false
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::Lt do
4
+
5
+ describe "#matches?" do
6
+
7
+ context "when the value is larger" do
8
+
9
+ let(:matcher) do
10
+ described_class.new(5)
11
+ end
12
+
13
+ it "returns false" do
14
+ expect(matcher.matches?("$lt" => 3)).to be_false
15
+ end
16
+ end
17
+
18
+ context "when the value is equal" do
19
+
20
+ let(:matcher) do
21
+ described_class.new(3)
22
+ end
23
+
24
+ it "returns false" do
25
+ expect(matcher.matches?("$lt" => 3)).to be_false
26
+ end
27
+ end
28
+
29
+ context "when the value is smaller" do
30
+
31
+ let(:matcher) do
32
+ described_class.new(5)
33
+ end
34
+
35
+ it "returns true" do
36
+ expect(matcher.matches?("$lt" => 10)).to be_true
37
+ end
38
+ end
39
+
40
+ context "when the value is nil" do
41
+
42
+ let(:matcher) do
43
+ described_class.new(nil)
44
+ end
45
+
46
+ it "returns false" do
47
+ expect(matcher.matches?("$lt" => 5)).to be_false
48
+ end
49
+ end
50
+
51
+ context "when the value is an array" do
52
+ context "there are value valid" do
53
+ let(:matcher) do
54
+ described_class.new([3, 4])
55
+ end
56
+
57
+ it "returns true" do
58
+ expect(matcher.matches?("$lt" => 5)).to be_true
59
+ end
60
+ end
61
+
62
+ context "there are not value valid" do
63
+ let(:matcher) do
64
+ described_class.new([5,6])
65
+ end
66
+
67
+ it "returns false" do
68
+ expect(matcher.matches?("$lt" => 5)).to be_false
69
+ end
70
+
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,74 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::Lte do
4
+
5
+ describe "#matches?" do
6
+
7
+ context "when the value is larger" do
8
+
9
+ let(:matcher) do
10
+ described_class.new(5)
11
+ end
12
+
13
+ it "returns false" do
14
+ expect(matcher.matches?("$lte" => 3)).to be_false
15
+ end
16
+ end
17
+
18
+ context "when the value is smaller" do
19
+
20
+ let(:matcher) do
21
+ described_class.new(5)
22
+ end
23
+
24
+ it "returns true" do
25
+ expect(matcher.matches?("$lte" => 10)).to be_true
26
+ end
27
+ end
28
+
29
+ context "when the value is equal" do
30
+
31
+ let(:matcher) do
32
+ described_class.new(5)
33
+ end
34
+
35
+ it "returns true" do
36
+ expect(matcher.matches?("$lte" => 5)).to be_true
37
+ end
38
+ end
39
+
40
+ context "when the value is nil" do
41
+
42
+ let(:matcher) do
43
+ described_class.new(nil)
44
+ end
45
+
46
+ it "returns false" do
47
+ expect(matcher.matches?("$lte" => 5)).to be_false
48
+ end
49
+ end
50
+
51
+ context "when the value is an array" do
52
+ context "there are value valid" do
53
+ let(:matcher) do
54
+ described_class.new([3, 4])
55
+ end
56
+
57
+ it "returns true" do
58
+ expect(matcher.matches?("$lte" => 5)).to be_true
59
+ end
60
+ end
61
+
62
+ context "there are not value valid" do
63
+ let(:matcher) do
64
+ described_class.new([7,6])
65
+ end
66
+
67
+ it "returns false" do
68
+ expect(matcher.matches?("$lte" => 5)).to be_false
69
+ end
70
+
71
+ end
72
+ end
73
+ end
74
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::Ne do
4
+
5
+ let(:matcher) do
6
+ described_class.new("first")
7
+ end
8
+
9
+ describe "#matches?" do
10
+
11
+ context "when the values are not equal" do
12
+
13
+ it "returns true" do
14
+ expect(matcher.matches?("$ne" => "second")).to be_true
15
+ end
16
+ end
17
+
18
+ context "when the values are equal" do
19
+
20
+ it "returns false" do
21
+ expect(matcher.matches?("$ne" => "first")).to be_false
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::Nin do
4
+
5
+ let(:matcher) do
6
+ described_class.new("first")
7
+ end
8
+
9
+ describe "#matches?" do
10
+
11
+ context "when the values do not contain the attribute" do
12
+
13
+ it "returns true" do
14
+ expect(matcher.matches?("$nin" => ["second", "third"])).to be_true
15
+ end
16
+ end
17
+
18
+ context "when the values contain the attribute" do
19
+
20
+ it "returns false" do
21
+ expect(matcher.matches?("$nin" => ["first"])).to be_false
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,106 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::Or do
4
+
5
+ let(:person) do
6
+ Person.new
7
+ end
8
+
9
+ let(:matcher) do
10
+ described_class.new("value", person)
11
+ end
12
+
13
+ describe "#matches?" do
14
+
15
+ context "when provided a simple expression" do
16
+
17
+ context "when any of the values are equal" do
18
+
19
+ let(:matches) do
20
+ matcher.matches?(
21
+ [ { title: "Sir" }, { title: "King" } ]
22
+ )
23
+ end
24
+
25
+ before do
26
+ person.title = "Sir"
27
+ end
28
+
29
+ it "returns true" do
30
+ expect(matches).to be_true
31
+ end
32
+ end
33
+
34
+ context "when none of the values are equal" do
35
+
36
+ it "returns false" do
37
+ expect(matcher.matches?([])).to be_false
38
+ end
39
+ end
40
+ end
41
+
42
+ context "when provided a complex expression" do
43
+
44
+ context "when any of the values are equal" do
45
+
46
+ let(:matches) do
47
+ matcher.matches?(
48
+ [
49
+ { title: { "$in" => [ "Sir", "Madam" ] } },
50
+ { title: "King" }
51
+ ]
52
+ )
53
+ end
54
+
55
+ before do
56
+ person.title = "Sir"
57
+ end
58
+
59
+ it "returns true" do
60
+ expect(matches).to be_true
61
+ end
62
+ end
63
+
64
+ context "when none of the values are equal" do
65
+
66
+ let(:matches) do
67
+ matcher.matches?(
68
+ [
69
+ { title: { "$in" => [ "Prince", "Madam" ] } },
70
+ { title: "King" }
71
+ ]
72
+ )
73
+ end
74
+
75
+ before do
76
+ person.title = "Sir"
77
+ end
78
+
79
+ it "returns false" do
80
+ expect(matches).to be_false
81
+ end
82
+ end
83
+
84
+ context "when expression contain multiple fields" do
85
+
86
+ let(:matches) do
87
+ matcher.matches?(
88
+ [
89
+ { title: "Sir", age: 23 },
90
+ { title: "King", age: 100 }
91
+ ]
92
+ )
93
+ end
94
+
95
+ before do
96
+ person.title = "Sir"
97
+ person.age = 100
98
+ end
99
+
100
+ it "returns false" do
101
+ expect(matches).to be_false
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,25 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable::Size do
4
+
5
+ let(:matcher) do
6
+ described_class.new(["first", "second"])
7
+ end
8
+
9
+ describe "#matches?" do
10
+
11
+ context "when the attribute is the same size" do
12
+
13
+ it "returns true" do
14
+ expect(matcher.matches?("$size" => 2)).to be_true
15
+ end
16
+ end
17
+
18
+ context "when the attribute is not the same size" do
19
+
20
+ it "returns false" do
21
+ expect(matcher.matches?("$size" => 5)).to be_false
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,532 @@
1
+ require "spec_helper"
2
+
3
+ describe Mongoid::Matchable do
4
+
5
+ describe "#matches?" do
6
+
7
+ context "when document is embeded" do
8
+
9
+ let(:document) do
10
+ Address.new(street: "Clarkenwell Road")
11
+ end
12
+
13
+ before do
14
+ document.locations << Location.new(
15
+ name: 'No.1',
16
+ info: { 'door' => 'Red'},
17
+ occupants: [{'name' => 'Tim'}]
18
+ )
19
+ end
20
+
21
+ context "when the attributes do not match" do
22
+
23
+ let(:selector) do
24
+ { name: { "$in" => ["No.2"], "$ne" => nil } }
25
+ end
26
+
27
+ it "returns false" do
28
+ expect(document.locations.first.matches?(selector)).to be_false
29
+ end
30
+
31
+ context "when just change the selector order" do
32
+
33
+ let(:selector) do
34
+ { name: { "$ne" => nil, "$in" => ["No.2"] } }
35
+ end
36
+
37
+ it "returns false " do
38
+ expect(document.locations.first.matches?(selector)).to be_false
39
+ end
40
+ end
41
+ end
42
+
43
+ context "when matching embedded hash values" do
44
+
45
+ context "when the contents match" do
46
+
47
+ let(:selector) do
48
+ { "info.door" => "Red" }
49
+ end
50
+
51
+ it "returns true" do
52
+ expect(document.locations.first.matches?(selector)).to be_true
53
+ end
54
+ end
55
+
56
+ context "when the contents do not match" do
57
+
58
+ let(:selector) do
59
+ { "info.door" => "Blue" }
60
+ end
61
+
62
+ it "returns false" do
63
+ expect(document.locations.first.matches?(selector)).to be_false
64
+ end
65
+ end
66
+
67
+ context "when the contents do not exist" do
68
+
69
+ let(:selector) do
70
+ { "info.something_else" => "Red" }
71
+ end
72
+
73
+ it "returns false" do
74
+ expect(document.locations.first.matches?(selector)).to be_false
75
+ end
76
+ end
77
+ end
78
+
79
+ context "when matching values of multiple embedded hashes" do
80
+
81
+ context "when the contents match" do
82
+
83
+ let(:selector) do
84
+ { "occupants.name" => "Tim" }
85
+ end
86
+
87
+ it "returns true" do
88
+ expect(document.locations.first.matches?(selector)).to be_true
89
+ end
90
+ end
91
+
92
+ context "when the contents do not match" do
93
+
94
+ let(:selector) do
95
+ { "occupants.name" => "Lyle" }
96
+ end
97
+
98
+ it "returns false" do
99
+ expect(document.locations.first.matches?(selector)).to be_false
100
+ end
101
+ end
102
+
103
+ context "when the contents do not exist" do
104
+
105
+ let(:selector) do
106
+ { "occupants.something_else" => "Tim" }
107
+ end
108
+
109
+ it "returns false" do
110
+ expect(document.locations.first.matches?(selector)).to be_false
111
+ end
112
+ end
113
+ end
114
+
115
+ end
116
+
117
+ context "when performing simple matching" do
118
+
119
+ let(:document) do
120
+ Address.new(street: "Clarkenwell Road")
121
+ end
122
+
123
+ context "when the attributes match" do
124
+
125
+ let(:selector) do
126
+ { street: "Clarkenwell Road" }
127
+ end
128
+
129
+ it "returns true" do
130
+ expect(document.matches?(selector)).to be_true
131
+ end
132
+ end
133
+
134
+ context "when the attributes dont match" do
135
+
136
+ let(:selector) do
137
+ { street: "Broadway Ave" }
138
+ end
139
+
140
+ it "returns false" do
141
+ expect(document.matches?(selector)).to be_false
142
+ end
143
+ end
144
+ end
145
+
146
+ context "when performing complex matching" do
147
+
148
+ let(:document) do
149
+ Address.new(
150
+ services: ["first", "second", "third"],
151
+ number: 100,
152
+ map: { key: "value" }
153
+ )
154
+ end
155
+
156
+ context "with an $all selector" do
157
+
158
+ context "when the attribute includes all of the values" do
159
+
160
+ let(:selector) do
161
+ { services: { "$all" => [ "first", "second" ] } }
162
+ end
163
+
164
+ it "returns true" do
165
+ expect(document.matches?(selector)).to be_true
166
+ end
167
+ end
168
+
169
+ context "when the attributes doesn't include all of the values" do
170
+
171
+ let(:selector) do
172
+ { services: { "$all" => [ "second", "third", "fourth" ] } }
173
+ end
174
+
175
+ it "returns false" do
176
+ expect(document.matches?(selector)).to be_false
177
+ end
178
+ end
179
+ end
180
+
181
+ context "with an $exists selector" do
182
+
183
+ context "when the attributes match" do
184
+
185
+ let(:selector) do
186
+ { services: { "$exists" => true } }
187
+ end
188
+
189
+ it "returns true" do
190
+ expect(document.matches?(selector)).to be_true
191
+ end
192
+ end
193
+
194
+ context "when the attributes do not match" do
195
+
196
+ let(:selector) do
197
+ { services: { "$exists" => false } }
198
+ end
199
+
200
+ it "returns false" do
201
+ expect(document.matches?(selector)).to be_false
202
+ end
203
+ end
204
+ end
205
+
206
+ context "with a $gt selector" do
207
+
208
+ context "when the attributes match" do
209
+
210
+ let(:selector) do
211
+ { number: { "$gt" => 50 } }
212
+ end
213
+
214
+ it "returns true" do
215
+ expect(document.matches?(selector)).to be_true
216
+ end
217
+ end
218
+
219
+ context "when the attributes do not match" do
220
+
221
+ let(:selector) do
222
+ { number: { "$gt" => 200 } }
223
+ end
224
+
225
+ it "returns false" do
226
+ expect(document.matches?(selector)).to be_false
227
+ end
228
+ end
229
+ end
230
+
231
+ context "with a $gt selector as a symbol" do
232
+
233
+ context "when the attributes match" do
234
+
235
+ let(:selector) do
236
+ { number: { :$gt => 50 } }
237
+ end
238
+
239
+ it "returns true" do
240
+ expect(document.matches?(selector)).to be_true
241
+ end
242
+ end
243
+
244
+ context "when the attributes do not match" do
245
+
246
+ let(:selector) do
247
+ { number: { :$gt => 200 } }
248
+ end
249
+
250
+ it "returns false" do
251
+ expect(document.matches?(selector)).to be_false
252
+ end
253
+ end
254
+ end
255
+
256
+ context "with a $gte selector" do
257
+
258
+ context "when the attributes match" do
259
+
260
+ let(:selector) do
261
+ { number: { "$gte" => 100 } }
262
+ end
263
+
264
+ it "returns true" do
265
+ expect(document.matches?(selector)).to be_true
266
+ end
267
+ end
268
+
269
+ context "when the attributes do not match" do
270
+
271
+ let(:selector) do
272
+ { number: { "$gte" => 200 } }
273
+ end
274
+
275
+ it "returns false" do
276
+ expect(document.matches?(selector)).to be_false
277
+ end
278
+ end
279
+ end
280
+
281
+ context "with an $in selector on Array" do
282
+
283
+ context "when the attributes match" do
284
+
285
+ let(:selector) do
286
+ { services: { "$in" => [ /\Afir.*\z/, "second" ] } }
287
+ end
288
+
289
+ it "returns true" do
290
+ expect(document.matches?(selector)).to be_true
291
+ end
292
+ end
293
+
294
+ context "when the attributes do not match" do
295
+
296
+ let(:selector) do
297
+ { number: { "$in" => [ "none" ] } }
298
+ end
299
+
300
+ it "returns false" do
301
+ expect(document.matches?(selector)).to be_false
302
+ end
303
+ end
304
+ end
305
+
306
+ context "with an $in selector" do
307
+
308
+ context "when the attributes match" do
309
+
310
+ let(:selector) do
311
+ { number: { "$in" => [ 100, 200 ] } }
312
+ end
313
+
314
+ it "returns true" do
315
+ expect(document.matches?(selector)).to be_true
316
+ end
317
+ end
318
+
319
+ context "when the attributes do not match" do
320
+
321
+ let(:selector) do
322
+ { number: { "$in" => [ 200, 300 ] } }
323
+ end
324
+
325
+ it "returns false" do
326
+ expect(document.matches?(selector)).to be_false
327
+ end
328
+ end
329
+ end
330
+
331
+ context "with a $lt selector" do
332
+
333
+ context "when the attributes match" do
334
+
335
+ let(:selector) do
336
+ { number: { "$lt" => 200 } }
337
+ end
338
+
339
+ it "returns true" do
340
+ expect(document.matches?(selector)).to be_true
341
+ end
342
+ end
343
+
344
+ context "when the attributes do not match" do
345
+
346
+ let(:selector) do
347
+ { number: { "$lt" => 50 } }
348
+ end
349
+
350
+ it "returns false" do
351
+ expect(document.matches?(selector)).to be_false
352
+ end
353
+ end
354
+ end
355
+
356
+ context "with a $lte selector" do
357
+
358
+ context "when the attributes match" do
359
+
360
+ let(:selector) do
361
+ { number: { "$lte" => 200 } }
362
+ end
363
+
364
+ it "returns true" do
365
+ expect(document.matches?(selector)).to be_true
366
+ end
367
+ end
368
+
369
+ context "when the attributes do not match" do
370
+
371
+ let(:selector) do
372
+ { number: { "$lte" => 50 } }
373
+ end
374
+
375
+ it "returns false" do
376
+ expect(document.matches?(selector)).to be_false
377
+ end
378
+ end
379
+ end
380
+
381
+ context "with an $ne selector" do
382
+
383
+ context "when the attributes match" do
384
+
385
+ let(:selector) do
386
+ { number: { "$ne" => 200 } }
387
+ end
388
+
389
+ it "returns true" do
390
+ expect(document.matches?(selector)).to be_true
391
+ end
392
+ end
393
+
394
+ context "when the attributes do not match" do
395
+
396
+ let(:selector) do
397
+ { number: { "$ne" => 100 } }
398
+ end
399
+
400
+ it "returns false" do
401
+ expect(document.matches?(selector)).to be_false
402
+ end
403
+ end
404
+ end
405
+
406
+ context "with a $nin selector on Array" do
407
+
408
+ context "when the attributes match" do
409
+
410
+ let(:selector) do
411
+ { services: { "$nin" => [ "none" ] } }
412
+ end
413
+
414
+ it "returns true" do
415
+ expect(document.matches?(selector)).to be_true
416
+ end
417
+ end
418
+
419
+ context "when the attributes do not match" do
420
+
421
+ let(:selector) do
422
+ { services: { "$nin" => [ "first" ] } }
423
+ end
424
+
425
+ it "returns false" do
426
+ expect(document.matches?(selector)).to be_false
427
+ end
428
+ end
429
+ end
430
+
431
+ context "with a $nin selector" do
432
+
433
+ context "when the attributes match" do
434
+
435
+ let(:selector) do
436
+ { number: { "$nin" => [ 1, 2, 3 ] } }
437
+ end
438
+
439
+ it "returns true" do
440
+ expect(document.matches?(selector)).to be_true
441
+ end
442
+ end
443
+
444
+ context "when the attributes do not match" do
445
+
446
+ let(:selector) do
447
+ { number: { "$nin" => [ 100 ] } }
448
+ end
449
+
450
+ it "returns false" do
451
+ expect(document.matches?(selector)).to be_false
452
+ end
453
+ end
454
+ end
455
+
456
+ context "with an $or selector" do
457
+
458
+ context "when the attributes match" do
459
+
460
+ let(:selector) do
461
+ { "$or" => [ { number: 10 }, { number: { "$gt" => 99 } } ] }
462
+ end
463
+
464
+ it "returns true" do
465
+ expect(document.matches?(selector)).to be_true
466
+ end
467
+ end
468
+
469
+ context "when the attributes do not match" do
470
+
471
+ let(:selector) do
472
+ { "$or" => [ { number: 10 }, { number: { "$lt" => 99 } } ] }
473
+ end
474
+
475
+ it "returns false" do
476
+ expect(document.matches?(selector)).to be_false
477
+ end
478
+ end
479
+ end
480
+
481
+ context "with a $size selector" do
482
+
483
+ context "when the attributes match" do
484
+
485
+ let(:selector) do
486
+ { services: { "$size" => 3 } }
487
+ end
488
+
489
+ it "returns true" do
490
+ expect(document.matches?(selector)).to be_true
491
+ end
492
+ end
493
+
494
+ context "when the attributes do not match" do
495
+
496
+ let(:selector) do
497
+ { services: { "$size" => 5 } }
498
+ end
499
+
500
+ it "returns false" do
501
+ expect(document.matches?(selector)).to be_false
502
+ end
503
+ end
504
+ end
505
+
506
+ context "with a hash value" do
507
+
508
+ context "when the attributes match" do
509
+
510
+ let(:selector) do
511
+ { map: { key: "value" } }
512
+ end
513
+
514
+ it "returns true" do
515
+ expect(document.matches?(selector)).to be_true
516
+ end
517
+ end
518
+
519
+ context "when the attributes do not match" do
520
+
521
+ let(:selector) do
522
+ { map: { key: "value2" } }
523
+ end
524
+
525
+ it "returns false" do
526
+ expect(document.matches?(selector)).to be_false
527
+ end
528
+ end
529
+ end
530
+ end
531
+ end
532
+ end