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
@@ -20,5 +20,12 @@ describe Mongoid::Composable do
20
20
  end
21
21
  end
22
22
  end
23
+
24
+ Mongoid::Composable::RESERVED_METHOD_NAMES.each do |name|
25
+
26
+ it "includes the method names #{name}" do
27
+ expect(methods).to include(name)
28
+ end
29
+ end
23
30
  end
24
31
  end
@@ -9,6 +9,12 @@ describe Mongoid::Config do
9
9
  end
10
10
  end
11
11
 
12
+ after do
13
+ Mongoid.configure do |config|
14
+ config.load_configuration(CONFIG)
15
+ end
16
+ end
17
+
12
18
  describe "#configured?" do
13
19
 
14
20
  after do
@@ -64,7 +70,7 @@ describe Mongoid::Config do
64
70
 
65
71
  before do
66
72
  if defined?(Rails)
67
- RailsTemp = Rails
73
+ RailsTemp = Rails unless defined?(RailsTemp)
68
74
  Object.send(:remove_const, :Rails)
69
75
  end
70
76
 
@@ -82,34 +88,54 @@ describe Mongoid::Config do
82
88
  end
83
89
  end
84
90
 
85
- context 'when the app_name is set in the config' do
86
-
87
- let(:conf) do
88
- CONFIG.merge(options: {app_name: 'admin-reporting'})
89
- end
91
+ context 'when the belongs_to_required_by_default option is not set in the config' do
90
92
 
91
93
  before do
94
+ Mongoid::Config.reset
92
95
  Mongoid.configure do |config|
93
- config.load_configuration(conf)
96
+ config.load_configuration(clients: CONFIG[:clients])
94
97
  end
95
98
  end
96
99
 
97
- it 'sets the Mongoid.app_name to the provided value' do
98
- expect(Mongoid.app_name).to eq('admin-reporting')
100
+ it 'sets the Mongoid.belongs_to_required_by_default value to true' do
101
+ expect(Mongoid.belongs_to_required_by_default).to be(true)
99
102
  end
100
103
  end
101
104
 
102
- context 'when the app_name is not set in the config' do
105
+ context 'when the belongs_to_required_by_default option is set in the config' do
103
106
 
104
107
  before do
105
- Mongoid::Config.reset
106
108
  Mongoid.configure do |config|
107
- config.load_configuration(CONFIG)
109
+ config.load_configuration(conf)
108
110
  end
109
111
  end
110
112
 
111
- it 'does not set the Mongoid.app_name option' do
112
- expect(Mongoid.app_name).to be_nil
113
+ context 'when the value is set to true' do
114
+
115
+ let(:conf) do
116
+ CONFIG.merge(options: { belongs_to_required_by_default: true })
117
+ end
118
+
119
+ it 'sets the Mongoid.belongs_to_required_by_default value to true' do
120
+ expect(Mongoid.belongs_to_required_by_default).to be(true)
121
+ end
122
+ end
123
+
124
+ context 'when the value is set to false' do
125
+
126
+ let(:conf) do
127
+ CONFIG.merge(options: { belongs_to_required_by_default: false })
128
+ end
129
+
130
+ before do
131
+ Mongoid.configure do |config|
132
+ config.load_configuration(conf)
133
+ end
134
+ end
135
+
136
+ it 'sets the Mongoid.belongs_to_required_by_default value to false' do
137
+ expect(Mongoid.belongs_to_required_by_default).to be(false)
138
+ end
113
139
  end
114
140
  end
115
141
 
@@ -148,12 +174,6 @@ describe Mongoid::Config do
148
174
  described_class.load!(file, :test)
149
175
  end
150
176
 
151
- after do
152
- Mongoid.configure do |config|
153
- config.load_configuration(CONFIG)
154
- end
155
- end
156
-
157
177
  it "sets the Mongoid logger level" do
158
178
  expect(Mongoid.logger.level).to eq(Logger::WARN)
