mongoid 5.4.1 → 6.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (260) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +3 -3
  3. data/lib/config/locales/en.yml +19 -0
  4. data/lib/mongoid.rb +4 -4
  5. data/lib/mongoid/atomic.rb +2 -2
  6. data/lib/mongoid/atomic/modifiers.rb +8 -12
  7. data/lib/mongoid/attributes.rb +22 -21
  8. data/lib/mongoid/attributes/readonly.rb +22 -0
  9. data/lib/mongoid/cacheable.rb +36 -0
  10. data/lib/mongoid/changeable.rb +36 -0
  11. data/lib/mongoid/clients.rb +8 -63
  12. data/lib/mongoid/clients/options.rb +55 -250
  13. data/lib/mongoid/clients/storage_options.rb +1 -69
  14. data/lib/mongoid/composable.rb +29 -3
  15. data/lib/mongoid/config.rb +1 -0
  16. data/lib/mongoid/contextual/atomic.rb +5 -8
  17. data/lib/mongoid/contextual/map_reduce.rb +0 -4
  18. data/lib/mongoid/contextual/memory.rb +2 -2
  19. data/lib/mongoid/contextual/mongo.rb +40 -22
  20. data/lib/mongoid/contextual/none.rb +12 -0
  21. data/lib/mongoid/copyable.rb +13 -6
  22. data/lib/mongoid/criteria.rb +5 -2
  23. data/lib/mongoid/criteria/marshalable.rb +2 -2
  24. data/lib/mongoid/criteria/modifiable.rb +17 -1
  25. data/lib/mongoid/criteria/options.rb +25 -0
  26. data/lib/mongoid/criteria/queryable.rb +87 -0
  27. data/lib/mongoid/criteria/queryable/aggregable.rb +120 -0
  28. data/lib/mongoid/criteria/queryable/extensions.rb +28 -0
  29. data/lib/mongoid/criteria/queryable/extensions/array.rb +185 -0
  30. data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +37 -0
  31. data/lib/mongoid/criteria/queryable/extensions/boolean.rb +34 -0
  32. data/lib/mongoid/criteria/queryable/extensions/date.rb +63 -0
  33. data/lib/mongoid/criteria/queryable/extensions/date_time.rb +53 -0
  34. data/lib/mongoid/criteria/queryable/extensions/hash.rb +200 -0
  35. data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +86 -0
  36. data/lib/mongoid/criteria/queryable/extensions/numeric.rb +90 -0
  37. data/lib/mongoid/criteria/queryable/extensions/object.rb +206 -0
  38. data/lib/mongoid/criteria/queryable/extensions/range.rb +70 -0
  39. data/lib/mongoid/criteria/queryable/extensions/regexp.rb +79 -0
  40. data/lib/mongoid/criteria/queryable/extensions/set.rb +34 -0
  41. data/lib/mongoid/criteria/queryable/extensions/string.rb +137 -0
  42. data/lib/mongoid/criteria/queryable/extensions/symbol.rb +79 -0
  43. data/lib/mongoid/criteria/queryable/extensions/time.rb +60 -0
  44. data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +54 -0
  45. data/lib/mongoid/criteria/queryable/forwardable.rb +65 -0
  46. data/lib/mongoid/criteria/queryable/key.rb +103 -0
  47. data/lib/mongoid/criteria/queryable/macroable.rb +27 -0
  48. data/lib/mongoid/criteria/queryable/mergeable.rb +271 -0
  49. data/lib/mongoid/criteria/queryable/optional.rb +429 -0
  50. data/lib/mongoid/criteria/queryable/options.rb +153 -0
  51. data/lib/mongoid/criteria/queryable/pipeline.rb +111 -0
  52. data/lib/mongoid/criteria/queryable/selectable.rb +662 -0
  53. data/lib/mongoid/criteria/queryable/selector.rb +212 -0
  54. data/lib/mongoid/criteria/queryable/smash.rb +104 -0
  55. data/lib/mongoid/document.rb +30 -37
  56. data/lib/mongoid/errors.rb +2 -0
  57. data/lib/mongoid/errors/ambiguous_relationship.rb +1 -1
  58. data/lib/mongoid/errors/in_memory_collation_not_supported.rb +1 -1
  59. data/lib/mongoid/errors/invalid_field.rb +2 -2
  60. data/lib/mongoid/errors/invalid_persistence_option.rb +29 -0
  61. data/lib/mongoid/errors/invalid_relation.rb +66 -0
  62. data/lib/mongoid/evolvable.rb +1 -1
  63. data/lib/mongoid/extensions.rb +0 -4
  64. data/lib/mongoid/extensions/big_decimal.rb +17 -8
  65. data/lib/mongoid/extensions/date.rb +4 -1
  66. data/lib/mongoid/extensions/decimal128.rb +3 -3
  67. data/lib/mongoid/extensions/hash.rb +1 -0
  68. data/lib/mongoid/extensions/string.rb +4 -3
  69. data/lib/mongoid/extensions/time.rb +4 -1
  70. data/lib/mongoid/fields/validators/macro.rb +18 -0
  71. data/lib/mongoid/findable.rb +2 -2
  72. data/lib/mongoid/indexable.rb +15 -13
  73. data/lib/mongoid/interceptable.rb +5 -22
  74. data/lib/mongoid/matchable.rb +13 -7
  75. data/lib/mongoid/matchable/all.rb +2 -2
  76. data/lib/mongoid/matchable/and.rb +3 -3
  77. data/lib/mongoid/matchable/default.rb +2 -2
  78. data/lib/mongoid/matchable/elem_match.rb +28 -0
  79. data/lib/mongoid/matchable/exists.rb +2 -2
  80. data/lib/mongoid/matchable/gt.rb +4 -2
  81. data/lib/mongoid/matchable/gte.rb +4 -2
  82. data/lib/mongoid/matchable/in.rb +2 -2
  83. data/lib/mongoid/matchable/lt.rb +4 -2
  84. data/lib/mongoid/matchable/lte.rb +4 -2
  85. data/lib/mongoid/matchable/ne.rb +2 -2
  86. data/lib/mongoid/matchable/nin.rb +2 -2
  87. data/lib/mongoid/matchable/or.rb +3 -3
  88. data/lib/mongoid/matchable/regexp.rb +3 -3
  89. data/lib/mongoid/matchable/size.rb +2 -2
  90. data/lib/mongoid/persistable.rb +3 -5
  91. data/lib/mongoid/persistable/creatable.rb +2 -2
  92. data/lib/mongoid/persistable/deletable.rb +1 -1
  93. data/lib/mongoid/persistable/settable.rb +1 -1
  94. data/lib/mongoid/persistable/updatable.rb +5 -12
  95. data/lib/mongoid/persistable/upsertable.rb +1 -1
  96. data/lib/mongoid/persistence_context.rb +215 -0
  97. data/lib/mongoid/query_cache.rb +3 -6
  98. data/lib/mongoid/relations/accessors.rb +3 -0
  99. data/lib/mongoid/relations/auto_save.rb +12 -4
  100. data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +4 -4
  101. data/lib/mongoid/relations/counter_cache.rb +15 -5
  102. data/lib/mongoid/relations/eager.rb +6 -11
  103. data/lib/mongoid/relations/eager/base.rb +3 -3
  104. data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +2 -2
  105. data/lib/mongoid/relations/eager/has_many.rb +1 -1
  106. data/lib/mongoid/relations/embedded/batchable.rb +12 -36
  107. data/lib/mongoid/relations/embedded/in.rb +13 -1
  108. data/lib/mongoid/relations/embedded/many.rb +28 -10
  109. data/lib/mongoid/relations/embedded/one.rb +14 -1
  110. data/lib/mongoid/relations/macros.rb +9 -1
  111. data/lib/mongoid/relations/metadata.rb +3 -3
  112. data/lib/mongoid/relations/options.rb +2 -2
  113. data/lib/mongoid/relations/proxy.rb +1 -31
  114. data/lib/mongoid/relations/referenced/in.rb +19 -10
  115. data/lib/mongoid/relations/referenced/many.rb +23 -17
  116. data/lib/mongoid/relations/referenced/many_to_many.rb +20 -13
  117. data/lib/mongoid/relations/referenced/one.rb +15 -1
  118. data/lib/mongoid/relations/synchronization.rb +11 -11
  119. data/lib/mongoid/relations/touchable.rb +6 -3
  120. data/lib/mongoid/reloadable.rb +1 -1
  121. data/lib/mongoid/serializable.rb +1 -1
  122. data/lib/mongoid/traversable.rb +1 -1
  123. data/lib/mongoid/validatable/uniqueness.rb +1 -2
  124. data/lib/mongoid/version.rb +1 -1
  125. data/lib/rails/generators/mongoid/config/templates/mongoid.yml +14 -3
  126. data/spec/app/models/album.rb +5 -1
  127. data/spec/app/models/artist.rb +21 -0
  128. data/spec/app/models/book.rb +2 -1
  129. data/spec/app/models/dokument.rb +1 -0
  130. data/spec/app/models/ordered_post.rb +5 -0
  131. data/spec/app/models/oscar.rb +1 -2
  132. data/spec/app/models/page.rb +1 -1
  133. data/spec/app/models/person.rb +3 -3
  134. data/spec/app/models/princess.rb +2 -0
  135. data/spec/app/models/record.rb +1 -0
  136. data/spec/app/models/subscription.rb +1 -0
  137. data/spec/app/models/thing.rb +1 -1
  138. data/spec/config/mongoid.yml +15 -0
  139. data/spec/mongoid/atomic/modifiers_spec.rb +17 -17
  140. data/spec/mongoid/atomic_spec.rb +17 -17
  141. data/spec/mongoid/attributes/nested_spec.rb +14 -14
  142. data/spec/mongoid/attributes/readonly_spec.rb +87 -44
  143. data/spec/mongoid/attributes_spec.rb +90 -5
  144. data/spec/mongoid/cacheable_spec.rb +112 -0
  145. data/spec/mongoid/changeable_spec.rb +58 -0
  146. data/spec/mongoid/clients/factory_spec.rb +31 -3
  147. data/spec/mongoid/clients/options_spec.rb +382 -96
  148. data/spec/mongoid/clients_spec.rb +243 -101
  149. data/spec/mongoid/composable_spec.rb +7 -0
  150. data/spec/mongoid/config_spec.rb +67 -11
  151. data/spec/mongoid/contextual/atomic_spec.rb +3 -3
  152. data/spec/mongoid/contextual/mongo_spec.rb +165 -20
  153. data/spec/mongoid/contextual/none_spec.rb +15 -0
  154. data/spec/mongoid/copyable_spec.rb +13 -4
  155. data/spec/mongoid/criteria/modifiable_spec.rb +239 -7
  156. data/spec/mongoid/criteria/options_spec.rb +29 -0
  157. data/spec/mongoid/criteria/queryable/aggregable_spec.rb +370 -0
  158. data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +523 -0
  159. data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +59 -0
  160. data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +58 -0
  161. data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +213 -0
  162. data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +330 -0
  163. data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +405 -0
  164. data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +58 -0
  165. data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +65 -0
  166. data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +327 -0
  167. data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +65 -0
  168. data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +77 -0
  169. data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +108 -0
  170. data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +309 -0
  171. data/spec/mongoid/{extensions/origin → criteria/queryable/extensions}/regexp_raw_spec.rb +2 -2
  172. data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +90 -0
  173. data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +39 -0
  174. data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +302 -0
  175. data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +167 -0
  176. data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +376 -0
  177. data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +347 -0
  178. data/spec/mongoid/criteria/queryable/forwardable_spec.rb +87 -0
  179. data/spec/mongoid/criteria/queryable/key_spec.rb +52 -0
  180. data/spec/mongoid/criteria/queryable/mergeable_spec.rb +49 -0
  181. data/spec/mongoid/criteria/queryable/optional_spec.rb +1799 -0
  182. data/spec/mongoid/criteria/queryable/options_spec.rb +360 -0
  183. data/spec/mongoid/criteria/queryable/pipeline_spec.rb +200 -0
  184. data/spec/mongoid/criteria/queryable/queryable_spec.rb +137 -0
  185. data/spec/mongoid/criteria/queryable/selectable_spec.rb +4174 -0
  186. data/spec/mongoid/criteria/queryable/selector_spec.rb +844 -0
  187. data/spec/mongoid/criteria/queryable/smash_spec.rb +30 -0
  188. data/spec/mongoid/criteria_spec.rb +152 -21
  189. data/spec/mongoid/document_spec.rb +37 -88
  190. data/spec/mongoid/errors/invalid_relation_spec.rb +37 -0
  191. data/spec/mongoid/errors/mongoid_error_spec.rb +6 -3
  192. data/spec/mongoid/extensions/big_decimal_spec.rb +320 -18
  193. data/spec/mongoid/extensions/boolean_spec.rb +14 -0
  194. data/spec/mongoid/extensions/date_spec.rb +2 -6
  195. data/spec/mongoid/extensions/date_time_spec.rb +2 -6
  196. data/spec/mongoid/extensions/decimal128_spec.rb +1 -1
  197. data/spec/mongoid/extensions/float_spec.rb +8 -1
  198. data/spec/mongoid/extensions/hash_spec.rb +15 -0
  199. data/spec/mongoid/extensions/integer_spec.rb +8 -1
  200. data/spec/mongoid/extensions/object_spec.rb +11 -0
  201. data/spec/mongoid/extensions/string_spec.rb +21 -0
  202. data/spec/mongoid/extensions/time_spec.rb +2 -6
  203. data/spec/mongoid/extensions/time_with_zone_spec.rb +2 -6
  204. data/spec/mongoid/findable_spec.rb +46 -1
  205. data/spec/mongoid/indexable_spec.rb +15 -3
  206. data/spec/mongoid/interceptable_spec.rb +68 -10
  207. data/spec/mongoid/matchable/all_spec.rb +4 -4
  208. data/spec/mongoid/matchable/and_spec.rb +10 -10
  209. data/spec/mongoid/matchable/default_spec.rb +12 -12
  210. data/spec/mongoid/matchable/elem_match_spec.rb +86 -0
  211. data/spec/mongoid/matchable/exists_spec.rb +5 -5
  212. data/spec/mongoid/matchable/gt_spec.rb +18 -7
  213. data/spec/mongoid/matchable/gte_spec.rb +17 -7
  214. data/spec/mongoid/matchable/in_spec.rb +5 -5
  215. data/spec/mongoid/matchable/lt_spec.rb +18 -7
  216. data/spec/mongoid/matchable/lte_spec.rb +18 -7
  217. data/spec/mongoid/matchable/ne_spec.rb +5 -5
  218. data/spec/mongoid/matchable/nin_spec.rb +5 -5
  219. data/spec/mongoid/matchable/or_spec.rb +7 -7
  220. data/spec/mongoid/matchable/regexp_spec.rb +5 -5
  221. data/spec/mongoid/matchable/size_spec.rb +3 -3
  222. data/spec/mongoid/matchable_spec.rb +173 -53
  223. data/spec/mongoid/persistable/creatable_spec.rb +7 -2
  224. data/spec/mongoid/persistable/deletable_spec.rb +16 -1
  225. data/spec/mongoid/persistable/destroyable_spec.rb +6 -2
  226. data/spec/mongoid/persistable/savable_spec.rb +35 -30
  227. data/spec/mongoid/persistable/settable_spec.rb +45 -29
  228. data/spec/mongoid/persistable/updatable_spec.rb +184 -5
  229. data/spec/mongoid/persistence_context_spec.rb +680 -0
  230. data/spec/mongoid/positional_spec.rb +10 -10
  231. data/spec/mongoid/query_cache_spec.rb +89 -0
  232. data/spec/mongoid/relations/accessors_spec.rb +1 -1
  233. data/spec/mongoid/relations/auto_save_spec.rb +39 -6
  234. data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +4 -4
  235. data/spec/mongoid/relations/builders_spec.rb +37 -10
  236. data/spec/mongoid/relations/counter_cache_spec.rb +64 -3
  237. data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +16 -0
  238. data/spec/mongoid/relations/eager_spec.rb +40 -0
  239. data/spec/mongoid/relations/embedded/many_spec.rb +63 -47
  240. data/spec/mongoid/relations/embedded/one_spec.rb +2 -1
  241. data/spec/mongoid/relations/macros_spec.rb +395 -7
  242. data/spec/mongoid/relations/metadata_spec.rb +15 -1
  243. data/spec/mongoid/relations/proxy_spec.rb +27 -1
  244. data/spec/mongoid/relations/referenced/in_spec.rb +41 -1
  245. data/spec/mongoid/relations/referenced/many_spec.rb +13 -25
  246. data/spec/mongoid/relations/referenced/many_to_many_spec.rb +14 -26
  247. data/spec/mongoid/relations/synchronization_spec.rb +48 -2
  248. data/spec/mongoid/relations/touchable_spec.rb +40 -0
  249. data/spec/mongoid/reloadable_spec.rb +51 -0
  250. data/spec/mongoid/serializable_spec.rb +0 -50
  251. data/spec/mongoid/validatable/presence_spec.rb +1 -1
  252. data/spec/mongoid/validatable/uniqueness_spec.rb +18 -9
  253. data/spec/mongoid/validatable_spec.rb +16 -0
  254. data/spec/spec_helper.rb +20 -11
  255. metadata +524 -469
  256. checksums.yaml.gz.sig +0 -0
  257. data.tar.gz.sig +0 -0
  258. data/lib/mongoid/clients/thread_options.rb +0 -19
  259. data/lib/mongoid/extensions/origin/regexp_raw.rb +0 -43
  260. metadata.gz.sig +0 -0
