mongoid 1.2.14 → 1.9.0
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/lib/mongoid.rb +10 -3
- data/lib/mongoid/associations.rb +133 -97
- data/lib/mongoid/associations/belongs_to_related.rb +2 -3
- data/lib/mongoid/associations/{belongs_to.rb → embedded_in.rb} +14 -6
- data/lib/mongoid/associations/{has_many.rb → embeds_many.rb} +89 -31
- data/lib/mongoid/associations/{has_one.rb → embeds_one.rb} +8 -7
- data/lib/mongoid/associations/has_many_related.rb +52 -7
- data/lib/mongoid/associations/has_one_related.rb +8 -4
- data/lib/mongoid/associations/meta_data.rb +2 -1
- data/lib/mongoid/associations/options.rb +6 -1
- data/lib/mongoid/associations/proxy.rb +14 -21
- data/lib/mongoid/attributes.rb +27 -12
- data/lib/mongoid/collection.rb +4 -3
- data/lib/mongoid/collections.rb +41 -0
- data/lib/mongoid/collections/master.rb +3 -2
- data/lib/mongoid/collections/slaves.rb +3 -2
- data/lib/mongoid/components.rb +21 -19
- data/lib/mongoid/concern.rb +31 -0
- data/lib/mongoid/config.rb +117 -12
- 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 +10 -2
- data/lib/mongoid/criterion/inclusion.rb +17 -0
- data/lib/mongoid/criterion/optional.rb +1 -1
- data/lib/mongoid/dirty.rb +253 -0
- data/lib/mongoid/document.rb +81 -52
- data/lib/mongoid/errors.rb +32 -1
- data/lib/mongoid/extensions.rb +11 -9
- data/lib/mongoid/extensions/big_decimal/conversions.rb +2 -2
- data/lib/mongoid/extensions/boolean/conversions.rb +8 -2
- data/lib/mongoid/extensions/date/conversions.rb +13 -4
- data/lib/mongoid/extensions/datetime/conversions.rb +1 -6
- data/lib/mongoid/extensions/float/conversions.rb +5 -1
- data/lib/mongoid/extensions/hash/assimilation.rb +12 -3
- data/lib/mongoid/extensions/hash/conversions.rb +34 -4
- data/lib/mongoid/extensions/integer/conversions.rb +5 -1
- data/lib/mongoid/extensions/nil/assimilation.rb +4 -0
- data/lib/mongoid/extensions/object/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 +35 -0
- data/lib/mongoid/extras.rb +6 -9
- data/lib/mongoid/factory.rb +2 -1
- data/lib/mongoid/field.rb +9 -2
- data/lib/mongoid/fields.rb +1 -0
- data/lib/mongoid/identity.rb +3 -3
- data/lib/mongoid/indexes.rb +3 -3
- data/lib/mongoid/memoization.rb +8 -2
- data/lib/mongoid/named_scope.rb +0 -3
- data/lib/mongoid/observable.rb +30 -0
- data/lib/mongoid/paths.rb +62 -0
- data/lib/mongoid/persistence.rb +222 -0
- data/lib/mongoid/persistence/command.rb +39 -0
- data/lib/mongoid/persistence/insert.rb +50 -0
- data/lib/mongoid/persistence/insert_embedded.rb +38 -0
- data/lib/mongoid/persistence/remove.rb +39 -0
- data/lib/mongoid/persistence/remove_all.rb +37 -0
- data/lib/mongoid/persistence/remove_embedded.rb +50 -0
- data/lib/mongoid/persistence/update.rb +63 -0
- data/lib/mongoid/state.rb +28 -21
- data/lib/mongoid/timestamps.rb +5 -8
- data/lib/mongoid/version.rb +4 -0
- data/lib/mongoid/versioning.rb +6 -7
- metadata +81 -300
- data/.gitignore +0 -6
- data/.watchr +0 -29
- data/Rakefile +0 -53
- data/VERSION +0 -1
- data/caliper.yml +0 -4
- data/lib/mongoid/collections/mimic.rb +0 -46
- data/lib/mongoid/commands.rb +0 -174
- data/lib/mongoid/commands/create.rb +0 -21
- data/lib/mongoid/commands/delete.rb +0 -16
- data/lib/mongoid/commands/delete_all.rb +0 -23
- data/lib/mongoid/commands/deletion.rb +0 -18
- data/lib/mongoid/commands/destroy.rb +0 -19
- data/lib/mongoid/commands/destroy_all.rb +0 -23
- data/lib/mongoid/commands/save.rb +0 -27
- data/lib/mongoid/extensions/time/conversions.rb +0 -18
- data/mongoid.gemspec +0 -395
- data/perf/benchmark.rb +0 -77
- data/spec/integration/mongoid/associations_spec.rb +0 -340
- data/spec/integration/mongoid/attributes_spec.rb +0 -22
- data/spec/integration/mongoid/commands_spec.rb +0 -218
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +0 -33
- data/spec/integration/mongoid/criteria_spec.rb +0 -272
- data/spec/integration/mongoid/document_spec.rb +0 -593
- data/spec/integration/mongoid/extensions_spec.rb +0 -26
- data/spec/integration/mongoid/finders_spec.rb +0 -119
- data/spec/integration/mongoid/inheritance_spec.rb +0 -137
- data/spec/integration/mongoid/named_scope_spec.rb +0 -46
- data/spec/models/address.rb +0 -39
- data/spec/models/animal.rb +0 -6
- data/spec/models/callbacks.rb +0 -18
- data/spec/models/comment.rb +0 -8
- data/spec/models/country_code.rb +0 -6
- data/spec/models/employer.rb +0 -5
- data/spec/models/game.rb +0 -7
- data/spec/models/inheritance.rb +0 -56
- data/spec/models/location.rb +0 -5
- data/spec/models/mixed_drink.rb +0 -4
- data/spec/models/name.rb +0 -13
- data/spec/models/namespacing.rb +0 -11
- data/spec/models/patient.rb +0 -4
- data/spec/models/person.rb +0 -99
- data/spec/models/pet.rb +0 -7
- data/spec/models/pet_owner.rb +0 -6
- data/spec/models/phone.rb +0 -7
- data/spec/models/post.rb +0 -15
- data/spec/models/translation.rb +0 -5
- data/spec/models/vet_visit.rb +0 -5
- data/spec/spec.opts +0 -3
- data/spec/spec_helper.rb +0 -31
- data/spec/unit/mongoid/associations/belongs_to_related_spec.rb +0 -145
- data/spec/unit/mongoid/associations/belongs_to_spec.rb +0 -193
- data/spec/unit/mongoid/associations/has_many_related_spec.rb +0 -420
- data/spec/unit/mongoid/associations/has_many_spec.rb +0 -519
- data/spec/unit/mongoid/associations/has_one_related_spec.rb +0 -179
- data/spec/unit/mongoid/associations/has_one_spec.rb +0 -282
- data/spec/unit/mongoid/associations/meta_data_spec.rb +0 -88
- data/spec/unit/mongoid/associations/options_spec.rb +0 -192
- data/spec/unit/mongoid/associations_spec.rb +0 -595
- data/spec/unit/mongoid/attributes_spec.rb +0 -507
- data/spec/unit/mongoid/callbacks_spec.rb +0 -55
- data/spec/unit/mongoid/collection_spec.rb +0 -187
- data/spec/unit/mongoid/collections/cyclic_iterator_spec.rb +0 -75
- data/spec/unit/mongoid/collections/master_spec.rb +0 -41
- data/spec/unit/mongoid/collections/mimic_spec.rb +0 -43
- data/spec/unit/mongoid/collections/slaves_spec.rb +0 -81
- data/spec/unit/mongoid/commands/create_spec.rb +0 -30
- data/spec/unit/mongoid/commands/delete_all_spec.rb +0 -58
- data/spec/unit/mongoid/commands/delete_spec.rb +0 -38
- data/spec/unit/mongoid/commands/destroy_all_spec.rb +0 -23
- data/spec/unit/mongoid/commands/destroy_spec.rb +0 -50
- data/spec/unit/mongoid/commands/save_spec.rb +0 -105
- data/spec/unit/mongoid/commands_spec.rb +0 -275
- data/spec/unit/mongoid/config_spec.rb +0 -172
- data/spec/unit/mongoid/contexts/enumerable_spec.rb +0 -421
- data/spec/unit/mongoid/contexts/mongo_spec.rb +0 -682
- data/spec/unit/mongoid/contexts_spec.rb +0 -25
- data/spec/unit/mongoid/criteria_spec.rb +0 -824
- data/spec/unit/mongoid/criterion/complex_spec.rb +0 -19
- data/spec/unit/mongoid/criterion/exclusion_spec.rb +0 -91
- data/spec/unit/mongoid/criterion/inclusion_spec.rb +0 -219
- data/spec/unit/mongoid/criterion/optional_spec.rb +0 -319
- data/spec/unit/mongoid/cursor_spec.rb +0 -74
- data/spec/unit/mongoid/deprecation_spec.rb +0 -24
- data/spec/unit/mongoid/document_spec.rb +0 -952
- data/spec/unit/mongoid/errors_spec.rb +0 -103
- data/spec/unit/mongoid/extensions/array/accessors_spec.rb +0 -50
- data/spec/unit/mongoid/extensions/array/assimilation_spec.rb +0 -24
- data/spec/unit/mongoid/extensions/array/conversions_spec.rb +0 -35
- data/spec/unit/mongoid/extensions/array/parentization_spec.rb +0 -20
- data/spec/unit/mongoid/extensions/big_decimal/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/binary/conversions_spec.rb +0 -22
- data/spec/unit/mongoid/extensions/boolean/conversions_spec.rb +0 -49
- data/spec/unit/mongoid/extensions/date/conversions_spec.rb +0 -102
- data/spec/unit/mongoid/extensions/datetime/conversions_spec.rb +0 -70
- data/spec/unit/mongoid/extensions/float/conversions_spec.rb +0 -61
- data/spec/unit/mongoid/extensions/hash/accessors_spec.rb +0 -184
- data/spec/unit/mongoid/extensions/hash/assimilation_spec.rb +0 -46
- data/spec/unit/mongoid/extensions/hash/conversions_spec.rb +0 -21
- data/spec/unit/mongoid/extensions/hash/criteria_helpers_spec.rb +0 -17
- data/spec/unit/mongoid/extensions/hash/scoping_spec.rb +0 -14
- data/spec/unit/mongoid/extensions/integer/conversions_spec.rb +0 -61
- data/spec/unit/mongoid/extensions/nil/assimilation_spec.rb +0 -24
- data/spec/unit/mongoid/extensions/object/conversions_spec.rb +0 -57
- data/spec/unit/mongoid/extensions/proc/scoping_spec.rb +0 -34
- data/spec/unit/mongoid/extensions/string/conversions_spec.rb +0 -17
- data/spec/unit/mongoid/extensions/string/inflections_spec.rb +0 -208
- data/spec/unit/mongoid/extensions/symbol/inflections_spec.rb +0 -91
- data/spec/unit/mongoid/extensions/time/conversions_spec.rb +0 -70
- data/spec/unit/mongoid/extras_spec.rb +0 -102
- data/spec/unit/mongoid/factory_spec.rb +0 -31
- data/spec/unit/mongoid/field_spec.rb +0 -143
- data/spec/unit/mongoid/fields_spec.rb +0 -181
- data/spec/unit/mongoid/finders_spec.rb +0 -404
- data/spec/unit/mongoid/identity_spec.rb +0 -109
- data/spec/unit/mongoid/indexes_spec.rb +0 -93
- data/spec/unit/mongoid/javascript_spec.rb +0 -48
- data/spec/unit/mongoid/matchers/all_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/default_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/exists_spec.rb +0 -56
- data/spec/unit/mongoid/matchers/gt_spec.rb +0 -39
- data/spec/unit/mongoid/matchers/gte_spec.rb +0 -49
- data/spec/unit/mongoid/matchers/in_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/lt_spec.rb +0 -39
- data/spec/unit/mongoid/matchers/lte_spec.rb +0 -49
- data/spec/unit/mongoid/matchers/ne_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/nin_spec.rb +0 -27
- data/spec/unit/mongoid/matchers/size_spec.rb +0 -27
- data/spec/unit/mongoid/matchers_spec.rb +0 -329
- data/spec/unit/mongoid/memoization_spec.rb +0 -75
- data/spec/unit/mongoid/named_scope_spec.rb +0 -123
- data/spec/unit/mongoid/scope_spec.rb +0 -240
- data/spec/unit/mongoid/state_spec.rb +0 -83
- data/spec/unit/mongoid/timestamps_spec.rb +0 -25
- data/spec/unit/mongoid/versioning_spec.rb +0 -41
- data/spec/unit/mongoid_spec.rb +0 -46
data/lib/mongoid/errors.rb
CHANGED
@@ -41,6 +41,20 @@ 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
|
+
|
44
58
|
# Raised when a persisence method ending in ! fails validation. The message
|
45
59
|
# will contain the full error messages from the +Document+ in question.
|
46
60
|
#
|
@@ -52,7 +66,7 @@ module Mongoid #:nodoc
|
|
52
66
|
@errors = errors
|
53
67
|
end
|
54
68
|
def message
|
55
|
-
"Validation
|
69
|
+
"Validation Failed: #{@errors.full_messages.join(", ")}"
|
56
70
|
end
|
57
71
|
end
|
58
72
|
|
@@ -73,5 +87,22 @@ module Mongoid #:nodoc
|
|
73
87
|
end
|
74
88
|
end
|
75
89
|
|
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
|
76
107
|
end
|
77
108
|
end
|
data/lib/mongoid/extensions.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# encoding: utf-8
|
2
|
+
require "mongoid/extensions/time_conversions"
|
2
3
|
require "mongoid/extensions/array/accessors"
|
3
4
|
require "mongoid/extensions/array/aliasing"
|
4
5
|
require "mongoid/extensions/array/assimilation"
|
@@ -22,7 +23,6 @@ require "mongoid/extensions/proc/scoping"
|
|
22
23
|
require "mongoid/extensions/string/conversions"
|
23
24
|
require "mongoid/extensions/string/inflections"
|
24
25
|
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,14 +44,16 @@ class Boolean #:nodoc
|
|
44
44
|
extend Mongoid::Extensions::Boolean::Conversions
|
45
45
|
end
|
46
46
|
|
47
|
-
class Date #:nodoc
|
48
|
-
extend Mongoid::Extensions::Date::Conversions
|
49
|
-
end
|
50
|
-
|
51
47
|
class DateTime #:nodoc
|
48
|
+
extend Mongoid::Extensions::TimeConversions
|
52
49
|
extend Mongoid::Extensions::DateTime::Conversions
|
53
50
|
end
|
54
51
|
|
52
|
+
class Date #:nodoc
|
53
|
+
extend Mongoid::Extensions::TimeConversions
|
54
|
+
extend Mongoid::Extensions::Date::Conversions
|
55
|
+
end
|
56
|
+
|
55
57
|
class Float #:nodoc
|
56
58
|
extend Mongoid::Extensions::Float::Conversions
|
57
59
|
end
|
@@ -61,7 +63,7 @@ class Hash #:nodoc
|
|
61
63
|
include Mongoid::Extensions::Hash::Assimilation
|
62
64
|
include Mongoid::Extensions::Hash::CriteriaHelpers
|
63
65
|
include Mongoid::Extensions::Hash::Scoping
|
64
|
-
|
66
|
+
include Mongoid::Extensions::Hash::Conversions
|
65
67
|
end
|
66
68
|
|
67
69
|
class Integer #:nodoc
|
@@ -91,9 +93,9 @@ class Symbol #:nodoc
|
|
91
93
|
end
|
92
94
|
|
93
95
|
class Time #:nodoc
|
94
|
-
extend Mongoid::Extensions::
|
96
|
+
extend Mongoid::Extensions::TimeConversions
|
95
97
|
end
|
96
98
|
|
97
|
-
class
|
99
|
+
class BSON::ObjectID #:nodoc
|
98
100
|
extend Mongoid::Extensions::ObjectID::Conversions
|
99
|
-
end
|
101
|
+
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
|
-
::BigDecimal.new(value)
|
10
|
+
value ? ::BigDecimal.new(value) : value
|
11
11
|
end
|
12
12
|
# Set the value in the hash as a string.
|
13
13
|
def set(value)
|
14
|
-
value.to_s
|
14
|
+
value ? value.to_s : value
|
15
15
|
end
|
16
16
|
end
|
17
17
|
end
|
@@ -3,9 +3,15 @@ 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
|
+
|
6
12
|
def set(value)
|
7
|
-
|
8
|
-
|
13
|
+
value = BOOLEAN_MAP[value]
|
14
|
+
value.nil? ? nil : value
|
9
15
|
end
|
10
16
|
def get(value)
|
11
17
|
value
|
@@ -3,11 +3,20 @@ module Mongoid #:nodoc:
|
|
3
3
|
module Extensions #:nodoc:
|
4
4
|
module Date #:nodoc:
|
5
5
|
module Conversions #:nodoc:
|
6
|
-
def set(value)
|
7
|
-
value.to_date.at_midnight.to_time unless value.blank?
|
8
|
-
end
|
9
6
|
def get(value)
|
10
|
-
|
7
|
+
return nil if value.blank?
|
8
|
+
if Mongoid::Config.instance.use_utc?
|
9
|
+
value.to_date
|
10
|
+
else
|
11
|
+
::Date.new(value.year, value.month, value.day)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
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)
|
11
20
|
end
|
12
21
|
end
|
13
22
|
end
|
@@ -3,13 +3,8 @@ 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
|
10
6
|
def get(value)
|
11
|
-
|
12
|
-
::Time.zone ? ::Time.parse(value.to_s).getlocal.to_datetime : value.to_datetime
|
7
|
+
super.try(:to_datetime)
|
13
8
|
end
|
14
9
|
end
|
15
10
|
end
|
@@ -18,10 +18,19 @@ module Mongoid #:nodoc:
|
|
18
18
|
#
|
19
19
|
# Returns: The child +Document+.
|
20
20
|
def assimilate(parent, options, type = nil)
|
21
|
-
klass = type ? type : options.klass
|
22
|
-
child = klass.instantiate(
|
23
|
-
|
21
|
+
klass = self.klass || (type ? type : options.klass)
|
22
|
+
child = klass.instantiate("_id" => self["_id"])
|
23
|
+
self.merge("_type" => klass.name) if klass.hereditary
|
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)
|
24
32
|
child.identify
|
33
|
+
child.reset_modifications
|
25
34
|
child.assimilate(parent, options)
|
26
35
|
end
|
27
36
|
end
|
@@ -3,11 +3,41 @@ module Mongoid #:nodoc:
|
|
3
3
|
module Extensions #:nodoc:
|
4
4
|
module Hash #:nodoc:
|
5
5
|
module Conversions #:nodoc:
|
6
|
-
|
7
|
-
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
module InstanceMethods #:nodoc:
|
9
|
+
|
10
|
+
# Get the difference between 2 hashes. This will give back a new hash
|
11
|
+
# with the keys and pairs of [ old, new ] values.
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
#
|
15
|
+
# first = { :field => "value" }
|
16
|
+
# second = { :field => "new" }
|
17
|
+
# first.difference(second) # => { :field => [ "value", "new" ] }
|
18
|
+
#
|
19
|
+
# Returns:
|
20
|
+
#
|
21
|
+
# A +Hash+ of modifications.
|
22
|
+
def difference(other)
|
23
|
+
changes = {}
|
24
|
+
each_pair do |key, value|
|
25
|
+
if other.has_key?(key)
|
26
|
+
new_value = other[key]
|
27
|
+
changes[key] = [ value, new_value ] if new_value != value
|
28
|
+
end
|
29
|
+
end
|
30
|
+
changes
|
31
|
+
end
|
8
32
|
end
|
9
|
-
|
10
|
-
|
33
|
+
|
34
|
+
module ClassMethods #:nodoc:
|
35
|
+
def get(value)
|
36
|
+
value
|
37
|
+
end
|
38
|
+
def set(value)
|
39
|
+
value
|
40
|
+
end
|
11
41
|
end
|
12
42
|
end
|
13
43
|
end
|
@@ -5,7 +5,11 @@ module Mongoid #:nodoc:
|
|
5
5
|
module Conversions #:nodoc:
|
6
6
|
def set(value)
|
7
7
|
return nil if value.blank?
|
8
|
-
|
8
|
+
begin
|
9
|
+
Integer(value)
|
10
|
+
rescue ArgumentError => e
|
11
|
+
puts(e.message); value
|
12
|
+
end
|
9
13
|
end
|
10
14
|
def get(value)
|
11
15
|
value
|
@@ -23,7 +23,7 @@ module Mongoid #:nodoc:
|
|
23
23
|
to_s.plural?
|
24
24
|
end
|
25
25
|
|
26
|
-
["gt", "lt", "gte", "lte", "ne", "in", "nin", "mod", "all", "size", "exists"].each do |oper|
|
26
|
+
["gt", "lt", "gte", "lte", "ne", "near", "in", "nin", "mod", "all", "size", "exists", "within"].each do |oper|
|
27
27
|
class_eval <<-OPERATORS
|
28
28
|
def #{oper}
|
29
29
|
Criterion::Complex.new(:key => self, :operator => "#{oper}")
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Mongoid #:nodoc:
|
2
|
+
module Extensions #:nodoc:
|
3
|
+
module TimeConversions #:nodoc:
|
4
|
+
def set(value)
|
5
|
+
return nil if value.blank?
|
6
|
+
time = convert_to_time(value)
|
7
|
+
strip_milliseconds(time).utc
|
8
|
+
end
|
9
|
+
|
10
|
+
def get(value)
|
11
|
+
return nil if value.blank?
|
12
|
+
if Mongoid::Config.instance.use_utc?
|
13
|
+
value
|
14
|
+
else
|
15
|
+
value.getlocal
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def strip_milliseconds(time)
|
22
|
+
::Time.at(time.to_i)
|
23
|
+
end
|
24
|
+
|
25
|
+
def convert_to_time(value)
|
26
|
+
case value
|
27
|
+
when ::String then ::Time.parse(value)
|
28
|
+
when ::DateTime then ::Time.utc(value.year, value.month, value.day, value.hour, value.min, value.sec)
|
29
|
+
when ::Date then ::Time.utc(value.year, value.month, value.day)
|
30
|
+
else value
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/lib/mongoid/extras.rb
CHANGED
@@ -1,15 +1,12 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
module Mongoid #:nodoc:
|
3
3
|
module Extras #:nodoc:
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
delegate :cached?, :enslaved?, :to => "self.class"
|
12
|
-
end
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
included do
|
6
|
+
class_inheritable_accessor :cached, :enslaved
|
7
|
+
self.cached = false
|
8
|
+
self.enslaved = false
|
9
|
+
delegate :cached?, :enslaved?, :to => "self.class"
|
13
10
|
end
|
14
11
|
|
15
12
|
module ClassMethods #:nodoc
|
data/lib/mongoid/factory.rb
CHANGED
@@ -11,7 +11,8 @@ module Mongoid #:nodoc:
|
|
11
11
|
#
|
12
12
|
# klass: The class to instantiate from if _type is not present.
|
13
13
|
# attributes: The +Document+ attributes.
|
14
|
-
def self.build(klass,
|
14
|
+
def self.build(klass, attributes)
|
15
|
+
attrs = {}.merge(attributes)
|
15
16
|
type = attrs["_type"]
|
16
17
|
type ? type.constantize.instantiate(attrs) : klass.instantiate(attrs)
|
17
18
|
end
|
data/lib/mongoid/field.rb
CHANGED
@@ -18,7 +18,7 @@ module Mongoid #:nodoc:
|
|
18
18
|
#
|
19
19
|
# The primitive value or a copy of the default.
|
20
20
|
def default
|
21
|
-
|
21
|
+
copy
|
22
22
|
end
|
23
23
|
|
24
24
|
# Create the new field with a name and optional additional options. Valid
|
@@ -34,6 +34,7 @@ module Mongoid #:nodoc:
|
|
34
34
|
# <tt>Field.new(:score, :default => 0)</tt>
|
35
35
|
def initialize(name, options = {})
|
36
36
|
@name, @default = name, options[:default]
|
37
|
+
@copyable = (@default.is_a?(Array) || @default.is_a?(Hash))
|
37
38
|
@type = options[:type] || String
|
38
39
|
@accessible = options.has_key?(:accessible) ? options[:accessible] : true
|
39
40
|
end
|
@@ -41,12 +42,18 @@ module Mongoid #:nodoc:
|
|
41
42
|
# Used for setting an object in the attributes hash. If nil is provided the
|
42
43
|
# default will get returned if it exists.
|
43
44
|
def set(object)
|
44
|
-
|
45
|
+
type.set(object)
|
45
46
|
end
|
46
47
|
|
47
48
|
# Used for retrieving the object out of the attributes hash.
|
48
49
|
def get(object)
|
49
50
|
type.get(object)
|
50
51
|
end
|
52
|
+
|
53
|
+
protected
|
54
|
+
# Slightly faster default check.
|
55
|
+
def copy
|
56
|
+
@copyable ? @default.dup : @default
|
57
|
+
end
|
51
58
|
end
|
52
59
|
end
|
data/lib/mongoid/fields.rb
CHANGED
data/lib/mongoid/identity.rb
CHANGED
@@ -15,19 +15,19 @@ module Mongoid #:nodoc:
|
|
15
15
|
protected
|
16
16
|
# Return the proper id for the document.
|
17
17
|
def generate_id
|
18
|
-
id =
|
18
|
+
id = BSON::ObjectID.new
|
19
19
|
Mongoid.use_object_ids ? id : id.to_s
|
20
20
|
end
|
21
21
|
|
22
22
|
# Set the id for the document.
|
23
23
|
def identify(doc)
|
24
24
|
doc.id = compose(doc).join(" ").identify if doc.primary_key
|
25
|
-
doc.id = generate_id
|
25
|
+
doc.id = generate_id if doc.id.blank?
|
26
26
|
end
|
27
27
|
|
28
28
|
# Set the _type field on the document.
|
29
29
|
def type(doc)
|
30
|
-
doc._type = doc.class.name if
|
30
|
+
doc._type = doc.class.name if doc.hereditary?
|
31
31
|
end
|
32
32
|
|
33
33
|
# Generates the composite key for a document.
|