mongoid 2.4.10 → 3.0.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/CHANGELOG.md +949 -10
- data/LICENSE +1 -1
- data/README.md +10 -11
- data/Rakefile +3 -17
- data/lib/config/locales/en.yml +455 -51
- data/lib/mongoid/atomic/modifiers.rb +2 -2
- data/lib/mongoid/atomic/paths/embedded/many.rb +6 -6
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -5
- data/lib/mongoid/atomic/paths/embedded.rb +4 -5
- data/lib/mongoid/atomic/paths/root.rb +4 -5
- data/lib/mongoid/atomic.rb +70 -16
- data/lib/mongoid/attributes/processing.rb +14 -10
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/attributes.rb +95 -32
- data/lib/mongoid/callbacks.rb +106 -43
- data/lib/mongoid/components.rb +12 -23
- data/lib/mongoid/config/environment.rb +7 -4
- data/lib/mongoid/config/inflections.rb +6 -0
- data/lib/mongoid/config/options.rb +1 -1
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config.rb +104 -225
- data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +181 -0
- data/lib/mongoid/contextual/atomic.rb +179 -0
- data/lib/mongoid/contextual/command.rb +43 -0
- data/lib/mongoid/contextual/find_and_modify.rb +68 -0
- data/lib/mongoid/contextual/map_reduce.rb +273 -0
- data/lib/mongoid/contextual/memory.rb +406 -0
- data/lib/mongoid/contextual/mongo.rb +662 -0
- data/lib/mongoid/contextual.rb +50 -0
- data/lib/mongoid/copyable.rb +7 -25
- data/lib/mongoid/criteria.rb +515 -245
- data/lib/mongoid/criterion/inspection.rb +14 -8
- data/lib/mongoid/criterion/scoping.rb +114 -44
- data/lib/mongoid/dirty.rb +152 -67
- data/lib/mongoid/document.rb +71 -52
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +5 -6
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +98 -17
- data/lib/mongoid/errors/eager_load.rb +3 -6
- data/lib/mongoid/errors/invalid_collection.rb +3 -3
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_database.rb +3 -3
- data/lib/mongoid/errors/invalid_field.rb +54 -8
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +3 -3
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -4
- data/lib/mongoid/errors/invalid_scope.rb +24 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +38 -0
- data/lib/mongoid/errors/invalid_storage_options.rb +27 -0
- data/lib/mongoid/errors/invalid_time.rb +3 -6
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +4 -9
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +54 -3
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +28 -0
- data/lib/mongoid/errors/no_default_session.rb +23 -0
- data/lib/mongoid/errors/no_environment.rb +3 -3
- data/lib/mongoid/errors/no_map_reduce_output.rb +24 -0
- data/lib/mongoid/errors/no_metadata.rb +21 -0
- data/lib/mongoid/errors/no_parent.rb +24 -0
- data/lib/mongoid/errors/no_session_config.rb +22 -0
- data/lib/mongoid/errors/no_session_database.rb +27 -0
- data/lib/mongoid/errors/no_session_hosts.rb +27 -0
- data/lib/mongoid/errors/no_sessions_config.rb +20 -0
- data/lib/mongoid/errors/readonly_attribute.rb +25 -0
- data/lib/mongoid/errors/scope_overwrite.rb +4 -4
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +4 -4
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +4 -8
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/unsupported_version.rb +4 -4
- data/lib/mongoid/errors/validations.rb +7 -6
- data/lib/mongoid/errors/versioning_not_on_root.rb +23 -0
- data/lib/mongoid/errors.rb +23 -1
- data/lib/mongoid/evolvable.rb +19 -0
- data/lib/mongoid/extensions/array.rb +164 -0
- data/lib/mongoid/extensions/big_decimal.rb +42 -0
- data/lib/mongoid/extensions/boolean.rb +24 -0
- data/lib/mongoid/extensions/date.rb +70 -0
- data/lib/mongoid/extensions/date_time.rb +73 -0
- data/lib/mongoid/extensions/false_class.rb +38 -0
- data/lib/mongoid/extensions/float.rb +56 -0
- data/lib/mongoid/extensions/hash.rb +123 -0
- data/lib/mongoid/extensions/integer.rb +66 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +21 -0
- data/lib/mongoid/extensions/object.rb +238 -0
- data/lib/mongoid/extensions/object_id.rb +54 -0
- data/lib/mongoid/extensions/range.rb +79 -0
- data/lib/mongoid/extensions/regexp.rb +27 -0
- data/lib/mongoid/extensions/set.rb +55 -0
- data/lib/mongoid/extensions/string.rb +181 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +78 -0
- data/lib/mongoid/extensions/time_with_zone.rb +55 -0
- data/lib/mongoid/extensions/true_class.rb +38 -0
- data/lib/mongoid/extensions.rb +28 -76
- data/lib/mongoid/factory.rb +1 -1
- data/lib/mongoid/fields/foreign_key.rb +150 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +268 -0
- data/lib/mongoid/fields/validators/macro.rb +83 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +142 -208
- data/lib/mongoid/finders.rb +45 -50
- data/lib/mongoid/hierarchy.rb +44 -15
- data/lib/mongoid/identity_map.rb +49 -21
- data/lib/mongoid/indexes/validators/options.rb +80 -0
- data/lib/mongoid/indexes.rb +66 -15
- data/lib/mongoid/inspection.rb +1 -1
- data/lib/mongoid/json.rb +2 -2
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchers/all.rb +7 -8
- data/lib/mongoid/matchers/and.rb +3 -3
- data/lib/mongoid/matchers/default.rb +6 -4
- data/lib/mongoid/matchers/exists.rb +2 -2
- data/lib/mongoid/matchers/gt.rb +2 -2
- data/lib/mongoid/matchers/gte.rb +2 -2
- data/lib/mongoid/matchers/in.rb +3 -7
- data/lib/mongoid/matchers/lt.rb +2 -2
- data/lib/mongoid/matchers/lte.rb +2 -2
- data/lib/mongoid/matchers/ne.rb +2 -2
- data/lib/mongoid/matchers/nin.rb +2 -2
- data/lib/mongoid/matchers/or.rb +2 -2
- data/lib/mongoid/matchers/size.rb +2 -2
- data/lib/mongoid/matchers/strategies.rb +3 -3
- data/lib/mongoid/matchers.rb +1 -1
- data/lib/mongoid/multi_parameter_attributes.rb +9 -11
- data/lib/mongoid/nested_attributes.rb +17 -9
- data/lib/mongoid/observer.rb +1 -2
- data/lib/mongoid/paranoia.rb +10 -44
- data/lib/mongoid/persistence/atomic/add_to_set.rb +5 -9
- data/lib/mongoid/persistence/atomic/bit.rb +5 -7
- data/lib/mongoid/persistence/atomic/inc.rb +5 -7
- data/lib/mongoid/persistence/atomic/operation.rb +45 -6
- data/lib/mongoid/persistence/atomic/pop.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull.rb +5 -7
- data/lib/mongoid/persistence/atomic/pull_all.rb +5 -7
- data/lib/mongoid/persistence/atomic/push.rb +4 -10
- data/lib/mongoid/persistence/atomic/push_all.rb +4 -10
- data/lib/mongoid/persistence/atomic/rename.rb +6 -7
- data/lib/mongoid/persistence/atomic/sets.rb +5 -7
- data/lib/mongoid/persistence/atomic/unset.rb +4 -5
- data/lib/mongoid/persistence/atomic.rb +2 -2
- data/lib/mongoid/persistence/deletion.rb +2 -2
- data/lib/mongoid/persistence/insertion.rb +10 -16
- data/lib/mongoid/persistence/modification.rb +5 -9
- data/lib/mongoid/persistence/operations/embedded/insert.rb +7 -6
- data/lib/mongoid/persistence/operations/embedded/remove.rb +5 -5
- data/lib/mongoid/persistence/operations/insert.rb +4 -4
- data/lib/mongoid/persistence/operations/remove.rb +4 -4
- data/lib/mongoid/persistence/operations/update.rb +5 -5
- data/lib/mongoid/persistence/operations/upsert.rb +28 -0
- data/lib/mongoid/persistence/operations.rb +22 -19
- data/lib/mongoid/persistence/upsertion.rb +30 -0
- data/lib/mongoid/persistence.rb +94 -39
- data/lib/mongoid/railtie.rb +26 -11
- data/lib/mongoid/railties/database.rake +22 -108
- data/lib/mongoid/relations/accessors.rb +120 -20
- data/lib/mongoid/relations/auto_save.rb +59 -5
- data/lib/mongoid/relations/binding.rb +211 -2
- data/lib/mongoid/relations/bindings/embedded/in.rb +16 -22
- data/lib/mongoid/relations/bindings/embedded/many.rb +9 -50
- data/lib/mongoid/relations/bindings/embedded/one.rb +10 -16
- data/lib/mongoid/relations/bindings/referenced/in.rb +31 -57
- data/lib/mongoid/relations/bindings/referenced/many.rb +8 -20
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +15 -19
- data/lib/mongoid/relations/bindings/referenced/one.rb +10 -24
- data/lib/mongoid/relations/builder.rb +4 -4
- data/lib/mongoid/relations/builders/embedded/in.rb +5 -5
- data/lib/mongoid/relations/builders/embedded/many.rb +12 -12
- data/lib/mongoid/relations/builders/embedded/one.rb +6 -6
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +8 -8
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +5 -5
- data/lib/mongoid/relations/builders/referenced/in.rb +4 -4
- data/lib/mongoid/relations/builders/referenced/many.rb +6 -6
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +7 -5
- data/lib/mongoid/relations/builders/referenced/one.rb +5 -5
- data/lib/mongoid/relations/builders.rb +19 -16
- data/lib/mongoid/relations/cascading/delete.rb +3 -5
- data/lib/mongoid/relations/cascading/destroy.rb +3 -3
- data/lib/mongoid/relations/cascading/nullify.rb +3 -3
- data/lib/mongoid/relations/cascading/restrict.rb +37 -0
- data/lib/mongoid/relations/cascading.rb +10 -7
- data/lib/mongoid/relations/constraint.rb +4 -3
- data/lib/mongoid/relations/conversions.rb +6 -7
- data/lib/mongoid/relations/cyclic.rb +7 -7
- data/lib/mongoid/relations/embedded/batchable.rb +347 -0
- data/lib/mongoid/relations/embedded/in.rb +23 -12
- data/lib/mongoid/relations/embedded/many.rb +100 -161
- data/lib/mongoid/relations/embedded/one.rb +25 -14
- data/lib/mongoid/relations/macros.rb +105 -60
- data/lib/mongoid/relations/many.rb +93 -14
- data/lib/mongoid/relations/metadata.rb +277 -47
- data/lib/mongoid/relations/nested_builder.rb +4 -6
- data/lib/mongoid/relations/one.rb +2 -2
- data/lib/mongoid/relations/options.rb +2 -2
- data/lib/mongoid/relations/polymorphic.rb +9 -9
- data/lib/mongoid/relations/proxy.rb +62 -31
- data/lib/mongoid/relations/referenced/in.rb +40 -15
- data/lib/mongoid/relations/referenced/many.rb +162 -130
- data/lib/mongoid/relations/referenced/many_to_many.rb +104 -48
- data/lib/mongoid/relations/referenced/one.rb +34 -13
- data/lib/mongoid/relations/reflections.rb +3 -3
- data/lib/mongoid/relations/synchronization.rb +19 -23
- data/lib/mongoid/relations/targets/enumerable.rb +86 -57
- data/lib/mongoid/relations/touchable.rb +32 -0
- data/lib/mongoid/relations.rb +22 -6
- data/lib/mongoid/reloading.rb +12 -14
- data/lib/mongoid/scoping.rb +312 -0
- data/lib/mongoid/serialization.rb +94 -42
- data/lib/mongoid/sessions/factory.rb +108 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions.rb +383 -0
- data/lib/mongoid/sharding.rb +6 -6
- data/lib/mongoid/state.rb +6 -7
- data/lib/mongoid/threaded/lifecycle.rb +21 -21
- data/lib/mongoid/threaded/sessions.rb +0 -0
- data/lib/mongoid/threaded.rb +219 -59
- data/lib/mongoid/timestamps/created.rb +8 -4
- data/lib/mongoid/timestamps/timeless.rb +6 -4
- data/lib/mongoid/timestamps/updated.rb +4 -3
- data/lib/mongoid/timestamps.rb +1 -1
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validations/associated.rb +2 -2
- data/lib/mongoid/validations/format.rb +2 -2
- data/lib/mongoid/validations/presence.rb +34 -4
- data/lib/mongoid/validations/uniqueness.rb +11 -12
- data/lib/mongoid/validations.rb +28 -20
- data/lib/mongoid/version.rb +2 -2
- data/lib/mongoid/versioning.rb +25 -26
- data/lib/mongoid.rb +37 -37
- data/lib/rack/mongoid/middleware/identity_map.rb +3 -3
- data/lib/rails/generators/mongoid/config/config_generator.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +65 -17
- data/lib/rails/generators/mongoid/model/model_generator.rb +7 -7
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +2 -2
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +4 -4
- data/lib/rails/generators/mongoid_generator.rb +5 -5
- data/lib/rails/mongoid.rb +73 -26
- metadata +103 -148
- data/lib/config/locales/bg.yml +0 -61
- data/lib/config/locales/de.yml +0 -61
- data/lib/config/locales/en-GB.yml +0 -64
- data/lib/config/locales/es.yml +0 -59
- data/lib/config/locales/fr.yml +0 -62
- data/lib/config/locales/hi.yml +0 -53
- data/lib/config/locales/hu.yml +0 -64
- data/lib/config/locales/id.yml +0 -62
- data/lib/config/locales/it.yml +0 -59
- data/lib/config/locales/ja.yml +0 -57
- data/lib/config/locales/kr.yml +0 -54
- data/lib/config/locales/nl.yml +0 -61
- data/lib/config/locales/pl.yml +0 -59
- data/lib/config/locales/pt-BR.yml +0 -60
- data/lib/config/locales/pt.yml +0 -60
- data/lib/config/locales/ro.yml +0 -66
- data/lib/config/locales/ru.yml +0 -61
- data/lib/config/locales/sv.yml +0 -60
- data/lib/config/locales/vi.yml +0 -62
- data/lib/config/locales/zh-CN.yml +0 -53
- data/lib/mongoid/collection.rb +0 -157
- data/lib/mongoid/collections/master.rb +0 -45
- data/lib/mongoid/collections/operations.rb +0 -44
- data/lib/mongoid/collections/retry.rb +0 -59
- data/lib/mongoid/collections.rb +0 -120
- data/lib/mongoid/config/database.rb +0 -181
- data/lib/mongoid/config/replset_database.rb +0 -80
- data/lib/mongoid/contexts/enumerable/sort.rb +0 -43
- data/lib/mongoid/contexts/enumerable.rb +0 -313
- data/lib/mongoid/contexts/mongo.rb +0 -487
- data/lib/mongoid/contexts.rb +0 -25
- data/lib/mongoid/criterion/builder.rb +0 -34
- data/lib/mongoid/criterion/complex.rb +0 -84
- data/lib/mongoid/criterion/creational.rb +0 -34
- data/lib/mongoid/criterion/exclusion.rb +0 -108
- data/lib/mongoid/criterion/inclusion.rb +0 -290
- data/lib/mongoid/criterion/optional.rb +0 -259
- data/lib/mongoid/criterion/selector.rb +0 -177
- data/lib/mongoid/cursor.rb +0 -88
- data/lib/mongoid/default_scope.rb +0 -36
- data/lib/mongoid/errors/invalid_type.rb +0 -25
- data/lib/mongoid/extensions/array/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/array/deletion.rb +0 -29
- data/lib/mongoid/extensions/false_class/equality.rb +0 -26
- data/lib/mongoid/extensions/hash/criteria_helpers.rb +0 -47
- data/lib/mongoid/extensions/hash/deep_copy.rb +0 -25
- data/lib/mongoid/extensions/hash/scoping.rb +0 -25
- data/lib/mongoid/extensions/integer/checks.rb +0 -23
- data/lib/mongoid/extensions/nil/collectionization.rb +0 -23
- data/lib/mongoid/extensions/object/checks.rb +0 -29
- data/lib/mongoid/extensions/object/deep_copy.rb +0 -21
- data/lib/mongoid/extensions/object/reflections.rb +0 -48
- data/lib/mongoid/extensions/object/substitutable.rb +0 -15
- data/lib/mongoid/extensions/object/yoda.rb +0 -44
- data/lib/mongoid/extensions/object_id/conversions.rb +0 -60
- data/lib/mongoid/extensions/proc/scoping.rb +0 -25
- data/lib/mongoid/extensions/string/checks.rb +0 -36
- data/lib/mongoid/extensions/string/conversions.rb +0 -22
- data/lib/mongoid/extensions/string/inflections.rb +0 -118
- data/lib/mongoid/extensions/symbol/checks.rb +0 -23
- data/lib/mongoid/extensions/symbol/inflections.rb +0 -67
- data/lib/mongoid/extensions/true_class/equality.rb +0 -26
- data/lib/mongoid/extras.rb +0 -31
- data/lib/mongoid/fields/internal/array.rb +0 -76
- data/lib/mongoid/fields/internal/big_decimal.rb +0 -63
- data/lib/mongoid/fields/internal/bignum.rb +0 -10
- data/lib/mongoid/fields/internal/binary.rb +0 -11
- data/lib/mongoid/fields/internal/boolean.rb +0 -58
- data/lib/mongoid/fields/internal/date.rb +0 -51
- data/lib/mongoid/fields/internal/date_time.rb +0 -28
- data/lib/mongoid/fields/internal/false_class.rb +0 -10
- data/lib/mongoid/fields/internal/fixnum.rb +0 -10
- data/lib/mongoid/fields/internal/float.rb +0 -47
- data/lib/mongoid/fields/internal/foreign_keys/array.rb +0 -88
- data/lib/mongoid/fields/internal/foreign_keys/object.rb +0 -56
- data/lib/mongoid/fields/internal/hash.rb +0 -11
- data/lib/mongoid/fields/internal/integer.rb +0 -59
- data/lib/mongoid/fields/internal/localized.rb +0 -62
- data/lib/mongoid/fields/internal/nil_class.rb +0 -53
- data/lib/mongoid/fields/internal/object.rb +0 -11
- data/lib/mongoid/fields/internal/object_id.rb +0 -46
- data/lib/mongoid/fields/internal/range.rb +0 -61
- data/lib/mongoid/fields/internal/set.rb +0 -57
- data/lib/mongoid/fields/internal/string.rb +0 -42
- data/lib/mongoid/fields/internal/symbol.rb +0 -43
- data/lib/mongoid/fields/internal/time.rb +0 -23
- data/lib/mongoid/fields/internal/time_with_zone.rb +0 -23
- data/lib/mongoid/fields/internal/timekeeping.rb +0 -122
- data/lib/mongoid/fields/internal/true_class.rb +0 -10
- data/lib/mongoid/fields/mappings.rb +0 -42
- data/lib/mongoid/fields/serializable.rb +0 -270
- data/lib/mongoid/identity.rb +0 -92
- data/lib/mongoid/javascript/functions.yml +0 -63
- data/lib/mongoid/javascript.rb +0 -20
- data/lib/mongoid/keys.rb +0 -144
- data/lib/mongoid/logger.rb +0 -45
- data/lib/mongoid/multi_database.rb +0 -36
- data/lib/mongoid/named_scope.rb +0 -166
- data/lib/mongoid/relations/embedded/atomic/operation.rb +0 -63
- data/lib/mongoid/relations/embedded/atomic/pull.rb +0 -65
- data/lib/mongoid/relations/embedded/atomic/push_all.rb +0 -59
- data/lib/mongoid/relations/embedded/atomic/set.rb +0 -61
- data/lib/mongoid/relations/embedded/atomic/unset.rb +0 -41
- data/lib/mongoid/relations/embedded/atomic.rb +0 -89
- data/lib/mongoid/relations/referenced/batch/insert.rb +0 -57
- data/lib/mongoid/relations/referenced/batch.rb +0 -73
- data/lib/mongoid/safety.rb +0 -105
- data/lib/mongoid/scope.rb +0 -31
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Float
|
|
5
|
+
|
|
6
|
+
# Convert the float into a time.
|
|
7
|
+
#
|
|
8
|
+
# @example Convert the float into a time.
|
|
9
|
+
# 1335532685.117847.__mongoize_time__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Time ] The float as a time.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __mongoize_time__
|
|
15
|
+
::Time.at(self)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Is the float a number?
|
|
19
|
+
#
|
|
20
|
+
# @example Is the object a number?.
|
|
21
|
+
# object.numeric?
|
|
22
|
+
#
|
|
23
|
+
# @return [ true ] Always true.
|
|
24
|
+
#
|
|
25
|
+
# @since 3.0.0
|
|
26
|
+
def numeric?
|
|
27
|
+
true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
module ClassMethods
|
|
31
|
+
|
|
32
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
33
|
+
# type.
|
|
34
|
+
#
|
|
35
|
+
# @example Mongoize the object.
|
|
36
|
+
# Float.mongoize("123.11")
|
|
37
|
+
#
|
|
38
|
+
# @param [ Object ] object The object to mongoize.
|
|
39
|
+
#
|
|
40
|
+
# @return [ String ] The object mongoized.
|
|
41
|
+
#
|
|
42
|
+
# @since 3.0.0
|
|
43
|
+
def mongoize(object)
|
|
44
|
+
unless object.blank?
|
|
45
|
+
__numeric__(object) rescue 0.0
|
|
46
|
+
else
|
|
47
|
+
nil
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
::Float.__send__(:include, Mongoid::Extensions::Float)
|
|
56
|
+
::Float.__send__(:extend, Mongoid::Extensions::Float::ClassMethods)
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Hash
|
|
5
|
+
|
|
6
|
+
# Evolves each value in the hash to an object id if it is convertable.
|
|
7
|
+
#
|
|
8
|
+
# @example Convert the hash values.
|
|
9
|
+
# { field: id }.__evolve_object_id__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Hash ] The converted hash.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __evolve_object_id__
|
|
15
|
+
update_values(&:__evolve_object_id__)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Mongoizes each value in the hash to an object id if it is convertable.
|
|
19
|
+
#
|
|
20
|
+
# @example Convert the hash values.
|
|
21
|
+
# { field: id }.__mongoize_object_id__
|
|
22
|
+
#
|
|
23
|
+
# @return [ Hash ] The converted hash.
|
|
24
|
+
#
|
|
25
|
+
# @since 3.0.0
|
|
26
|
+
def __mongoize_object_id__
|
|
27
|
+
update_values(&:__mongoize_object_id__)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Consolidate the key/values in the hash under an atomic $set.
|
|
31
|
+
#
|
|
32
|
+
# @example Consolidate the hash.
|
|
33
|
+
# { name: "Placebo" }.__consolidate__
|
|
34
|
+
#
|
|
35
|
+
# @return [ Hash ] A new consolidated hash.
|
|
36
|
+
#
|
|
37
|
+
# @since 3.0.0
|
|
38
|
+
def __consolidate__
|
|
39
|
+
consolidated = {}
|
|
40
|
+
each_pair do |key, value|
|
|
41
|
+
if key =~ /\$/
|
|
42
|
+
(consolidated[key] ||= {}).merge!(value)
|
|
43
|
+
else
|
|
44
|
+
(consolidated["$set"] ||= {}).merge!(key => value)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
consolidated
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Get the id attribute from this hash, whether it's prefixed with an
|
|
51
|
+
# underscore or is a symbol.
|
|
52
|
+
#
|
|
53
|
+
# @example Extract the id.
|
|
54
|
+
# { :_id => 1 }.extract_id
|
|
55
|
+
#
|
|
56
|
+
# @return [ Object ] The value of the id.
|
|
57
|
+
#
|
|
58
|
+
# @since 2.3.2
|
|
59
|
+
def extract_id
|
|
60
|
+
self["_id"] || self["id"] || self[:id] || self[:_id]
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
64
|
+
# type.
|
|
65
|
+
#
|
|
66
|
+
# @example Mongoize the object.
|
|
67
|
+
# object.mongoize
|
|
68
|
+
#
|
|
69
|
+
# @return [ Hash ] The object.
|
|
70
|
+
#
|
|
71
|
+
# @since 3.0.0
|
|
72
|
+
def mongoize
|
|
73
|
+
::Hash.mongoize(self)
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# Can the size of this object change?
|
|
77
|
+
#
|
|
78
|
+
# @example Is the hash resizable?
|
|
79
|
+
# {}.resizable?
|
|
80
|
+
#
|
|
81
|
+
# @return [ true ] true.
|
|
82
|
+
#
|
|
83
|
+
# @since 3.0.0
|
|
84
|
+
def resizable?
|
|
85
|
+
true
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
module ClassMethods
|
|
89
|
+
|
|
90
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
91
|
+
# type.
|
|
92
|
+
#
|
|
93
|
+
# @example Mongoize the object.
|
|
94
|
+
# Hash.mongoize([ 1, 2, 3 ])
|
|
95
|
+
#
|
|
96
|
+
# @param [ Object ] object The object to mongoize.
|
|
97
|
+
#
|
|
98
|
+
# @return [ Hash ] The object mongoized.
|
|
99
|
+
#
|
|
100
|
+
# @since 3.0.0
|
|
101
|
+
def mongoize(object)
|
|
102
|
+
return if object.nil?
|
|
103
|
+
evolve(object).update_values { |value| value.mongoize }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
# Can the size of this object change?
|
|
107
|
+
#
|
|
108
|
+
# @example Is the hash resizable?
|
|
109
|
+
# {}.resizable?
|
|
110
|
+
#
|
|
111
|
+
# @return [ true ] true.
|
|
112
|
+
#
|
|
113
|
+
# @since 3.0.0
|
|
114
|
+
def resizable?
|
|
115
|
+
true
|
|
116
|
+
end
|
|
117
|
+
end
|
|
118
|
+
end
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
122
|
+
::Hash.__send__(:include, Mongoid::Extensions::Hash)
|
|
123
|
+
::Hash.__send__(:extend, Mongoid::Extensions::Hash::ClassMethods)
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Integer
|
|
5
|
+
|
|
6
|
+
# Returns the integer as a time.
|
|
7
|
+
#
|
|
8
|
+
# @example Convert the integer to a time.
|
|
9
|
+
# 1335532685.__mongoize_time__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Time ] The converted time.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __mongoize_time__
|
|
15
|
+
::Time.at(self)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Is the integer a number?
|
|
19
|
+
#
|
|
20
|
+
# @example Is the object a number?.
|
|
21
|
+
# object.numeric?
|
|
22
|
+
#
|
|
23
|
+
# @return [ true ] Always true.
|
|
24
|
+
#
|
|
25
|
+
# @since 3.0.0
|
|
26
|
+
def numeric?
|
|
27
|
+
true
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
# Is the object not to be converted to bson on criteria creation?
|
|
31
|
+
#
|
|
32
|
+
# @example Is the object unconvertable?
|
|
33
|
+
# object.unconvertable_to_bson?
|
|
34
|
+
#
|
|
35
|
+
# @return [ true ] If the object is unconvertable.
|
|
36
|
+
#
|
|
37
|
+
# @since 2.2.1
|
|
38
|
+
def unconvertable_to_bson?
|
|
39
|
+
true
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
module ClassMethods
|
|
43
|
+
|
|
44
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
45
|
+
# type.
|
|
46
|
+
#
|
|
47
|
+
# @example Mongoize the object.
|
|
48
|
+
# BigDecimal.mongoize("123.11")
|
|
49
|
+
#
|
|
50
|
+
# @return [ String ] The object mongoized.
|
|
51
|
+
#
|
|
52
|
+
# @since 3.0.0
|
|
53
|
+
def mongoize(object)
|
|
54
|
+
unless object.blank?
|
|
55
|
+
__numeric__(object).to_i rescue 0
|
|
56
|
+
else
|
|
57
|
+
nil
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
::Integer.__send__(:include, Mongoid::Extensions::Integer)
|
|
66
|
+
::Integer.__send__(:extend, Mongoid::Extensions::Integer::ClassMethods)
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Module
|
|
5
|
+
|
|
6
|
+
# Redefine the method. Will undef the method if it exists or simply
|
|
7
|
+
# just define it.
|
|
8
|
+
#
|
|
9
|
+
# @example Redefine the method.
|
|
10
|
+
# Object.re_define_method("exists?") do
|
|
11
|
+
# self
|
|
12
|
+
# end
|
|
13
|
+
#
|
|
14
|
+
# @param [ String, Symbol ] name The name of the method.
|
|
15
|
+
# @param [ Proc ] block The method body.
|
|
16
|
+
#
|
|
17
|
+
# @return [ Method ] The new method.
|
|
18
|
+
#
|
|
19
|
+
# @since 3.0.0
|
|
20
|
+
def re_define_method(name, &block)
|
|
21
|
+
undef_method(name) if method_defined?(name)
|
|
22
|
+
define_method(name, &block)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
::Module.__send__(:include, Mongoid::Extensions::Module)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module NilClass
|
|
5
|
+
|
|
6
|
+
# Get the name of a nil collection.
|
|
7
|
+
#
|
|
8
|
+
# @example Get the nil name.
|
|
9
|
+
# nil.collectionize
|
|
10
|
+
#
|
|
11
|
+
# @return [ String ] A blank string.
|
|
12
|
+
#
|
|
13
|
+
# @since 1.0.0
|
|
14
|
+
def collectionize
|
|
15
|
+
to_s.collectionize
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
::NilClass.__send__(:include, Mongoid::Extensions::NilClass)
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Object
|
|
5
|
+
|
|
6
|
+
# Evolve a plain object into an object id.
|
|
7
|
+
#
|
|
8
|
+
# @example Evolve the object.
|
|
9
|
+
# object.__evolve_object_id__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Object ] self.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __evolve_object_id__
|
|
15
|
+
self
|
|
16
|
+
end
|
|
17
|
+
alias :__mongoize_object_id__ :__evolve_object_id__
|
|
18
|
+
|
|
19
|
+
# Convert the object to args for a find query.
|
|
20
|
+
#
|
|
21
|
+
# @example Convert the object to args.
|
|
22
|
+
# object.__find_args__
|
|
23
|
+
#
|
|
24
|
+
# @return [ Object ] self.
|
|
25
|
+
#
|
|
26
|
+
# @since 3.0.0
|
|
27
|
+
def __find_args__
|
|
28
|
+
self
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Mongoize a plain object into a time.
|
|
32
|
+
#
|
|
33
|
+
# @example Mongoize the object.
|
|
34
|
+
# object.__mongoize_time__
|
|
35
|
+
#
|
|
36
|
+
# @return [ Object ] self.
|
|
37
|
+
#
|
|
38
|
+
# @since 3.0.0
|
|
39
|
+
def __mongoize_time__
|
|
40
|
+
self
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# Get the value of the object as a mongo friendy sort value.
|
|
44
|
+
#
|
|
45
|
+
# @example Get the object as sort criteria.
|
|
46
|
+
# object.__sortable__
|
|
47
|
+
#
|
|
48
|
+
# @return [ Object ] self.
|
|
49
|
+
#
|
|
50
|
+
# @since 3.0.0
|
|
51
|
+
def __sortable__
|
|
52
|
+
self
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Do or do not, there is no try. -- Yoda.
|
|
56
|
+
#
|
|
57
|
+
# @example Do or do not.
|
|
58
|
+
# object.do_or_do_not(:use, "The Force")
|
|
59
|
+
#
|
|
60
|
+
# @param [ String, Symbol ] name The method name.
|
|
61
|
+
# @param [ Array ] *args The arguments.
|
|
62
|
+
#
|
|
63
|
+
# @return [ Object, nil ] The result of the method call or nil if the
|
|
64
|
+
# method does not exist.
|
|
65
|
+
#
|
|
66
|
+
# @since 2.0.0.rc.1
|
|
67
|
+
def do_or_do_not(name, *args)
|
|
68
|
+
send(name, *args) if name && respond_to?(name)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# Get the value for an instance variable or nil if it doesn't exist.
|
|
72
|
+
#
|
|
73
|
+
# @example Get the value for an instance var.
|
|
74
|
+
# document.ivar("person")
|
|
75
|
+
#
|
|
76
|
+
# @param [ String ] name The name of the variable.
|
|
77
|
+
#
|
|
78
|
+
# @return [ Object, nil ] The value or nil.
|
|
79
|
+
#
|
|
80
|
+
# @since 2.0.0.rc.1
|
|
81
|
+
def ivar(name)
|
|
82
|
+
if instance_variable_defined?("@#{name}")
|
|
83
|
+
return instance_variable_get("@#{name}")
|
|
84
|
+
else
|
|
85
|
+
false
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
90
|
+
# type.
|
|
91
|
+
#
|
|
92
|
+
# @example Mongoize the object.
|
|
93
|
+
# object.mongoize
|
|
94
|
+
#
|
|
95
|
+
# @return [ Object ] The object.
|
|
96
|
+
#
|
|
97
|
+
# @since 3.0.0
|
|
98
|
+
def mongoize
|
|
99
|
+
self
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
# Is the object multi args.
|
|
103
|
+
#
|
|
104
|
+
# @example Is the object multi args?
|
|
105
|
+
# object.multi_arged?
|
|
106
|
+
#
|
|
107
|
+
# @return [ false ] false.
|
|
108
|
+
#
|
|
109
|
+
# @since 3.0.0
|
|
110
|
+
def multi_arged?
|
|
111
|
+
false
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
# Is the object a number?
|
|
115
|
+
#
|
|
116
|
+
# @example Is the object a number?.
|
|
117
|
+
# object.numeric?
|
|
118
|
+
#
|
|
119
|
+
# @return [ false ] Always false.
|
|
120
|
+
#
|
|
121
|
+
# @since 3.0.0
|
|
122
|
+
def numeric?
|
|
123
|
+
false
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# Remove the instance variable for the provided name.
|
|
127
|
+
#
|
|
128
|
+
# @example Remove the instance variable
|
|
129
|
+
# document.remove_ivar("person")
|
|
130
|
+
#
|
|
131
|
+
# @param [ String ] name The name of the variable.
|
|
132
|
+
#
|
|
133
|
+
# @return [ true, false ] If the variable was defined.
|
|
134
|
+
#
|
|
135
|
+
# @since 2.1.0
|
|
136
|
+
def remove_ivar(name)
|
|
137
|
+
if instance_variable_defined?("@#{name}")
|
|
138
|
+
return remove_instance_variable("@#{name}")
|
|
139
|
+
else
|
|
140
|
+
false
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
# Is the object's size changable? Only returns true for arrays and hashes
|
|
145
|
+
# currently.
|
|
146
|
+
#
|
|
147
|
+
# @example Is the object resizable?
|
|
148
|
+
# object.resizable?
|
|
149
|
+
#
|
|
150
|
+
# @return [ false ] false.
|
|
151
|
+
#
|
|
152
|
+
# @since 3.0.0
|
|
153
|
+
def resizable?
|
|
154
|
+
false
|
|
155
|
+
end
|
|
156
|
+
|
|
157
|
+
# Get the substitutable version of an object.
|
|
158
|
+
#
|
|
159
|
+
# @example Get the substitutable.
|
|
160
|
+
# object.substitutable
|
|
161
|
+
#
|
|
162
|
+
# @return [ Object ] self.
|
|
163
|
+
#
|
|
164
|
+
# @since 2.0.0
|
|
165
|
+
def substitutable
|
|
166
|
+
self
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
# You must unlearn what you have learned. -- Yoda
|
|
170
|
+
#
|
|
171
|
+
# @example You must perform this execution.
|
|
172
|
+
# object.you_must(:use, "The Force")
|
|
173
|
+
#
|
|
174
|
+
# @param [ String, Symbol ] name The method name.
|
|
175
|
+
# @param [ Array ] *args The arguments.
|
|
176
|
+
#
|
|
177
|
+
# @return [ Object, nil ] The result of the method call or nil if the
|
|
178
|
+
# method does not exist. Nil if the object is frozen.
|
|
179
|
+
#
|
|
180
|
+
# @since 2.2.1
|
|
181
|
+
def you_must(name, *args)
|
|
182
|
+
frozen? ? nil : do_or_do_not(name, *args)
|
|
183
|
+
end
|
|
184
|
+
|
|
185
|
+
module ClassMethods
|
|
186
|
+
|
|
187
|
+
# Convert the provided object to a foreign key, given the metadata key
|
|
188
|
+
# contstraint.
|
|
189
|
+
#
|
|
190
|
+
# @example Convert the object to a fk.
|
|
191
|
+
# Object.__mongoize_fk__(constraint, object)
|
|
192
|
+
#
|
|
193
|
+
# @param [ Constraint ] constraint The constraint.
|
|
194
|
+
# @param [ Object ] object The object to convert.
|
|
195
|
+
#
|
|
196
|
+
# @return [ Object ] The converted object.
|
|
197
|
+
#
|
|
198
|
+
# @since 3.0.0
|
|
199
|
+
def __mongoize_fk__(constraint, object)
|
|
200
|
+
return nil if !object || object == ""
|
|
201
|
+
constraint.convert(object)
|
|
202
|
+
end
|
|
203
|
+
|
|
204
|
+
# Convert the object from it's mongo friendly ruby type to this type.
|
|
205
|
+
#
|
|
206
|
+
# @example Demongoize the object.
|
|
207
|
+
# Object.demongoize(object)
|
|
208
|
+
#
|
|
209
|
+
# @param [ Object ] object The object to demongoize.
|
|
210
|
+
#
|
|
211
|
+
# @return [ Object ] The object.
|
|
212
|
+
#
|
|
213
|
+
# @since 3.0.0
|
|
214
|
+
def demongoize(object)
|
|
215
|
+
object
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
219
|
+
# type.
|
|
220
|
+
#
|
|
221
|
+
# @example Mongoize the object.
|
|
222
|
+
# Object.mongoize("123.11")
|
|
223
|
+
#
|
|
224
|
+
# @param [ Object ] object The object to mongoize.
|
|
225
|
+
#
|
|
226
|
+
# @return [ Object ] The object mongoized.
|
|
227
|
+
#
|
|
228
|
+
# @since 3.0.0
|
|
229
|
+
def mongoize(object)
|
|
230
|
+
object.mongoize
|
|
231
|
+
end
|
|
232
|
+
end
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
end
|
|
236
|
+
|
|
237
|
+
::Object.__send__(:include, Mongoid::Extensions::Object)
|
|
238
|
+
::Object.__send__(:extend, Mongoid::Extensions::Object::ClassMethods)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module ObjectId
|
|
5
|
+
|
|
6
|
+
# Evolve the object id.
|
|
7
|
+
#
|
|
8
|
+
# @example Evolve the object id.
|
|
9
|
+
# object_id.__evolve_object_id__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Moped::BSON::ObjectId ] self.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __evolve_object_id__
|
|
15
|
+
self
|
|
16
|
+
end
|
|
17
|
+
alias :__mongoize_object_id__ :__evolve_object_id__
|
|
18
|
+
|
|
19
|
+
module ClassMethods
|
|
20
|
+
|
|
21
|
+
# Evolve the object into a mongo-friendly value to query with.
|
|
22
|
+
#
|
|
23
|
+
# @example Evolve the object.
|
|
24
|
+
# ObjectId.evolve(id)
|
|
25
|
+
#
|
|
26
|
+
# @param [ Object ] object The object to evolve.
|
|
27
|
+
#
|
|
28
|
+
# @return [ Moped::BSON::ObjectId ] The object id.
|
|
29
|
+
#
|
|
30
|
+
# @since 3.0.0
|
|
31
|
+
def evolve(object)
|
|
32
|
+
object.__evolve_object_id__
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
# Convert the object into a mongo-friendly value to store.
|
|
36
|
+
#
|
|
37
|
+
# @example Convert the object.
|
|
38
|
+
# ObjectId.mongoize(id)
|
|
39
|
+
#
|
|
40
|
+
# @param [ Object ] object The object to convert.
|
|
41
|
+
#
|
|
42
|
+
# @return [ Moped::BSON::ObjectId ] The object id.
|
|
43
|
+
#
|
|
44
|
+
# @since 3.0.0
|
|
45
|
+
def mongoize(object)
|
|
46
|
+
object.__mongoize_object_id__
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
Moped::BSON::ObjectId.__send__(:include, Mongoid::Extensions::ObjectId)
|
|
54
|
+
Moped::BSON::ObjectId.__send__(:extend, Mongoid::Extensions::ObjectId::ClassMethods)
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Range
|
|
5
|
+
|
|
6
|
+
# Get the range as arguments for a find.
|
|
7
|
+
#
|
|
8
|
+
# @example Get the range as find args.
|
|
9
|
+
# range.__find_args__
|
|
10
|
+
#
|
|
11
|
+
# @return [ Array ] The range as an array.
|
|
12
|
+
#
|
|
13
|
+
# @since 3.0.0
|
|
14
|
+
def __find_args__
|
|
15
|
+
to_a
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
19
|
+
# type.
|
|
20
|
+
#
|
|
21
|
+
# @example Mongoize the object.
|
|
22
|
+
# range.mongoize
|
|
23
|
+
#
|
|
24
|
+
# @return [ Hash ] The object mongoized.
|
|
25
|
+
#
|
|
26
|
+
# @since 3.0.0
|
|
27
|
+
def mongoize
|
|
28
|
+
::Range.mongoize(self)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
# Is this a resizable object.
|
|
32
|
+
#
|
|
33
|
+
# @example Is this resizable?
|
|
34
|
+
# range.resizable?
|
|
35
|
+
#
|
|
36
|
+
# @return [ true ] True.
|
|
37
|
+
#
|
|
38
|
+
# @since 3.0.0
|
|
39
|
+
def resizable?
|
|
40
|
+
true
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
module ClassMethods
|
|
44
|
+
|
|
45
|
+
# Convert the object from it's mongo friendly ruby type to this type.
|
|
46
|
+
#
|
|
47
|
+
# @example Demongoize the object.
|
|
48
|
+
# Range.demongoize({ "min" => 1, "max" => 5 })
|
|
49
|
+
#
|
|
50
|
+
# @param [ Hash ] object The object to demongoize.
|
|
51
|
+
#
|
|
52
|
+
# @return [ Range ] The range.
|
|
53
|
+
#
|
|
54
|
+
# @since 3.0.0
|
|
55
|
+
def demongoize(object)
|
|
56
|
+
object.nil? ? nil : ::Range.new(object["min"], object["max"])
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
60
|
+
# type.
|
|
61
|
+
#
|
|
62
|
+
# @example Mongoize the object.
|
|
63
|
+
# Range.mongoize(1..3)
|
|
64
|
+
#
|
|
65
|
+
# @param [ Range ] object The object to mongoize.
|
|
66
|
+
#
|
|
67
|
+
# @return [ Hash ] The object mongoized.
|
|
68
|
+
#
|
|
69
|
+
# @since 3.0.0
|
|
70
|
+
def mongoize(object)
|
|
71
|
+
object.nil? ? nil : { "min" => object.first, "max" => object.last }
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
::Range.__send__(:include, Mongoid::Extensions::Range)
|
|
79
|
+
::Range.__send__(:extend, Mongoid::Extensions::Range::ClassMethods)
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Extensions
|
|
4
|
+
module Regexp
|
|
5
|
+
|
|
6
|
+
module ClassMethods
|
|
7
|
+
|
|
8
|
+
# Turn the object from the ruby type we deal with to a Mongo friendly
|
|
9
|
+
# type.
|
|
10
|
+
#
|
|
11
|
+
# @example Mongoize the object.
|
|
12
|
+
# Regexp.mongoize(/^[abc]/)
|
|
13
|
+
#
|
|
14
|
+
# @param [ Regexp, String ] object The object to mongoize.
|
|
15
|
+
#
|
|
16
|
+
# @return [ Regexp ] The object mongoized.
|
|
17
|
+
#
|
|
18
|
+
# @since 3.0.0
|
|
19
|
+
def mongoize(object)
|
|
20
|
+
::Regexp.new(object)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
::Regexp.__send__(:extend, Mongoid::Extensions::Regexp::ClassMethods)
|