@@ -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?
@@ -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.1.1"
4
4
  end
@@ -34,11 +34,13 @@ development:
34
34
  # - 'dbOwner'
35
35
 
36
36
  # Change the default authentication mechanism. Valid options are: :scram,
37
- # :mongodb_cr, :mongodb_x509, and :plain. (default on 3.0 is :scram, default
38
- # on 2.4 and 2.6 is :plain)
37
+ # :mongodb_cr, :mongodb_x509, and :plain. Note that all authentication
38
+ # mechanisms require username and password, with the exception of :mongodb_x509.
39
+ # Default on mongoDB 3.0 is :scram, default on 2.4 and 2.6 is :plain.
39
40
  # auth_mech: :scram
40
41
 
41
- # The database or source to authenticate the user against. (default: admin)
42
+ # The database or source to authenticate the user against.
43
+ # (default: the database specified above or admin)
42
44
  # auth_source: admin
43
45
 
44
46
  # Force a the driver cluster to behave in a certain manner instead of auto-
@@ -120,6 +122,10 @@ development:
120
122
  # existing method. (default: false)
121
123
  # scope_overwrite_exception: false
122
124
 
125
+ # Raise an error when defining a field with the same name as an
126
+ # existing method. (default: false)
127
+ # duplicate_fields_exception: false
128
+
123
129
  # Use Active Support's time zone in conversions. (default: true)
