mongoid 5.4.1 → 6.0.0.beta

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 (264) hide show
  1. checksums.yaml +5 -5
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/lib/config/locales/en.yml +23 -16
  5. data/lib/mongoid.rb +4 -9
  6. data/lib/mongoid/atomic.rb +1 -1
  7. data/lib/mongoid/atomic/modifiers.rb +8 -12
  8. data/lib/mongoid/attributes.rb +9 -11
  9. data/lib/mongoid/attributes/dynamic.rb +5 -6
  10. data/lib/mongoid/attributes/nested.rb +1 -1
  11. data/lib/mongoid/attributes/processing.rb +4 -0
  12. data/lib/mongoid/attributes/readonly.rb +22 -0
  13. data/lib/mongoid/cacheable.rb +36 -0
  14. data/lib/mongoid/changeable.rb +37 -1
  15. data/lib/mongoid/clients.rb +0 -63
  16. data/lib/mongoid/clients/factory.rb +0 -2
  17. data/lib/mongoid/clients/options.rb +54 -249
  18. data/lib/mongoid/clients/storage_options.rb +1 -69
  19. data/lib/mongoid/composable.rb +26 -2
  20. data/lib/mongoid/config.rb +1 -1
  21. data/lib/mongoid/config/options.rb +1 -1
  22. data/lib/mongoid/contextual/aggregable/mongo.rb +1 -0
  23. data/lib/mongoid/contextual/atomic.rb +6 -9
  24. data/lib/mongoid/contextual/geo_near.rb +2 -3
  25. data/lib/mongoid/contextual/map_reduce.rb +97 -24
  26. data/lib/mongoid/contextual/memory.rb +7 -4
  27. data/lib/mongoid/contextual/mongo.rb +63 -54
  28. data/lib/mongoid/contextual/none.rb +2 -2
  29. data/lib/mongoid/copyable.rb +19 -19
  30. data/lib/mongoid/criteria.rb +5 -4
  31. data/lib/mongoid/criteria/findable.rb +2 -3
  32. data/lib/mongoid/criteria/includable.rb +63 -16
  33. data/lib/mongoid/criteria/marshalable.rb +2 -2
  34. data/lib/mongoid/criteria/modifiable.rb +17 -1
  35. data/lib/mongoid/criteria/options.rb +25 -0
  36. data/lib/mongoid/criteria/queryable.rb +86 -0
  37. data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
  38. data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
  39. data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
  40. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
  41. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
  42. data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
  43. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
  44. data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
  45. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
  46. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
  47. data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
  48. data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
  49. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +45 -0
  50. data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
  51. data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
  52. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
  53. data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
  54. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
  55. data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
  56. data/lib/mongoid/criteria/queryable/key.rb +103 -0
  57. data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
  58. data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
  59. data/lib/mongoid/criteria/queryable/optional.rb +411 -0
  60. data/lib/mongoid/criteria/queryable/options.rb +136 -0
  61. data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
  62. data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
  63. data/lib/mongoid/criteria/queryable/selector.rb +196 -0
  64. data/lib/mongoid/criteria/queryable/smash.rb +103 -0
  65. data/lib/mongoid/document.rb +9 -23
  66. data/lib/mongoid/errors.rb +2 -1
  67. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
  68. data/lib/mongoid/errors/delete_restriction.rb +2 -2
  69. data/lib/mongoid/errors/invalid_field.rb +2 -2
  70. data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
  71. data/lib/mongoid/errors/invalid_relation.rb +66 -0
  72. data/lib/mongoid/errors/inverse_not_found.rb +1 -1
  73. data/lib/mongoid/errors/mongoid_error.rb +1 -1
  74. data/lib/mongoid/evolvable.rb +1 -1
  75. data/lib/mongoid/extensions.rb +0 -5
  76. data/lib/mongoid/extensions/big_decimal.rb +17 -8
  77. data/lib/mongoid/extensions/date.rb +4 -1
  78. data/lib/mongoid/extensions/hash.rb +2 -3
  79. data/lib/mongoid/extensions/object.rb +2 -2
  80. data/lib/mongoid/extensions/string.rb +4 -3
  81. data/lib/mongoid/extensions/time.rb +5 -2
  82. data/lib/mongoid/factory.rb +1 -0
  83. data/lib/mongoid/fields/foreign_key.rb +2 -2
  84. data/lib/mongoid/fields/localized.rb +3 -8
  85. data/lib/mongoid/fields/validators/macro.rb +18 -0
  86. data/lib/mongoid/findable.rb +3 -3
  87. data/lib/mongoid/indexable.rb +17 -16
  88. data/lib/mongoid/indexable/specification.rb +1 -1
  89. data/lib/mongoid/indexable/validators/options.rb +1 -2
  90. data/lib/mongoid/interceptable.rb +6 -17
  91. data/lib/mongoid/loggable.rb +1 -1
  92. data/lib/mongoid/matchable.rb +3 -10
  93. data/lib/mongoid/matchable/gt.rb +2 -0
  94. data/lib/mongoid/matchable/gte.rb +2 -0
  95. data/lib/mongoid/matchable/lt.rb +2 -0
  96. data/lib/mongoid/matchable/lte.rb +2 -0
  97. data/lib/mongoid/persistable.rb +6 -5
  98. data/lib/mongoid/persistable/creatable.rb +2 -0
  99. data/lib/mongoid/persistable/deletable.rb +7 -3
  100. data/lib/mongoid/persistable/settable.rb +3 -16
  101. data/lib/mongoid/persistable/updatable.rb +10 -12
  102. data/lib/mongoid/persistence_context.rb +216 -0
  103. data/lib/mongoid/query_cache.rb +5 -30
  104. data/lib/mongoid/relations/accessors.rb +6 -2
  105. data/lib/mongoid/relations/auto_save.rb +12 -4
  106. data/lib/mongoid/relations/bindings/embedded/in.rb +4 -0
  107. data/lib/mongoid/relations/bindings/embedded/many.rb +8 -1
  108. data/lib/mongoid/relations/bindings/embedded/one.rb +10 -0
  109. data/lib/mongoid/relations/bindings/referenced/many.rb +4 -0
  110. data/lib/mongoid/relations/builders.rb +2 -2
  111. data/lib/mongoid/relations/builders/embedded/one.rb +1 -1
  112. data/lib/mongoid/relations/builders/nested_attributes/many.rb +1 -1
  113. data/lib/mongoid/relations/conversions.rb +1 -1
  114. data/lib/mongoid/relations/counter_cache.rb +28 -18
  115. data/lib/mongoid/relations/eager.rb +19 -7
  116. data/lib/mongoid/relations/eager/base.rb +5 -5
  117. data/lib/mongoid/relations/embedded/batchable.rb +9 -33
  118. data/lib/mongoid/relations/embedded/in.rb +16 -2
  119. data/lib/mongoid/relations/embedded/many.rb +23 -8
  120. data/lib/mongoid/relations/embedded/one.rb +17 -2
  121. data/lib/mongoid/relations/macros.rb +9 -2
  122. data/lib/mongoid/relations/metadata.rb +3 -3
  123. data/lib/mongoid/relations/nested_builder.rb +1 -1
  124. data/lib/mongoid/relations/options.rb +2 -2
  125. data/lib/mongoid/relations/proxy.rb +2 -33
  126. data/lib/mongoid/relations/referenced/in.rb +23 -11
  127. data/lib/mongoid/relations/referenced/many.rb +24 -16
  128. data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
  129. data/lib/mongoid/relations/referenced/one.rb +17 -1
  130. data/lib/mongoid/relations/reflections.rb +3 -5
  131. data/lib/mongoid/relations/touchable.rb +1 -1
  132. data/lib/mongoid/reloadable.rb +1 -1
  133. data/lib/mongoid/scopable.rb +3 -3
  134. data/lib/mongoid/serializable.rb +2 -3
  135. data/lib/mongoid/tasks/database.rb +1 -2
  136. data/lib/mongoid/threaded.rb +4 -4
  137. data/lib/mongoid/traversable.rb +1 -1
  138. data/lib/mongoid/validatable.rb +1 -1
  139. data/lib/mongoid/validatable/macros.rb +2 -4
  140. data/lib/mongoid/validatable/uniqueness.rb +1 -2
  141. data/lib/mongoid/version.rb +1 -1
  142. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +4 -7
  143. data/spec/app/models/album.rb +5 -1
  144. data/spec/app/models/artist.rb +21 -0
  145. data/spec/app/models/band.rb +0 -1
  146. data/spec/app/models/church.rb +0 -2
  147. data/spec/app/models/ordered_post.rb +5 -0
  148. data/spec/app/models/oscar.rb +1 -2
  149. data/spec/app/models/person.rb +3 -1
  150. data/spec/app/models/post.rb +0 -1
  151. data/spec/app/models/princess.rb +2 -0
  152. data/spec/app/models/record.rb +1 -0
  153. data/spec/app/models/thing.rb +1 -1
  154. data/spec/config/mongoid.yml +1 -5
  155. data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
  156. data/spec/mongoid/atomic_spec.rb +17 -17
  157. data/spec/mongoid/attributes/nested_spec.rb +14 -14
  158. data/spec/mongoid/attributes/readonly_spec.rb +87 -44
  159. data/spec/mongoid/attributes_spec.rb +63 -0
  160. data/spec/mongoid/cacheable_spec.rb +112 -0
  161. data/spec/mongoid/changeable_spec.rb +58 -0
  162. data/spec/mongoid/clients/factory_spec.rb +3 -11
  163. data/spec/mongoid/clients/options_spec.rb +378 -96
  164. data/spec/mongoid/clients_spec.rb +207 -170
  165. data/spec/mongoid/composable_spec.rb +7 -0
  166. data/spec/mongoid/config_spec.rb +41 -21
  167. data/spec/mongoid/contextual/atomic_spec.rb +77 -343
  168. data/spec/mongoid/contextual/map_reduce_spec.rb +119 -111
  169. data/spec/mongoid/contextual/memory_spec.rb +56 -316
  170. data/spec/mongoid/contextual/mongo_spec.rb +104 -378
  171. data/spec/mongoid/copyable_spec.rb +8 -15
  172. data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
  173. data/spec/mongoid/criteria/options_spec.rb +29 -0
  174. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
  175. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
  176. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
  177. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
  178. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
  179. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
  180. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
  181. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
  182. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
  183. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
  184. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
  185. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
  186. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
  187. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
  188. data/spec/mongoid/{extensions/origin/regexp_raw_spec.rb → criteria/queryable/extensions/regexp_spec.rb} +21 -20
  189. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
  190. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
  191. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
  192. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
  193. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
  194. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
  195. data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
  196. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
  197. data/spec/mongoid/criteria/queryable/optional_spec.rb +1786 -0
  198. data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
  199. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
  200. data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
  201. data/spec/mongoid/criteria/queryable/selectable_spec.rb +4159 -0
  202. data/spec/mongoid/criteria/queryable/selector_spec.rb +778 -0
  203. data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
  204. data/spec/mongoid/criteria_spec.rb +45 -63
  205. data/spec/mongoid/document_spec.rb +21 -88
  206. data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
  207. data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
  208. data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
  209. data/spec/mongoid/extensions/date_spec.rb +2 -6
  210. data/spec/mongoid/extensions/date_time_spec.rb +2 -6
  211. data/spec/mongoid/extensions/float_spec.rb +8 -1
  212. data/spec/mongoid/extensions/integer_spec.rb +8 -1
  213. data/spec/mongoid/extensions/object_spec.rb +11 -0
  214. data/spec/mongoid/extensions/string_spec.rb +21 -0
  215. data/spec/mongoid/extensions/time_spec.rb +4 -8
  216. data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
  217. data/spec/mongoid/fields/localized_spec.rb +0 -91
  218. data/spec/mongoid/findable_spec.rb +46 -1
  219. data/spec/mongoid/indexable_spec.rb +6 -46
  220. data/spec/mongoid/interceptable_spec.rb +49 -10
  221. data/spec/mongoid/matchable/gt_spec.rb +11 -0
  222. data/spec/mongoid/matchable/gte_spec.rb +10 -0
  223. data/spec/mongoid/matchable/lt_spec.rb +11 -0
  224. data/spec/mongoid/matchable/lte_spec.rb +11 -0
  225. data/spec/mongoid/matchable_spec.rb +1 -51
  226. data/spec/mongoid/persistable/creatable_spec.rb +2 -2
  227. data/spec/mongoid/persistable/deletable_spec.rb +1 -1
  228. data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
  229. data/spec/mongoid/persistable/savable_spec.rb +30 -30
  230. data/spec/mongoid/persistable/settable_spec.rb +0 -185
  231. data/spec/mongoid/persistable/updatable_spec.rb +166 -5
  232. data/spec/mongoid/persistence_context_spec.rb +654 -0
  233. data/spec/mongoid/positional_spec.rb +10 -10
  234. data/spec/mongoid/query_cache_spec.rb +89 -65
  235. data/spec/mongoid/relations/accessors_spec.rb +1 -1
  236. data/spec/mongoid/relations/auto_save_spec.rb +39 -6
  237. data/spec/mongoid/relations/builders_spec.rb +37 -10
  238. data/spec/mongoid/relations/counter_cache_spec.rb +64 -15
  239. data/spec/mongoid/relations/cyclic_spec.rb +0 -22
  240. data/spec/mongoid/relations/embedded/many_spec.rb +9 -41
  241. data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
  242. data/spec/mongoid/relations/macros_spec.rb +395 -7
  243. data/spec/mongoid/relations/proxy_spec.rb +3 -1
  244. data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
  245. data/spec/mongoid/relations/referenced/many_spec.rb +6 -29
  246. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +6 -29
  247. data/spec/mongoid/relations/reflections_spec.rb +9 -9
  248. data/spec/mongoid/reloadable_spec.rb +51 -0
  249. data/spec/mongoid/scopable_spec.rb +0 -12
  250. data/spec/mongoid/serializable_spec.rb +0 -50
  251. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  252. data/spec/mongoid/validatable/uniqueness_spec.rb +16 -9
  253. data/spec/mongoid/validatable_spec.rb +16 -0
  254. data/spec/spec_helper.rb +10 -10
  255. metadata +536 -479
  256. metadata.gz.sig +0 -0
  257. data/lib/mongoid/clients/thread_options.rb +0 -19
  258. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +0 -20
  259. data/lib/mongoid/extensions/decimal128.rb +0 -39
  260. data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
  261. data/lib/mongoid/matchable/regexp.rb +0 -27
  262. data/spec/app/models/post_genre.rb +0 -6
  263. data/spec/mongoid/extensions/decimal128_spec.rb +0 -44
  264. data/spec/mongoid/matchable/regexp_spec.rb +0 -59
