mongoid 2.0.0.beta.13 → 2.0.0.beta.14
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/mongoid.rb +1 -0
- data/lib/mongoid/associations/references_many.rb +8 -6
- data/lib/mongoid/attributes.rb +2 -25
- data/lib/mongoid/components.rb +1 -0
- data/lib/mongoid/criterion/optional.rb +3 -1
- data/lib/mongoid/field.rb +0 -10
- data/lib/mongoid/persistence/insert_embedded.rb +6 -10
- data/lib/mongoid/version.rb +1 -1
- metadata +3 -3
data/lib/mongoid.rb
CHANGED
@@ -33,6 +33,7 @@ require "active_model/callbacks"
|
|
33
33
|
require "active_model/conversion"
|
34
34
|
require "active_model/deprecated_error_methods"
|
35
35
|
require "active_model/errors"
|
36
|
+
require "active_model/mass_assignment_security"
|
36
37
|
require "active_model/naming"
|
37
38
|
require "active_model/serialization"
|
38
39
|
require "active_model/translation"
|
@@ -10,7 +10,7 @@ module Mongoid #:nodoc:
|
|
10
10
|
def <<(*objects)
|
11
11
|
load_target
|
12
12
|
objects.flatten.each do |object|
|
13
|
-
object.
|
13
|
+
object.write_attribute(@foreign_key, @parent.id)
|
14
14
|
@target << object
|
15
15
|
object.save unless @parent.new_record?
|
16
16
|
end
|
@@ -27,7 +27,8 @@ module Mongoid #:nodoc:
|
|
27
27
|
def build(attributes = nil)
|
28
28
|
load_target
|
29
29
|
name = determine_name
|
30
|
-
object = @klass.instantiate(
|
30
|
+
object = @klass.instantiate(attributes || {})
|
31
|
+
object.send("#{name}=", @parent)
|
31
32
|
@target << object
|
32
33
|
object
|
33
34
|
end
|
@@ -125,15 +126,16 @@ module Mongoid #:nodoc:
|
|
125
126
|
def nested_build(attributes, options = {})
|
126
127
|
attributes.each do |index, attrs|
|
127
128
|
begin
|
128
|
-
|
129
|
-
|
129
|
+
_destroy = Boolean.set(attrs.delete('_destroy'))
|
130
|
+
document = find(attrs.delete("id"))
|
131
|
+
if options && options[:allow_destroy] && _destroy
|
130
132
|
@target.delete(document)
|
131
133
|
document.destroy
|
132
134
|
else
|
133
|
-
document.
|
135
|
+
document.update_attributes(attrs)
|
134
136
|
end
|
135
137
|
rescue Errors::DocumentNotFound
|
136
|
-
|
138
|
+
create(attrs)
|
137
139
|
end
|
138
140
|
end
|
139
141
|
end
|
data/lib/mongoid/attributes.rb
CHANGED
@@ -2,10 +2,6 @@
|
|
2
2
|
module Mongoid #:nodoc:
|
3
3
|
module Attributes
|
4
4
|
extend ActiveSupport::Concern
|
5
|
-
included do
|
6
|
-
class_inheritable_accessor :_protected_fields
|
7
|
-
self._protected_fields = []
|
8
|
-
end
|
9
5
|
|
10
6
|
# Get the id associated with this object. This will pull the _id value out
|
11
7
|
# of the attributes +Hash+.
|
@@ -38,10 +34,10 @@ module Mongoid #:nodoc:
|
|
38
34
|
# attributes provided in the suppied +Hash+ so that no extra nil values get
|
39
35
|
# put into the document's attributes.
|
40
36
|
def process(attrs = nil)
|
41
|
-
(attrs || {}).each_pair do |key, value|
|
37
|
+
sanitize_for_mass_assignment(attrs || {}).each_pair do |key, value|
|
42
38
|
if set_allowed?(key)
|
43
39
|
write_attribute(key, value)
|
44
|
-
|
40
|
+
else
|
45
41
|
if associations.include?(key.to_s) and associations[key.to_s].embedded? and value.is_a?(Hash)
|
46
42
|
if association = send(key)
|
47
43
|
association.nested_build(value)
|
@@ -188,12 +184,6 @@ module Mongoid #:nodoc:
|
|
188
184
|
end
|
189
185
|
end
|
190
186
|
|
191
|
-
# Return true if writing to the given field is allowed
|
192
|
-
def write_allowed?(key)
|
193
|
-
name = key.to_s
|
194
|
-
!self._protected_fields.include?(name)
|
195
|
-
end
|
196
|
-
|
197
187
|
module ClassMethods
|
198
188
|
# Defines attribute setters for the associations specified by the names.
|
199
189
|
# This will work for a has one or has many association.
|
@@ -224,19 +214,6 @@ module Mongoid #:nodoc:
|
|
224
214
|
end
|
225
215
|
end
|
226
216
|
end
|
227
|
-
|
228
|
-
# Defines fields that cannot be set via mass assignment.
|
229
|
-
#
|
230
|
-
# Example:
|
231
|
-
#
|
232
|
-
# class Person
|
233
|
-
# include Mongoid::Document
|
234
|
-
# field :security_code
|
235
|
-
# attr_protected :security_code
|
236
|
-
# end
|
237
|
-
def attr_protected(*names)
|
238
|
-
_protected_fields.concat(names.flatten.map(&:to_s))
|
239
|
-
end
|
240
217
|
end
|
241
218
|
end
|
242
219
|
end
|
data/lib/mongoid/components.rb
CHANGED
@@ -8,6 +8,7 @@ module Mongoid #:nodoc
|
|
8
8
|
include ActiveModel::Conversion
|
9
9
|
include ActiveModel::Naming
|
10
10
|
include ActiveModel::Serialization
|
11
|
+
include ActiveModel::MassAssignmentSecurity
|
11
12
|
include ActiveModel::Serializers::JSON
|
12
13
|
include ActiveModel::Serializers::Xml
|
13
14
|
include Mongoid::Associations
|
@@ -63,10 +63,12 @@ module Mongoid #:nodoc:
|
|
63
63
|
return args if !using_object_ids? || args.is_a?(BSON::ObjectID) || !cast
|
64
64
|
if args.is_a?(String)
|
65
65
|
BSON::ObjectID(args)
|
66
|
-
|
66
|
+
elsif args.is_a?(Array)
|
67
67
|
args.map{ |a|
|
68
68
|
a.is_a?(BSON::ObjectID) ? a : BSON::ObjectID(a)
|
69
69
|
}
|
70
|
+
else
|
71
|
+
args
|
70
72
|
end
|
71
73
|
end
|
72
74
|
|
data/lib/mongoid/field.rb
CHANGED
@@ -3,15 +3,6 @@ module Mongoid #:nodoc:
|
|
3
3
|
class Field
|
4
4
|
attr_reader :name, :type
|
5
5
|
|
6
|
-
# Determine if the field is able to be accessible via a mass update.
|
7
|
-
#
|
8
|
-
# Returns:
|
9
|
-
#
|
10
|
-
# true if accessible, false if not.
|
11
|
-
def accessible?
|
12
|
-
!!@accessible
|
13
|
-
end
|
14
|
-
|
15
6
|
# Get the declared options for this field
|
16
7
|
#
|
17
8
|
# Returns:
|
@@ -46,7 +37,6 @@ module Mongoid #:nodoc:
|
|
46
37
|
@type = options[:type] || String
|
47
38
|
@name, @default = name, options[:default]
|
48
39
|
@copyable = (@default.is_a?(Array) || @default.is_a?(Hash))
|
49
|
-
@accessible = options.has_key?(:accessible) ? options[:accessible] : true
|
50
40
|
@options = options
|
51
41
|
check_default!
|
52
42
|
end
|
@@ -26,16 +26,12 @@ module Mongoid #:nodoc:
|
|
26
26
|
def persist
|
27
27
|
return @document if @validate && @document.invalid?(:create)
|
28
28
|
parent = @document._parent
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
@collection.update(parent._selector, update, @options.merge(:multi => false))
|
36
|
-
@document.new_record = false
|
37
|
-
end
|
38
|
-
end
|
29
|
+
if parent.new_record?
|
30
|
+
parent.insert
|
31
|
+
else
|
32
|
+
update = { @document._inserter => { @document._position => @document.raw_attributes } }
|
33
|
+
@collection.update(parent._selector, update, @options.merge(:multi => false))
|
34
|
+
@document.new_record = false
|
39
35
|
end
|
40
36
|
@document
|
41
37
|
end
|
data/lib/mongoid/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mongoid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 62196479
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
9
|
- 0
|
10
10
|
- beta
|
11
|
-
-
|
12
|
-
version: 2.0.0.beta.
|
11
|
+
- 14
|
12
|
+
version: 2.0.0.beta.14
|
13
13
|
platform: ruby
|
14
14
|
authors:
|
15
15
|
- Durran Jordan
|