124
130
  # use_activesupport_time_zone: true
125
131
 
@@ -131,6 +137,11 @@ development:
131
137
  # otherwise.(default: :info)
132
138
  # log_level: :info
133
139
 
140
+ # Control whether `belongs_to` association is required. By default
141
+ # `belongs_to` will trigger a validation error if the association
142
+ # is not present. (default: true)
143
+ # belongs_to_required_by_default: true
144
+
134
145
  # Application name that is printed to the mongodb logs upon establishing a
135
146
  # connection in server versions >= 3.4. Note that the name cannot exceed 128 bytes.
136
147
  # app_name: MyApplicationName
@@ -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
@@ -1,6 +1,7 @@
1
1
  class Book
2
2
  include Mongoid::Document
3
3
  include Mongoid::Attributes::Dynamic
4
+ include Mongoid::Timestamps
4
5
  field :title, type: String
5
6
  field :chapters, type: Integer
6
7
  belongs_to :series
@@ -11,5 +12,5 @@ class Book
11
12
  doc.chapters = 5
12
13
  end
13
14
 
14
- embeds_many :pages
15
+ embeds_many :pages, cascade_callbacks: true
15
16
  end
@@ -2,4 +2,5 @@ class Dokument
2
2
  include Mongoid::Document
3
3
  include Mongoid::Timestamps
