mongoid-pre 2.0.0.beta1
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 +24 -0
- data/MIT_LICENSE +20 -0
- data/README.rdoc +49 -0
- data/Rakefile +52 -0
- data/VERSION +1 -0
- data/caliper.yml +4 -0
- data/lib/mongoid.rb +135 -0
- data/lib/mongoid/associations.rb +263 -0
- data/lib/mongoid/associations/belongs_to_related.rb +59 -0
- data/lib/mongoid/associations/embedded_in.rb +64 -0
- data/lib/mongoid/associations/embeds_many.rb +193 -0
- data/lib/mongoid/associations/embeds_one.rb +95 -0
- data/lib/mongoid/associations/has_many_related.rb +133 -0
- data/lib/mongoid/associations/has_one_related.rb +81 -0
- data/lib/mongoid/associations/meta_data.rb +28 -0
- data/lib/mongoid/associations/options.rb +52 -0
- data/lib/mongoid/associations/proxy.rb +31 -0
- data/lib/mongoid/attributes.rb +185 -0
- data/lib/mongoid/callbacks.rb +18 -0
- data/lib/mongoid/collection.rb +119 -0
- data/lib/mongoid/collections/cyclic_iterator.rb +34 -0
- data/lib/mongoid/collections/master.rb +28 -0
- data/lib/mongoid/collections/mimic.rb +46 -0
- data/lib/mongoid/collections/operations.rb +41 -0
- data/lib/mongoid/collections/slaves.rb +44 -0
- 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 +25 -0
- data/lib/mongoid/commands/deletion.rb +18 -0
- data/lib/mongoid/commands/destroy.rb +17 -0
- data/lib/mongoid/commands/destroy_all.rb +25 -0
- data/lib/mongoid/commands/save.rb +30 -0
- data/lib/mongoid/components.rb +31 -0
- data/lib/mongoid/config.rb +86 -0
- data/lib/mongoid/contexts.rb +25 -0
- data/lib/mongoid/contexts/enumerable.rb +151 -0
- data/lib/mongoid/contexts/ids.rb +25 -0
- data/lib/mongoid/contexts/mongo.rb +285 -0
- data/lib/mongoid/contexts/paging.rb +42 -0
- data/lib/mongoid/criteria.rb +239 -0
- data/lib/mongoid/criterion/complex.rb +21 -0
- data/lib/mongoid/criterion/exclusion.rb +65 -0
- data/lib/mongoid/criterion/inclusion.rb +93 -0
- data/lib/mongoid/criterion/optional.rb +136 -0
- data/lib/mongoid/cursor.rb +82 -0
- data/lib/mongoid/deprecation.rb +22 -0
- data/lib/mongoid/dirty.rb +203 -0
- data/lib/mongoid/document.rb +306 -0
- data/lib/mongoid/errors.rb +77 -0
- data/lib/mongoid/extensions.rb +99 -0
- data/lib/mongoid/extensions/array/accessors.rb +17 -0
- data/lib/mongoid/extensions/array/aliasing.rb +4 -0
- data/lib/mongoid/extensions/array/assimilation.rb +26 -0
- data/lib/mongoid/extensions/array/conversions.rb +27 -0
- data/lib/mongoid/extensions/array/parentization.rb +13 -0
- data/lib/mongoid/extensions/big_decimal/conversions.rb +19 -0
- data/lib/mongoid/extensions/binary/conversions.rb +17 -0
- data/lib/mongoid/extensions/boolean/conversions.rb +16 -0
- data/lib/mongoid/extensions/date/conversions.rb +15 -0
- data/lib/mongoid/extensions/datetime/conversions.rb +17 -0
- data/lib/mongoid/extensions/float/conversions.rb +16 -0
- data/lib/mongoid/extensions/hash/accessors.rb +38 -0
- data/lib/mongoid/extensions/hash/assimilation.rb +30 -0
- data/lib/mongoid/extensions/hash/conversions.rb +15 -0
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +20 -0
- data/lib/mongoid/extensions/hash/scoping.rb +12 -0
- data/lib/mongoid/extensions/integer/conversions.rb +16 -0
- data/lib/mongoid/extensions/nil/assimilation.rb +13 -0
- data/lib/mongoid/extensions/object/conversions.rb +27 -0
- data/lib/mongoid/extensions/objectid/conversions.rb +15 -0
- data/lib/mongoid/extensions/proc/scoping.rb +12 -0
- data/lib/mongoid/extensions/string/conversions.rb +15 -0
- data/lib/mongoid/extensions/string/inflections.rb +97 -0
- data/lib/mongoid/extensions/symbol/inflections.rb +36 -0
- data/lib/mongoid/extensions/time/conversions.rb +18 -0
- data/lib/mongoid/extras.rb +61 -0
- data/lib/mongoid/factory.rb +19 -0
- data/lib/mongoid/field.rb +52 -0
- data/lib/mongoid/fields.rb +62 -0
- data/lib/mongoid/finders.rb +136 -0
- data/lib/mongoid/identity.rb +39 -0
- data/lib/mongoid/indexes.rb +27 -0
- data/lib/mongoid/javascript.rb +21 -0
- data/lib/mongoid/javascript/functions.yml +37 -0
- data/lib/mongoid/matchers.rb +36 -0
- data/lib/mongoid/matchers/all.rb +11 -0
- data/lib/mongoid/matchers/default.rb +26 -0
- data/lib/mongoid/matchers/exists.rb +13 -0
- data/lib/mongoid/matchers/gt.rb +11 -0
- data/lib/mongoid/matchers/gte.rb +11 -0
- data/lib/mongoid/matchers/in.rb +11 -0
- data/lib/mongoid/matchers/lt.rb +11 -0
- data/lib/mongoid/matchers/lte.rb +11 -0
- data/lib/mongoid/matchers/ne.rb +11 -0
- data/lib/mongoid/matchers/nin.rb +11 -0
- data/lib/mongoid/matchers/size.rb +11 -0
- data/lib/mongoid/memoization.rb +27 -0
- data/lib/mongoid/named_scope.rb +42 -0
- data/lib/mongoid/observable.rb +30 -0
- data/lib/mongoid/paths.rb +54 -0
- data/lib/mongoid/persistence.rb +27 -0
- data/lib/mongoid/persistence/command.rb +20 -0
- data/lib/mongoid/persistence/insert.rb +71 -0
- data/lib/mongoid/persistence/update.rb +78 -0
- data/lib/mongoid/scope.rb +75 -0
- data/lib/mongoid/state.rb +32 -0
- data/lib/mongoid/timestamps.rb +27 -0
- 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 +26 -0
- data/mongoid.gemspec +413 -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 +230 -0
- data/spec/integration/mongoid/contexts/enumerable_spec.rb +33 -0
- data/spec/integration/mongoid/criteria_spec.rb +272 -0
- data/spec/integration/mongoid/dirty_spec.rb +70 -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/integration/mongoid/persistence/update_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 +6 -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/embedded_in_spec.rb +193 -0
- data/spec/unit/mongoid/associations/embeds_many_spec.rb +516 -0
- data/spec/unit/mongoid/associations/embeds_one_spec.rb +282 -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 +59 -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 +176 -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/dirty_spec.rb +286 -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/persistence/insert_spec.rb +175 -0
- data/spec/unit/mongoid/persistence/update_spec.rb +148 -0
- data/spec/unit/mongoid/persistence_spec.rb +40 -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 +476 -0
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc
|
|
3
|
+
module Errors #:nodoc
|
|
4
|
+
|
|
5
|
+
# Raised when querying the database for a document by a specific id which
|
|
6
|
+
# does not exist. If multiple ids were passed then it will display all of
|
|
7
|
+
# those.
|
|
8
|
+
#
|
|
9
|
+
# Example:
|
|
10
|
+
#
|
|
11
|
+
# <tt>DocumentNotFound.new(Person, ["1", "2"])</tt>
|
|
12
|
+
class DocumentNotFound < RuntimeError
|
|
13
|
+
def initialize(klass, ids)
|
|
14
|
+
@klass, @identifier = klass, ids.is_a?(Array) ? ids.join(", ") : ids
|
|
15
|
+
end
|
|
16
|
+
def message
|
|
17
|
+
"Document not found for class #{@klass} and id(s) #{@identifier}"
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# Raised when invalid options are passed into a constructor or method.
|
|
22
|
+
#
|
|
23
|
+
# Example:
|
|
24
|
+
#
|
|
25
|
+
# <tt>InvalidOptions.new</tt>
|
|
26
|
+
class InvalidOptions < RuntimeError; end
|
|
27
|
+
|
|
28
|
+
# Raised when the database connection has not been set up properly, either
|
|
29
|
+
# by attempting to set an object on the db that is not a +Mongo::DB+, or
|
|
30
|
+
# not setting anything at all.
|
|
31
|
+
#
|
|
32
|
+
# Example:
|
|
33
|
+
#
|
|
34
|
+
# <tt>InvalidDatabase.new("Not a DB")</tt>
|
|
35
|
+
class InvalidDatabase < RuntimeError
|
|
36
|
+
def initialize(database)
|
|
37
|
+
@database = database
|
|
38
|
+
end
|
|
39
|
+
def message
|
|
40
|
+
"Database should be a Mongo::DB, not #{@database.class.name}"
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# Raised when a persisence method ending in ! fails validation. The message
|
|
45
|
+
# will contain the full error messages from the +Document+ in question.
|
|
46
|
+
#
|
|
47
|
+
# Example:
|
|
48
|
+
#
|
|
49
|
+
# <tt>Validations.new(person.errors)</tt>
|
|
50
|
+
class Validations < RuntimeError
|
|
51
|
+
def initialize(errors)
|
|
52
|
+
@errors = errors
|
|
53
|
+
end
|
|
54
|
+
def message
|
|
55
|
+
"Validation failed: #{@errors.full_messages}"
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# This error is raised when trying to access a Mongo::Collection from an
|
|
60
|
+
# embedded document.
|
|
61
|
+
#
|
|
62
|
+
# Example:
|
|
63
|
+
#
|
|
64
|
+
# <tt>InvalidCollection.new(Address)</tt>
|
|
65
|
+
class InvalidCollection < RuntimeError
|
|
66
|
+
def initialize(klass)
|
|
67
|
+
@klass = klass
|
|
68
|
+
end
|
|
69
|
+
def message
|
|
70
|
+
"Access to the collection for #{@klass.name} is not allowed " +
|
|
71
|
+
"since it is an embedded document, please access a collection from " +
|
|
72
|
+
"the root document"
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
end
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "mongoid/extensions/array/accessors"
|
|
3
|
+
require "mongoid/extensions/array/aliasing"
|
|
4
|
+
require "mongoid/extensions/array/assimilation"
|
|
5
|
+
require "mongoid/extensions/array/conversions"
|
|
6
|
+
require "mongoid/extensions/array/parentization"
|
|
7
|
+
require "mongoid/extensions/big_decimal/conversions"
|
|
8
|
+
require "mongoid/extensions/binary/conversions"
|
|
9
|
+
require "mongoid/extensions/boolean/conversions"
|
|
10
|
+
require "mongoid/extensions/date/conversions"
|
|
11
|
+
require "mongoid/extensions/datetime/conversions"
|
|
12
|
+
require "mongoid/extensions/float/conversions"
|
|
13
|
+
require "mongoid/extensions/hash/accessors"
|
|
14
|
+
require "mongoid/extensions/hash/assimilation"
|
|
15
|
+
require "mongoid/extensions/hash/conversions"
|
|
16
|
+
require "mongoid/extensions/hash/criteria_helpers"
|
|
17
|
+
require "mongoid/extensions/hash/scoping"
|
|
18
|
+
require "mongoid/extensions/integer/conversions"
|
|
19
|
+
require "mongoid/extensions/nil/assimilation"
|
|
20
|
+
require "mongoid/extensions/object/conversions"
|
|
21
|
+
require "mongoid/extensions/proc/scoping"
|
|
22
|
+
require "mongoid/extensions/string/conversions"
|
|
23
|
+
require "mongoid/extensions/string/inflections"
|
|
24
|
+
require "mongoid/extensions/symbol/inflections"
|
|
25
|
+
require "mongoid/extensions/time/conversions"
|
|
26
|
+
require "mongoid/extensions/objectid/conversions"
|
|
27
|
+
|
|
28
|
+
class Array #:nodoc
|
|
29
|
+
include Mongoid::Extensions::Array::Accessors
|
|
30
|
+
include Mongoid::Extensions::Array::Assimilation
|
|
31
|
+
include Mongoid::Extensions::Array::Conversions
|
|
32
|
+
include Mongoid::Extensions::Array::Parentization
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
class BigDecimal #:nodoc
|
|
36
|
+
extend Mongoid::Extensions::BigDecimal::Conversions
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
class Binary #:nodoc
|
|
40
|
+
extend Mongoid::Extensions::Binary::Conversions
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class Boolean #:nodoc
|
|
44
|
+
extend Mongoid::Extensions::Boolean::Conversions
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
class Date #:nodoc
|
|
48
|
+
extend Mongoid::Extensions::Date::Conversions
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
class DateTime #:nodoc
|
|
52
|
+
extend Mongoid::Extensions::DateTime::Conversions
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
class Float #:nodoc
|
|
56
|
+
extend Mongoid::Extensions::Float::Conversions
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
class Hash #:nodoc
|
|
60
|
+
include Mongoid::Extensions::Hash::Accessors
|
|
61
|
+
include Mongoid::Extensions::Hash::Assimilation
|
|
62
|
+
include Mongoid::Extensions::Hash::CriteriaHelpers
|
|
63
|
+
include Mongoid::Extensions::Hash::Scoping
|
|
64
|
+
extend Mongoid::Extensions::Hash::Conversions
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
class Integer #:nodoc
|
|
68
|
+
extend Mongoid::Extensions::Integer::Conversions
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
class NilClass #:nodoc
|
|
72
|
+
include Mongoid::Extensions::Nil::Assimilation
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
class Object #:nodoc:
|
|
76
|
+
include Mongoid::Extensions::Object::Conversions
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class Proc #:nodoc:
|
|
80
|
+
include Mongoid::Extensions::Proc::Scoping
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
class String #:nodoc
|
|
84
|
+
include Mongoid::Extensions::String::Inflections
|
|
85
|
+
extend Mongoid::Extensions::String::Conversions
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
class Symbol #:nodoc
|
|
89
|
+
remove_method :size if instance_methods.include? :size # temporal fix for ruby 1.9
|
|
90
|
+
include Mongoid::Extensions::Symbol::Inflections
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
class Time #:nodoc
|
|
94
|
+
extend Mongoid::Extensions::Time::Conversions
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
class Mongo::ObjectID #:nodoc
|
|
98
|
+
extend Mongoid::Extensions::ObjectID::Conversions
|
|
99
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Array #:nodoc:
|
|
5
|
+
module Accessors #:nodoc:
|
|
6
|
+
# If the attributes already exists in the array then they will be
|
|
7
|
+
# updated, otherwise they will be appended.
|
|
8
|
+
def update(attributes)
|
|
9
|
+
delete_if { |e| attributes["_id"] && (e["_id"] == attributes["_id"]) }
|
|
10
|
+
self.<< attributes
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
alias :merge! :update
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Array #:nodoc:
|
|
5
|
+
module Assimilation #:nodoc:
|
|
6
|
+
# Introduces a child object into the +Document+ object graph. This will
|
|
7
|
+
# set up the relationships between the parent and child and update the
|
|
8
|
+
# attributes of the parent +Document+.
|
|
9
|
+
#
|
|
10
|
+
# Options:
|
|
11
|
+
#
|
|
12
|
+
# parent: The +Document+ to assimilate into.
|
|
13
|
+
# options: The association +Options+ for the child.
|
|
14
|
+
#
|
|
15
|
+
# Example:
|
|
16
|
+
#
|
|
17
|
+
# <tt>[{:street => "Queen St."}, {:street => "King St."}].assimilate(person, options)</tt>
|
|
18
|
+
#
|
|
19
|
+
# Returns: The child +Document+.
|
|
20
|
+
def assimilate(parent, options)
|
|
21
|
+
each { |child| child.assimilate(parent, options) }
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Array #:nodoc:
|
|
5
|
+
# This module converts arrays into mongoid related objects.
|
|
6
|
+
module Conversions #:nodoc:
|
|
7
|
+
extend ActiveSupport::Concern
|
|
8
|
+
|
|
9
|
+
module InstanceMethods #:nodoc:
|
|
10
|
+
# Converts this array into an array of hashes.
|
|
11
|
+
def mongoidize
|
|
12
|
+
collect { |obj| obj.attributes }
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
module ClassMethods #:nodoc:
|
|
17
|
+
def get(value)
|
|
18
|
+
value
|
|
19
|
+
end
|
|
20
|
+
def set(value)
|
|
21
|
+
value
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Array #:nodoc:
|
|
5
|
+
module Parentization #:nodoc:
|
|
6
|
+
# Adds the parent document to each element in the array.
|
|
7
|
+
def parentize(parent, association_name)
|
|
8
|
+
each { |obj| obj.parentize(parent, association_name) }
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
require "bigdecimal"
|
|
3
|
+
|
|
4
|
+
module Mongoid #:nodoc:
|
|
5
|
+
module Extensions #:nodoc:
|
|
6
|
+
module BigDecimal #:nodoc:
|
|
7
|
+
module Conversions #:nodoc:
|
|
8
|
+
# Get the string as a +BigDecimal+
|
|
9
|
+
def get(value)
|
|
10
|
+
::BigDecimal.new(value)
|
|
11
|
+
end
|
|
12
|
+
# Set the value in the hash as a string.
|
|
13
|
+
def set(value)
|
|
14
|
+
value.to_s
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Binary #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
# Get the value from the db hash.
|
|
7
|
+
def get(value)
|
|
8
|
+
value
|
|
9
|
+
end
|
|
10
|
+
# Set the value in the db hash.
|
|
11
|
+
def set(value)
|
|
12
|
+
value
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Boolean #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
def set(value)
|
|
7
|
+
val = value.to_s
|
|
8
|
+
val == "true" || val == "1"
|
|
9
|
+
end
|
|
10
|
+
def get(value)
|
|
11
|
+
value
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Date #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
def set(value)
|
|
7
|
+
value.to_date.at_midnight.to_time unless value.blank?
|
|
8
|
+
end
|
|
9
|
+
def get(value)
|
|
10
|
+
value ? value.getlocal.to_date : value
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module DateTime #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
def set(value)
|
|
7
|
+
return nil if value.blank?
|
|
8
|
+
::DateTime.parse(value.to_s).utc
|
|
9
|
+
end
|
|
10
|
+
def get(value)
|
|
11
|
+
return nil if value.blank?
|
|
12
|
+
::Time.zone ? ::Time.parse(value.to_s).getlocal.to_datetime : value.to_datetime
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Float #:nodoc:
|
|
5
|
+
module Conversions #:nodoc:
|
|
6
|
+
def set(value)
|
|
7
|
+
return nil if value.blank?
|
|
8
|
+
value =~ /\d/ ? value.to_f : value
|
|
9
|
+
end
|
|
10
|
+
def get(value)
|
|
11
|
+
value
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Hash #:nodoc:
|
|
5
|
+
module Accessors #:nodoc:
|
|
6
|
+
|
|
7
|
+
# Remove a set of attributes from a hash. If the attributes are
|
|
8
|
+
# contained in an array it will remove it from the array, otherwise it
|
|
9
|
+
# will delete the child attribute completely.
|
|
10
|
+
def remove(key, attrs)
|
|
11
|
+
elements = self[key]
|
|
12
|
+
if elements
|
|
13
|
+
key.singular? ? self[key] = nil : elements.delete(attrs)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
# Inserts new attributes into the hash. If the elements are present in
|
|
18
|
+
# the hash it will update them, otherwise it will add the new
|
|
19
|
+
# attributes into the hash as either a child hash or child array of
|
|
20
|
+
# hashes.
|
|
21
|
+
def insert(key, attrs)
|
|
22
|
+
elements = self[key]
|
|
23
|
+
if elements
|
|
24
|
+
elements.merge!(attrs)
|
|
25
|
+
else
|
|
26
|
+
self[key] = key.singular? ? attrs : [attrs]
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# If a _type key exists in the hash, return the class for the value.
|
|
31
|
+
def klass
|
|
32
|
+
class_name = self["_type"]
|
|
33
|
+
class_name ? class_name.constantize : nil
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid #:nodoc:
|
|
3
|
+
module Extensions #:nodoc:
|
|
4
|
+
module Hash #:nodoc:
|
|
5
|
+
module Assimilation #:nodoc:
|
|
6
|
+
# Introduces a child object into the +Document+ object graph. This will
|
|
7
|
+
# set up the relationships between the parent and child and update the
|
|
8
|
+
# attributes of the parent +Document+.
|
|
9
|
+
#
|
|
10
|
+
# Options:
|
|
11
|
+
#
|
|
12
|
+
# parent: The +Document+ to assimilate into.
|
|
13
|
+
# options: The association +Options+ for the child.
|
|
14
|
+
#
|
|
15
|
+
# Example:
|
|
16
|
+
#
|
|
17
|
+
# <tt>{:first_name => "Hank", :last_name => "Moody"}.assimilate(name, options)</tt>
|
|
18
|
+
#
|
|
19
|
+
# Returns: The child +Document+.
|
|
20
|
+
def assimilate(parent, options, type = nil)
|
|
21
|
+
klass = type ? type : options.klass
|
|
22
|
+
child = klass.instantiate(:_parent => parent)
|
|
23
|
+
child.write_attributes(self.merge("_type" => klass.name))
|
|
24
|
+
child.identify
|
|
25
|
+
child.assimilate(parent, options)
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|