mongoid 5.1.0 → 5.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8d93faa3fdc0513cf6d8daafdf1ab90fd4744fd8
4
- data.tar.gz: 77316de1b6bdd99154eacba90bd510b2ca636fdb
3
+ metadata.gz: ca6e4c501995a1483885dd73ee311c6f1ef818db
4
+ data.tar.gz: 7637900bde88e2c32c0b40e4f6ad09b82f1fd409
5
5
  SHA512:
6
- metadata.gz: 9397767bc7a5cfb49438682bea971816f69a6053beb740cc2ab17fec5add3e59f08d72958464b762d3ad399612479b99810b629969ca184c1bebc65fb661c1b2
7
- data.tar.gz: 0725f14ab25f26b0bc29e73b721d9bfe84de5a83119a7fd390957ef4c81c90d8a270725bb42d56b7f3e782cf059e9292815ba8c683585d80ba813ed20e20f809
6
+ metadata.gz: a471975f86db1e3f63fca5267f86722946ca19352445e22003b2181b279dfce7510d141037da8f14ccd4f81b8477dcecc07772ea61fbfe424f412ba637aabf0d
7
+ data.tar.gz: 42232d489eb95693bc6e0fcc49fa84b19e7b1ce5365b3a16fb2c3e676019208b50b3791139463a3d7d60089c1d7ae5ca1554046427a4f177c7feb06b861ec80c
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -246,7 +246,7 @@ module Mongoid
246
246
  private
247
247
 
248
248
  def set_log_levels
249
- Mongoid.logger.level = Mongoid::Config.log_level
249
+ Mongoid.logger.level = Mongoid::Config.log_level unless defined?(::Rails)
250
250
  Mongo::Logger.logger.level = Mongoid.logger.level
251
251
  end
252
252
 
@@ -20,7 +20,7 @@ module Mongoid
20
20
  condition.keys.each do |k|
21
21
  key = k
22
22
  value = condition[k]
23
- return false unless Matchable.matcher(document, key, value).matches?(value)
23
+ return false unless document.matches?(key => value)
24
24
  end
25
25
  end
26
26
  true
@@ -21,7 +21,7 @@ module Mongoid
21
21
  condition.keys.each do |k|
22
22
  key = k
23
23
  value = condition[k]
24
- res &&= Matchable.matcher(document, key, value).matches?(value)
24
+ res &&= document.matches?(key => value)
25
25
  break unless res
26
26
  end
27
27
  return res if res
@@ -97,14 +97,7 @@ module Mongoid
97
97
  def process_attributes(parent, attrs)
98
98
  return if reject?(parent, attrs)
99
99
  if id = attrs.extract_id
100
- first = existing.first
101
- converted = first ? convert_id(first.class, id) : id
102
- doc = existing.find(converted)
103
- if destroyable?(attrs)
104
- destroy(parent, existing, doc)
105
- else
106
- update_document(doc, attrs)
107
- end
100
+ update_nested_relation(parent, id, attrs)
108
101
  else
109
102
  existing.push(Factory.build(metadata.klass, attrs)) unless destroyable?(attrs)
110
103
  end
@@ -167,6 +160,38 @@ module Mongoid
167
160
  doc.update_attributes(attrs)
168
161
  end
169
162
  end
163
+
164
+ # Update nested relation.
165
+ #
166
+ # @api private
167
+ #
168
+ # @example Update nested relation.
169
+ # builder.update_nested_relation(parent, id, attrs)
170
+ #
171
+ # @param [ Document ] parent The parent document.
172
+ # @param [ String, BSON::ObjectId ] id of the related document.
173
+ # @param [ Hash ] attrs The single document attributes to process.
174
+ #
175
+ # @since 6.0.0
176
+ def update_nested_relation(parent, id, attrs)
177
+ first = existing.first
178
+ converted = first ? convert_id(first.class, id) : id
179
+
180
+ if existing.where(id: converted).exists?
181
+ # document exists in relation
182
+ doc = existing.find(converted)
183
+ if destroyable?(attrs)
184
+ destroy(parent, existing, doc)
185
+ else
186
+ update_document(doc, attrs)
187
+ end
188
+ else
189
+ # push existing document to relation
190
+ doc = existing.unscoped.find(converted)
191
+ update_document(doc, attrs)
192
+ existing.push(doc) unless destroyable?(attrs)
193
+ end
194
+ end
170
195
  end