4
4
  embeds_many :addresses, as: :addressable, validate: false
5
+ field :title
5
6
  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
@@ -3,7 +3,7 @@ class Page
3
3
  embedded_in :quiz
4
4
  embeds_many :page_questions
5
5
 
6
- embedded_in :book
6
+ embedded_in :book, touch: true
7
7
  embeds_many :notes
8
8
  field :content, :type => String
9
9
 
@@ -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
@@ -43,8 +44,6 @@ class Person
43
44
  index name: 1
44
45
  index title: 1
45
46
 
46
- index({ ssn: 1 }, { unique: true })
47
-
48
47
  attr_reader :rescored
49
48
 
50
49
  embeds_many :favorites, order: :title.desc, inverse_of: :perp, validate: false
@@ -134,7 +133,8 @@ class Person
134
133
  self.score_without_rescoring = score
135
134
  end
136
135
 
137
- alias_method_chain :score=, :rescoring
136
+ alias_method :score_without_rescoring=, :score=
137
+ alias_method :score=, :score_with_rescoring=
138
138
 
139
139
  def update_addresses
140
140
  addresses.each do |address|
@@ -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
@@ -1,6 +1,7 @@
1
1
  class Record
2
2
  include Mongoid::Document
3
3
  field :name, type: String
4
+ field :producers, type: Array
4
5
 