159
179
  end
@@ -176,7 +196,7 @@ describe Mongoid::Config do
176
196
 
177
197
  after do
178
198
  if defined?(Rails)
179
- RailsTemp = Rails
199
+ RailsTemp = Rails unless defined?(RailsTemp)
180
200
  Object.send(:remove_const, :Rails)
181
201
  end
182
202
  end
@@ -73,29 +73,6 @@ describe Mongoid::Contextual::Atomic do
73
73
  expect(smiths.reload.members).to eq([ "Dave" ])
74
74
  end
75
75
  end
76
-
77
- context 'when the criteria has a collation', if: collation_supported? do
78
-
79
- let(:criteria) do
80
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
81
- end
82
-
83
- let(:context) do
84
- Mongoid::Contextual::Mongo.new(criteria)
85
- end
86
-
87
- before do
88
- context.add_to_set(members: "Dave", genres: "Electro")
89
- end
90
-
91
- it "does not add duplicates" do
92
- expect(depeche_mode.reload.members).to eq([ "Dave" ])
93
- end
94
-
95
- it "adds multiple operations" do
96
- expect(depeche_mode.reload.genres).to eq([ "Electro" ])
97
- end
98
- end
99
76
  end
100
77
 
101
78
  describe "#bit" do
@@ -144,29 +121,6 @@ describe Mongoid::Contextual::Atomic do
144
121
  expect(depeche_mode.reload.likes).to eq(14)
145
122
  end
146
123
  end
147
-
148
- context 'when the criteria has a collation', if: collation_supported? do
149
-
150
- let!(:depeche_mode) do
151
- Band.create(members: [ "Dave" ], likes: 60)
152
- end
153
-
154
- let(:criteria) do
155
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
156
- end
157
-
158
- let(:context) do
159
- Mongoid::Contextual::Mongo.new(criteria)
160
- end
161
-
162
- before do
163
- context.bit(likes: { and: 13, or: 10 })
164
- end
165
-
166
- it "performs the bitwise operation on initialized fields" do
167
- expect(depeche_mode.reload.likes).to eq(14)
168
- end
169
- end
170
124
  end
171
125
 
172
126
  describe "#inc" do
@@ -223,29 +177,6 @@ describe Mongoid::Contextual::Atomic do
223
177
  expect(beatles.reload.y).to eq(3)
224
178
  end
225
179
  end
226
-
227
- context 'when the criteria has a collation', if: collation_supported? do
228
-
229
- let!(:depeche_mode) do
230
- Band.create(members: [ "Dave" ])
231
- end
232
-
233
- let(:criteria) do
234
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
235
- end
236
-
237
- let(:context) do
238
- Mongoid::Contextual::Mongo.new(criteria)
239
- end
240
-
241
- before do
242
- context.inc(years: 1)
243
- end
244
-
245
- it "incs the value and read from alias" do
246
- expect(depeche_mode.reload.years).to eq(1)
247
- end
248
- end
249
180
  end
250
181
 
251
182
  describe "#pop" do
@@ -295,29 +226,6 @@ describe Mongoid::Contextual::Atomic do
295
226
  expect(smiths.reload.members).to be_nil
296
227
  end
297
228
  end
298
-
299
- context 'when the criteria has a collation', if: collation_supported? do
300
-
301
- let!(:depeche_mode) do
302
- Band.create(members: [ "Dave" ])
303
- end
304
-
305
- let(:criteria) do
306
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
307
- end
308
-
309
- let(:context) do
310
- Mongoid::Contextual::Mongo.new(criteria)
311
- end
312
-
313
- before do
314
- context.pop(members: 1)
315
- end
316
-
317
- it "pops the last element off the array" do
318
- expect(depeche_mode.reload.members).to be_empty
319
- end
320
- end
321
229
  end
322
230
 
323
231
  describe "#pull" do
