mongoid 5.4.1 → 6.0.0.beta

Sign up to get free protection for your applications and to get access to all the features.
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