5
6
  field :before_create_called, type: Mongoid::Boolean, default: false
6
7
  field :before_save_called, type: Mongoid::Boolean, default: false
@@ -1,4 +1,5 @@
1
1
  class Subscription
2
2
  include Mongoid::Document
3
3
  has_many :packs, class_name: "ShippingPack"
4
+ field :packs_count, type: Integer
4
5
  end
@@ -4,6 +4,6 @@ class Thing
4
4
  embedded_in :actor
5
5
 
6
6
  def dont_do_it
7
- false
7
+ throw(:abort)
8
8
  end
9
9
  end
@@ -17,6 +17,10 @@ test:
17
17
  database: reports
18
18
  hosts:
19
19
  - <%=ENV["MONGOID_SPEC_HOST"]%>:<%=ENV["MONGOID_SPEC_PORT"]%>
20
+ options:
21
+ user: "mongoid-user"
22
+ password: "password"
23
+ auth_source: "admin"
20
24
  options:
21
25
  include_root_in_json: false
22
26
  include_type_for_serialization: false
@@ -26,4 +30,15 @@ test:
26
30
  use_activesupport_time_zone: true
27
31
  use_utc: false
28
32
  log_level: :warn
33
+ belongs_to_required_by_default: false
29
34
  app_name: 'testing'
