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
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
4
|
|
|
5
5
|
# Contains common logic for insertion operations.
|
|
6
6
|
module Insertion
|
|
@@ -19,23 +19,17 @@ module Mongoid #:nodoc:
|
|
|
19
19
|
#
|
|
20
20
|
# @since 2.1.0
|
|
21
21
|
def prepare(&block)
|
|
22
|
-
document.
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
true
|
|
29
|
-
end
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
unless result == false
|
|
33
|
-
doc.reset_persisted_children
|
|
34
|
-
doc.move_changes
|
|
35
|
-
Threaded.clear_options!
|
|
22
|
+
unless validating? && document.invalid?(:create)
|
|
23
|
+
result = document.run_callbacks(:save) do
|
|
24
|
+
document.run_callbacks(:create) do
|
|
25
|
+
yield(document)
|
|
26
|
+
document.new_record = false
|
|
27
|
+
true
|
|
36
28
|
end
|
|
37
29
|
end
|
|
30
|
+
document.post_persist unless result == false
|
|
38
31
|
end
|
|
32
|
+
document
|
|
39
33
|
end
|
|
40
34
|
end
|
|
41
35
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
4
|
|
|
5
5
|
# Contains common logic for modification operations.
|
|
6
6
|
module Modification
|
|
@@ -20,17 +20,13 @@ module Mongoid #:nodoc:
|
|
|
20
20
|
# @since 2.1.0
|
|
21
21
|
def prepare(&block)
|
|
22
22
|
return false if validating? && document.invalid?(:update)
|
|
23
|
-
document.run_callbacks(:save) do
|
|
23
|
+
result = document.run_callbacks(:save) do
|
|
24
24
|
document.run_callbacks(:update) do
|
|
25
25
|
yield(document); true
|
|
26
26
|
end
|
|
27
|
-
end.tap do |result|
|
|
28
|
-
unless result == false
|
|
29
|
-
document.reset_persisted_children
|
|
30
|
-
document.move_changes
|
|
31
|
-
Threaded.clear_options!
|
|
32
|
-
end
|
|
33
27
|
end
|
|
28
|
+
document.post_persist unless result == false
|
|
29
|
+
result
|
|
34
30
|
end
|
|
35
31
|
end
|
|
36
32
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
5
|
-
module Embedded
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
|
+
module Embedded
|
|
6
6
|
|
|
7
7
|
# Insert is a persistence command responsible for taking a document that
|
|
8
8
|
# has not been saved to the database and saving it. This specific class
|
|
@@ -28,10 +28,11 @@ module Mongoid #:nodoc:
|
|
|
28
28
|
# @return [ Document ] The document to be inserted.
|
|
29
29
|
def persist
|
|
30
30
|
prepare do
|
|
31
|
-
|
|
31
|
+
raise Errors::NoParent.new(document.class.name) unless parent
|
|
32
|
+
if parent.new_record?
|
|
32
33
|
parent.insert
|
|
33
34
|
else
|
|
34
|
-
collection.
|
|
35
|
+
collection.find(parent.atomic_selector).update(inserts)
|
|
35
36
|
end
|
|
36
37
|
end
|
|
37
38
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
5
|
-
module Embedded
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
|
+
module Embedded
|
|
6
6
|
|
|
7
7
|
# Remove is a persistence command responsible for deleting a document from
|
|
8
8
|
# the database.
|
|
@@ -29,7 +29,7 @@ module Mongoid #:nodoc:
|
|
|
29
29
|
prepare do |doc|
|
|
30
30
|
parent.remove_child(doc) if notifying_parent?
|
|
31
31
|
if parent.persisted?
|
|
32
|
-
collection.
|
|
32
|
+
collection.find(parent.atomic_selector).update(deletes)
|
|
33
33
|
end
|
|
34
34
|
end
|
|
35
35
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
5
|
|
|
6
6
|
# Insert is a persistence command responsible for taking a document that
|
|
7
7
|
# has not been saved to the database and saving it.
|
|
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
|
|
|
24
24
|
# @return [ Document ] The document to be inserted.
|
|
25
25
|
def persist
|
|
26
26
|
prepare do |doc|
|
|
27
|
-
collection.insert(doc.as_document
|
|
27
|
+
collection.insert(doc.as_document)
|
|
28
28
|
IdentityMap.set(doc)
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
5
|
|
|
6
6
|
# Remove is a persistence command responsible for deleting a document from
|
|
7
7
|
# the database.
|
|
@@ -24,7 +24,7 @@ module Mongoid #:nodoc:
|
|
|
24
24
|
# @return [ true ] Always true.
|
|
25
25
|
def persist
|
|
26
26
|
prepare do |doc|
|
|
27
|
-
collection.
|
|
27
|
+
collection.find(doc.atomic_selector).remove
|
|
28
28
|
end
|
|
29
29
|
end
|
|
30
30
|
end
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
module Mongoid
|
|
3
|
-
module Persistence
|
|
4
|
-
module Operations
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
5
|
|
|
6
6
|
# Update is a persistence command responsible for taking a document that
|
|
7
7
|
# has already been saved to the database and saving it, depending on
|
|
@@ -42,9 +42,9 @@ module Mongoid #:nodoc:
|
|
|
42
42
|
def persist
|
|
43
43
|
prepare do
|
|
44
44
|
unless updates.empty?
|
|
45
|
-
collection.update(
|
|
45
|
+
collection.find(selector).update(updates)
|
|
46
46
|
conflicts.each_pair do |key, value|
|
|
47
|
-
collection.update(
|
|
47
|
+
collection.find(selector).update({ key => value })
|
|
48
48
|
end
|
|
49
49
|
end
|
|
50
50
|
end
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
module Operations
|
|
5
|
+
|
|
6
|
+
# Wraps behaviour for performing upserts in Mongodb. No matter if the
|
|
7
|
+
# document has been modified or not, it will be sent to the db and Mongo
|
|
8
|
+
# will determin whether or not to insert or update.
|
|
9
|
+
class Upsert
|
|
10
|
+
include Upsertion, Operations
|
|
11
|
+
|
|
12
|
+
# Persist the upsert operation.
|
|
13
|
+
#
|
|
14
|
+
# @example Execute the upsert.
|
|
15
|
+
# operation.persist
|
|
16
|
+
#
|
|
17
|
+
# @return [ true ] Always true.
|
|
18
|
+
#
|
|
19
|
+
# @since 3.0.0
|
|
20
|
+
def persist
|
|
21
|
+
prepare do
|
|
22
|
+
collection.find(selector).update(document.as_document, [ :upsert ])
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
@@ -2,17 +2,18 @@
|
|
|
2
2
|
require "mongoid/persistence/operations/insert"
|
|
3
3
|
require "mongoid/persistence/operations/remove"
|
|
4
4
|
require "mongoid/persistence/operations/update"
|
|
5
|
+
require "mongoid/persistence/operations/upsert"
|
|
5
6
|
require "mongoid/persistence/operations/embedded/insert"
|
|
6
7
|
require "mongoid/persistence/operations/embedded/remove"
|
|
7
8
|
|
|
8
|
-
module Mongoid
|
|
9
|
-
module Persistence
|
|
9
|
+
module Mongoid
|
|
10
|
+
module Persistence
|
|
10
11
|
|
|
11
12
|
# Persistence operations include this module to get basic functionality
|
|
12
13
|
# on initialization.
|
|
13
14
|
module Operations
|
|
14
15
|
|
|
15
|
-
attr_reader :conflicts, :document
|
|
16
|
+
attr_reader :conflicts, :document, :options
|
|
16
17
|
|
|
17
18
|
# Get the collection we should be persisting to.
|
|
18
19
|
#
|
|
@@ -80,19 +81,6 @@ module Mongoid #:nodoc:
|
|
|
80
81
|
@notifying_parent ||= !@options.delete(:suppress)
|
|
81
82
|
end
|
|
82
83
|
|
|
83
|
-
# Get all the options that will be sent to the database. Right now this
|
|
84
|
-
# is only safe mode opts.
|
|
85
|
-
#
|
|
86
|
-
# @example Get the options hash.
|
|
87
|
-
# operation.options
|
|
88
|
-
#
|
|
89
|
-
# @return [ Hash ] The options for the database.
|
|
90
|
-
#
|
|
91
|
-
# @since 2.1.0
|
|
92
|
-
def options
|
|
93
|
-
Safety.merge_safety_options(@options)
|
|
94
|
-
end
|
|
95
|
-
|
|
96
84
|
# Get the parent of the provided document.
|
|
97
85
|
#
|
|
98
86
|
# @example Get the parent.
|
|
@@ -154,9 +142,9 @@ module Mongoid #:nodoc:
|
|
|
154
142
|
#
|
|
155
143
|
# @since 2.1.0
|
|
156
144
|
def init_updates
|
|
157
|
-
document.atomic_updates
|
|
158
|
-
|
|
159
|
-
|
|
145
|
+
updates = document.atomic_updates
|
|
146
|
+
@conflicts = updates.delete(:conflicts) || {}
|
|
147
|
+
updates
|
|
160
148
|
end
|
|
161
149
|
|
|
162
150
|
class << self
|
|
@@ -205,6 +193,21 @@ module Mongoid #:nodoc:
|
|
|
205
193
|
def update(doc, options = {})
|
|
206
194
|
Update.new(doc, options)
|
|
207
195
|
end
|
|
196
|
+
|
|
197
|
+
# Get the appropriate upsert operation based on the document.
|
|
198
|
+
#
|
|
199
|
+
# @example Get the upsert operation.
|
|
200
|
+
# Operations.upsert(doc, options)
|
|
201
|
+
#
|
|
202
|
+
# @param [ Document ] doc The document to persist.
|
|
203
|
+
# @param [ Hash ] options The persistence options.
|
|
204
|
+
#
|
|
205
|
+
# @return [ Operations ] The operation.
|
|
206
|
+
#
|
|
207
|
+
# @since 3.0.0
|
|
208
|
+
def upsert(doc, options = {})
|
|
209
|
+
Upsert.new(doc, options)
|
|
210
|
+
end
|
|
208
211
|
end
|
|
209
212
|
end
|
|
210
213
|
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# encoding: utf-8
|
|
2
|
+
module Mongoid
|
|
3
|
+
module Persistence
|
|
4
|
+
|
|
5
|
+
# Contains common logic for upsert operations.
|
|
6
|
+
module Upsertion
|
|
7
|
+
|
|
8
|
+
# Wrap all the common upsert logic for root docments.
|
|
9
|
+
#
|
|
10
|
+
# @example Execute common upsert logic.
|
|
11
|
+
# prepare do |doc|
|
|
12
|
+
# collection.find({ :_id => 1 }).upsert({ name: "test" }, [ :upsert ])
|
|
13
|
+
# end
|
|
14
|
+
#
|
|
15
|
+
# @param [ Proc ] block The block to call.
|
|
16
|
+
#
|
|
17
|
+
# @return [ true, false ] If the save passed or not.
|
|
18
|
+
#
|
|
19
|
+
# @since 3.0.0
|
|
20
|
+
def prepare(&block)
|
|
21
|
+
return false if validating? && document.invalid?(:upsert)
|
|
22
|
+
result = document.run_callbacks(:upsert) do
|
|
23
|
+
yield(document); true
|
|
24
|
+
end
|
|
25
|
+
document.post_persist unless result == false
|
|
26
|
+
result
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
data/lib/mongoid/persistence.rb
CHANGED
|
@@ -3,9 +3,10 @@ require "mongoid/persistence/atomic"
|
|
|
3
3
|
require "mongoid/persistence/deletion"
|
|
4
4
|
require "mongoid/persistence/insertion"
|
|
5
5
|
require "mongoid/persistence/modification"
|
|
6
|
+
require "mongoid/persistence/upsertion"
|
|
6
7
|
require "mongoid/persistence/operations"
|
|
7
8
|
|
|
8
|
-
module Mongoid
|
|
9
|
+
module Mongoid
|
|
9
10
|
|
|
10
11
|
# The persistence module is a mixin to provide database accessor methods for
|
|
11
12
|
# the document. These correspond to the appropriate accessors on a
|
|
@@ -19,7 +20,7 @@ module Mongoid #:nodoc:
|
|
|
19
20
|
extend ActiveSupport::Concern
|
|
20
21
|
include Atomic
|
|
21
22
|
|
|
22
|
-
# Remove the document from the
|
|
23
|
+
# Remove the document from the database with callbacks.
|
|
23
24
|
#
|
|
24
25
|
# @example Destroy a document.
|
|
25
26
|
# document.destroy
|
|
@@ -29,11 +30,11 @@ module Mongoid #:nodoc:
|
|
|
29
30
|
# @return [ true, false ] True if successful, false if not.
|
|
30
31
|
def destroy(options = {})
|
|
31
32
|
self.flagged_for_destroy = true
|
|
32
|
-
run_callbacks(:destroy) do
|
|
33
|
+
result = run_callbacks(:destroy) do
|
|
33
34
|
remove(options)
|
|
34
|
-
end.tap do
|
|
35
|
-
self.flagged_for_destroy = false
|
|
36
35
|
end
|
|
36
|
+
self.flagged_for_destroy = false
|
|
37
|
+
result
|
|
37
38
|
end
|
|
38
39
|
|
|
39
40
|
# Insert a new document into the database. Will return the document
|
|
@@ -49,7 +50,7 @@ module Mongoid #:nodoc:
|
|
|
49
50
|
Operations.insert(self, options).persist
|
|
50
51
|
end
|
|
51
52
|
|
|
52
|
-
# Remove the document from the
|
|
53
|
+
# Remove the document from the database.
|
|
53
54
|
#
|
|
54
55
|
# @example Remove the document.
|
|
55
56
|
# document.remove
|
|
@@ -62,6 +63,25 @@ module Mongoid #:nodoc:
|
|
|
62
63
|
end
|
|
63
64
|
alias :delete :remove
|
|
64
65
|
|
|
66
|
+
# Save the document - will perform an insert if the document is new, and
|
|
67
|
+
# update if not.
|
|
68
|
+
#
|
|
69
|
+
# @example Save the document.
|
|
70
|
+
# document.save
|
|
71
|
+
#
|
|
72
|
+
# @param [ Hash ] options Options to pass to the save.
|
|
73
|
+
#
|
|
74
|
+
# @return [ true, false ] True is success, false if not.
|
|
75
|
+
#
|
|
76
|
+
# @since 1.0.0
|
|
77
|
+
def save(options = {})
|
|
78
|
+
if new_record?
|
|
79
|
+
insert(options).persisted?
|
|
80
|
+
else
|
|
81
|
+
update(options)
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
|
|
65
85
|
# Save the document - will perform an insert if the document is new, and
|
|
66
86
|
# update if not. If a validation error occurs an error will get raised.
|
|
67
87
|
#
|
|
@@ -72,14 +92,42 @@ module Mongoid #:nodoc:
|
|
|
72
92
|
#
|
|
73
93
|
# @return [ true, false ] True if validation passed.
|
|
74
94
|
def save!(options = {})
|
|
75
|
-
unless
|
|
76
|
-
self.class.fail_validate!(self)
|
|
95
|
+
unless save(options)
|
|
96
|
+
self.class.fail_validate!(self) unless errors.empty?
|
|
77
97
|
self.class.fail_callback!(self, :save!)
|
|
78
98
|
end
|
|
79
99
|
return true
|
|
80
100
|
end
|
|
81
101
|
|
|
82
|
-
#
|
|
102
|
+
# Touch the document, in effect updating it's updated_at timestamp and
|
|
103
|
+
# optionally the provided field to the current time. If any belongs_to
|
|
104
|
+
# relations exist with a touch option, they will be updated as well.
|
|
105
|
+
#
|
|
106
|
+
# @example Update the updated_at timestamp.
|
|
107
|
+
# document.touch
|
|
108
|
+
#
|
|
109
|
+
# @example Update the updated_at and provided timestamps.
|
|
110
|
+
# document.touch(:audited)
|
|
111
|
+
#
|
|
112
|
+
# @note This will not autobuild relations if those options are set.
|
|
113
|
+
#
|
|
114
|
+
# @param [ Symbol ] field The name of an additional field to update.
|
|
115
|
+
#
|
|
116
|
+
# @return [ true ] true.
|
|
117
|
+
#
|
|
118
|
+
# @since 3.0.0
|
|
119
|
+
def touch(field = nil)
|
|
120
|
+
current = Time.now
|
|
121
|
+
write_attribute(:updated_at, current) if fields["updated_at"]
|
|
122
|
+
write_attribute(field, current) if field
|
|
123
|
+
_root.collection.find(atomic_selector).update(atomic_updates)
|
|
124
|
+
without_autobuild do
|
|
125
|
+
touchables.each { |name| send(name).try(:touch) }
|
|
126
|
+
end
|
|
127
|
+
move_changes and true
|
|
128
|
+
end
|
|
129
|
+
|
|
130
|
+
# Update the document in the database.
|
|
83
131
|
#
|
|
84
132
|
# @example Update an existing document.
|
|
85
133
|
# document.update
|
|
@@ -100,15 +148,21 @@ module Mongoid #:nodoc:
|
|
|
100
148
|
# @param [ Symbol, String ] name The name of the attribute.
|
|
101
149
|
# @param [ Object ] value The new value of the attribute.a
|
|
102
150
|
#
|
|
151
|
+
# @raise [ Errors::ReadonlyAttribute ] If the field cannot be changed due
|
|
152
|
+
# to being flagged as reaodnly.
|
|
153
|
+
#
|
|
103
154
|
# @return [ true, false ] True if save was successfull, false if not.
|
|
104
155
|
#
|
|
105
156
|
# @since 2.0.0.rc.6
|
|
106
157
|
def update_attribute(name, value)
|
|
158
|
+
unless attribute_writable?(name.to_s)
|
|
159
|
+
raise Errors::ReadonlyAttribute.new(name, value)
|
|
160
|
+
end
|
|
107
161
|
write_attribute(name, value)
|
|
108
|
-
save(:
|
|
162
|
+
save(validate: false)
|
|
109
163
|
end
|
|
110
164
|
|
|
111
|
-
# Update the document attributes in the
|
|
165
|
+
# Update the document attributes in the database.
|
|
112
166
|
#
|
|
113
167
|
# @example Update the document's attributes
|
|
114
168
|
# document.update_attributes(:title => "Sir")
|
|
@@ -132,31 +186,29 @@ module Mongoid #:nodoc:
|
|
|
132
186
|
#
|
|
133
187
|
# @return [ true, false ] True if validation passed.
|
|
134
188
|
def update_attributes!(attributes = {}, options = {})
|
|
135
|
-
update_attributes(attributes, options)
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
end
|
|
189
|
+
result = update_attributes(attributes, options)
|
|
190
|
+
unless result
|
|
191
|
+
self.class.fail_validate!(self) unless errors.empty?
|
|
192
|
+
self.class.fail_callback!(self, :update_attributes!)
|
|
140
193
|
end
|
|
194
|
+
result
|
|
141
195
|
end
|
|
142
196
|
|
|
143
|
-
#
|
|
144
|
-
#
|
|
197
|
+
# Perform an upsert of the document. If the document does not exist in the
|
|
198
|
+
# database, then Mongo will insert a new one, otherwise the fields will get
|
|
199
|
+
# overwritten with new values on the existing document.
|
|
145
200
|
#
|
|
146
201
|
# @example Upsert the document.
|
|
147
202
|
# document.upsert
|
|
148
203
|
#
|
|
149
|
-
# @param [ Hash ] options
|
|
204
|
+
# @param [ Hash ] options The validation options.
|
|
150
205
|
#
|
|
151
|
-
# @return [ true
|
|
206
|
+
# @return [ true ] True.
|
|
207
|
+
#
|
|
208
|
+
# @since 3.0.0
|
|
152
209
|
def upsert(options = {})
|
|
153
|
-
|
|
154
|
-
insert(options).persisted?
|
|
155
|
-
else
|
|
156
|
-
update(options)
|
|
157
|
-
end
|
|
210
|
+
Operations.upsert(self, options).persist
|
|
158
211
|
end
|
|
159
|
-
alias :save :upsert
|
|
160
212
|
|
|
161
213
|
module ClassMethods #:nodoc:
|
|
162
214
|
|
|
@@ -174,7 +226,9 @@ module Mongoid #:nodoc:
|
|
|
174
226
|
# @return [ Document ] The newly created document.
|
|
175
227
|
def create(attributes = {}, options = {}, &block)
|
|
176
228
|
_creating do
|
|
177
|
-
new(attributes, options, &block)
|
|
229
|
+
doc = new(attributes, options, &block)
|
|
230
|
+
doc.save
|
|
231
|
+
doc
|
|
178
232
|
end
|
|
179
233
|
end
|
|
180
234
|
|
|
@@ -193,10 +247,10 @@ module Mongoid #:nodoc:
|
|
|
193
247
|
# @return [ Document ] The newly created document.
|
|
194
248
|
def create!(attributes = {}, options = {}, &block)
|
|
195
249
|
_creating do
|
|
196
|
-
new(attributes, options, &block)
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
250
|
+
doc = new(attributes, options, &block)
|
|
251
|
+
fail_validate!(doc) unless doc.insert.errors.empty?
|
|
252
|
+
fail_callback!(doc, :create!) if doc.new_record?
|
|
253
|
+
doc
|
|
200
254
|
end
|
|
201
255
|
end
|
|
202
256
|
|
|
@@ -216,11 +270,12 @@ module Mongoid #:nodoc:
|
|
|
216
270
|
def delete_all(conditions = nil)
|
|
217
271
|
conds = conditions || {}
|
|
218
272
|
selector = conds[:conditions] || conds
|
|
219
|
-
selector.merge!(:
|
|
220
|
-
collection
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
273
|
+
selector.merge!(_type: name) if hereditary?
|
|
274
|
+
coll = collection
|
|
275
|
+
deleted = coll.find(selector).count
|
|
276
|
+
coll.find(selector).remove_all
|
|
277
|
+
Threaded.clear_options!
|
|
278
|
+
deleted
|
|
224
279
|
end
|
|
225
280
|
|
|
226
281
|
# Delete all documents given the supplied conditions. If no conditions
|
|
@@ -239,9 +294,9 @@ module Mongoid #:nodoc:
|
|
|
239
294
|
def destroy_all(conditions = nil)
|
|
240
295
|
conds = conditions || {}
|
|
241
296
|
documents = where(conds[:conditions] || conds)
|
|
242
|
-
documents.count
|
|
243
|
-
|
|
244
|
-
|
|
297
|
+
destroyed = documents.count
|
|
298
|
+
documents.each { |doc| doc.destroy }
|
|
299
|
+
destroyed
|
|
245
300
|
end
|
|
246
301
|
|
|
247
302
|
# Raise an error if validation failed.
|
data/lib/mongoid/railtie.rb
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
|
-
require "singleton"
|
|
3
2
|
require "mongoid"
|
|
4
3
|
require "mongoid/config"
|
|
5
4
|
require "mongoid/railties/document"
|
|
6
5
|
require "rails"
|
|
7
6
|
require "rails/mongoid"
|
|
8
7
|
|
|
9
|
-
module Rails
|
|
10
|
-
module Mongoid
|
|
11
|
-
class Railtie < Rails::Railtie
|
|
8
|
+
module Rails
|
|
9
|
+
module Mongoid
|
|
10
|
+
class Railtie < Rails::Railtie
|
|
12
11
|
|
|
13
12
|
# Determine which generator to use. app_generators was introduced after
|
|
14
13
|
# 3.0.0.
|
|
@@ -23,7 +22,7 @@ module Rails #:nodoc:
|
|
|
23
22
|
config.respond_to?(:app_generators) ? :app_generators : :generators
|
|
24
23
|
end
|
|
25
24
|
|
|
26
|
-
#
|
|
25
|
+
# Mapping of rescued exceptions to HTTP responses
|
|
27
26
|
#
|
|
28
27
|
# @example
|
|
29
28
|
# railtie.rescue_responses
|
|
@@ -38,7 +37,7 @@ module Rails #:nodoc:
|
|
|
38
37
|
}
|
|
39
38
|
end
|
|
40
39
|
|
|
41
|
-
config.send(generator).orm :mongoid, :
|
|
40
|
+
config.send(generator).orm :mongoid, migration: false
|
|
42
41
|
|
|
43
42
|
if config.action_dispatch.rescue_responses
|
|
44
43
|
config.action_dispatch.rescue_responses.merge!(rescue_responses)
|
|
@@ -73,15 +72,22 @@ module Rails #:nodoc:
|
|
|
73
72
|
# # - host: localhost
|
|
74
73
|
# # port: 27019
|
|
75
74
|
# allow_dynamic_fields: false
|
|
76
|
-
# parameterize_keys: false
|
|
77
75
|
# persist_in_safe_mode: false
|
|
78
76
|
#
|
|
79
77
|
initializer "setup database" do
|
|
80
78
|
config_file = Rails.root.join("config", "mongoid.yml")
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
::Mongoid
|
|
79
|
+
if config_file.file?
|
|
80
|
+
begin
|
|
81
|
+
::Mongoid.load!(config_file)
|
|
82
|
+
rescue ::Mongoid::Errors::NoSessionsConfig => e
|
|
83
|
+
handle_configuration_error(e)
|
|
84
|
+
rescue ::Mongoid::Errors::NoDefaultSession => e
|
|
85
|
+
handle_configuration_error(e)
|
|
86
|
+
rescue ::Mongoid::Errors::NoSessionDatabase => e
|
|
87
|
+
handle_configuration_error(e)
|
|
88
|
+
rescue ::Mongoid::Errors::NoSessionHosts => e
|
|
89
|
+
handle_configuration_error(e)
|
|
90
|
+
end
|
|
85
91
|
end
|
|
86
92
|
end
|
|
87
93
|
|
|
@@ -139,6 +145,15 @@ module Rails #:nodoc:
|
|
|
139
145
|
end
|
|
140
146
|
end
|
|
141
147
|
end
|
|
148
|
+
|
|
149
|
+
# Rails runs all initializers first before getting into any generator
|
|
150
|
+
# code, so we have no way in the intitializer to know if we are
|
|
151
|
+
# generating a mongoid.yml. So instead of failing, we catch all the
|
|
152
|
+
# errors and print them out.
|
|
153
|
+
def handle_configuration_error(e)
|
|
154
|
+
puts "There is a configuration error with the current mongoid.yml."
|
|
155
|
+
puts e.message
|
|
156
|
+
end
|
|
142
157
|
end
|
|
143
158
|
end
|
|
144
159
|
end
|