@@ -349,276 +257,129 @@ describe Mongoid::Contextual::Atomic do
349
257
  it "does not error on non existent fields" do
350
258
  expect(smiths.reload.members).to be_nil
351
259
  end
352
-
353
- context 'when the criteria has a collation', if: collation_supported? do
354
-
355
- let!(:depeche_mode) do
356
- Band.create(members: [ "Dave" ])
357
- end
358
-
359
- let(:criteria) do
360
- Band.where(members: [ "DAVE" ]).collation(locale: 'en_US', strength: 2)
361
- end
362
-
363
- let(:context) do
364
- Mongoid::Contextual::Mongo.new(criteria)
365
- end
366
-
367
- before do
368
- context.pull(members: "DAVE")
369
- end
370
-
371
- it "pulls when the value is found" do
372
- expect(depeche_mode.reload.members).to be_empty
373
- end
374
- end
375
260
  end
376
261
 
377
262
  describe "#pull_all" do
378
263
 
379
- context 'when the criteria does not have a collation' do
380
-
381
- let!(:depeche_mode) do
382
- Band.create(members: [ "Dave", "Alan", "Fletch" ])
383
- end
384
-
385
- let!(:smiths) do
386
- Band.create
387
- end
388
-
389
- let(:criteria) do
390
- Band.all
391
- end
392
-
393
- let(:context) do
394
- Mongoid::Contextual::Mongo.new(criteria)
395
- end
396
-
397
- before do
398
- context.pull_all(members: [ "Alan", "Dave" ])
399
- end
400
-
401
- it "pulls when the values are found" do
402
- expect(depeche_mode.reload.members).to eq([ "Fletch" ])
403
- end
404
-
405
- it "does not error on non existent fields" do
406
- expect(smiths.reload.members).to be_nil
407
- end
264
+ let!(:depeche_mode) do
265
+ Band.create(members: [ "Dave", "Alan", "Fletch" ])
408
266
  end
409
267
 
410
- context 'when the criteria has a collation', if: collation_supported? do
268
+ let!(:smiths) do
269
+ Band.create
270
+ end
411
271
 
412
- let!(:depeche_mode) do
413
- Band.create(members: [ "Dave", "Alan", "Fletch" ])
414
- end
272
+ let(:criteria) do
273
+ Band.all
274
+ end
415
275
 
416
- let(:criteria) do
417
- Band.all.collation(locale: 'en_US', strength: 2)
418
- end
276
+ let(:context) do
277
+ Mongoid::Contextual::Mongo.new(criteria)
278
+ end
419
279
 
420
- let(:context) do
421
- Mongoid::Contextual::Mongo.new(criteria)
422
- end
280
+ before do
281
+ context.pull_all(members: [ "Alan", "Dave" ])
282
+ end
423
283
 
424
- before do
425
- context.pull_all(members: [ "ALAN", "DAVE" ])
426
- end
284
+ it "pulls when the values are found" do
285
+ expect(depeche_mode.reload.members).to eq([ "Fletch" ])
286
+ end
427
287
 
428
- it "pulls when the value is found" do
429
- expect(depeche_mode.reload.members).to eq([ "Fletch" ])
430
- end
288
+ it "does not error on non existent fields" do
289
+ expect(smiths.reload.members).to be_nil
431
290
  end
432
291
  end
433
292
 
434
293
  describe "#push" do
435
294
 
436
- context 'when the criteria does not have a collation' do
437
-
438
- let!(:depeche_mode) do
439
- Band.create(members: [ "Dave" ])
440
- end
441
-
442
- let!(:smiths) do
443
- Band.create
444
- end
445
-
446
- let(:criteria) do
447
- Band.all
448
- end
449
-
450
- let(:context) do
451
- Mongoid::Contextual::Mongo.new(criteria)
452
- end
453
-
454
- before do
455
- context.push(members: "Alan")
456
- end
457
-
458
- it "pushes the value to existing arrays" do
459
- expect(depeche_mode.reload.members).to eq([ "Dave", "Alan" ])
460
- end
461
-
462
- it "pushes to non existent fields" do
463
- expect(smiths.reload.members).to eq([ "Alan" ])
464
- end
295
+ let!(:depeche_mode) do
296
+ Band.create(members: [ "Dave" ])
465
297
  end