171
196
  end
172
197
  end
@@ -26,6 +26,7 @@ module Mongoid
26
26
  @attributes = reloaded
27
27
  @attributes_before_type_cast = {}
28
28
  changed_attributes.clear
29
+ reset_readonly
29
30
  apply_defaults
30
31
  reload_relations
31
32
  run_callbacks(:find) unless _find_callbacks.empty?
@@ -104,5 +104,11 @@ module Mongoid
104
104
  def updateable?
105
105
  persisted? && changed?
106
106
  end
107
+
108
+ private
109
+
110
+ def reset_readonly
111
+ self.__selected_fields = nil
112
+ end
107
113
  end
108
114
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
- VERSION = "5.1.0"
3
+ VERSION = "5.1.1"
4
4
  end
@@ -92,7 +92,7 @@ development:
92
92
  # A passphrase for the private key.
93
93
  # ssl_key_pass_phrase: password
94
94
 
95
- # Whether or not to do peer certification validation. (default: false)
95
+ # Whether or not to do peer certification validation. (default: true)
96
96
  # ssl_verify: true
97
97
 
98
98
  # The file containing a set of concatenated certification authority certifications
@@ -125,6 +125,11 @@ development:
125
125
 
126
126
  # Ensure all times are UTC in the app side. (default: false)
127
127
  # use_utc: false
128
+
129
+ # Set the Mongoid and Ruby driver log levels when not in a Rails
130
+ # environment. The Mongoid logger will be set to the Rails logger
131
+ # otherwise.(default: :info)
132
+ # log_level: :info
128
133
  test:
129
134
  clients:
130
135
  default:
@@ -176,6 +176,27 @@ describe Mongoid::Attributes::Nested do
176
176
  it "sets the nested attributes" do
177
177
  expect(person.preferences.first.name).to eq("First")
178
178
  end
179
+
180
+ context "when adding existing document to a relation" do
181
+ let(:preference) { Preference.create(name: 'sample preference') }
182
+ let(:person) do
183
+ Person.new(
184
+ preferences_attributes: { 0 => { id: preference.id, name: preference.name } }
185
+ )
186
+ end
187
+
188
+ it "sets the nested attributes" do
189
+ expect(person.preferences.map(&:name)).to eq([preference.name])
190
+ end
191
+
192
+ it "updates attributes of existing document which is added to relation" do
193
+ preference_name = 'updated preference'
194
+ person = Person.new(
195
+ preferences_attributes: { 0 => { id: preference.id, name: preference_name } }
196
+ )
197
+ expect(person.preferences.map(&:name)).to eq([preference_name])
198
+ end
199
+ end
179
200
  end
180
201
 
181
202
  context "when the relation is a referenced in" do
@@ -63,6 +63,11 @@ describe Mongoid::Config do
63
63
  context "when the log level is not set in the configuration" do
64
64
 
65
65
  before do
66
+ if defined?(Rails)
67
+ RailsTemp = Rails
68
+ Object.send(:remove_const, :Rails)
69
+ end
70
+
66
71
  Mongoid.configure do |config|
67
72
  config.load_configuration(CONFIG)
68
73
  end
@@ -125,6 +130,35 @@ describe Mongoid::Config do
125
130
  it "sets the Mongo driver logger level" do
126
131
  expect(Mongo::Logger.logger.level).to eq(Logger::WARN)
127
132
  end
