mongoid_rails4 4.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.
- checksums.yaml +7 -0
- data/CHANGELOG.md +3213 -0
- data/LICENSE +20 -0
- data/README.md +62 -0
- data/Rakefile +35 -0
- data/lib/config/locales/en.yml +448 -0
- data/lib/mongoid.rb +104 -0
- data/lib/mongoid/atomic.rb +384 -0
- data/lib/mongoid/atomic/modifiers.rb +317 -0
- data/lib/mongoid/atomic/paths.rb +3 -0
- data/lib/mongoid/atomic/paths/embedded.rb +28 -0
- data/lib/mongoid/atomic/paths/embedded/many.rb +44 -0
- data/lib/mongoid/atomic/paths/embedded/one.rb +43 -0
- data/lib/mongoid/atomic/paths/root.rb +39 -0
- data/lib/mongoid/attributes.rb +284 -0
- data/lib/mongoid/attributes/dynamic.rb +154 -0
- data/lib/mongoid/attributes/nested.rb +82 -0
- data/lib/mongoid/attributes/processing.rb +147 -0
- data/lib/mongoid/attributes/readonly.rb +56 -0
- data/lib/mongoid/changeable.rb +379 -0
- data/lib/mongoid/composable.rb +104 -0
- data/lib/mongoid/config.rb +263 -0
- data/lib/mongoid/config/environment.rb +44 -0
- data/lib/mongoid/config/options.rb +74 -0
- data/lib/mongoid/config/validators.rb +3 -0
- data/lib/mongoid/config/validators/option.rb +25 -0
- data/lib/mongoid/config/validators/session.rb +140 -0
- data/lib/mongoid/contextual.rb +54 -0
- data/lib/mongoid/contextual/aggregable/memory.rb +109 -0
- data/lib/mongoid/contextual/aggregable/mongo.rb +147 -0
- data/lib/mongoid/contextual/atomic.rb +180 -0
- data/lib/mongoid/contextual/command.rb +61 -0
- data/lib/mongoid/contextual/eager.rb +158 -0
- data/lib/mongoid/contextual/find_and_modify.rb +69 -0
- data/lib/mongoid/contextual/geo_near.rb +238 -0
- data/lib/mongoid/contextual/map_reduce.rb +324 -0
- data/lib/mongoid/contextual/memory.rb +440 -0
- data/lib/mongoid/contextual/mongo.rb +676 -0
- data/lib/mongoid/contextual/queryable.rb +25 -0
- data/lib/mongoid/contextual/text_search.rb +180 -0
- data/lib/mongoid/copyable.rb +67 -0
- data/lib/mongoid/criteria.rb +562 -0
- data/lib/mongoid/criteria/findable.rb +179 -0
- data/lib/mongoid/criteria/inspectable.rb +25 -0
- data/lib/mongoid/criteria/marshalable.rb +50 -0
- data/lib/mongoid/criteria/modifiable.rb +189 -0
- data/lib/mongoid/criteria/scopable.rb +158 -0
- data/lib/mongoid/document.rb +361 -0
- data/lib/mongoid/equality.rb +66 -0
- data/lib/mongoid/errors.rb +40 -0
- data/lib/mongoid/errors/ambiguous_relationship.rb +51 -0
- data/lib/mongoid/errors/callback.rb +25 -0
- data/lib/mongoid/errors/delete_restriction.rb +29 -0
- data/lib/mongoid/errors/document_not_found.rb +111 -0
- data/lib/mongoid/errors/eager_load.rb +22 -0
- data/lib/mongoid/errors/invalid_collection.rb +18 -0
- data/lib/mongoid/errors/invalid_config_option.rb +27 -0
- data/lib/mongoid/errors/invalid_field.rb +64 -0
- data/lib/mongoid/errors/invalid_field_option.rb +35 -0
- data/lib/mongoid/errors/invalid_find.rb +19 -0
- data/lib/mongoid/errors/invalid_includes.rb +32 -0
- data/lib/mongoid/errors/invalid_index.rb +28 -0
- data/lib/mongoid/errors/invalid_options.rb +28 -0
- data/lib/mongoid/errors/invalid_path.rb +21 -0
- 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 +22 -0
- data/lib/mongoid/errors/inverse_not_found.rb +29 -0
- data/lib/mongoid/errors/mixed_relations.rb +32 -0
- data/lib/mongoid/errors/mixed_session_configuration.rb +28 -0
- data/lib/mongoid/errors/mongoid_error.rb +92 -0
- 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 +19 -0
- 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 +21 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +20 -0
- data/lib/mongoid/errors/unknown_attribute.rb +25 -0
- data/lib/mongoid/errors/unsaved_document.rb +19 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +27 -0
- data/lib/mongoid/errors/validations.rb +29 -0
- data/lib/mongoid/evolvable.rb +19 -0
- data/lib/mongoid/extensions.rb +35 -0
- data/lib/mongoid/extensions/array.rb +180 -0
- data/lib/mongoid/extensions/big_decimal.rb +69 -0
- data/lib/mongoid/extensions/boolean.rb +21 -0
- data/lib/mongoid/extensions/date.rb +77 -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 +209 -0
- data/lib/mongoid/extensions/integer.rb +67 -0
- data/lib/mongoid/extensions/module.rb +28 -0
- data/lib/mongoid/extensions/nil_class.rb +33 -0
- data/lib/mongoid/extensions/object.rb +274 -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 +199 -0
- data/lib/mongoid/extensions/symbol.rb +54 -0
- data/lib/mongoid/extensions/time.rb +88 -0
- data/lib/mongoid/extensions/time_with_zone.rb +56 -0
- data/lib/mongoid/extensions/true_class.rb +38 -0
- data/lib/mongoid/factory.rb +46 -0
- data/lib/mongoid/fields.rb +542 -0
- data/lib/mongoid/fields/foreign_key.rb +174 -0
- data/lib/mongoid/fields/localized.rb +73 -0
- data/lib/mongoid/fields/standard.rb +273 -0
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields/validators/macro.rb +92 -0
- data/lib/mongoid/findable.rb +133 -0
- data/lib/mongoid/identity_map.rb +163 -0
- data/lib/mongoid/indexable.rb +147 -0
- data/lib/mongoid/indexable/specification.rb +115 -0
- data/lib/mongoid/indexable/validators/options.rb +103 -0
- data/lib/mongoid/inspectable.rb +59 -0
- data/lib/mongoid/interceptable.rb +265 -0
- data/lib/mongoid/loggable.rb +69 -0
- data/lib/mongoid/matchable.rb +152 -0
- data/lib/mongoid/matchable/all.rb +27 -0
- data/lib/mongoid/matchable/and.rb +30 -0
- data/lib/mongoid/matchable/default.rb +72 -0
- data/lib/mongoid/matchable/exists.rb +23 -0
- data/lib/mongoid/matchable/gt.rb +21 -0
- data/lib/mongoid/matchable/gte.rb +21 -0
- data/lib/mongoid/matchable/in.rb +24 -0
- data/lib/mongoid/matchable/lt.rb +21 -0
- data/lib/mongoid/matchable/lte.rb +21 -0
- data/lib/mongoid/matchable/ne.rb +21 -0
- data/lib/mongoid/matchable/nin.rb +21 -0
- data/lib/mongoid/matchable/or.rb +33 -0
- data/lib/mongoid/matchable/size.rb +21 -0
- data/lib/mongoid/persistable.rb +207 -0
- data/lib/mongoid/persistable/creatable.rb +189 -0
- data/lib/mongoid/persistable/deletable.rb +149 -0
- data/lib/mongoid/persistable/destroyable.rb +55 -0
- data/lib/mongoid/persistable/incrementable.rb +36 -0
- data/lib/mongoid/persistable/logical.rb +38 -0
- data/lib/mongoid/persistable/poppable.rb +39 -0
- data/lib/mongoid/persistable/pullable.rb +55 -0
- data/lib/mongoid/persistable/pushable.rb +62 -0
- data/lib/mongoid/persistable/renamable.rb +35 -0
- data/lib/mongoid/persistable/savable.rb +52 -0
- data/lib/mongoid/persistable/settable.rb +33 -0
- data/lib/mongoid/persistable/unsettable.rb +36 -0
- data/lib/mongoid/persistable/updatable.rb +151 -0
- data/lib/mongoid/persistable/upsertable.rb +55 -0
- data/lib/mongoid/positional.rb +71 -0
- data/lib/mongoid/railtie.rb +156 -0
- data/lib/mongoid/railties/database.rake +97 -0
- data/lib/mongoid/railties/document.rb +12 -0
- data/lib/mongoid/relations.rb +162 -0
- data/lib/mongoid/relations/accessors.rb +299 -0
- data/lib/mongoid/relations/auto_save.rb +106 -0
- data/lib/mongoid/relations/binding.rb +218 -0
- data/lib/mongoid/relations/bindings.rb +9 -0
- data/lib/mongoid/relations/bindings/embedded/in.rb +63 -0
- data/lib/mongoid/relations/bindings/embedded/many.rb +50 -0
- data/lib/mongoid/relations/bindings/embedded/one.rb +55 -0
- data/lib/mongoid/relations/bindings/referenced/in.rb +65 -0
- data/lib/mongoid/relations/bindings/referenced/many.rb +42 -0
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +67 -0
- data/lib/mongoid/relations/bindings/referenced/one.rb +44 -0
- data/lib/mongoid/relations/builder.rb +57 -0
- data/lib/mongoid/relations/builders.rb +104 -0
- data/lib/mongoid/relations/builders/embedded/in.rb +29 -0
- data/lib/mongoid/relations/builders/embedded/many.rb +36 -0
- data/lib/mongoid/relations/builders/embedded/one.rb +30 -0
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +174 -0
- data/lib/mongoid/relations/builders/nested_attributes/one.rb +126 -0
- data/lib/mongoid/relations/builders/referenced/in.rb +26 -0
- data/lib/mongoid/relations/builders/referenced/many.rb +27 -0
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +40 -0
- data/lib/mongoid/relations/builders/referenced/one.rb +26 -0
- data/lib/mongoid/relations/cascading.rb +56 -0
- data/lib/mongoid/relations/cascading/delete.rb +44 -0
- data/lib/mongoid/relations/cascading/destroy.rb +43 -0
- data/lib/mongoid/relations/cascading/nullify.rb +35 -0
- data/lib/mongoid/relations/cascading/restrict.rb +39 -0
- data/lib/mongoid/relations/constraint.rb +49 -0
- data/lib/mongoid/relations/conversions.rb +34 -0
- data/lib/mongoid/relations/counter_cache.rb +105 -0
- data/lib/mongoid/relations/cyclic.rb +107 -0
- data/lib/mongoid/relations/embedded/batchable.rb +355 -0
- data/lib/mongoid/relations/embedded/in.rb +231 -0
- data/lib/mongoid/relations/embedded/many.rb +639 -0
- data/lib/mongoid/relations/embedded/one.rb +223 -0
- data/lib/mongoid/relations/macros.rb +356 -0
- data/lib/mongoid/relations/many.rb +208 -0
- data/lib/mongoid/relations/marshalable.rb +32 -0
- data/lib/mongoid/relations/metadata.rb +1174 -0
- data/lib/mongoid/relations/nested_builder.rb +74 -0
- data/lib/mongoid/relations/one.rb +48 -0
- data/lib/mongoid/relations/options.rb +48 -0
- data/lib/mongoid/relations/polymorphic.rb +39 -0
- data/lib/mongoid/relations/proxy.rb +270 -0
- data/lib/mongoid/relations/referenced/in.rb +297 -0
- data/lib/mongoid/relations/referenced/many.rb +787 -0
- data/lib/mongoid/relations/referenced/many_to_many.rb +486 -0
- data/lib/mongoid/relations/referenced/one.rb +290 -0
- data/lib/mongoid/relations/reflections.rb +62 -0
- data/lib/mongoid/relations/synchronization.rb +169 -0
- data/lib/mongoid/relations/targets.rb +2 -0
- data/lib/mongoid/relations/targets/enumerable.rb +473 -0
- data/lib/mongoid/relations/touchable.rb +94 -0
- data/lib/mongoid/reloadable.rb +95 -0
- data/lib/mongoid/scopable.rb +379 -0
- data/lib/mongoid/selectable.rb +59 -0
- data/lib/mongoid/serializable.rb +170 -0
- data/lib/mongoid/sessions.rb +330 -0
- data/lib/mongoid/sessions/factory.rb +129 -0
- data/lib/mongoid/sessions/mongo_uri.rb +93 -0
- data/lib/mongoid/sessions/options.rb +141 -0
- data/lib/mongoid/sessions/validators.rb +2 -0
- data/lib/mongoid/sessions/validators/storage.rb +49 -0
- data/lib/mongoid/shardable.rb +65 -0
- data/lib/mongoid/state.rb +97 -0
- data/lib/mongoid/threaded.rb +383 -0
- data/lib/mongoid/threaded/lifecycle.rb +164 -0
- data/lib/mongoid/timestamps.rb +15 -0
- data/lib/mongoid/timestamps/created.rb +30 -0
- data/lib/mongoid/timestamps/created/short.rb +19 -0
- data/lib/mongoid/timestamps/short.rb +10 -0
- data/lib/mongoid/timestamps/updated.rb +39 -0
- data/lib/mongoid/timestamps/updated/short.rb +19 -0
- data/lib/mongoid/traversable.rb +192 -0
- data/lib/mongoid/unit_of_work.rb +61 -0
- data/lib/mongoid/validatable.rb +180 -0
- data/lib/mongoid/validatable/associated.rb +48 -0
- data/lib/mongoid/validatable/format.rb +20 -0
- data/lib/mongoid/validatable/length.rb +20 -0
- data/lib/mongoid/validatable/localizable.rb +30 -0
- data/lib/mongoid/validatable/macros.rb +94 -0
- data/lib/mongoid/validatable/presence.rb +86 -0
- data/lib/mongoid/validatable/queryable.rb +30 -0
- data/lib/mongoid/validatable/uniqueness.rb +330 -0
- data/lib/mongoid/version.rb +4 -0
- data/lib/rack/mongoid.rb +2 -0
- data/lib/rack/mongoid/middleware/identity_map.rb +39 -0
- data/lib/rails/generators/mongoid/config/config_generator.rb +25 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +76 -0
- data/lib/rails/generators/mongoid/model/model_generator.rb +25 -0
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +19 -0
- data/lib/rails/generators/mongoid/observer/observer_generator.rb +17 -0
- data/lib/rails/generators/mongoid/observer/templates/observer.rb.tt +4 -0
- data/lib/rails/generators/mongoid_generator.rb +65 -0
- data/lib/rails/mongoid.rb +180 -0
- data/lib/support/ruby_version.rb +26 -0
- data/spec/app/models/account.rb +28 -0
- data/spec/app/models/acolyte.rb +17 -0
- data/spec/app/models/actor.rb +18 -0
- data/spec/app/models/actress.rb +2 -0
- data/spec/app/models/address.rb +77 -0
- data/spec/app/models/address_component.rb +5 -0
- data/spec/app/models/address_number.rb +6 -0
- data/spec/app/models/agency.rb +5 -0
- data/spec/app/models/agent.rb +12 -0
- data/spec/app/models/album.rb +14 -0
- data/spec/app/models/alert.rb +5 -0
- data/spec/app/models/animal.rb +25 -0
- data/spec/app/models/answer.rb +4 -0
- data/spec/app/models/appointment.rb +7 -0
- data/spec/app/models/article.rb +10 -0
- data/spec/app/models/artist.rb +66 -0
- data/spec/app/models/artwork.rb +4 -0
- data/spec/app/models/audio.rb +5 -0
- data/spec/app/models/augmentation.rb +11 -0
- data/spec/app/models/author.rb +4 -0
- data/spec/app/models/band.rb +26 -0
- data/spec/app/models/bar.rb +10 -0
- data/spec/app/models/basic.rb +6 -0
- data/spec/app/models/bed.rb +1 -0
- data/spec/app/models/big_palette.rb +2 -0
- data/spec/app/models/birthday.rb +13 -0
- data/spec/app/models/book.rb +13 -0
- data/spec/app/models/breed.rb +4 -0
- data/spec/app/models/browser.rb +6 -0
- data/spec/app/models/building.rb +5 -0
- data/spec/app/models/building_address.rb +5 -0
- data/spec/app/models/bus.rb +7 -0
- data/spec/app/models/business.rb +5 -0
- data/spec/app/models/callback_recorder.rb +25 -0
- data/spec/app/models/callback_test.rb +9 -0
- data/spec/app/models/canvas.rb +25 -0
- data/spec/app/models/car.rb +1 -0
- data/spec/app/models/cat.rb +8 -0
- data/spec/app/models/category.rb +8 -0
- data/spec/app/models/child.rb +4 -0
- data/spec/app/models/child_doc.rb +22 -0
- data/spec/app/models/church.rb +4 -0
- data/spec/app/models/circle.rb +3 -0
- data/spec/app/models/circuit.rb +4 -0
- data/spec/app/models/circus.rb +7 -0
- data/spec/app/models/code.rb +5 -0
- data/spec/app/models/comment.rb +16 -0
- data/spec/app/models/contractor.rb +5 -0
- data/spec/app/models/cookie.rb +6 -0
- data/spec/app/models/country_code.rb +8 -0
- data/spec/app/models/definition.rb +7 -0
- data/spec/app/models/description.rb +11 -0
- data/spec/app/models/dictionary.rb +10 -0
- data/spec/app/models/division.rb +10 -0
- data/spec/app/models/doctor.rb +12 -0
- data/spec/app/models/dog.rb +7 -0
- data/spec/app/models/dokument.rb +5 -0
- data/spec/app/models/dragon.rb +4 -0
- data/spec/app/models/driver.rb +7 -0
- data/spec/app/models/drug.rb +6 -0
- data/spec/app/models/dungeon.rb +4 -0
- data/spec/app/models/email.rb +6 -0
- data/spec/app/models/employer.rb +5 -0
- data/spec/app/models/entry.rb +6 -0
- data/spec/app/models/eraser.rb +1 -0
- data/spec/app/models/event.rb +22 -0
- data/spec/app/models/exhibition.rb +4 -0
- data/spec/app/models/exhibitor.rb +5 -0
- data/spec/app/models/eye.rb +9 -0
- data/spec/app/models/eye_bowl.rb +9 -0
- data/spec/app/models/face.rb +8 -0
- data/spec/app/models/favorite.rb +6 -0
- data/spec/app/models/filesystem.rb +5 -0
- data/spec/app/models/fire_hydrant.rb +6 -0
- data/spec/app/models/firefox.rb +4 -0
- data/spec/app/models/fish.rb +7 -0
- data/spec/app/models/folder.rb +7 -0
- data/spec/app/models/folder_item.rb +9 -0
- data/spec/app/models/fruits.rb +28 -0
- data/spec/app/models/game.rb +19 -0
- data/spec/app/models/ghost.rb +7 -0
- data/spec/app/models/home.rb +4 -0
- data/spec/app/models/house.rb +6 -0
- data/spec/app/models/html_writer.rb +3 -0
- data/spec/app/models/image.rb +22 -0
- data/spec/app/models/implant.rb +16 -0
- data/spec/app/models/item.rb +8 -0
- data/spec/app/models/jar.rb +7 -0
- data/spec/app/models/label.rb +40 -0
- data/spec/app/models/language.rb +5 -0
- data/spec/app/models/lat_lng.rb +15 -0
- data/spec/app/models/league.rb +11 -0
- data/spec/app/models/learner.rb +2 -0
- data/spec/app/models/line_item.rb +6 -0
- data/spec/app/models/location.rb +8 -0
- data/spec/app/models/login.rb +8 -0
- data/spec/app/models/manufacturer.rb +7 -0
- data/spec/app/models/meat.rb +4 -0
- data/spec/app/models/membership.rb +4 -0
- data/spec/app/models/mixed_drink.rb +4 -0
- data/spec/app/models/movie.rb +13 -0
- data/spec/app/models/my_hash.rb +2 -0
- data/spec/app/models/name.rb +23 -0
- data/spec/app/models/node.rb +5 -0
- data/spec/app/models/note.rb +12 -0
- data/spec/app/models/ordered_post.rb +6 -0
- data/spec/app/models/ordered_preference.rb +6 -0
- data/spec/app/models/oscar.rb +15 -0
- data/spec/app/models/override.rb +16 -0
- data/spec/app/models/ownable.rb +6 -0
- data/spec/app/models/owner.rb +6 -0
- data/spec/app/models/pack.rb +3 -0
- data/spec/app/models/page.rb +5 -0
- data/spec/app/models/page_question.rb +4 -0
- data/spec/app/models/palette.rb +7 -0
- data/spec/app/models/parent.rb +5 -0
- data/spec/app/models/parent_doc.rb +6 -0
- data/spec/app/models/passport.rb +5 -0
- data/spec/app/models/patient.rb +9 -0
- data/spec/app/models/pdf_writer.rb +3 -0
- data/spec/app/models/pencil.rb +1 -0
- data/spec/app/models/person.rb +205 -0
- data/spec/app/models/pet.rb +23 -0
- data/spec/app/models/pet_owner.rb +6 -0
- data/spec/app/models/phone.rb +11 -0
- data/spec/app/models/pizza.rb +7 -0
- data/spec/app/models/player.rb +35 -0
- data/spec/app/models/post.rb +44 -0
- data/spec/app/models/powerup.rb +11 -0
- data/spec/app/models/preference.rb +9 -0
- data/spec/app/models/princess.rb +8 -0
- data/spec/app/models/product.rb +15 -0
- data/spec/app/models/profile.rb +5 -0
- data/spec/app/models/pronunciation.rb +5 -0
- data/spec/app/models/purchase.rb +4 -0
- data/spec/app/models/question.rb +8 -0
- data/spec/app/models/quiz.rb +7 -0
- data/spec/app/models/rating.rb +8 -0
- data/spec/app/models/record.rb +46 -0
- data/spec/app/models/registry.rb +4 -0
- data/spec/app/models/role.rb +7 -0
- data/spec/app/models/root_category.rb +4 -0
- data/spec/app/models/sandwich.rb +4 -0
- data/spec/app/models/scheduler.rb +7 -0
- data/spec/app/models/seo.rb +7 -0
- data/spec/app/models/series.rb +4 -0
- data/spec/app/models/server.rb +13 -0
- data/spec/app/models/service.rb +22 -0
- data/spec/app/models/shape.rb +12 -0
- data/spec/app/models/shelf.rb +5 -0
- data/spec/app/models/shipping_container.rb +5 -0
- data/spec/app/models/shipping_pack.rb +3 -0
- data/spec/app/models/shop.rb +6 -0
- data/spec/app/models/short_agent.rb +4 -0
- data/spec/app/models/short_quiz.rb +5 -0
- data/spec/app/models/slave.rb +6 -0
- data/spec/app/models/song.rb +8 -0
- data/spec/app/models/sound.rb +5 -0
- data/spec/app/models/square.rb +4 -0
- data/spec/app/models/strategy.rb +3 -0
- data/spec/app/models/sub_item.rb +3 -0
- data/spec/app/models/subscription.rb +4 -0
- data/spec/app/models/survey.rb +5 -0
- data/spec/app/models/symptom.rb +6 -0
- data/spec/app/models/tag.rb +8 -0
- data/spec/app/models/target.rb +5 -0
- data/spec/app/models/template.rb +5 -0
- data/spec/app/models/thing.rb +9 -0
- data/spec/app/models/title.rb +3 -0
- data/spec/app/models/tool.rb +8 -0
- data/spec/app/models/topping.rb +5 -0
- data/spec/app/models/track.rb +38 -0
- data/spec/app/models/translation.rb +5 -0
- data/spec/app/models/tree.rb +9 -0
- data/spec/app/models/truck.rb +3 -0
- data/spec/app/models/user.rb +21 -0
- data/spec/app/models/user_account.rb +10 -0
- data/spec/app/models/validation_callback.rb +10 -0
- data/spec/app/models/vehicle.rb +11 -0
- data/spec/app/models/version.rb +5 -0
- data/spec/app/models/vet_visit.rb +5 -0
- data/spec/app/models/video.rb +13 -0
- data/spec/app/models/weapon.rb +11 -0
- data/spec/app/models/wiki_page.rb +14 -0
- data/spec/app/models/word.rb +15 -0
- data/spec/app/models/word_origin.rb +11 -0
- data/spec/app/models/writer.rb +11 -0
- data/spec/config/mongoid.yml +38 -0
- data/spec/mongoid/atomic/modifiers_spec.rb +456 -0
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +118 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +110 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +48 -0
- data/spec/mongoid/atomic/paths_spec.rb +270 -0
- data/spec/mongoid/atomic_spec.rb +365 -0
- data/spec/mongoid/attributes/nested_spec.rb +4832 -0
- data/spec/mongoid/attributes/readonly_spec.rb +169 -0
- data/spec/mongoid/attributes_spec.rb +1412 -0
- data/spec/mongoid/changeable_spec.rb +1507 -0
- data/spec/mongoid/composable_spec.rb +24 -0
- data/spec/mongoid/config/environment_spec.rb +83 -0
- data/spec/mongoid/config/options_spec.rb +56 -0
- data/spec/mongoid/config_spec.rb +318 -0
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +293 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +455 -0
- data/spec/mongoid/contextual/atomic_spec.rb +529 -0
- data/spec/mongoid/contextual/find_and_modify_spec.rb +220 -0
- data/spec/mongoid/contextual/geo_near_spec.rb +405 -0
- data/spec/mongoid/contextual/map_reduce_spec.rb +464 -0
- data/spec/mongoid/contextual/memory_spec.rb +1236 -0
- data/spec/mongoid/contextual/mongo_spec.rb +1843 -0
- data/spec/mongoid/contextual/text_search_spec.rb +207 -0
- data/spec/mongoid/copyable_spec.rb +393 -0
- data/spec/mongoid/criteria/findable_spec.rb +1189 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +27 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +28 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +1063 -0
- data/spec/mongoid/criteria/scopable_spec.rb +391 -0
- data/spec/mongoid/criteria_spec.rb +3821 -0
- data/spec/mongoid/document_spec.rb +1205 -0
- data/spec/mongoid/equality_spec.rb +241 -0
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +29 -0
- data/spec/mongoid/errors/callback_spec.rb +29 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +29 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +104 -0
- data/spec/mongoid/errors/eager_load_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +36 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +37 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +40 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_path_spec.rb +23 -0
- data/spec/mongoid/errors/invalid_scope_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +17 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +29 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +29 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +29 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +29 -0
- data/spec/mongoid/errors/mixed_session_configuration_spec.rb +29 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +48 -0
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +29 -0
- data/spec/mongoid/errors/no_environment_spec.rb +29 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +29 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +23 -0
- data/spec/mongoid/errors/no_parent_spec.rb +29 -0
- data/spec/mongoid/errors/no_session_config_spec.rb +29 -0
- data/spec/mongoid/errors/no_session_database_spec.rb +29 -0
- data/spec/mongoid/errors/no_session_hosts_spec.rb +29 -0
- data/spec/mongoid/errors/no_sessions_config_spec.rb +29 -0
- data/spec/mongoid/errors/readonly_attribute_spec.rb +29 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +29 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +29 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +29 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +37 -0
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +29 -0
- data/spec/mongoid/errors/validations_spec.rb +45 -0
- data/spec/mongoid/extensions/array_spec.rb +638 -0
- data/spec/mongoid/extensions/big_decimal_spec.rb +104 -0
- data/spec/mongoid/extensions/binary_spec.rb +60 -0
- data/spec/mongoid/extensions/boolean_spec.rb +135 -0
- data/spec/mongoid/extensions/date_spec.rb +235 -0
- data/spec/mongoid/extensions/date_time_spec.rb +155 -0
- data/spec/mongoid/extensions/false_class_spec.rb +42 -0
- data/spec/mongoid/extensions/float_spec.rb +133 -0
- data/spec/mongoid/extensions/hash_spec.rb +333 -0
- data/spec/mongoid/extensions/integer_spec.rb +136 -0
- data/spec/mongoid/extensions/module_spec.rb +42 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +11 -0
- data/spec/mongoid/extensions/object_id_spec.rb +946 -0
- data/spec/mongoid/extensions/object_spec.rb +292 -0
- data/spec/mongoid/extensions/range_spec.rb +105 -0
- data/spec/mongoid/extensions/regexp_spec.rb +47 -0
- data/spec/mongoid/extensions/set_spec.rb +33 -0
- data/spec/mongoid/extensions/string_spec.rb +357 -0
- data/spec/mongoid/extensions/symbol_spec.rb +76 -0
- data/spec/mongoid/extensions/time_spec.rb +467 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +405 -0
- data/spec/mongoid/extensions/true_class_spec.rb +42 -0
- data/spec/mongoid/extensions_spec.rb +15 -0
- data/spec/mongoid/factory_spec.rb +185 -0
- data/spec/mongoid/fields/foreign_key_spec.rb +694 -0
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +184 -0
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +201 -0
- data/spec/mongoid/fields/localized_spec.rb +386 -0
- data/spec/mongoid/fields/standard_spec.rb +166 -0
- data/spec/mongoid/fields_spec.rb +1229 -0
- data/spec/mongoid/findable_spec.rb +342 -0
- data/spec/mongoid/identity_map_spec.rb +564 -0
- data/spec/mongoid/indexable/specification_spec.rb +87 -0
- data/spec/mongoid/indexable_spec.rb +504 -0
- data/spec/mongoid/inspectable_spec.rb +49 -0
- data/spec/mongoid/interceptable_spec.rb +1564 -0
- data/spec/mongoid/loggable_spec.rb +21 -0
- data/spec/mongoid/matchable/all_spec.rb +31 -0
- data/spec/mongoid/matchable/and_spec.rb +162 -0
- data/spec/mongoid/matchable/default_spec.rb +130 -0
- data/spec/mongoid/matchable/exists_spec.rb +57 -0
- data/spec/mongoid/matchable/gt_spec.rb +75 -0
- data/spec/mongoid/matchable/gte_spec.rb +74 -0
- data/spec/mongoid/matchable/in_spec.rb +25 -0
- data/spec/mongoid/matchable/lt_spec.rb +74 -0
- data/spec/mongoid/matchable/lte_spec.rb +74 -0
- data/spec/mongoid/matchable/ne_spec.rb +25 -0
- data/spec/mongoid/matchable/nin_spec.rb +25 -0
- data/spec/mongoid/matchable/or_spec.rb +106 -0
- data/spec/mongoid/matchable/size_spec.rb +25 -0
- data/spec/mongoid/matchable_spec.rb +532 -0
- data/spec/mongoid/persistable/creatable_spec.rb +512 -0
- data/spec/mongoid/persistable/deletable_spec.rb +205 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +148 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +173 -0
- data/spec/mongoid/persistable/logical_spec.rb +143 -0
- data/spec/mongoid/persistable/poppable_spec.rb +115 -0
- data/spec/mongoid/persistable/pullable_spec.rb +228 -0
- data/spec/mongoid/persistable/pushable_spec.rb +258 -0
- data/spec/mongoid/persistable/renamable_spec.rb +135 -0
- data/spec/mongoid/persistable/savable_spec.rb +432 -0
- data/spec/mongoid/persistable/settable_spec.rb +139 -0
- data/spec/mongoid/persistable/unsettable_spec.rb +155 -0
- data/spec/mongoid/persistable/updatable_spec.rb +522 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +106 -0
- data/spec/mongoid/persistable_spec.rb +206 -0
- data/spec/mongoid/positional_spec.rb +227 -0
- data/spec/mongoid/railties/document_spec.rb +24 -0
- data/spec/mongoid/relations/accessors_spec.rb +736 -0
- data/spec/mongoid/relations/auto_save_spec.rb +261 -0
- data/spec/mongoid/relations/bindings/embedded/in_spec.rb +171 -0
- data/spec/mongoid/relations/bindings/embedded/many_spec.rb +54 -0
- data/spec/mongoid/relations/bindings/embedded/one_spec.rb +77 -0
- data/spec/mongoid/relations/bindings/referenced/in_spec.rb +241 -0
- data/spec/mongoid/relations/bindings/referenced/many_spec.rb +153 -0
- data/spec/mongoid/relations/bindings/referenced/many_to_many_spec.rb +178 -0
- data/spec/mongoid/relations/bindings/referenced/one_spec.rb +131 -0
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +34 -0
- data/spec/mongoid/relations/builders/embedded/many_spec.rb +132 -0
- data/spec/mongoid/relations/builders/embedded/one_spec.rb +99 -0
- data/spec/mongoid/relations/builders/nested_attributes/many_spec.rb +234 -0
- data/spec/mongoid/relations/builders/nested_attributes/one_spec.rb +250 -0
- data/spec/mongoid/relations/builders/referenced/in_spec.rb +241 -0
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +137 -0
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +178 -0
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +124 -0
- data/spec/mongoid/relations/builders_spec.rb +226 -0
- data/spec/mongoid/relations/cascading/delete_spec.rb +101 -0
- data/spec/mongoid/relations/cascading/destroy_spec.rb +47 -0
- data/spec/mongoid/relations/cascading/nullify_spec.rb +32 -0
- data/spec/mongoid/relations/cascading/restrict_spec.rb +68 -0
- data/spec/mongoid/relations/cascading_spec.rb +355 -0
- data/spec/mongoid/relations/constraint_spec.rb +74 -0
- data/spec/mongoid/relations/conversions_spec.rb +126 -0
- data/spec/mongoid/relations/counter_cache_spec.rb +205 -0
- data/spec/mongoid/relations/cyclic_spec.rb +156 -0
- data/spec/mongoid/relations/embedded/dirty_spec.rb +65 -0
- data/spec/mongoid/relations/embedded/in_spec.rb +579 -0
- data/spec/mongoid/relations/embedded/many_spec.rb +3781 -0
- data/spec/mongoid/relations/embedded/one_spec.rb +1014 -0
- data/spec/mongoid/relations/macros_spec.rb +613 -0
- data/spec/mongoid/relations/metadata_spec.rb +1917 -0
- data/spec/mongoid/relations/options_spec.rb +35 -0
- data/spec/mongoid/relations/polymorphic_spec.rb +128 -0
- data/spec/mongoid/relations/proxy_spec.rb +48 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1435 -0
- data/spec/mongoid/relations/referenced/many_spec.rb +3546 -0
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +3556 -0
- data/spec/mongoid/relations/referenced/one_spec.rb +1289 -0
- data/spec/mongoid/relations/reflections_spec.rb +101 -0
- data/spec/mongoid/relations/synchronization_spec.rb +449 -0
- data/spec/mongoid/relations/targets/enumerable_spec.rb +1710 -0
- data/spec/mongoid/relations/touchable_spec.rb +296 -0
- data/spec/mongoid/relations_spec.rb +188 -0
- data/spec/mongoid/reloadable_spec.rb +305 -0
- data/spec/mongoid/scopable_spec.rb +926 -0
- data/spec/mongoid/selectable_spec.rb +134 -0
- data/spec/mongoid/serializable_spec.rb +862 -0
- data/spec/mongoid/sessions/factory_spec.rb +312 -0
- data/spec/mongoid/sessions/mongo_uri_spec.rb +103 -0
- data/spec/mongoid/sessions/options_spec.rb +71 -0
- data/spec/mongoid/sessions_spec.rb +1078 -0
- data/spec/mongoid/shardable_spec.rb +61 -0
- data/spec/mongoid/state_spec.rb +102 -0
- data/spec/mongoid/threaded_spec.rb +258 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +51 -0
- data/spec/mongoid/timestamps/created_spec.rb +44 -0
- data/spec/mongoid/timestamps/updated/short_spec.rb +90 -0
- data/spec/mongoid/timestamps/updated_spec.rb +86 -0
- data/spec/mongoid/timestamps_spec.rb +112 -0
- data/spec/mongoid/traversable_spec.rb +244 -0
- data/spec/mongoid/unit_of_work_spec.rb +196 -0
- data/spec/mongoid/validatable/associated_spec.rb +183 -0
- data/spec/mongoid/validatable/format_spec.rb +83 -0
- data/spec/mongoid/validatable/length_spec.rb +119 -0
- data/spec/mongoid/validatable/numericality_spec.rb +30 -0
- data/spec/mongoid/validatable/presence_spec.rb +511 -0
- data/spec/mongoid/validatable/uniqueness_spec.rb +2305 -0
- data/spec/mongoid/validatable_spec.rb +309 -0
- data/spec/mongoid_spec.rb +74 -0
- data/spec/rack/mongoid/middleware/identity_map_spec.rb +72 -0
- data/spec/rails/mongoid_spec.rb +462 -0
- data/spec/spec_helper.rb +103 -0
- metadata +1159 -0
@@ -0,0 +1,59 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
|
4
|
+
# Provides behaviour for generating the selector for a specific document.
|
5
|
+
#
|
6
|
+
# @since 4.0.0
|
7
|
+
module Selectable
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
|
10
|
+
# Get the atomic selector for the document. This is a hash in the simplest
|
11
|
+
# case { "_id" => id }, but can become more complex for embedded documents
|
12
|
+
# and documents that use a shard key.
|
13
|
+
#
|
14
|
+
# @example Get the document's atomic selector.
|
15
|
+
# document.atomic_selector
|
16
|
+
#
|
17
|
+
# @return [ Hash ] The document's selector.
|
18
|
+
#
|
19
|
+
# @since 1.0.0
|
20
|
+
def atomic_selector
|
21
|
+
@atomic_selector ||=
|
22
|
+
(embedded? ? embedded_atomic_selector : root_atomic_selector)
|
23
|
+
end
|
24
|
+
|
25
|
+
private
|
26
|
+
|
27
|
+
# Get the atomic selector for an embedded document.
|
28
|
+
#
|
29
|
+
# @api private
|
30
|
+
#
|
31
|
+
# @example Get the embedded atomic selector.
|
32
|
+
# document.embedded_atomic_selector
|
33
|
+
#
|
34
|
+
# @return [ Hash ] The embedded document selector.
|
35
|
+
#
|
36
|
+
# @since 4.0.0
|
37
|
+
def embedded_atomic_selector
|
38
|
+
if persisted? && _id_changed?
|
39
|
+
_parent.atomic_selector
|
40
|
+
else
|
41
|
+
_parent.atomic_selector.merge("#{atomic_path}._id" => _id)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Get the atomic selector for a root document.
|
46
|
+
#
|
47
|
+
# @api private
|
48
|
+
#
|
49
|
+
# @example Get the root atomic selector.
|
50
|
+
# document.root_atomic_selector
|
51
|
+
#
|
52
|
+
# @return [ Hash ] The root document selector.
|
53
|
+
#
|
54
|
+
# @since 4.0.0
|
55
|
+
def root_atomic_selector
|
56
|
+
{ "_id" => _id }.merge!(shard_key_selector)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
|
4
|
+
# This module provides the extra behaviour for including relations in JSON
|
5
|
+
# and XML serialization.
|
6
|
+
#
|
7
|
+
# @since 4.0.0
|
8
|
+
module Serializable
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
# We need to redefine where the JSON configuration is getting defined,
|
12
|
+
# similar to +ActiveRecord+.
|
13
|
+
included do
|
14
|
+
undef_method :include_root_in_json
|
15
|
+
delegate :include_root_in_json, to: ::Mongoid
|
16
|
+
end
|
17
|
+
|
18
|
+
# Gets the document as a serializable hash, used by ActiveModel's JSON
|
19
|
+
# serializer.
|
20
|
+
#
|
21
|
+
# @example Get the serializable hash.
|
22
|
+
# document.serializable_hash
|
23
|
+
#
|
24
|
+
# @example Get the serializable hash with options.
|
25
|
+
# document.serializable_hash(:include => :addresses)
|
26
|
+
#
|
27
|
+
# @param [ Hash ] options The options to pass.
|
28
|
+
#
|
29
|
+
# @option options [ Symbol ] :include What relations to include.
|
30
|
+
# @option options [ Symbol ] :only Limit the fields to only these.
|
31
|
+
# @option options [ Symbol ] :except Dont include these fields.
|
32
|
+
# @option options [ Symbol ] :methods What methods to include.
|
33
|
+
#
|
34
|
+
# @return [ Hash ] The document, ready to be serialized.
|
35
|
+
#
|
36
|
+
# @since 2.0.0.rc.6
|
37
|
+
def serializable_hash(options = nil)
|
38
|
+
options ||= {}
|
39
|
+
attrs = {}
|
40
|
+
|
41
|
+
names = field_names(options)
|
42
|
+
|
43
|
+
method_names = Array.wrap(options[:methods]).map do |name|
|
44
|
+
name.to_s if respond_to?(name)
|
45
|
+
end.compact
|
46
|
+
|
47
|
+
(names + method_names).each do |name|
|
48
|
+
without_autobuild do
|
49
|
+
serialize_attribute(attrs, name, names, options)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
serialize_relations(attrs, options) if options[:include]
|
53
|
+
attrs
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
# Get the names of all fields that will be serialized.
|
59
|
+
#
|
60
|
+
# @api private
|
61
|
+
#
|
62
|
+
# @example Get all the field names.
|
63
|
+
# document.send(:field_names)
|
64
|
+
#
|
65
|
+
# @return [ Array<String> ] The names of the fields.
|
66
|
+
#
|
67
|
+
# @since 3.0.0
|
68
|
+
def field_names(options)
|
69
|
+
names = (as_document.keys + attribute_names).uniq.sort
|
70
|
+
|
71
|
+
only = Array.wrap(options[:only]).map(&:to_s)
|
72
|
+
except = Array.wrap(options[:except]).map(&:to_s)
|
73
|
+
except |= ['_type'] unless Mongoid.include_type_for_serialization
|
74
|
+
|
75
|
+
if !only.empty?
|
76
|
+
names &= only
|
77
|
+
elsif !except.empty?
|
78
|
+
names -= except
|
79
|
+
end
|
80
|
+
names
|
81
|
+
end
|
82
|
+
|
83
|
+
# Serialize a single attribute. Handles relations, fields, and dynamic
|
84
|
+
# attributes.
|
85
|
+
#
|
86
|
+
# @api private
|
87
|
+
#
|
88
|
+
# @example Serialize the attribute.
|
89
|
+
# document.serialize_attribute({}, "id" , [ "id" ])
|
90
|
+
#
|
91
|
+
# @param [ Hash ] attrs The attributes.
|
92
|
+
# @param [ String ] name The attribute name.
|
93
|
+
# @param [ Array<String> ] names The names of all attributes.
|
94
|
+
# @param [ Hash ] options The options.
|
95
|
+
#
|
96
|
+
# @return [ Object ] The attribute.
|
97
|
+
#
|
98
|
+
# @since 3.0.0
|
99
|
+
def serialize_attribute(attrs, name, names, options)
|
100
|
+
if relations.has_key?(name)
|
101
|
+
value = send(name)
|
102
|
+
attrs[name] = value ? value.serializable_hash(options) : nil
|
103
|
+
elsif names.include?(name) && !fields.has_key?(name)
|
104
|
+
attrs[name] = read_attribute(name)
|
105
|
+
else
|
106
|
+
attrs[name] = send(name)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
# For each of the provided include options, get the relation needed and
|
111
|
+
# provide it in the hash.
|
112
|
+
#
|
113
|
+
# @example Serialize the included relations.
|
114
|
+
# document.serialize_relations({}, :include => :addresses)
|
115
|
+
#
|
116
|
+
# @param [ Hash ] attributes The attributes to serialize.
|
117
|
+
# @param [ Hash ] options The serialization options.
|
118
|
+
#
|
119
|
+
# @option options [ Symbol ] :include What relations to include
|
120
|
+
# @option options [ Symbol ] :only Limit the fields to only these.
|
121
|
+
# @option options [ Symbol ] :except Dont include these fields.
|
122
|
+
#
|
123
|
+
# @since 2.0.0.rc.6
|
124
|
+
def serialize_relations(attributes = {}, options = {})
|
125
|
+
inclusions = options[:include]
|
126
|
+
relation_names(inclusions).each do |name|
|
127
|
+
metadata = relations[name.to_s]
|
128
|
+
if metadata && relation = send(metadata.name)
|
129
|
+
attributes[metadata.name.to_s] =
|
130
|
+
relation.serializable_hash(relation_options(inclusions, options, name))
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Since the inclusions can be a hash, symbol, or array of symbols, this is
|
136
|
+
# provided as a convenience to parse out the names.
|
137
|
+
#
|
138
|
+
# @example Get the relation names.
|
139
|
+
# document.relation_names(:include => [ :addresses ])
|
140
|
+
#
|
141
|
+
# @param [ Hash, Symbol, Array<Symbol ] inclusions The inclusions.
|
142
|
+
#
|
143
|
+
# @return [ Array<Symbol> ] The names of the included relations.
|
144
|
+
#
|
145
|
+
# @since 2.0.0.rc.6
|
146
|
+
def relation_names(inclusions)
|
147
|
+
inclusions.is_a?(Hash) ? inclusions.keys : Array.wrap(inclusions)
|
148
|
+
end
|
149
|
+
|
150
|
+
# Since the inclusions can be a hash, symbol, or array of symbols, this is
|
151
|
+
# provided as a convenience to parse out the options.
|
152
|
+
#
|
153
|
+
# @example Get the relation options.
|
154
|
+
# document.relation_names(:include => [ :addresses ])
|
155
|
+
#
|
156
|
+
# @param [ Hash, Symbol, Array<Symbol ] inclusions The inclusions.
|
157
|
+
# @param [ Symbol ] name The name of the relation.
|
158
|
+
#
|
159
|
+
# @return [ Hash ] The options for the relation.
|
160
|
+
#
|
161
|
+
# @since 2.0.0.rc.6
|
162
|
+
def relation_options(inclusions, options, name)
|
163
|
+
if inclusions.is_a?(Hash)
|
164
|
+
inclusions[name]
|
165
|
+
else
|
166
|
+
{ except: options[:except], only: options[:only] }
|
167
|
+
end
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
@@ -0,0 +1,330 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "mongoid/sessions/factory"
|
3
|
+
require "mongoid/sessions/validators"
|
4
|
+
require "mongoid/sessions/options"
|
5
|
+
|
6
|
+
module Mongoid
|
7
|
+
module Sessions
|
8
|
+
extend ActiveSupport::Concern
|
9
|
+
include Options
|
10
|
+
|
11
|
+
included do
|
12
|
+
cattr_accessor :default_collection_name, :storage_options
|
13
|
+
self.default_collection_name = self.name.collectionize.to_sym
|
14
|
+
end
|
15
|
+
|
16
|
+
class << self
|
17
|
+
|
18
|
+
# Clear all sessions from the current thread.
|
19
|
+
#
|
20
|
+
# @example Clear all sessions.
|
21
|
+
# Mongoid::Sessions.clear
|
22
|
+
#
|
23
|
+
# @return [ Array ] The empty sessions.
|
24
|
+
#
|
25
|
+
# @since 3.0.0
|
26
|
+
def clear
|
27
|
+
Threaded.sessions.clear
|
28
|
+
end
|
29
|
+
|
30
|
+
# Get the default session.
|
31
|
+
#
|
32
|
+
# @example Get the default session.
|
33
|
+
# Mongoid::Sessions.default
|
34
|
+
#
|
35
|
+
# @return [ Moped::Session ] The default session.
|
36
|
+
#
|
37
|
+
# @since 3.0.0
|
38
|
+
def default
|
39
|
+
Threaded.sessions[:default] ||= Sessions::Factory.default
|
40
|
+
end
|
41
|
+
|
42
|
+
# Disconnect all active sessions.
|
43
|
+
#
|
44
|
+
# @example Disconnect all active sessions.
|
45
|
+
# Mongoid::Sessions.disconnect
|
46
|
+
#
|
47
|
+
# @return [ true ] True.
|
48
|
+
#
|
49
|
+
# @since 3.1.0
|
50
|
+
def disconnect
|
51
|
+
Threaded.sessions.values.each do |session|
|
52
|
+
session.disconnect
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
# Get a session with the provided name.
|
57
|
+
#
|
58
|
+
# @example Get a session with the name.
|
59
|
+
# Mongoid::Sessions.with_name(:replica)
|
60
|
+
#
|
61
|
+
# @param [ Symbol ] name The name of the session.
|
62
|
+
#
|
63
|
+
# @return [ Moped::Session ] The named session.
|
64
|
+
#
|
65
|
+
# @since 3.0.0
|
66
|
+
def with_name(name)
|
67
|
+
Threaded.sessions[name.to_sym] ||= Sessions::Factory.create(name)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
# Get the collection for this model from the session. Will check for an
|
72
|
+
# overridden collection name from the store_in macro or the collection
|
73
|
+
# with a pluralized model name.
|
74
|
+
#
|
75
|
+
# @example Get the model's collection.
|
76
|
+
# Model.collection
|
77
|
+
#
|
78
|
+
# @return [ Moped::Collection ] The collection.
|
79
|
+
#
|
80
|
+
# @since 3.0.0
|
81
|
+
def collection
|
82
|
+
mongo_session[collection_name]
|
83
|
+
end
|
84
|
+
|
85
|
+
def mongo_session
|
86
|
+
persistence_options ? self.class.mongo_session.with(persistence_options) : self.class.mongo_session
|
87
|
+
end
|
88
|
+
|
89
|
+
def collection_name
|
90
|
+
persistence_options.try { |opts| opts[:collection] } || self.class.collection_name
|
91
|
+
end
|
92
|
+
|
93
|
+
module ClassMethods
|
94
|
+
|
95
|
+
# Get the collection for this model from the session. Will check for an
|
96
|
+
# overridden collection name from the store_in macro or the collection
|
97
|
+
# with a pluralized model name.
|
98
|
+
#
|
99
|
+
# @example Get the model's collection.
|
100
|
+
# Model.collection
|
101
|
+
#
|
102
|
+
# @return [ Moped::Collection ] The collection.
|
103
|
+
#
|
104
|
+
# @since 3.0.0
|
105
|
+
def collection
|
106
|
+
mongo_session[collection_name]
|
107
|
+
end
|
108
|
+
|
109
|
+
# Get the name of the collection this model persists to. This will be
|
110
|
+
# either the pluralized class name or the option defined in the store_in
|
111
|
+
# macro.
|
112
|
+
#
|
113
|
+
# @example Get the collection name.
|
114
|
+
# Model.collection_name
|
115
|
+
#
|
116
|
+
# @return [ Symbol ] The name of the collection.
|
117
|
+
#
|
118
|
+
# @since 3.0.0
|
119
|
+
def collection_name
|
120
|
+
__collection_name__
|
121
|
+
end
|
122
|
+
|
123
|
+
# Get the default database name for this model.
|
124
|
+
#
|
125
|
+
# @example Get the default database name.
|
126
|
+
# Model.database_name
|
127
|
+
#
|
128
|
+
# @return [ Symbol ] The name of the database.
|
129
|
+
#
|
130
|
+
# @since 3.0.0
|
131
|
+
def database_name
|
132
|
+
__database_name__
|
133
|
+
end
|
134
|
+
|
135
|
+
# Get the overridden database name. This either can be overridden by
|
136
|
+
# using +Model.with+ or by overriding at the global level via
|
137
|
+
# +Mongoid.override_database(:name)+.
|
138
|
+
#
|
139
|
+
# @example Get the overridden database name.
|
140
|
+
# Model.database_override
|
141
|
+
#
|
142
|
+
# @return [ String, Symbol ] The overridden database name.
|
143
|
+
#
|
144
|
+
# @since 3.0.0
|
145
|
+
def database_override
|
146
|
+
self.persistence_options.try { |opts| opts[:database] } || Threaded.database_override
|
147
|
+
end
|
148
|
+
|
149
|
+
# Get the session for this model. This is determined in the following order:
|
150
|
+
#
|
151
|
+
# 1. Any custom configuration provided by the 'store_in' macro.
|
152
|
+
# 2. The 'default' session as provided in the mongoid.yml
|
153
|
+
#
|
154
|
+
# @example Get the session.
|
155
|
+
# Model.mongo_session
|
156
|
+
#
|
157
|
+
# @return [ Moped::Session ] The default moped session.
|
158
|
+
#
|
159
|
+
# @since 3.0.0
|
160
|
+
def mongo_session
|
161
|
+
session = __session__
|
162
|
+
session.use(database_override || current_database_name(session))
|
163
|
+
self.persistence_options ? session.with(self.persistence_options) : session
|
164
|
+
end
|
165
|
+
|
166
|
+
# Get the overridden session name. This either can be overridden by
|
167
|
+
# using +Model.with+ or by overriding at the global level via
|
168
|
+
# +Mongoid.override_session(:name)+.
|
169
|
+
#
|
170
|
+
# @example Get the overridden session name.
|
171
|
+
# Model.session_override
|
172
|
+
#
|
173
|
+
# @return [ String, Symbol ] The overridden session name.
|
174
|
+
#
|
175
|
+
# @since 3.0.0
|
176
|
+
def session_override
|
177
|
+
self.persistence_options.try { |opts| opts[:session] } || Threaded.session_override
|
178
|
+
end
|
179
|
+
|
180
|
+
# Give this model specific custom default storage options.
|
181
|
+
#
|
182
|
+
# @example Store this model by default in "artists"
|
183
|
+
# class Band
|
184
|
+
# include Mongoid::Document
|
185
|
+
# store_in collection: "artists"
|
186
|
+
# end
|
187
|
+
#
|
188
|
+
# @example Store this model by default in the sharded db.
|
189
|
+
# class Band
|
190
|
+
# include Mongoid::Document
|
191
|
+
# store_in database: "echo_shard"
|
192
|
+
# end
|
193
|
+
#
|
194
|
+
# @example Store this model by default in a different session.
|
195
|
+
# class Band
|
196
|
+
# include Mongoid::Document
|
197
|
+
# store_in session: "secondary"
|
198
|
+
# end
|
199
|
+
#
|
200
|
+
# @example Store this model with a combination of options.
|
201
|
+
# class Band
|
202
|
+
# include Mongoid::Document
|
203
|
+
# store_in collection: "artists", database: "secondary"
|
204
|
+
# end
|
205
|
+
#
|
206
|
+
# @param [ Hash ] options The storage options.
|
207
|
+
#
|
208
|
+
# @option options [ String, Symbol ] :collection The collection name.
|
209
|
+
# @option options [ String, Symbol ] :database The database name.
|
210
|
+
# @option options [ String, Symbol ] :session The session name.
|
211
|
+
#
|
212
|
+
# @return [ Class ] The model class.
|
213
|
+
#
|
214
|
+
# @since 3.0.0
|
215
|
+
def store_in(options)
|
216
|
+
Validators::Storage.validate(self, options)
|
217
|
+
self.storage_options ||= {}
|
218
|
+
self.storage_options.merge!(options)
|
219
|
+
end
|
220
|
+
|
221
|
+
private
|
222
|
+
|
223
|
+
# Get the name of the collection this model persists to.
|
224
|
+
#
|
225
|
+
# @example Get the collection name.
|
226
|
+
# Model.__collection_name__
|
227
|
+
#
|
228
|
+
# @return [ Symbol ] The name of the collection.
|
229
|
+
#
|
230
|
+
# @since 3.0.0
|
231
|
+
def __collection_name__
|
232
|
+
if coll = self.persistence_options.try(:[], :collection)
|
233
|
+
return coll
|
234
|
+
end
|
235
|
+
|
236
|
+
if storage_options && name = storage_options[:collection]
|
237
|
+
__evaluate__(name)
|
238
|
+
else
|
239
|
+
default_collection_name
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
# Get the database name for the model.
|
244
|
+
#
|
245
|
+
# @example Get the database name.
|
246
|
+
# Model.__database_name__
|
247
|
+
#
|
248
|
+
# @return [ Symbol ] The name of the database.
|
249
|
+
#
|
250
|
+
# @since 3.0.0
|
251
|
+
def __database_name__
|
252
|
+
if storage_options && name = storage_options[:database]
|
253
|
+
__evaluate__(name)
|
254
|
+
else
|
255
|
+
Mongoid.sessions[__session_name__][:database]
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
# Get the session name for the model.
|
260
|
+
#
|
261
|
+
# @example Get the session name.
|
262
|
+
# Model.__session_name__
|
263
|
+
#
|
264
|
+
# @return [ Symbol ] The name of the session.
|
265
|
+
#
|
266
|
+
# @since 3.0.0
|
267
|
+
def __session_name__
|
268
|
+
if storage_options && name = storage_options[:session]
|
269
|
+
__evaluate__(name)
|
270
|
+
else
|
271
|
+
:default
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
# Get the session for this class.
|
276
|
+
#
|
277
|
+
# @example Get the session.
|
278
|
+
# Model.__session__
|
279
|
+
#
|
280
|
+
# @return [ Moped::Session ] The moped session.
|
281
|
+
#
|
282
|
+
# @since 3.0.0
|
283
|
+
def __session__
|
284
|
+
if !(name = session_override).nil?
|
285
|
+
Sessions.with_name(name)
|
286
|
+
else
|
287
|
+
Sessions.with_name(__session_name__)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
|
291
|
+
# Eval the provided value, either byt calling it if it responds to call
|
292
|
+
# or returning the value itself.
|
293
|
+
#
|
294
|
+
# @api private
|
295
|
+
#
|
296
|
+
# @example Evaluate the name.
|
297
|
+
# Model.__evaluate__(:name)
|
298
|
+
#
|
299
|
+
# @param [ String, Symbol, Proc ] name The name.
|
300
|
+
#
|
301
|
+
# @return [ Symbol ] The value as a symbol.
|
302
|
+
#
|
303
|
+
# @since 3.1.0
|
304
|
+
def __evaluate__(name)
|
305
|
+
name.respond_to?(:call) ? name.call.to_sym : name.to_sym
|
306
|
+
end
|
307
|
+
|
308
|
+
# Get the name of the current database to use. Will check for a session
|
309
|
+
# override with a database first, then database name.
|
310
|
+
#
|
311
|
+
# @api private
|
312
|
+
#
|
313
|
+
# @example Get the current database name.
|
314
|
+
# Model.current_database_name
|
315
|
+
#
|
316
|
+
# @param [ Moped::Session ] session The current session.
|
317
|
+
#
|
318
|
+
# @return [ Symbol ] The current database name.
|
319
|
+
#
|
320
|
+
# @since 3.1.0
|
321
|
+
def current_database_name(session)
|
322
|
+
if session_override && name = session.options[:database]
|
323
|
+
name
|
324
|
+
else
|
325
|
+
database_name
|
326
|
+
end
|
327
|
+
end
|
328
|
+
end
|
329
|
+
end
|
330
|
+
end
|