mongoid 1.9.5 → 2.0.0.alpha
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.
- data/.gitignore +6 -0
- data/.watchr +29 -0
- data/Rakefile +52 -0
- data/VERSION +1 -0
- data/caliper.yml +4 -0
- data/lib/mongoid.rb +20 -9
- data/lib/mongoid/associations.rb +100 -123
- data/lib/mongoid/associations/belongs_to_related.rb +3 -2
- data/lib/mongoid/associations/{embeds_many.rb → embed_many.rb} +29 -90
- data/lib/mongoid/associations/{embeds_one.rb → embed_one.rb} +7 -8
- data/lib/mongoid/associations/embedded_in.rb +4 -12
- data/lib/mongoid/associations/has_many_related.rb +4 -52
- data/lib/mongoid/associations/has_one_related.rb +4 -8
- data/lib/mongoid/associations/meta_data.rb +1 -2
- data/lib/mongoid/associations/options.rb +1 -6
- data/lib/mongoid/associations/proxy.rb +21 -14
- data/lib/mongoid/attributes.rb +13 -33
- data/lib/mongoid/callbacks.rb +11 -16
- data/lib/mongoid/collection.rb +3 -4
- data/lib/mongoid/collections/master.rb +2 -3
- data/lib/mongoid/collections/mimic.rb +46 -0
- data/lib/mongoid/collections/slaves.rb +2 -3
- data/lib/mongoid/commands.rb +161 -0
- data/lib/mongoid/commands/create.rb +19 -0
- data/lib/mongoid/commands/delete.rb +16 -0
- data/lib/mongoid/commands/delete_all.rb +23 -0
- data/lib/mongoid/commands/deletion.rb +18 -0
- data/lib/mongoid/commands/destroy.rb +17 -0
- data/lib/mongoid/commands/destroy_all.rb +23 -0
- data/lib/mongoid/commands/save.rb +29 -0
- data/lib/mongoid/components.rb +6 -4
- data/lib/mongoid/config.rb +15 -134
- data/lib/mongoid/contexts.rb +1 -1
- data/lib/mongoid/contexts/enumerable.rb +1 -1
- data/lib/mongoid/contexts/mongo.rb +1 -1
- data/lib/mongoid/contexts/paging.rb +2 -10
- data/lib/mongoid/criterion/inclusion.rb +0 -17
- data/lib/mongoid/criterion/optional.rb +1 -1
- data/lib/mongoid/cursor.rb +1 -0
- data/lib/mongoid/document.rb +45 -49
- data/lib/mongoid/errors.rb +1 -32
- data/lib/mongoid/extensions.rb +10 -12
- data/lib/mongoid/extensions/array/conversions.rb +6 -8
- data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
- data/lib/mongoid/extensions/boolean/conversions.rb +2 -8
- data/lib/mongoid/extensions/date/conversions.rb +4 -13
- data/lib/mongoid/extensions/datetime/conversions.rb +6 -1
- data/lib/mongoid/extensions/float/conversions.rb +1 -5
- data/lib/mongoid/extensions/hash/assimilation.rb +3 -12
- data/lib/mongoid/extensions/hash/conversions.rb +4 -34
- data/lib/mongoid/extensions/integer/conversions.rb +1 -5
- data/lib/mongoid/extensions/nil/assimilation.rb +0 -4
- data/lib/mongoid/extensions/object/conversions.rb +2 -8
- data/lib/mongoid/extensions/objectid/conversions.rb +1 -1
- data/lib/mongoid/extensions/string/conversions.rb +1 -1
- data/lib/mongoid/extensions/symbol/inflections.rb +1 -1
- data/lib/mongoid/extensions/time/conversions.rb +18 -0
- data/lib/mongoid/factory.rb +1 -2
- data/lib/mongoid/field.rb +2 -9
- data/lib/mongoid/fields.rb +7 -11
- data/lib/mongoid/finders.rb +2 -2
- data/lib/mongoid/identity.rb +4 -4
- data/lib/mongoid/indexes.rb +7 -10
- data/lib/mongoid/memoization.rb +2 -8
- data/lib/mongoid/named_scope.rb +5 -0
- data/lib/mongoid/observable.rb +1 -1
- data/lib/mongoid/paths.rb +22 -30
- data/lib/mongoid/state.rb +21 -28
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/validations.rb +51 -0
- data/lib/mongoid/validations/associated.rb +32 -0
- data/lib/mongoid/validations/locale/en.yml +4 -0
- data/lib/mongoid/validations/uniqueness.rb +22 -0
- data/lib/mongoid/versioning.rb +1 -2
- data/mongoid.gemspec +408 -0
- data/perf/benchmark.rb +77 -0
- data/spec/integration/mongoid/associations_spec.rb +340 -0
- data/spec/integration/mongoid/attributes_spec.rb +22 -0
- data/spec/integration/mongoid/commands_spec.rb +227 -0
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +33 -0
- data/spec/integration/mongoid/criteria_spec.rb +272 -0
- data/spec/integration/mongoid/document_spec.rb +650 -0
- data/spec/integration/mongoid/extensions_spec.rb +22 -0
- data/spec/integration/mongoid/finders_spec.rb +119 -0
- data/spec/integration/mongoid/inheritance_spec.rb +137 -0
- data/spec/integration/mongoid/named_scope_spec.rb +46 -0
- data/spec/models/address.rb +39 -0
- data/spec/models/animal.rb +6 -0
- data/spec/models/callbacks.rb +18 -0
- data/spec/models/comment.rb +8 -0
- data/spec/models/country_code.rb +6 -0
- data/spec/models/employer.rb +5 -0
- data/spec/models/game.rb +7 -0
- data/spec/models/inheritance.rb +56 -0
- data/spec/models/location.rb +5 -0
- data/spec/models/mixed_drink.rb +4 -0
- data/spec/models/name.rb +13 -0
- data/spec/models/namespacing.rb +11 -0
- data/spec/models/patient.rb +4 -0
- data/spec/models/person.rb +99 -0
- data/spec/models/pet.rb +7 -0
- data/spec/models/pet_owner.rb +6 -0
- data/spec/models/phone.rb +7 -0
- data/spec/models/post.rb +15 -0
- data/spec/models/translation.rb +5 -0
- data/spec/models/vet_visit.rb +5 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +31 -0
- data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +145 -0
- data/spec/unit/mongoid/associations/embed_many_spec.rb +516 -0
- data/spec/unit/mongoid/associations/embed_one_spec.rb +282 -0
- data/spec/unit/mongoid/associations/embedded_in_spec.rb +193 -0
- data/spec/unit/mongoid/associations/has_many_related_spec.rb +418 -0
- data/spec/unit/mongoid/associations/has_one_related_spec.rb +179 -0
- data/spec/unit/mongoid/associations/meta_data_spec.rb +88 -0
- data/spec/unit/mongoid/associations/options_spec.rb +192 -0
- data/spec/unit/mongoid/associations_spec.rb +595 -0
- data/spec/unit/mongoid/attributes_spec.rb +507 -0
- data/spec/unit/mongoid/callbacks_spec.rb +55 -0
- data/spec/unit/mongoid/collection_spec.rb +187 -0
- data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +75 -0
- data/spec/unit/mongoid/collections/master_spec.rb +41 -0
- data/spec/unit/mongoid/collections/mimic_spec.rb +43 -0
- data/spec/unit/mongoid/collections/slaves_spec.rb +81 -0
- data/spec/unit/mongoid/commands/create_spec.rb +31 -0
- data/spec/unit/mongoid/commands/delete_all_spec.rb +58 -0
- data/spec/unit/mongoid/commands/delete_spec.rb +38 -0
- data/spec/unit/mongoid/commands/destroy_all_spec.rb +21 -0
- data/spec/unit/mongoid/commands/destroy_spec.rb +51 -0
- data/spec/unit/mongoid/commands/save_spec.rb +107 -0
- data/spec/unit/mongoid/commands_spec.rb +270 -0
- data/spec/unit/mongoid/config_spec.rb +172 -0
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +421 -0
- data/spec/unit/mongoid/contexts/mongo_spec.rb +682 -0
- data/spec/unit/mongoid/contexts_spec.rb +25 -0
- data/spec/unit/mongoid/criteria_spec.rb +824 -0
- data/spec/unit/mongoid/criterion/complex_spec.rb +19 -0
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +91 -0
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +219 -0
- data/spec/unit/mongoid/criterion/optional_spec.rb +319 -0
- data/spec/unit/mongoid/cursor_spec.rb +74 -0
- data/spec/unit/mongoid/deprecation_spec.rb +24 -0
- data/spec/unit/mongoid/document_spec.rb +818 -0
- data/spec/unit/mongoid/errors_spec.rb +103 -0
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +50 -0
- data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +24 -0
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +35 -0
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +20 -0
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +22 -0
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +22 -0
- data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +49 -0
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +102 -0
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +67 -0
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +61 -0
- data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +184 -0
- data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +46 -0
- data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +21 -0
- data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +17 -0
- data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +14 -0
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +61 -0
- data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +24 -0
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +57 -0
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +34 -0
- data/spec/unit/mongoid/extensions/string/conversions_spec.rb +17 -0
- data/spec/unit/mongoid/extensions/string/inflections_spec.rb +208 -0
- data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +91 -0
- data/spec/unit/mongoid/extensions/time/conversions_spec.rb +70 -0
- data/spec/unit/mongoid/extras_spec.rb +102 -0
- data/spec/unit/mongoid/factory_spec.rb +31 -0
- data/spec/unit/mongoid/field_spec.rb +143 -0
- data/spec/unit/mongoid/fields_spec.rb +181 -0
- data/spec/unit/mongoid/finders_spec.rb +404 -0
- data/spec/unit/mongoid/identity_spec.rb +109 -0
- data/spec/unit/mongoid/indexes_spec.rb +93 -0
- data/spec/unit/mongoid/javascript_spec.rb +48 -0
- data/spec/unit/mongoid/matchers/all_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/default_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/exists_spec.rb +56 -0
- data/spec/unit/mongoid/matchers/gt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/gte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/in_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/lt_spec.rb +39 -0
- data/spec/unit/mongoid/matchers/lte_spec.rb +49 -0
- data/spec/unit/mongoid/matchers/ne_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/nin_spec.rb +27 -0
- data/spec/unit/mongoid/matchers/size_spec.rb +27 -0
- data/spec/unit/mongoid/matchers_spec.rb +329 -0
- data/spec/unit/mongoid/memoization_spec.rb +75 -0
- data/spec/unit/mongoid/named_scope_spec.rb +123 -0
- data/spec/unit/mongoid/observable_spec.rb +46 -0
- data/spec/unit/mongoid/paths_spec.rb +124 -0
- data/spec/unit/mongoid/scope_spec.rb +240 -0
- data/spec/unit/mongoid/state_spec.rb +83 -0
- data/spec/unit/mongoid/timestamps_spec.rb +25 -0
- data/spec/unit/mongoid/validations/associated_spec.rb +103 -0
- data/spec/unit/mongoid/validations/uniqueness_spec.rb +47 -0
- data/spec/unit/mongoid/validations_spec.rb +190 -0
- data/spec/unit/mongoid/versioning_spec.rb +41 -0
- data/spec/unit/mongoid_spec.rb +46 -0
- metadata +316 -110
- data/lib/mongoid/collections.rb +0 -41
- data/lib/mongoid/concern.rb +0 -31
- data/lib/mongoid/dirty.rb +0 -253
- data/lib/mongoid/extensions/time_conversions.rb +0 -35
- data/lib/mongoid/persistence.rb +0 -222
- data/lib/mongoid/persistence/command.rb +0 -39
- data/lib/mongoid/persistence/insert.rb +0 -50
- data/lib/mongoid/persistence/insert_embedded.rb +0 -38
- data/lib/mongoid/persistence/remove.rb +0 -39
- data/lib/mongoid/persistence/remove_all.rb +0 -37
- data/lib/mongoid/persistence/remove_embedded.rb +0 -50
- data/lib/mongoid/persistence/update.rb +0 -63
- data/lib/mongoid/version.rb +0 -4
data/lib/mongoid/cursor.rb
CHANGED
data/lib/mongoid/document.rb
CHANGED
@@ -2,16 +2,19 @@
|
|
2
2
|
module Mongoid #:nodoc:
|
3
3
|
module Document
|
4
4
|
extend ActiveSupport::Concern
|
5
|
-
include Mongoid::Components
|
6
5
|
included do
|
7
6
|
include Mongoid::Components
|
8
7
|
|
9
|
-
cattr_accessor :primary_key, :hereditary
|
8
|
+
cattr_accessor :_collection, :collection_name, :embedded, :primary_key, :hereditary
|
9
|
+
|
10
|
+
self.embedded = false
|
10
11
|
self.hereditary = false
|
12
|
+
self.collection_name = self.name.collectionize
|
11
13
|
|
12
14
|
attr_accessor :association_name, :_parent
|
15
|
+
attr_reader :new_record
|
13
16
|
|
14
|
-
delegate :db, :primary_key, :to => "self.class"
|
17
|
+
delegate :collection, :db, :embedded, :primary_key, :to => "self.class"
|
15
18
|
end
|
16
19
|
|
17
20
|
module ClassMethods
|
@@ -20,21 +23,23 @@ module Mongoid #:nodoc:
|
|
20
23
|
collection.db
|
21
24
|
end
|
22
25
|
|
26
|
+
# Returns the collection associated with this +Document+. If the
|
27
|
+
# document is embedded, there will be no collection associated
|
28
|
+
# with it.
|
29
|
+
#
|
30
|
+
# Returns: <tt>Mongo::Collection</tt>
|
31
|
+
def collection
|
32
|
+
raise Errors::InvalidCollection.new(self) if embedded
|
33
|
+
self._collection ||= Mongoid::Collection.new(self, self.collection_name)
|
34
|
+
add_indexes; self._collection
|
35
|
+
end
|
36
|
+
|
23
37
|
# Perform default behavior but mark the hierarchy as being hereditary.
|
24
38
|
def inherited(subclass)
|
25
39
|
super(subclass)
|
26
40
|
self.hereditary = true
|
27
41
|
end
|
28
42
|
|
29
|
-
# Returns a human readable version of the class.
|
30
|
-
#
|
31
|
-
# Example:
|
32
|
-
#
|
33
|
-
# <tt>MixedDrink.human_name # returns "Mixed Drink"</tt>
|
34
|
-
def human_name
|
35
|
-
name.labelize
|
36
|
-
end
|
37
|
-
|
38
43
|
# Instantiate a new object, only when loaded from the database or when
|
39
44
|
# the attributes have already been typecast.
|
40
45
|
#
|
@@ -46,7 +51,6 @@ module Mongoid #:nodoc:
|
|
46
51
|
if attributes["_id"] || allocating
|
47
52
|
document = allocate
|
48
53
|
document.instance_variable_set(:@attributes, attributes)
|
49
|
-
document.setup_modifications
|
50
54
|
return document
|
51
55
|
else
|
52
56
|
return new(attrs)
|
@@ -69,14 +73,25 @@ module Mongoid #:nodoc:
|
|
69
73
|
before_save :identify
|
70
74
|
end
|
71
75
|
|
76
|
+
# Macro for setting the collection name to store in.
|
77
|
+
#
|
78
|
+
# Example:
|
79
|
+
#
|
80
|
+
# <tt>Person.store_in :populdation</tt>
|
81
|
+
def store_in(name)
|
82
|
+
self.collection_name = name.to_s
|
83
|
+
self._collection = Mongoid::Collection.new(self, name.to_s)
|
84
|
+
end
|
85
|
+
|
72
86
|
# Returns all types to query for when using this class as the base.
|
73
87
|
def _types
|
74
|
-
@_type ||= (self.
|
88
|
+
@_type ||= (subclasses_of(self).map { |o| o.to_s } + [ self.name ])
|
75
89
|
end
|
76
90
|
|
77
91
|
# return the list of subclassses for an object
|
78
92
|
def subclasses_of(*superclasses) #:nodoc:
|
79
93
|
subclasses = []
|
94
|
+
|
80
95
|
superclasses.each do |sup|
|
81
96
|
ObjectSpace.each_object(class << sup; self; end) do |k|
|
82
97
|
if k != sup && (k.name.blank? || eval("defined?(::#{k}) && ::#{k}.object_id == k.object_id"))
|
@@ -84,16 +99,18 @@ module Mongoid #:nodoc:
|
|
84
99
|
end
|
85
100
|
end
|
86
101
|
end
|
102
|
+
|
87
103
|
subclasses
|
88
104
|
end
|
89
105
|
end
|
90
106
|
|
91
107
|
module InstanceMethods
|
92
|
-
# Performs equality checking on the
|
93
|
-
#
|
108
|
+
# Performs equality checking on the attributes. For now we chack against
|
109
|
+
# all attributes excluding timestamps on the object.
|
94
110
|
def ==(other)
|
95
111
|
return false unless other.is_a?(Document)
|
96
|
-
|
112
|
+
attributes.except(:modified_at).except(:created_at) ==
|
113
|
+
other.attributes.except(:modified_at).except(:created_at)
|
97
114
|
end
|
98
115
|
|
99
116
|
# Delegates to ==
|
@@ -107,15 +124,6 @@ module Mongoid #:nodoc:
|
|
107
124
|
id.hash
|
108
125
|
end
|
109
126
|
|
110
|
-
# Is inheritance in play here?
|
111
|
-
#
|
112
|
-
# Returns:
|
113
|
-
#
|
114
|
-
# <tt>true</tt> if inheritance used, <tt>false</tt> if not.
|
115
|
-
def hereditary?
|
116
|
-
!!self.hereditary
|
117
|
-
end
|
118
|
-
|
119
127
|
# Introduces a child object into the +Document+ object graph. This will
|
120
128
|
# set up the relationships between the parent and child and update the
|
121
129
|
# attributes of the parent +Document+.
|
@@ -149,27 +157,24 @@ module Mongoid #:nodoc:
|
|
149
157
|
# an empty +Hash+.
|
150
158
|
#
|
151
159
|
# If a primary key is defined, the document's id will be set to that key,
|
152
|
-
# otherwise it will be set to a fresh +
|
160
|
+
# otherwise it will be set to a fresh +Mongo::ObjectID+ string.
|
153
161
|
#
|
154
162
|
# Options:
|
155
163
|
#
|
156
164
|
# attrs: The attributes +Hash+ to set up the document with.
|
157
165
|
def initialize(attrs = nil)
|
158
|
-
@attributes =
|
166
|
+
@attributes = {}
|
159
167
|
process(attrs)
|
160
|
-
@
|
168
|
+
@attributes = attributes_with_defaults(@attributes)
|
169
|
+
@new_record = true if id.nil?
|
161
170
|
document = yield self if block_given?
|
162
171
|
identify
|
163
172
|
end
|
164
173
|
|
165
174
|
# Returns the class name plus its attributes.
|
166
175
|
def inspect
|
167
|
-
attrs = fields.map { |name, field| "#{name}: #{@attributes[name].inspect}" }
|
168
|
-
|
169
|
-
dynamic_keys = @attributes.keys - fields.keys - associations.keys - ["_id", "_type"]
|
170
|
-
attrs += dynamic_keys.map { |name| "#{name}: #{@attributes[name].inspect}" }
|
171
|
-
end
|
172
|
-
"#<#{self.class.name} _id: #{id}, #{attrs * ', '}>"
|
176
|
+
attrs = fields.map { |name, field| "#{name}: #{@attributes[name].inspect}" } * ", "
|
177
|
+
"#<#{self.class.name} _id: #{id}, #{attrs}>"
|
173
178
|
end
|
174
179
|
|
175
180
|
# Notify observers of an update.
|
@@ -206,12 +211,8 @@ module Mongoid #:nodoc:
|
|
206
211
|
|
207
212
|
# Reloads the +Document+ attributes from the database.
|
208
213
|
def reload
|
209
|
-
|
210
|
-
|
211
|
-
raise Errors::DocumentNotFound.new(self.class, id) if reloaded.nil?
|
212
|
-
end
|
213
|
-
@attributes = {}.merge(reloaded || {})
|
214
|
-
self.associations.keys.each { |association_name| unmemoize(association_name) }; self
|
214
|
+
@attributes = collection.find_one(:_id => id)
|
215
|
+
self
|
215
216
|
end
|
216
217
|
|
217
218
|
# Remove a child document from this parent +Document+. Will reset the
|
@@ -286,25 +287,20 @@ module Mongoid #:nodoc:
|
|
286
287
|
#
|
287
288
|
# This will also cause the observing +Document+ to notify it's parent if
|
288
289
|
# there is any.
|
289
|
-
def
|
290
|
+
def update(child, clear = false)
|
290
291
|
name = child.association_name
|
291
292
|
attrs = child.instance_variable_get(:@attributes)
|
292
|
-
|
293
|
-
@attributes.delete(name)
|
294
|
-
else
|
295
|
-
@attributes.insert(name, attrs) unless @attributes[name] && @attributes[name].include?(attrs)
|
296
|
-
end
|
293
|
+
clear ? @attributes.delete(name) : @attributes.insert(name, attrs)
|
297
294
|
notify
|
298
295
|
end
|
299
296
|
|
300
297
|
protected
|
301
298
|
# apply default values to attributes - calling procs as required
|
302
299
|
def attributes_with_defaults(attributes = {})
|
303
|
-
default_values = defaults
|
300
|
+
default_values = defaults.merge(attributes)
|
304
301
|
default_values.each_pair do |key, val|
|
305
302
|
default_values[key] = val.call if val.respond_to?(:call)
|
306
303
|
end
|
307
|
-
default_values.merge(attributes)
|
308
304
|
end
|
309
305
|
end
|
310
306
|
end
|
data/lib/mongoid/errors.rb
CHANGED
@@ -41,20 +41,6 @@ module Mongoid #:nodoc
|
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
44
|
-
# Raised when the database version is not supported by Mongoid.
|
45
|
-
#
|
46
|
-
# Example:
|
47
|
-
#
|
48
|
-
# <tt>UnsupportedVersion.new(Mongo::ServerVersion.new("1.3.1"))</tt>
|
49
|
-
class UnsupportedVersion < RuntimeError
|
50
|
-
def initialize(version)
|
51
|
-
@version = version
|
52
|
-
end
|
53
|
-
def message
|
54
|
-
"MongoDB #{@version} not supported, please upgrade to #{Mongoid::MONGODB_VERSION}"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
44
|
# Raised when a persisence method ending in ! fails validation. The message
|
59
45
|
# will contain the full error messages from the +Document+ in question.
|
60
46
|
#
|
@@ -66,7 +52,7 @@ module Mongoid #:nodoc
|
|
66
52
|
@errors = errors
|
67
53
|
end
|
68
54
|
def message
|
69
|
-
"Validation
|
55
|
+
"Validation failed: #{@errors.full_messages}"
|
70
56
|
end
|
71
57
|
end
|
72
58
|
|
@@ -87,22 +73,5 @@ module Mongoid #:nodoc
|
|
87
73
|
end
|
88
74
|
end
|
89
75
|
|
90
|
-
# This error is raised when trying to create a field that conflicts with
|
91
|
-
# a Mongoid internal attribute or method.
|
92
|
-
#
|
93
|
-
# Example:
|
94
|
-
#
|
95
|
-
# <tt>InvalidField.new('collection')</tt>
|
96
|
-
class InvalidField < RuntimeError
|
97
|
-
def initialize(name)
|
98
|
-
@name = name
|
99
|
-
end
|
100
|
-
def message
|
101
|
-
"Defining a field named '#{@name}' is not allowed. " +
|
102
|
-
"Do not define fields that conflict with Mongoid internal attributes " +
|
103
|
-
"or method names. Use Document#instance_methods to see what " +
|
104
|
-
"names this includes."
|
105
|
-
end
|
106
|
-
end
|
107
76
|
end
|
108
77
|
end
|
data/lib/mongoid/extensions.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
-
require "mongoid/extensions/time_conversions"
|
3
2
|
require "mongoid/extensions/array/accessors"
|
4
3
|
require "mongoid/extensions/array/aliasing"
|
5
4
|
require "mongoid/extensions/array/assimilation"
|
@@ -23,6 +22,7 @@ require "mongoid/extensions/proc/scoping"
|
|
23
22
|
require "mongoid/extensions/string/conversions"
|
24
23
|
require "mongoid/extensions/string/inflections"
|
25
24
|
require "mongoid/extensions/symbol/inflections"
|
25
|
+
require "mongoid/extensions/time/conversions"
|
26
26
|
require "mongoid/extensions/objectid/conversions"
|
27
27
|
|
28
28
|
class Array #:nodoc
|
@@ -44,16 +44,14 @@ class Boolean #:nodoc
|
|
44
44
|
extend Mongoid::Extensions::Boolean::Conversions
|
45
45
|
end
|
46
46
|
|
47
|
-
class DateTime #:nodoc
|
48
|
-
extend Mongoid::Extensions::TimeConversions
|
49
|
-
extend Mongoid::Extensions::DateTime::Conversions
|
50
|
-
end
|
51
|
-
|
52
47
|
class Date #:nodoc
|
53
|
-
extend Mongoid::Extensions::TimeConversions
|
54
48
|
extend Mongoid::Extensions::Date::Conversions
|
55
49
|
end
|
56
50
|
|
51
|
+
class DateTime #:nodoc
|
52
|
+
extend Mongoid::Extensions::DateTime::Conversions
|
53
|
+
end
|
54
|
+
|
57
55
|
class Float #:nodoc
|
58
56
|
extend Mongoid::Extensions::Float::Conversions
|
59
57
|
end
|
@@ -63,7 +61,7 @@ class Hash #:nodoc
|
|
63
61
|
include Mongoid::Extensions::Hash::Assimilation
|
64
62
|
include Mongoid::Extensions::Hash::CriteriaHelpers
|
65
63
|
include Mongoid::Extensions::Hash::Scoping
|
66
|
-
|
64
|
+
extend Mongoid::Extensions::Hash::Conversions
|
67
65
|
end
|
68
66
|
|
69
67
|
class Integer #:nodoc
|
@@ -93,9 +91,9 @@ class Symbol #:nodoc
|
|
93
91
|
end
|
94
92
|
|
95
93
|
class Time #:nodoc
|
96
|
-
extend Mongoid::Extensions::
|
94
|
+
extend Mongoid::Extensions::Time::Conversions
|
97
95
|
end
|
98
96
|
|
99
|
-
class
|
100
|
-
extend Mongoid::Extensions::
|
101
|
-
end
|
97
|
+
class Mongo::ObjectID #:nodoc
|
98
|
+
extend Mongoid::Extensions::ObjectID::Conversions
|
99
|
+
end
|
@@ -4,18 +4,16 @@ module Mongoid #:nodoc:
|
|
4
4
|
module Array #:nodoc:
|
5
5
|
# This module converts arrays into mongoid related objects.
|
6
6
|
module Conversions #:nodoc:
|
7
|
-
|
8
|
-
def mongoidize
|
9
|
-
collect { |obj| obj.attributes }
|
10
|
-
end
|
7
|
+
extend ActiveSupport::Concern
|
11
8
|
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
module InstanceMethods #:nodoc:
|
10
|
+
# Converts this array into an array of hashes.
|
11
|
+
def mongoidize
|
12
|
+
collect { |obj| obj.attributes }
|
15
13
|
end
|
16
14
|
end
|
17
15
|
|
18
|
-
module ClassMethods
|
16
|
+
module ClassMethods #:nodoc:
|
19
17
|
def get(value)
|
20
18
|
value
|
21
19
|
end
|
@@ -7,11 +7,11 @@ module Mongoid #:nodoc:
|
|
7
7
|
module Conversions #:nodoc:
|
8
8
|
# Get the string as a +BigDecimal+
|
9
9
|
def get(value)
|
10
|
-
|
10
|
+
::BigDecimal.new(value)
|
11
11
|
end
|
12
12
|
# Set the value in the hash as a string.
|
13
13
|
def set(value)
|
14
|
-
value
|
14
|
+
value.to_s
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -3,15 +3,9 @@ module Mongoid #:nodoc:
|
|
3
3
|
module Extensions #:nodoc:
|
4
4
|
module Boolean #:nodoc:
|
5
5
|
module Conversions #:nodoc:
|
6
|
-
|
7
|
-
BOOLEAN_MAP = {
|
8
|
-
true => true, "true" => true, "TRUE" => true, "1" => true, 1 => true, 1.0 => true,
|
9
|
-
false => false, "false" => false, "FALSE" => false, "0" => false, 0 => false, 0.0 => false
|
10
|
-
}
|
11
|
-
|
12
6
|
def set(value)
|
13
|
-
|
14
|
-
|
7
|
+
val = value.to_s
|
8
|
+
val == "true" || val == "1"
|
15
9
|
end
|
16
10
|
def get(value)
|
17
11
|
value
|
@@ -3,20 +3,11 @@ module Mongoid #:nodoc:
|
|
3
3
|
module Extensions #:nodoc:
|
4
4
|
module Date #:nodoc:
|
5
5
|
module Conversions #:nodoc:
|
6
|
-
def
|
7
|
-
|
8
|
-
if Mongoid::Config.instance.use_utc?
|
9
|
-
value.to_date
|
10
|
-
else
|
11
|
-
::Date.new(value.year, value.month, value.day)
|
12
|
-
end
|
6
|
+
def set(value)
|
7
|
+
value.to_date.at_midnight.to_time unless value.blank?
|
13
8
|
end
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
def convert_to_time(value)
|
18
|
-
value = ::Date.parse(value) if value.is_a?(::String)
|
19
|
-
::Time.utc(value.year, value.month, value.day)
|
9
|
+
def get(value)
|
10
|
+
value ? value.getlocal.to_date : value
|
20
11
|
end
|
21
12
|
end
|
22
13
|
end
|
@@ -3,8 +3,13 @@ module Mongoid #:nodoc:
|
|
3
3
|
module Extensions #:nodoc:
|
4
4
|
module DateTime #:nodoc:
|
5
5
|
module Conversions #:nodoc:
|
6
|
+
def set(value)
|
7
|
+
return nil if value.blank?
|
8
|
+
::DateTime.parse(value.to_s).utc
|
9
|
+
end
|
6
10
|
def get(value)
|
7
|
-
|
11
|
+
return nil if value.blank?
|
12
|
+
::Time.zone ? ::Time.parse(value.to_s).getlocal.to_datetime : value.to_datetime
|
8
13
|
end
|
9
14
|
end
|
10
15
|
end
|
@@ -18,19 +18,10 @@ module Mongoid #:nodoc:
|
|
18
18
|
#
|
19
19
|
# Returns: The child +Document+.
|
20
20
|
def assimilate(parent, options, type = nil)
|
21
|
-
klass =
|
22
|
-
child = klass.instantiate(
|
23
|
-
self.merge("_type" => klass.name)
|
24
|
-
init(parent, child, options)
|
25
|
-
end
|
26
|
-
|
27
|
-
protected
|
28
|
-
|
29
|
-
def init(parent, child, options)
|
30
|
-
child._parent = parent
|
31
|
-
child.write_attributes(self)
|
21
|
+
klass = type ? type : options.klass
|
22
|
+
child = klass.instantiate(:_parent => parent)
|
23
|
+
child.write_attributes(self.merge("_type" => klass.name))
|
32
24
|
child.identify
|
33
|
-
child.reset_modifications
|
34
25
|
child.assimilate(parent, options)
|
35
26
|
end
|
36
27
|
end
|