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,97 @@
|
|
1
|
+
namespace :db do
|
2
|
+
|
3
|
+
unless Rake::Task.task_defined?("db:drop")
|
4
|
+
desc "Drops all the collections for the database for the current Rails.env"
|
5
|
+
task :drop => "mongoid:drop"
|
6
|
+
end
|
7
|
+
|
8
|
+
unless Rake::Task.task_defined?("db:purge")
|
9
|
+
desc "Drop all collections except the system collections"
|
10
|
+
task :purge => "mongoid:purge"
|
11
|
+
end
|
12
|
+
|
13
|
+
unless Rake::Task.task_defined?("db:seed")
|
14
|
+
# if another ORM has defined db:seed, don"t run it twice.
|
15
|
+
desc "Load the seed data from db/seeds.rb"
|
16
|
+
task :seed => :environment do
|
17
|
+
seed_file = File.join(Rails.root, "db", "seeds.rb")
|
18
|
+
load(seed_file) if File.exist?(seed_file)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
unless Rake::Task.task_defined?("db:setup")
|
23
|
+
desc "Create the database, and initialize with the seed data"
|
24
|
+
task :setup => [ "db:create", "db:mongoid:create_indexes", "db:seed" ]
|
25
|
+
end
|
26
|
+
|
27
|
+
unless Rake::Task.task_defined?("db:reset")
|
28
|
+
desc "Delete data and loads the seeds"
|
29
|
+
task :reset => [ "db:drop", "db:seed" ]
|
30
|
+
end
|
31
|
+
|
32
|
+
unless Rake::Task.task_defined?("db:create")
|
33
|
+
task :create => :environment do
|
34
|
+
# noop
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
unless Rake::Task.task_defined?("db:migrate")
|
39
|
+
task :migrate => :environment do
|
40
|
+
# noop
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
unless Rake::Task.task_defined?("db:schema:load")
|
45
|
+
namespace :schema do
|
46
|
+
task :load do
|
47
|
+
# noop
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
unless Rake::Task.task_defined?("db:test:prepare")
|
53
|
+
namespace :test do
|
54
|
+
task :prepare do
|
55
|
+
# noop
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
unless Rake::Task.task_defined?("db:create_indexes")
|
61
|
+
task :create_indexes => "mongoid:create_indexes"
|
62
|
+
end
|
63
|
+
|
64
|
+
unless Rake::Task.task_defined?("db:remove_indexes")
|
65
|
+
task :remove_indexes => "mongoid:remove_indexes"
|
66
|
+
end
|
67
|
+
|
68
|
+
namespace :mongoid do
|
69
|
+
desc "Create the indexes defined on your mongoid models"
|
70
|
+
task :create_indexes => :environment do
|
71
|
+
::Rails.application.eager_load!
|
72
|
+
::Rails::Mongoid.create_indexes
|
73
|
+
end
|
74
|
+
|
75
|
+
desc "Remove indexes that exist in the database but aren't specified on the models"
|
76
|
+
task :remove_undefined_indexes => :environment do
|
77
|
+
::Rails.application.eager_load!
|
78
|
+
::Rails::Mongoid.remove_undefined_indexes
|
79
|
+
end
|
80
|
+
|
81
|
+
desc "Remove the indexes defined on your mongoid models without questions!"
|
82
|
+
task :remove_indexes => :environment do
|
83
|
+
::Rails.application.eager_load!
|
84
|
+
::Rails::Mongoid.remove_indexes
|
85
|
+
end
|
86
|
+
|
87
|
+
desc "Drops the database for the current Rails.env"
|
88
|
+
task :drop => :environment do
|
89
|
+
::Mongoid::Sessions.default.drop
|
90
|
+
end
|
91
|
+
|
92
|
+
desc "Drop all collections except the system collections"
|
93
|
+
task :purge => :environment do
|
94
|
+
::Mongoid.purge!
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Mongoid
|
2
|
+
module Document
|
3
|
+
# Used in conjunction with fields_for to build a form element for the
|
4
|
+
# destruction of this association. Always returns false because Mongoid
|
5
|
+
# only supports immediate deletion of associations.
|
6
|
+
#
|
7
|
+
# See ActionView::Helpers::FormHelper::fields_for for more info.
|
8
|
+
def _destroy
|
9
|
+
false
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "mongoid/relations/accessors"
|
3
|
+
require "mongoid/relations/auto_save"
|
4
|
+
require "mongoid/relations/cascading"
|
5
|
+
require "mongoid/relations/constraint"
|
6
|
+
require "mongoid/relations/conversions"
|
7
|
+
require "mongoid/relations/counter_cache"
|
8
|
+
require "mongoid/relations/cyclic"
|
9
|
+
require "mongoid/relations/proxy"
|
10
|
+
require "mongoid/relations/bindings"
|
11
|
+
require "mongoid/relations/builders"
|
12
|
+
require "mongoid/relations/many"
|
13
|
+
require "mongoid/relations/one"
|
14
|
+
require "mongoid/relations/options"
|
15
|
+
require "mongoid/relations/polymorphic"
|
16
|
+
require "mongoid/relations/targets/enumerable"
|
17
|
+
require "mongoid/relations/embedded/in"
|
18
|
+
require "mongoid/relations/embedded/many"
|
19
|
+
require "mongoid/relations/embedded/one"
|
20
|
+
require "mongoid/relations/referenced/in"
|
21
|
+
require "mongoid/relations/referenced/many"
|
22
|
+
require "mongoid/relations/referenced/many_to_many"
|
23
|
+
require "mongoid/relations/referenced/one"
|
24
|
+
require "mongoid/relations/reflections"
|
25
|
+
require "mongoid/relations/synchronization"
|
26
|
+
require "mongoid/relations/touchable"
|
27
|
+
require "mongoid/relations/metadata"
|
28
|
+
require "mongoid/relations/macros"
|
29
|
+
|
30
|
+
module Mongoid
|
31
|
+
|
32
|
+
# All classes and modules under the relations namespace handle the
|
33
|
+
# functionality that has to do with embedded and referenced (relational)
|
34
|
+
# associations.
|
35
|
+
module Relations
|
36
|
+
extend ActiveSupport::Concern
|
37
|
+
include Accessors
|
38
|
+
include AutoSave
|
39
|
+
include Cascading
|
40
|
+
include Cyclic
|
41
|
+
include Builders
|
42
|
+
include Macros
|
43
|
+
include Polymorphic
|
44
|
+
include Reflections
|
45
|
+
include Synchronization
|
46
|
+
include Touchable
|
47
|
+
include CounterCache
|
48
|
+
|
49
|
+
attr_accessor :metadata
|
50
|
+
|
51
|
+
# Determine if the document itself is embedded in another document via the
|
52
|
+
# proper channels. (If it has a parent document.)
|
53
|
+
#
|
54
|
+
# @example Is the document embedded?
|
55
|
+
# address.embedded?
|
56
|
+
#
|
57
|
+
# @return [ true, false ] True if the document has a parent document.
|
58
|
+
#
|
59
|
+
# @since 2.0.0.rc.1
|
60
|
+
def embedded?
|
61
|
+
@embedded ||= (cyclic ? _parent.present? : self.class.embedded?)
|
62
|
+
end
|
63
|
+
|
64
|
+
# Determine if the document is part of an embeds_many relation.
|
65
|
+
#
|
66
|
+
# @example Is the document in an embeds many?
|
67
|
+
# address.embedded_many?
|
68
|
+
#
|
69
|
+
# @return [ true, false ] True if in an embeds many.
|
70
|
+
#
|
71
|
+
# @since 2.0.0.rc.1
|
72
|
+
def embedded_many?
|
73
|
+
metadata && metadata.macro == :embeds_many
|
74
|
+
end
|
75
|
+
|
76
|
+
# Determine if the document is part of an embeds_one relation.
|
77
|
+
#
|
78
|
+
# @example Is the document in an embeds one?
|
79
|
+
# address.embedded_one?
|
80
|
+
#
|
81
|
+
# @return [ true, false ] True if in an embeds one.
|
82
|
+
#
|
83
|
+
# @since 2.0.0.rc.1
|
84
|
+
def embedded_one?
|
85
|
+
metadata && metadata.macro == :embeds_one
|
86
|
+
end
|
87
|
+
|
88
|
+
# Get the metadata name for this document. If no metadata was defined
|
89
|
+
# will raise an error.
|
90
|
+
#
|
91
|
+
# @example Get the metadata name.
|
92
|
+
# document.metadata_name
|
93
|
+
#
|
94
|
+
# @raise [ Errors::NoMetadata ] If no metadata is present.
|
95
|
+
#
|
96
|
+
# @return [ Symbol ] The metadata name.
|
97
|
+
#
|
98
|
+
# @since 3.0.0
|
99
|
+
def metadata_name
|
100
|
+
raise Errors::NoMetadata.new(self.class.name) unless metadata
|
101
|
+
metadata.name
|
102
|
+
end
|
103
|
+
|
104
|
+
# Determine if the document is part of an references_many relation.
|
105
|
+
#
|
106
|
+
# @example Is the document in a references many?
|
107
|
+
# post.referenced_many?
|
108
|
+
#
|
109
|
+
# @return [ true, false ] True if in a references many.
|
110
|
+
#
|
111
|
+
# @since 2.0.0.rc.1
|
112
|
+
def referenced_many?
|
113
|
+
metadata && metadata.macro == :has_many
|
114
|
+
end
|
115
|
+
|
116
|
+
# Determine if the document is part of an references_one relation.
|
117
|
+
#
|
118
|
+
# @example Is the document in a references one?
|
119
|
+
# address.referenced_one?
|
120
|
+
#
|
121
|
+
# @return [ true, false ] True if in a references one.
|
122
|
+
#
|
123
|
+
# @since 2.0.0.rc.1
|
124
|
+
def referenced_one?
|
125
|
+
metadata && metadata.macro == :has_one
|
126
|
+
end
|
127
|
+
|
128
|
+
# Convenience method for iterating through the loaded relations and
|
129
|
+
# reloading them.
|
130
|
+
#
|
131
|
+
# @example Reload the relations.
|
132
|
+
# document.reload_relations
|
133
|
+
#
|
134
|
+
# @return [ Hash ] The relations metadata.
|
135
|
+
#
|
136
|
+
# @since 2.1.6
|
137
|
+
def reload_relations
|
138
|
+
relations.each_pair do |name, meta|
|
139
|
+
if instance_variable_defined?("@_#{name}")
|
140
|
+
if _parent.nil? || instance_variable_get("@_#{name}") != _parent
|
141
|
+
remove_instance_variable("@_#{name}")
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
module ClassMethods
|
148
|
+
|
149
|
+
# This is convenience for librarys still on the old API.
|
150
|
+
#
|
151
|
+
# @example Get the associations.
|
152
|
+
# Person.associations
|
153
|
+
#
|
154
|
+
# @return [ Hash ] The relations.
|
155
|
+
#
|
156
|
+
# @since 2.3.1
|
157
|
+
def associations
|
158
|
+
self.relations
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
end
|
@@ -0,0 +1,299 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Relations
|
4
|
+
|
5
|
+
# This module contains all the behaviour related to accessing relations
|
6
|
+
# through the getters and setters, and how to delegate to builders to
|
7
|
+
# create new ones.
|
8
|
+
module Accessors
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
# Builds the related document and creates the relation unless the
|
12
|
+
# document is nil, then sets the relation on this document.
|
13
|
+
#
|
14
|
+
# @example Build the relation.
|
15
|
+
# person.__build__(:addresses, { :id => 1 }, metadata)
|
16
|
+
#
|
17
|
+
# @param [ String, Symbol ] name The name of the relation.
|
18
|
+
# @param [ Hash, Moped::BSON::ObjectId ] object The id or attributes to use.
|
19
|
+
# @param [ Metadata ] metadata The relation's metadata.
|
20
|
+
# @param [ true, false ] building If we are in a build operation.
|
21
|
+
#
|
22
|
+
# @return [ Proxy ] The relation.
|
23
|
+
#
|
24
|
+
# @since 2.0.0.rc.1
|
25
|
+
def __build__(name, object, metadata)
|
26
|
+
relation = create_relation(object, metadata)
|
27
|
+
set_relation(name, relation)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Create a relation from an object and metadata.
|
31
|
+
#
|
32
|
+
# @example Create the relation.
|
33
|
+
# person.create_relation(document, metadata)
|
34
|
+
#
|
35
|
+
# @param [ Document, Array<Document ] object The relation target.
|
36
|
+
# @param [ Metadata ] metadata The relation metadata.
|
37
|
+
#
|
38
|
+
# @return [ Proxy ] The relation.
|
39
|
+
#
|
40
|
+
# @since 2.0.0.rc.1
|
41
|
+
def create_relation(object, metadata)
|
42
|
+
type = @attributes[metadata.inverse_type]
|
43
|
+
target = metadata.builder(self, object).build(type)
|
44
|
+
target ? metadata.relation.new(self, target, metadata) : nil
|
45
|
+
end
|
46
|
+
|
47
|
+
# Determines if the relation exists or not.
|
48
|
+
#
|
49
|
+
# @example Does the relation exist?
|
50
|
+
# person.relation_exists?(:people)
|
51
|
+
#
|
52
|
+
# @param [ String ] name The name of the relation to check.
|
53
|
+
#
|
54
|
+
# @return [ true, false ] True if set and not nil, false if not.
|
55
|
+
#
|
56
|
+
# @since 2.0.0.rc.1
|
57
|
+
def relation_exists?(name)
|
58
|
+
ivar(name)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Resets the criteria inside the relation proxy. Used by many to many
|
62
|
+
# relations to keep the underlying ids array in sync.
|
63
|
+
#
|
64
|
+
# @example Reset the relation criteria.
|
65
|
+
# person.reset_relation_criteria(:preferences)
|
66
|
+
#
|
67
|
+
# @param [ Symbol ] name The name of the relation.
|
68
|
+
#
|
69
|
+
# @since 3.0.14
|
70
|
+
def reset_relation_criteria(name)
|
71
|
+
if instance_variable_defined?("@_#{name}")
|
72
|
+
send(name).reset_unloaded
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
# Set the supplied relation to an instance variable on the class with the
|
77
|
+
# provided name. Used as a helper just for code cleanliness.
|
78
|
+
#
|
79
|
+
# @example Set the proxy on the document.
|
80
|
+
# person.set(:addresses, addresses)
|
81
|
+
#
|
82
|
+
# @param [ String, Symbol ] name The name of the relation.
|
83
|
+
# @param [ Proxy ] relation The relation to set.
|
84
|
+
#
|
85
|
+
# @return [ Proxy ] The relation.
|
86
|
+
#
|
87
|
+
# @since 2.0.0.rc.1
|
88
|
+
def set_relation(name, relation)
|
89
|
+
instance_variable_set("@_#{name}", relation)
|
90
|
+
end
|
91
|
+
|
92
|
+
private
|
93
|
+
|
94
|
+
# Get the relation. Extracted out from the getter method to avoid
|
95
|
+
# infinite recursion when overriding the getter.
|
96
|
+
#
|
97
|
+
# @api private
|
98
|
+
#
|
99
|
+
# @example Get the relation.
|
100
|
+
# document.get_relation(:name, metadata)
|
101
|
+
#
|
102
|
+
# @param [ Symbol ] name The name of the relation.
|
103
|
+
# @param [ Metadata ] metadata The relation metadata.
|
104
|
+
# @param [ true, false ] reload If the relation is to be reloaded.
|
105
|
+
#
|
106
|
+
# @return [ Proxy ] The relation.
|
107
|
+
#
|
108
|
+
# @since 3.0.16
|
109
|
+
def get_relation(name, metadata, reload = false)
|
110
|
+
variable = "@_#{name}"
|
111
|
+
value = if instance_variable_defined?(variable) && !reload
|
112
|
+
instance_variable_get(variable)
|
113
|
+
else
|
114
|
+
_building do
|
115
|
+
_loading do
|
116
|
+
__build__(name, attributes[metadata.key], metadata)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
if value.nil? && metadata.autobuilding? && !without_autobuild?
|
121
|
+
send("build_#{name}")
|
122
|
+
else
|
123
|
+
value
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
# @todo: Durran: Refactor before release, but this fixes the issue with
|
128
|
+
# the extra queries.
|
129
|
+
def get_relation_for_set(name, metadata, object)
|
130
|
+
variable = "@_#{name}"
|
131
|
+
value = if instance_variable_defined?(variable)
|
132
|
+
instance_variable_get(variable)
|
133
|
+
else
|
134
|
+
_building do
|
135
|
+
_loading do
|
136
|
+
if needs_no_database_query?(object, metadata)
|
137
|
+
__build__(name, object, metadata)
|
138
|
+
else
|
139
|
+
__build__(name, attributes[metadata.key], metadata)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
def needs_no_database_query?(object, metadata)
|
147
|
+
object.is_a?(Document) && !object.embedded? &&
|
148
|
+
object.id == attributes[metadata.key]
|
149
|
+
end
|
150
|
+
|
151
|
+
# Is the current code executing without autobuild functionality?
|
152
|
+
#
|
153
|
+
# @example Is autobuild disabled?
|
154
|
+
# document.without_autobuild?
|
155
|
+
#
|
156
|
+
# @return [ true, false ] If autobuild is disabled.
|
157
|
+
#
|
158
|
+
# @since 3.0.0
|
159
|
+
def without_autobuild?
|
160
|
+
Threaded.executing?(:without_autobuild)
|
161
|
+
end
|
162
|
+
|
163
|
+
# Yield to the block with autobuild functionality turned off.
|
164
|
+
#
|
165
|
+
# @example Execute without autobuild.
|
166
|
+
# document.without_autobuild do
|
167
|
+
# document.name
|
168
|
+
# end
|
169
|
+
#
|
170
|
+
# @return [ Object ] The result of the yield.
|
171
|
+
#
|
172
|
+
# @since 3.0.0
|
173
|
+
def without_autobuild
|
174
|
+
Threaded.begin_execution("without_autobuild")
|
175
|
+
yield
|
176
|
+
ensure
|
177
|
+
Threaded.exit_execution("without_autobuild")
|
178
|
+
end
|
179
|
+
|
180
|
+
module ClassMethods
|
181
|
+
|
182
|
+
# Adds the existence check for relations.
|
183
|
+
#
|
184
|
+
# @example Add the existence check.
|
185
|
+
# Person.existence_check(:name, meta)
|
186
|
+
#
|
187
|
+
# @example Check if a relation exists.
|
188
|
+
# person = Person.new
|
189
|
+
# person.has_game?
|
190
|
+
# person.game?
|
191
|
+
#
|
192
|
+
# @param [ String, Symbol ] name The name of the relation.
|
193
|
+
# @param [ Metadata ] The metadata.
|
194
|
+
#
|
195
|
+
# @return [ Class ] The model being set up.
|
196
|
+
#
|
197
|
+
# @since 3.0.0
|
198
|
+
def existence_check(name, metadata)
|
199
|
+
module_eval <<-END
|
200
|
+
def #{name}?
|
201
|
+
without_autobuild { !__send__(:#{name}).blank? }
|
202
|
+
end
|
203
|
+
alias :has_#{name}? :#{name}?
|
204
|
+
END
|
205
|
+
self
|
206
|
+
end
|
207
|
+
|
208
|
+
# Defines the getter for the relation. Nothing too special here: just
|
209
|
+
# return the instance variable for the relation if it exists or build
|
210
|
+
# the thing.
|
211
|
+
#
|
212
|
+
# @example Set up the getter for the relation.
|
213
|
+
# Person.getter("addresses", metadata)
|
214
|
+
#
|
215
|
+
# @param [ String, Symbol ] name The name of the relation.
|
216
|
+
# @param [ Metadata ] metadata The metadata for the relation.
|
217
|
+
#
|
218
|
+
# @return [ Class ] The class being set up.
|
219
|
+
#
|
220
|
+
# @since 2.0.0.rc.1
|
221
|
+
def getter(name, metadata)
|
222
|
+
re_define_method(name) do |reload = false|
|
223
|
+
get_relation(name, metadata, reload)
|
224
|
+
end
|
225
|
+
self
|
226
|
+
end
|
227
|
+
|
228
|
+
# Defines the getter for the ids of documents in the relation. Should
|
229
|
+
# be specify only for referenced many relations.
|
230
|
+
#
|
231
|
+
# @example Set up the ids getter for the relation.
|
232
|
+
# Person.ids_getter("addresses", metadata)
|
233
|
+
#
|
234
|
+
# @param [ String, Symbol ] name The name of the relation.
|
235
|
+
# @param [ Metadata] metadata The metadata for the relation.
|
236
|
+
#
|
237
|
+
# @return [ Class ] The class being set up.
|
238
|
+
def ids_getter(name, metadata)
|
239
|
+
ids_method = "#{name.to_s.singularize}_ids"
|
240
|
+
re_define_method(ids_method) do
|
241
|
+
send(name).only(:id).map(&:id)
|
242
|
+
end
|
243
|
+
self
|
244
|
+
end
|
245
|
+
|
246
|
+
|
247
|
+
# Defines the setter for the relation. This does a few things based on
|
248
|
+
# some conditions. If there is an existing association, a target
|
249
|
+
# substitution will take place, otherwise a new relation will be
|
250
|
+
# created with the supplied target.
|
251
|
+
#
|
252
|
+
# @example Set up the setter for the relation.
|
253
|
+
# Person.setter("addresses", metadata)
|
254
|
+
#
|
255
|
+
# @param [ String, Symbol ] name The name of the relation.
|
256
|
+
# @param [ Metadata ] metadata The metadata for the relation.
|
257
|
+
#
|
258
|
+
# @return [ Class ] The class being set up.
|
259
|
+
#
|
260
|
+
# @since 2.0.0.rc.1
|
261
|
+
def setter(name, metadata)
|
262
|
+
re_define_method("#{name}=") do |object|
|
263
|
+
without_autobuild do
|
264
|
+
if metadata.many?
|
265
|
+
set_relation(name, get_relation(name, metadata).substitute(object.substitutable))
|
266
|
+
elsif value = get_relation_for_set(name, metadata, object)
|
267
|
+
set_relation(name, value.substitute(object.substitutable))
|
268
|
+
else
|
269
|
+
__build__(name, object.substitutable, metadata)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
self
|
274
|
+
end
|
275
|
+
|
276
|
+
# Defines the setter method that allows you to set documents
|
277
|
+
# in this relation by their ids. The defined setter, finds
|
278
|
+
# documents with given ids and invokes regular relation setter
|
279
|
+
# with found documents. Ids setters should be defined only for
|
280
|
+
# referenced many relations.
|
281
|
+
#
|
282
|
+
# @example Set up the id_setter for the relation.
|
283
|
+
# Person.ids_setter("addesses", metadata)
|
284
|
+
#
|
285
|
+
# @param [ String, Symbol ] name The name of the relation.
|
286
|
+
# @param [ Metadata ] metadata The metadata for the relation.
|
287
|
+
#
|
288
|
+
# @return [ Class ] The class being set up.
|
289
|
+
def ids_setter(name, metadata)
|
290
|
+
ids_method = "#{name.to_s.singularize}_ids="
|
291
|
+
re_define_method(ids_method) do |ids|
|
292
|
+
send(metadata.setter, metadata.klass.find(ids.reject(&:blank?)))
|
293
|
+
end
|
294
|
+
self
|
295
|
+
end
|
296
|
+
end
|
297
|
+
end
|
298
|
+
end
|
299
|
+
end
|