35
+ test_with_max_staleness:
36
+ clients:
37
+ default:
38
+ database: mongoid_test
39
+ hosts:
40
+ - <%=ENV["MONGOID_SPEC_HOST"]%>:<%=ENV["MONGOID_SPEC_PORT"]%>
41
+ options:
42
+ read:
43
+ mode: :primary_preferred
44
+ max_staleness: 100
@@ -211,10 +211,10 @@ describe Mongoid::Atomic::Modifiers do
211
211
 
212
212
  it "adds the push all modifiers" do
213
213
  expect(modifiers).to eq(
214
- { "$push" =>
215
- { "addresses" => { '$each' => [
214
+ { "$pushAll" =>
215
+ { "addresses" => [
216
216
  { "street" => "Oxford St" }
217
- ] }
217
+ ]
218
218
  }
219
219
  }
220
220
  )
@@ -238,11 +238,11 @@ describe Mongoid::Atomic::Modifiers do
238
238
 
239
239
  it "adds the push all modifiers" do
240
240
  expect(modifiers).to eq(
241
- { "$push" =>
242
- { "addresses" => { '$each' => [
241
+ { "$pushAll" =>
242
+ { "addresses" => [
243
243
  { "street" => "Hobrechtstr." },
244
244
  { "street" => "Pflugerstr." }
245
- ] }
245
+ ]
246
246
  }
247
247
  }
248
248
  )
@@ -270,10 +270,10 @@ describe Mongoid::Atomic::Modifiers do
270
270
  it "adds the push all modifiers to the conflicts hash" do
271
271
  expect(modifiers).to eq(
272
272
  { "$set" => { "addresses.0.street" => "Bond" },
273
- conflicts: { "$push" =>
274
- { "addresses" => { '$each' => [
273
+ conflicts: { "$pushAll" =>
274
+ { "addresses" => [
275
275
  { "street" => "Oxford St" }
276
- ] }
276
+ ]
277
277
  }
278
278
  }
279
279
  }
@@ -300,10 +300,10 @@ describe Mongoid::Atomic::Modifiers do
300
300
  expect(modifiers).to eq(
301
301
  { "$pullAll" => {
302
302
  "addresses" => { "street" => "Bond St" }},
303
- conflicts: { "$push" =>
304
- { "addresses" => { '$each' => [
303
+ conflicts: { "$pushAll" =>
304
+ { "addresses" => [
305
305
  { "street" => "Oxford St" }
306
- ] }
306
+ ]
307
307
  }
308
308
  }
309
309
  }
@@ -328,12 +328,12 @@ describe Mongoid::Atomic::Modifiers do
328
328
 
329
329
  it "adds the push all modifiers to the conflicts hash" do
330
330
  expect(modifiers).to eq(
331
- { "$push" => {
332
- "addresses.0.locations" => {'$each' => [{ "street" => "Bond St" }]}},
333
- conflicts: { "$push" =>
334
- { "addresses" => { '$each' => [
331
+ { "$pushAll" => {
332
+ "addresses.0.locations" => [{ "street" => "Bond St" }]},
333
+ conflicts: { "$pushAll" =>
334
+ { "addresses" => [
335
335
  { "street" => "Oxford St" }
336
- ] }
336
+ ]
337
337
  }
338
338
  }
339
339
  }
@@ -76,13 +76,13 @@ describe Mongoid::Atomic do
76
76
  person.addresses.build(street: "Oxford St")
77
77
  end
78
78
 
79
- it "returns a $set and $push and $each for modifications" do
79
+ it "returns a $set and $pushAll for modifications" do
80
80
  expect(person.atomic_updates).to eq(
81
81
  {
82
82
  "$set" => { "title" => "Sir" },
83
- "$push" => { "addresses" => {'$each' => [
83
+ "$pushAll" => { "addresses" => [
84
84
  { "_id" => "oxford-st", "street" => "Oxford St" }
85
- ] } }
85
+ ]}
86
86
  }
87
87
  )
88
88
  end
@@ -197,8 +197,8 @@ describe Mongoid::Atomic do
197
197
  "addresses.0.street" => "Bond St"
198
198
  },
199
199
  conflicts: {
200
- "$push" => {
201
- "addresses.0.locations" => { '$each' => [{ "_id" => location.id, "name" => "Home" }] }
200
+ "$pushAll" => {
201
+ "addresses.0.locations" => [{ "_id" => location.id, "name" => "Home" }]
202
202
  }
203
203
  }
204
204
  }
@@ -215,8 +215,8 @@ describe Mongoid::Atomic do
215
215
  "addresses.0.street" => "Bond St"
216
216
  },
217
217
  conflicts: {
218
- "$push" => {
219
- "addresses.0.locations" => { '$each' => [{ "_id" => location.id, "name" => "Home" }] }
218
+ "$pushAll" => {
219
+ "addresses.0.locations" => [{ "_id" => location.id, "name" => "Home" }]
220
220
  }
221
221
  }
222
222
  }
@@ -263,15 +263,15 @@ describe Mongoid::Atomic do
263
263
  "addresses.0.street" => "Bond St"
264
264
  },
265
265
  conflicts: {
266
- "$push" => {
267
- "addresses" => { '$each' => [{
266
+ "$pushAll" => {
267
+ "addresses" => [{
268
268
  "_id" => new_address.id,
269
269
  "street" => "Another",
270
270
  "locations" => [
271
271
  "_id" => location.id,
272
272
  "name" => "Home"
273
273
  ]
274
- }] }
274
+ }]
275
275
  }
276
276
  }
277
277
  }
@@ -310,15 +310,15 @@ describe Mongoid::Atomic do
310
310
  "$set" => {
311
311
  "title" => "Sir"
312
312
  },
313
- "$push" => {
314
- "addresses" => { '$each' => [{
313
+ "$pushAll" => {
314
+ "addresses" => [{
315
315
  "_id" => new_address.id,
316
316
  "street" => "Ipanema",
317
317
  "locations" => [
318
318
  "_id" => location.id,
319
319
  "name" => "Home"
320
320
  ]
321
- }] }
321
+ }]
322
322
  },
323
323
  conflicts: {
324
324
  "$set" => { "addresses.0.street"=>"Bond St" }
@@ -339,21 +339,21 @@ describe Mongoid::Atomic do
339
339
  address.locations.build(name: "Home")
340
340
  end
341
341
 
342
- it "returns the proper $sets and $pushs and $eaches for all levels" do
342
+ it "returns the proper $sets and $pushAlls for all levels" do
343
343
  expect(person.atomic_updates).to eq(
344
344
  {
345
345
  "$set" => {
346
346
  "title" => "Sir",
347
347
  },
348
- "$push" => {
349
- "addresses" => { "$each" => [{
348
+ "$pushAll" => {
349
+ "addresses" => [{
350
350
  "_id" => address.id,
351
351
  "street" => "Another",
352
352
  "locations" => [
353
353
  "_id" => location.id,
354
354
  "name" => "Home"
355
355
  ]
356
- }] }
356
+ }]
357
357
  }
358
358
  }
359
359
  )