@@ -7,6 +7,24 @@ module Mongoid
7
7
  # many-to-many between documents in different collections.
8
8
  class ManyToMany < Many
9
9
 
10
+ # The allowed options when defining this relation.
11
+ #
12
+ # @return [ Array<Symbol> ] The allowed options when defining this relation.
13
+ #
14
+ # @since 6.0.0
15
+ VALID_OPTIONS = [
16
+ :after_add,
17
+ :after_remove,
18
+ :autosave,
19
+ :before_add,
20
+ :before_remove,
21
+ :dependent,
22
+ :foreign_key,
23
+ :index,
24
+ :order,
25
+ :primary_key
26
+ ].freeze
27
+
10
28
  # Appends a document or array of documents to the relation. Will set
11
29
  # the parent and update the index in the process.
12
30
  #
@@ -19,7 +37,7 @@ module Mongoid
19
37
  # @example Concat with other documents.
20
38
  # person.posts.concat([ post_one, post_two ])
21
39
  #
22
- # @param [ Document, Array<Document> ] args Any number of documents.
40
+ # @param [ Document, Array<Document> ] *args Any number of documents.
23
41
  #
24
42
  # @return [ Array<Document> ] The loaded docs.
25
43
  #
@@ -439,18 +457,7 @@ module Mongoid
439
457
  #