466
298
 
467
- context 'when the criteria has a collation', if: collation_supported? do
468
-
469
- let!(:depeche_mode) do
470
- Band.create(members: [ "Dave" ])
471
- end
472
-
473
- let!(:smiths) do
474
- Band.create
475
- end
299
+ let!(:smiths) do
300
+ Band.create
301
+ end
476
302
 
477
- let(:criteria) do
478
- Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
479
- end
303
+ let(:criteria) do
304
+ Band.all
305
+ end
480
306
 
481
- let(:context) do
482
- Mongoid::Contextual::Mongo.new(criteria)
483
- end
307
+ let(:context) do
308
+ Mongoid::Contextual::Mongo.new(criteria)
309
+ end
484
310
 
485
- before do
486
- context.push(members: "Alan")
487
- end
311
+ before do
312
+ context.push(members: "Alan")
313
+ end
488
314
 
489
- it "pushes the value to existing arrays" do
490
- expect(depeche_mode.reload.members).to eq([ "Dave", "Alan" ])
491
- end
315
+ it "pushes the value to existing arrays" do
316
+ expect(depeche_mode.reload.members).to eq([ "Dave", "Alan" ])
317
+ end
492
318
 
493
- it "pushes to non existent fields" do
494
- expect(smiths.reload.members).to be_nil
495
- end
319
+ it "pushes to non existent fields" do
320
+ expect(smiths.reload.members).to eq([ "Alan" ])
496
321
  end
497
322
  end
498
323
 
499
- describe "#push_each" do
324
+ describe "#push_all" do
500
325
 
501
- context 'when the criteria does not have a collation' do
502
-
503
- let!(:depeche_mode) do
504
- Band.create(members: [ "Dave" ])
505
- end
506
-
507
- let!(:smiths) do
508
- Band.create
509
- end
510
-
511
- let(:criteria) do
512
- Band.all
513
- end
514
-
515
- let(:context) do
516
- Mongoid::Contextual::Mongo.new(criteria)
517
- end
518
-
519
- before do
520
- context.push_each(members: [ "Alan", "Fletch" ])
521
- end
522
-
523
- it "pushes the values to existing arrays" do
524
- expect(depeche_mode.reload.members).to eq([ "Dave", "Alan", "Fletch" ])
525
- end
526
-
527
- it "pushes to non existent fields" do
528
- expect(smiths.reload.members).to eq([ "Alan", "Fletch" ])
529
- end
326
+ let!(:depeche_mode) do
327
+ Band.create(members: [ "Dave" ])
530
328
  end
531
329
 
532
- context 'when the criteria has a collation', if: collation_supported? do
533
-
534
- let!(:depeche_mode) do
535
- Band.create(members: [ "Dave" ])
536
- end
330
+ let!(:smiths) do
331
+ Band.create
332
+ end
537
333
 
538
- let!(:smiths) do
539
- Band.create
540
- end
334
+ let(:criteria) do
335
+ Band.all
336
+ end
541
337
 
542
- let(:criteria) do
543
- Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
544
- end
338
+ let(:context) do
339
+ Mongoid::Contextual::Mongo.new(criteria)
340
+ end
545
341
 
546
- let(:context) do
547
- Mongoid::Contextual::Mongo.new(criteria)
548
- end
342
+ before do
343
+ context.push_all(members: [ "Alan", "Fletch" ])
344
+ end
549
345
 
550
- before do
551
- context.push_each(members: [ "Alan", "Fletch" ])
552
- end
346
+ it "pushes the values to existing arrays" do
347
+ expect(depeche_mode.reload.members).to eq([ "Dave", "Alan", "Fletch" ])
348
+ end
553
349
 
