mongoid 4.0.0.beta2 → 4.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cc6ad8c410d4ae0e13b891cef3eddfddd41a236d
4
- data.tar.gz: b31dfba7b12e23a91520409662c9e73dd8452cd0
3
+ metadata.gz: 33fe9286d3ba938ede032903cc4a474975d6f7fe
4
+ data.tar.gz: 1d14ddf90e7ed9c9fc67cd0e8f609ce2e1e87f23
5
5
  SHA512:
6
- metadata.gz: a89977a8214ab3eeb419d17976d446d38ac4279300e093e357da037512380fe0812fdc7d042fe6405d4a409388a859bd1c466175d10ad18110a2840e7211e646
7
- data.tar.gz: e9fb4f020f0a90fb726453858926fca07941fafdfe270e9cdb40ee697fe5daa3a68937a0b148d6067e75ef9762b134b2263a52f1eefc6c992f02bb46c0c5cde6
6
+ metadata.gz: 267e9b0f0cf0a568200dd31043025f54fb75773f146d62a9c6fa5ec1561f6e9ae091608c39fe3ee6ce9bf568e681eb623799460c2d57f50a6b737a76f2e2d4a0
7
+ data.tar.gz: 2fcb46e0a9ab3ebca70be65d93017f96bfb3bd44da5b9d3cf1e517e6bd622ed2028a6ef16ed00c0212ffffcabeafbf061c4c48dbe60307f4aef22fc27e34a9c6
@@ -185,9 +185,6 @@ For instructions on upgrading to newer versions, visit
185
185
  * \#2956 Caching on queries now only happens when `cache` is specifically
186
186
  called. (Arthur Neves)
187
187
 
188
- * \#2898 Dirty attribute methods now properly handle field aliases.
189
- (Niels Ganser)
190
-
191
188
  * \#2659 `Mongoid::Railtie` now properly uses only one initializer and
192
189
  the name has changed to `mongoid.load-config`.
193
190
 
@@ -223,6 +220,9 @@ For instructions on upgrading to newer versions, visit
223
220
  apply the default scope to the document, if the scope is not complex.
224
221
 
225
222
  * \#2200 Mass assignment security now mirrors Rails 4's behavior.
223
+ `without_protection` option was also removed.
224
+ `attr_accessible` class method was removed.
225
+ Mongoid and Strong parameters should work fine for mass assignment protection.
226
226
 
227
227
  * `delete_all` and `destroy_all` no longer take a `:conditions` hash but
228
228
  just the raw attributes.
@@ -345,6 +345,15 @@ For instructions on upgrading to newer versions, visit
345
345
 
346
346
  ### Resolved Issues
347
347
 
348
+ * \#2898 Dirty attribute methods now properly handle field aliases.
349
+ (Niels Ganser)
350
+
351
+ * \#3620 Add ActiveModel module instance methods to prohibited_methods list.
352
+ (Arthur Neves)
353
+
354
+ * \#3610 Don't allow atomic operations on read-only attributes
355
+ (Frederico Araujo)
356
+
348
357
  * \#3619 Don't validate documents that are flagged for destruction.
349
358
  (Christopher J. Bottaro)
350
359
 
@@ -79,7 +79,9 @@ module Mongoid
79
79
  Threaded::Lifecycle,
80
80
  Traversable,
81
81
  Validatable,
82
- Equality
82
+ Equality,
83
+ ActiveModel::Model,
84
+ ActiveModel::Validations
83
85
  ]
84
86
 
85
87
  class << self
@@ -51,8 +51,10 @@ module Mongoid
51
51
  #
52
52
  # @since 3.0.0
53
53
  def validate_name(klass, name, options)
54
- if Mongoid.destructive_fields.include?(name)
55
- raise Errors::InvalidField.new(klass, name)
54
+ [name, "#{name}?".to_sym, "#{name}=".to_sym].each do |n|
55
+ if Mongoid.destructive_fields.include?(n)
56
+ raise Errors::InvalidField.new(klass, n)
57
+ end
56
58
  end
57
59
 
58
60
  if !options[:overwrite] && klass.fields.keys.include?(name.to_s)
@@ -165,6 +165,9 @@ module Mongoid
165
165
  # @since 4.0.0
166
166
  def process_atomic_operations(operations)
167
167
  operations.each do |field, value|
168
+ unless attribute_writable?(field)
169
+ raise Errors::ReadonlyAttribute.new(field, value)
170
+ end
168
171
  normalized = database_field_name(field)
169
172
  yield(normalized, value)
170
173
  remove_change(normalized)
@@ -31,7 +31,7 @@ module Mongoid
31
31
  touches = touch_atomic_updates(field)
32
32
  unless touches.empty?
33
33
  selector = atomic_selector
34
- _root.collection.find(selector).update(positionally(selector, touches))
34
+ _root.collection.where(selector).update(positionally(selector, touches))
35
35
  end
36
36
  run_callbacks(:touch)
37
37
  true
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Mongoid
3
- VERSION = "4.0.0.beta2"
3
+ VERSION = "4.0.0.rc1"
4
4
  end