440
458
  # @since 2.1.0
441
459
  def valid_options
442
- [
443
- :after_add,
444
- :after_remove,
445
- :autosave,
446
- :before_add,
447
- :before_remove,
448
- :dependent,
449
- :foreign_key,
450
- :index,
451
- :order,
452
- :primary_key
453
- ]
460
+ VALID_OPTIONS
454
461
  end
455
462
 
456
463
  # Get the default validation setting for the relation. Determines if
@@ -7,6 +7,20 @@ module Mongoid
7
7
  # one-to-one between documents in different collections.
8
8
  class One < Relations::One
9
9
 
10
+ # The allowed options when defining this relation.
11
+ #
12
+ # @return [ Array<Symbol> ] The allowed options when defining this relation.
13
+ #
14
+ # @since 6.0.0
15
+ VALID_OPTIONS = [
16
+ :as,
17
+ :autobuild,
18
+ :autosave,
19
+ :dependent,
20
+ :foreign_key,
21
+ :primary_key
22
+ ].freeze
23
+
10
24
  # Instantiate a new references_one relation. Will set the foreign key
11
25
  # and the base on the inverse object.
12
26
  #
@@ -69,6 +83,8 @@ module Mongoid
69
83
  # @example Get the binding.
70
84
  # relation.binding([ address ])