133
+
134
+ context "when in a Rails environment" do
135
+
136
+ before do
137
+ module Rails
138
+ def self.logger
139
+ ::Logger.new($stdout)
140
+ end
141
+ end
142
+ Mongoid.logger = Rails.logger
143
+ described_class.load!(file, :test)
144
+ end
145
+
146
+ after do
147
+ if defined?(Rails)
148
+ RailsTemp = Rails
149
+ Object.send(:remove_const, :Rails)
150
+ end
151
+ end
152
+
153
+ it "keeps the Mongoid logger level the same as the Rails logger" do
154
+ expect(Mongoid.logger.level).to eq(Rails.logger.level)
155
+ expect(Mongoid.logger.level).not_to eq(Mongoid::Config.log_level)
156
+ end
157
+
158
+ it "sets the Mongo driver logger level to Mongoid's logger level" do
159
+ expect(Mongo::Logger.logger.level).to eq(Mongoid.logger.level)
160
+ end
161
+ end
128
162
  end
129
163
 
130
164
  context "when provided an environment" do
@@ -31,6 +31,31 @@ describe Mongoid::Matchable::And do
31
31
  end
32
32
  end
33
33
 
34
+ context "when the expression is a $not" do
35
+
36
+ let(:matches) do
37
+ matcher.matches?([ { title: {:$not => /Foobar/ } }])
38
+ end
39
+
40
+ context "when the value matches" do
41
+
42
+ it "returns true" do
43
+ expect(matches).to be true
44
+ end
45
+ end
46
+
47
+ context "when the value does not match" do
48
+
49
+ before do
50
+ person.title = "Foobar baz"
51
+ end
52
+
53
+ it "returns false" do
54
+ expect(matches).to be false
55
+ end
56
+ end
57
+ end
58
+
34
59
  context "when the value does not match" do
35
60
 
36
61
  let(:matches) do
@@ -37,6 +37,31 @@ describe Mongoid::Matchable::Or do
37
37
  expect(matcher.matches?([])).to be false
38
38
  end
39
39
  end
40
+
41
+ context "when the expression is a $not" do
42
+
43
+ let(:matches) do
44
+ matcher.matches?([ { title: {:$not => /Foobar/ } }])
45
+ end
46
+
47
+ context "when the value matches" do
48
+
49
+ it "returns true" do
50
+ expect(matches).to be true
51
+ end
52
+ end
53
+
54
+ context "when the value does not match" do
55
+
56
+ before do
57
+ person.title = "Foobar baz"
58
+ end
59
+
60
+ it "returns false" do
61
+ expect(matches).to be false
62
+ end
63
+ end
64
+ end
40
65
  end
41
66
 
42
67
  context "when provided a complex expression" do
@@ -284,5 +284,20 @@ describe Mongoid::Reloadable do
284
284
  expect(object.reload).to eq(from_db)
285
285
  end
286
286
  end
287
+
288
+ context 'when the document is readonly' do
289
+
290
+ before do
291
+ Person.create
292
+ end
293
+
294
+ let(:reloaded) do
295
+ Person.only(:name).first.reload
296
+ end
297
+
298
+ it 'resets the readonly state after reloading' do
299
+ expect(reloaded.readonly?).to be(false)
300
+ end
301
+ end
287
302
  end
288
303
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Durran Jordan
@@ -30,7 +30,7 @@ cert_chain:
30
30
  ZIvvwAhgCjVW5QCi2I1noxXLmtZ3XDawWu8kaGtu8giHXcwL3941m8hvFZ/Wr9Yi
31
31
  JvcXJt2a4/JvwnIs2hmKuyfhZmB9HEE5wQQaCMnnC14=
32
32
  -----END CERTIFICATE-----
33
- date: 2016-01-26 00:00:00.000000000 Z
33
+ date: 2016-02-18 00:00:00.000000000 Z
34
34
  dependencies:
35
35
  - !ruby/object:Gem::Dependency
36
36
  name: activemodel
@@ -811,7 +811,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
811
811
  version: 1.3.6
812
812
  requirements: []
813
813
  rubyforge_project: mongoid
814
- rubygems_version: 2.5.1
814
+ rubygems_version: 2.4.6
815
815
  signing_key:
816
816
  specification_version: 4
817
817
  summary: Elegant Persistence in Ruby for MongoDB.
metadata.gz.sig CHANGED
Binary file