@@ -60,11 +60,11 @@ describe Mongoid::Attributes::Readonly do
60
60
  context "when updating an existing readonly field" do
61
61
 
62
62
  before do
63
- Person.attr_readonly :title, :terms
63
+ Person.attr_readonly :title, :terms, :score
64
64
  end
65
65
 
66
66
  let(:person) do
67
- Person.create(title: "sir", terms: true)
67
+ Person.create(title: "sir", terms: true, score: 1)
68
68
  end
69
69
 
70
70
  context "when updating via the setter" do
@@ -83,6 +83,46 @@ describe Mongoid::Attributes::Readonly do
83
83
  end
84
84
  end
85
85
 
86
+ context "when updating via inc" do
87
+
88
+ context 'with single field operation' do
89
+ it "raises an error " do
90
+ expect {
91
+ person.inc(score: 1)
92
+ }.to raise_error(Mongoid::Errors::ReadonlyAttribute)
93
+ end
94
+ end
95
+
96
+ context 'with multiple fields operation' do
97
+ it "raises an error " do
98
+ expect {
99
+ person.inc(score: 1, age: 1)
100
+ }.to raise_error(Mongoid::Errors::ReadonlyAttribute)
101
+ end
102
+ end
103
+ end
104
+
105
+ context "when updating via bit" do
106
+
107
+ context 'with single field operation' do
108
+ it "raises an error " do
109
+ expect {
110
+ person.bit(score: { or: 13 })
111
+ }.to raise_error(Mongoid::Errors::ReadonlyAttribute)
112
+ end
113
+ end
114
+
115
+ context 'with multiple fields operation' do
116
+ it "raises an error " do
117
+ expect {
118
+ person.bit(
119
+ age: { and: 13 }, score: { or: 13 }, inte: { and: 13, or: 10 }
120
+ )
121
+ }.to raise_error(Mongoid::Errors::ReadonlyAttribute)
122
+ end
123
+ end
124
+ end
125
+
86
126
  context "when updating via []=" do
87
127
 
88
128
  before do
@@ -103,8 +103,10 @@ describe Mongoid::Contextual::Atomic do
103
103
  expect(depeche_mode.reload.likes).to eq(12)
104
104
  end
105
105
 
106
- it "does not error on non initialized fields" do
107
- expect(smiths.reload.likes).to eq(0)
106
+ if mongodb_version > "2.5"
107
+ it "does not error on non initialized fields" do
108
+ expect(smiths.reload.likes).to eq(0)
109
+ end
108
110
  end
109
111
  end
110
112
 
@@ -118,8 +120,10 @@ describe Mongoid::Contextual::Atomic do
118
120
  expect(depeche_mode.reload.likes).to eq(61)
119
121
  end
120
122
 
121
- it "does not error on non initialized fields" do
122
- expect(smiths.reload.likes).to eq(13)
123
+ if mongodb_version > "2.5"
124
+ it "does not error on non initialized fields" do
125
+ expect(smiths.reload.likes).to eq(13)
126
+ end
123
127
  end
124
128
  end
125
129
 
@@ -133,8 +137,10 @@ describe Mongoid::Contextual::Atomic do
133
137
  expect(depeche_mode.reload.likes).to eq(14)
134
138
  end
135
139
 
136
- it "does not error on non initialized fields" do
137
- expect(smiths.reload.likes).to eq(10)
140
+ if mongodb_version > "2.5"
141
+ it "does not error on non initialized fields" do
142
+ expect(smiths.reload.likes).to eq(10)
143
+ end
138
144
  end
139
145
  end
140
146
  end
@@ -815,12 +815,14 @@ describe Mongoid::Fields do
815
815
 
816
816
  context "when the field name conflicts with mongoid's internals" do
817
817
 
818
- context "when the field is named __metadata" do
818
+ [:__metadata, :invalid].each do |meth|
819
+ context "when the field is named #{meth}" do
819
820
 
820
- it "raises an error" do
821
- expect {
822
- Person.field(:__metadata)
823
- }.to raise_error(Mongoid::Errors::InvalidField)
821
+ it "raises an error" do
822
+ expect {
823
+ Person.field(meth)
824
+ }.to raise_error(Mongoid::Errors::InvalidField)
825
+ end
824
826
  end
825
827
  end
826
828
  end
@@ -62,6 +62,11 @@ def purge_database_alt!
62
62
  end
63
63
  end
64
64
 
65
+ def mongodb_version
66
+ session = Mongoid::Sessions.default
67
+ session.command(buildinfo: 1)["version"]
68
+ end
69
+
65
70
  # Set the database that the spec suite connects to.
66
71
  Mongoid.configure do |config|
67
72
  config.load_configuration(CONFIG)
metadata CHANGED
@@ -1,27 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mongoid
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0.beta2
4
+ version: 4.0.0.rc1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Durran Jordan
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-27 00:00:00.000000000 Z
11
+ date: 2014-06-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: 4.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: 4.0.0
27
27
  - !ruby/object:Gem::Dependency
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 2.0.beta6
47
+ version: 2.0.0.rc1
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 2.0.beta6
54
+ version: 2.0.0.rc1
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: origin
57
57
  requirement: !ruby/object:Gem::Requirement