71
85
  #
86
+ # @param [ Document ] new_target The new target of the relation.
87
+ #
72
88
  # @return [ Binding ] The binding object.
73
89
  def binding
74
90
  Bindings::Referenced::One.new(base, target, __metadata)
@@ -254,7 +270,7 @@ module Mongoid
254
270
  #
255
271
  # @since 2.1.0
256
272
  def valid_options
257
- [ :as, :autobuild, :autosave, :dependent, :foreign_key, :primary_key ]
273
+ VALID_OPTIONS
258
274
  end
259
275
 
260
276
  # Get the default validation setting for the relation. Determines if
@@ -24,7 +24,7 @@ module Mongoid
24
24
  # @example Find multiple relation metadata by macro.
25
25
  # person.reflect_on_all_associations(:embeds_many)
26
26
  #
27
- # @param [ Array<Symbol> ] macros The relation macros.
27
+ # @param [ Array<String, Symbol> ] *macros The relation macros.
28
28
  #
29
29
  # @return [ Array<Metadata> ] The matching relation metadata.
30
30
  def reflect_on_all_associations(*macros)
@@ -50,13 +50,11 @@ module Mongoid
50
50
  # @example Find multiple relation metadata by macro.
51
51
  # Person.reflect_on_all_associations(:embeds_many)