554
- it "pushes the values to existing arrays" do
555
- expect(depeche_mode.reload.members).to eq([ "Dave", "Alan", "Fletch" ])
556
- end
350
+ it "pushes to non existent fields" do
351
+ expect(smiths.reload.members).to eq([ "Alan", "Fletch" ])
557
352
  end
558
353
  end
559
354
 
560
355
  describe "#rename" do
561
356
 
562
- context 'when the criteria does not have a collation' do
563
-
564
- let!(:depeche_mode) do
565
- Band.create(members: [ "Dave" ])
566
- end
567
-
568
- let!(:smiths) do
569
- Band.create
570
- end
571
-
572
- let(:criteria) do
573
- Band.all
574
- end
575
-
576
- let(:context) do
577
- Mongoid::Contextual::Mongo.new(criteria)
578
- end
579
-
580
- before do
581
- context.rename(members: :artists)
582
- end
583
-
584
- it "renames existing fields" do
585
- expect(depeche_mode.reload.artists).to eq([ "Dave" ])
586
- end
587
-
588
- it "does not rename non existent fields" do
589
- expect(smiths.reload).to_not respond_to(:artists)
590
- end
357
+ let!(:depeche_mode) do
358
+ Band.create(members: [ "Dave" ])
591
359
  end
592
360
 
593
- context 'when the criteria has a collation', if: collation_supported? do
594
-
595
- let!(:depeche_mode) do
596
- Band.create(members: [ "Dave" ])
597
- end
598
-
599
- let!(:smiths) do
600
- Band.create
601
- end
361
+ let!(:smiths) do
362
+ Band.create
363
+ end
602
364
 
603
- let(:criteria) do
604
- Band.where(members: ['DAVE']).collation(locale: 'en_US', strength: 2)
605
- end
365
+ let(:criteria) do
366
+ Band.all
367
+ end
606
368
 
607
- let(:context) do
608
- Mongoid::Contextual::Mongo.new(criteria)
609
- end
369
+ let(:context) do
370
+ Mongoid::Contextual::Mongo.new(criteria)
371
+ end
610
372
 
611
- before do
612
- context.rename(members: :artists)
613
- end
373
+ before do
374
+ context.rename(members: :artists)
375
+ end
614
376
 
615
- it "renames existing fields" do
616
- expect(depeche_mode.reload.artists).to eq([ "Dave" ])
617
- end
377
+ it "renames existing fields" do
378
+ expect(depeche_mode.reload.artists).to eq([ "Dave" ])
379
+ end
618
380
 
619
- it "does not rename non existent fields" do
620
- expect(smiths.reload).to_not respond_to(:artists)
621
- end
381
+ it "does not rename non existent fields" do
382
+ expect(smiths.reload).to_not respond_to(:artists)
622
383
  end
623
384
  end
624
385
 
@@ -748,32 +509,5 @@ describe Mongoid::Contextual::Atomic do
748
509
  end
749
510
  end
750
511
  end
751
-
752
- context 'when the criteria has a collation', if: collation_supported? do
753
-
754
- let!(:depeche_mode) do
755
- Band.create(name: "Depeche Mode", years: 10)
756
- end
757
-
758
- let!(:new_order) do
759
- Band.create(name: "New Order", years: 10)
760
- end
761
-
762
- let(:criteria) do
763
- Band.where(name: 'DEPECHE MODE').collation(locale: 'en_US', strength: 2)
764
- end
765
-
766
- let(:context) do
767
- Mongoid::Contextual::Mongo.new(criteria)
768
- end
769
-
770
- before do
771
- context.unset(:name)
772
- end
773
-
774
- it "unsets the unaliased field" do
775
- expect(depeche_mode.reload.name).to be_nil
776
- end
777
- end
778
512
  end
779
513
  end