52
52
  #
53
- # @param [ Array<Symbol> ] macros The relation macros.
53
+ # @param [ Array<String, Symbol> ] *macros The relation macros.
54
54
  #
55
55
  # @return [ Array<Metadata> ] The matching relation metadata.
56
56
  def reflect_on_all_associations(*macros)
57
- association_reflections = relations.values
58
- association_reflections.select! { |reflection| macros.include?(reflection.macro) } unless macros.empty?
59
- association_reflections
57
+ relations.values.select { |meta| macros.include?(meta.macro) }
60
58
  end
61
59
  end
62
60
  end
@@ -78,7 +78,7 @@ module Mongoid
78
78
  # @return [ Symbol ] The method name.
79
79
  def define_relation_touch_method(name)
80
80
  method_name = "touch_#{name}_after_create_or_destroy"
81
- class_eval <<-TOUCH, __FILE__, __LINE__ + 1
81
+ class_eval <<-TOUCH
82
82
  def #{method_name}
83
83
  without_autobuild do
84
84
  relation = __send__(:#{name})
@@ -71,7 +71,7 @@ module Mongoid
71
71
  # @since 2.3.2
72
72
  def reload_embedded_document
73
73
  extract_embedded_attributes({}.merge(
74
- _root.collection.find(_id: _root._id).read(mode: :primary).first
74
+ collection(_root).find(_id: _root._id).read(mode: :primary).first
75
75
  ))
76
76
  end
77
77
 
@@ -80,7 +80,7 @@ module Mongoid
80
80
  # default_scope ->{ where(active: true) }
81
81
  # end
82
82
  #
83
- # @param [ Proc, Criteria ] value The default scope.
83
+ # @param [ Proc, Criteria ] scope The default scope.
84
84
  #
85
85
  # @raise [ Errors::InvalidScope ] If the scope is not a proc or criteria.
86
86
  #
@@ -117,7 +117,7 @@ module Mongoid
117
117
  # @since 3.0.0
118
118
  def queryable
119
119
  crit = Threaded.current_scope(self) || Criteria.new(self)
120
- crit.embedded = true if (crit.klass.embedded? && !crit.klass.cyclic?)
120
+ crit.embedded = true if crit.klass.embedded?
121
121
  crit
122
122
  end
123
123
 
@@ -136,7 +136,7 @@ module Mongoid
136
136
  # end
137
137
  #
138
138
  # @param [ Symbol ] name The name of the scope.
139
- # @param [ Proc ] value The conditions of the scope.
139
+ # @param [ Proc ] conditions The conditions of the scope.
140
140
  #
141
141
  # @raise [ Errors::InvalidScope ] If the scope is not a proc.
142
142
  # @raise [ Errors::ScopeOverwrite ] If the scope name already exists.
@@ -138,7 +138,7 @@ module Mongoid
138
138
  # @example Get the relation names.
139
139
  # document.relation_names(:include => [ :addresses ])
140
140
  #
141
- # @param [ Hash, Symbol, Array<Symbol> ] inclusions The inclusions.
141
+ # @param [ Hash, Symbol, Array<Symbol ] inclusions The inclusions.
142
142
  #
143
143
  # @return [ Array<Symbol> ] The names of the included relations.
144
144
  #
@@ -153,8 +153,7 @@ module Mongoid
153
153
  # @example Get the relation options.
154
154
  # document.relation_names(:include => [ :addresses ])
155
155
  #
156
- # @param [ Hash, Symbol, Array<Symbol> ] inclusions The inclusions.
157
- # @param [ Hash ] options The options.
156
+ # @param [ Hash, Symbol, Array<Symbol ] inclusions The inclusions.
158
157
  # @param [ Symbol ] name The name of the relation.
159
158
  #
160
159
  # @return [ Hash ] The options for the relation.
@@ -36,8 +36,7 @@ module Mongoid
36
36
  # @example Return the list of unused indexes.
37
37
  # Mongoid::Tasks::Database.undefined_indexes
38
38
  #
39
- # @return [ Array<Hash> ] The list of undefined indexes by model.
40
- #
39
+ # @return Hash{Class => Array(Hash)} The list of undefined indexes by model.
41
40
  def undefined_indexes(models = ::Mongoid.models)
42
41
  undefined_by_model = {}
43
42
 
@@ -64,7 +64,7 @@ module Mongoid
64
64
  # @example Set the global database override.
65
65
  # Threaded.database_override = :testing
66
66
  #
67
- # @param [ String, Symbol ] name The global override name.
67
+ # @param [ String, Symbol ] The global override name.
68
68
  #
69
69
  # @return [ String, Symbol ] The override.
70
70
  #
@@ -180,7 +180,7 @@ module Mongoid
180
180
  # @example Set the global client override.
181
181
  # Threaded.client_override = :testing
182
182
  #
183
- # @param [ String, Symbol ] name The global override name.
183
+ # @param [ String, Symbol ] The global override name.
184
184
  #
185
185
  # @return [ String, Symbol ] The override.
186
186
  #
@@ -304,7 +304,7 @@ module Mongoid
304
304
  # @example Get all autosaves.
305
305
  # Threaded.autosaves_for(Person)
306
306
  #
307
- # @param [ Class ] klass The class to check.
307
+ # @param [ Class ] The class to check.
308
308
  #
309
309
  # @return [ Array ] The current autosaves.
310
310
  #
@@ -317,7 +317,7 @@ module Mongoid
317
317
  # @example Get all validations.
318
318
  # Threaded.validations_for(Person)
319
319
  #
320
- # @param [ Class ] klass The class to check.
320
+ # @param [ Class ] The class to check.
321
321
  #
322
322
  # @return [ Array ] The current validations.
323
323
  #
@@ -153,7 +153,7 @@ module Mongoid
153
153
  def _root
154
154
  object = self
155
155
  while (object._parent) do object = object._parent; end
156
- object.with(@persistence_options) || self
156
+ object
157
157
  end
158
158
 
159
159
  # Is this document the root document of the hierarchy?
@@ -144,7 +144,7 @@ module Mongoid
144
144
  # @example Validate with a specific validator.
145
145
  # validates_with MyValidator, on: :create
146
146
  #
147
- # @param [ Class<Array>, Hash ] args The validator classes and options.
147
+ # @param [ Class<Array>, Hash ] *args The validator classes and options.
148
148
  #
149
149
  # @note See ActiveModel::Validations::With for full options. This is
150
150
  # overridden to add autosave functionality when presence validation is
@@ -17,8 +17,7 @@ module Mongoid
17
17
  # validates_associated :name, :addresses
18
18
  # end
19
19
  #
20
- # @param [ Array ] args The arguments to pass to the validator.
21
- #
20
+ # @param [ Array ] *args The arguments to pass to the validator.
22
21
  def validates_associated(*args)
23
22
  validates_with(AssociatedValidator, _merge_attributes(args))
24
23
  end
@@ -35,8 +34,7 @@ module Mongoid
35
34
  # validates_uniqueness_of :title
36
35
  # end
37
36
  #
38
- # @param [ Array ] args The arguments to pass to the validator.
39
- #
37
+ # @param [ Array ] *args The arguments to pass to the validator.
40
38
  def validates_uniqueness_of(*args)
41
39
  validates_with(UniquenessValidator, _merge_attributes(args))
42
40
  end
@@ -169,7 +169,6 @@ module Mongoid
169
169
  name = document.database_field_name(item)
170
170
  criteria = criteria.where(item => document.attributes[name])
171
171
  end
172
- criteria = criteria.with(document.persistence_options)
173
172
  criteria
174
173
  end
175
174
 
@@ -274,7 +273,7 @@ module Mongoid
274
273
  criteria = create_criteria(klass, document, attribute, value)
275
274
  criteria = criteria.merge(options[:conditions].call) if options[:conditions]
276
275
 
277
- if criteria.with(criteria.persistence_options).read(mode: :primary).exists?
276
+ if criteria.read(mode: :primary).exists?
278
277
  add_error(document, attribute, value)
279
278
  end
280
279
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
- VERSION = "5.4.1"
3
+ VERSION = "6.0.0.beta"
4
4
  end
@@ -38,7 +38,8 @@ development:
38
38
  # on 2.4 and 2.6 is :plain)
39
39
  # auth_mech: :scram
40
40
 
41
- # The database or source to authenticate the user against. (default: admin)
41
+ # The database or source to authenticate the user against.
42
+ # (default: the database specified above or admin)
42
43
  # auth_source: admin
43
44
 
44
45
  # Force a the driver cluster to behave in a certain manner instead of auto-
@@ -50,8 +51,8 @@ development:
50
51
  # via ismaster commands. (default: 10)
51
52
  # heartbeat_frequency: 10
52
53
 
53
- # The time in seconds for selecting servers for a near read preference. (default: 0.015)
54
- # local_threshold: 0.015
54
+ # The time in seconds for selecting servers for a near read preference. (default: 5)
55
+ # local_threshold: 5
55
56
 
56
57
  # The timeout in seconds for selecting a server for an operation. (default: 30)
57
58
  # server_selection_timeout: 30
@@ -130,10 +131,6 @@ development:
130
131
  # environment. The Mongoid logger will be set to the Rails logger
131
132
  # otherwise.(default: :info)
132
133
  # log_level: :info
133
-
134
- # Application name that is printed to the mongodb logs upon establishing a
135
- # connection in server versions >= 3.4. Note that the name cannot exceed 128 bytes.
136
- # app_name: MyApplicationName
137
134
  test:
138
135
  clients:
139
136
  default:
@@ -9,6 +9,10 @@ class Album
9
9
  private
10
10
 
11
11
  def set_parent_name
12
- artist.name = "destroyed"
12
+ artist.name = "destroyed" if artist
13
+ end
14
+
15
+ def set_parent_name_fail
16
+ throw(:abort)
13
17
  end
14
18
  end
@@ -13,16 +13,37 @@ class Artist
13
13
  after_create :create_songs
14
14
  before_save :before_save_stub
15
15
  before_destroy :before_destroy_stub
16
+ before_update :before_update_stub
16
17
 
17
18
  protected
18
19
  def before_create_stub
19
20
  true
20
21
  end
21
22
 
23
+ def before_update_stub
24
+ true
25
+ end
26
+
27
+ def before_update_fail_stub
28
+ throw(:abort)
29
+ end
30
+
31
+ def before_save_fail_stub
32
+ throw(:abort)
33
+ end
34
+
35
+ def before_create_fail_stub
36
+ throw(:abort)
37
+ end
38
+
22
39
  def before_save_stub
23
40
  true
24
41
  end
25
42
 
43
+ def before_destroy_fail_stub
44
+ throw(:abort)
45
+ end
46
+
26
47
  def before_destroy_stub
27
48
  true
28
49
  end
@@ -13,7 +13,6 @@ class Band
13
13
  field :upserted, type: Mongoid::Boolean, default: false
14
14
  field :created, type: DateTime
15
15
  field :sales, type: BigDecimal
16
- field :decimal, type: BSON::Decimal128
17
16
  field :y, as: :years, type: Integer
18
17
  field :founded, type: Date
19
18
  field :deleted, type: Boolean
@@ -1,6 +1,4 @@
1
1
  class Church
2
2
  include Mongoid::Document
3
3
  has_many :acolytes, validate: false
4
- field :location, type: Hash
5
- field :name, type: String
6
4
  end
@@ -3,4 +3,9 @@ class OrderedPost
3
3
  field :title, type: String
4
4
  field :rating, type: Integer
5
5
  belongs_to :person
6
+
7
+ after_destroy do
8
+ person.title = 'Minus one ordered post.'
9
+ person.save
10
+ end
6
11
  end
@@ -7,9 +7,8 @@ class Oscar
7
7
  def complain
8
8
  if destroy_after_save?
9
9
  destroy
10
- true
11
10
  else
12
- false
11
+ throw(:abort)
13
12
  end
14
13
  end
15
14
  end
@@ -36,6 +36,7 @@ class Person
36
36
  field :overridden_setter, type: String
37
37
  field :arrays, type: Array
38
38
  field :range, type: Range
39
+ field :species, type: Symbol
39
40
 
40
41
  index age: 1
41
42
  index addresses: 1
@@ -134,7 +135,8 @@ class Person
134
135
  self.score_without_rescoring = score
135
136
  end
136
137
 
137
- alias_method_chain :score=, :rescoring
138
+ alias_method :score_without_rescoring=, :score=
139
+ alias_method :score=, :score_with_rescoring=
138
140
 
139
141
  def update_addresses
140
142
  addresses.each do |address|
@@ -11,7 +11,6 @@ class Post
11
11
 
12
12
  belongs_to :person, counter_cache: true
13
13
  belongs_to :author, foreign_key: :author_id, class_name: "User"
14
- belongs_to :post_genre, foreign_key: :genre_id, counter_cache: true
15
14
  has_and_belongs_to_many :tags, before_add: :before_add_tag, after_add: :after_add_tag, before_remove: :before_remove_tag, after_remove: :after_remove_tag
16
15
  has_many :videos, validate: false
17
16
  has_many :roles, validate: false
@@ -1,8 +1,10 @@
1
1
  class Princess
2
2
  include Mongoid::Document
3
3
  field :primary_color
4
+ field :name, type: String
4
5
  def color
5
6
  primary_color.to_s
6
7
  end
7
8
  validates_presence_of :color
9
+ validates :name, presence: true, on: :update
8
10
  end