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,174 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Fields
|
4
|
+
class ForeignKey < Standard
|
5
|
+
|
6
|
+
# Adds the atomic changes for this type of resizable field.
|
7
|
+
#
|
8
|
+
# @example Add the atomic changes.
|
9
|
+
# field.add_atomic_changes(doc, "key", {}, [], [])
|
10
|
+
#
|
11
|
+
# @todo: Durran: Refactor, big time.
|
12
|
+
#
|
13
|
+
# @param [ Document ] document The document to add to.
|
14
|
+
# @param [ String ] name The name of the field.
|
15
|
+
# @param [ String ] key The atomic location of the field.
|
16
|
+
# @param [ Hash ] mods The current modifications.
|
17
|
+
# @param [ Array ] new The new elements to add.
|
18
|
+
# @param [ Array ] old The old elements getting removed.
|
19
|
+
#
|
20
|
+
# @since 2.4.0
|
21
|
+
def add_atomic_changes(document, name, key, mods, new_elements, old_elements)
|
22
|
+
old = (old_elements || [])
|
23
|
+
new = (new_elements || [])
|
24
|
+
if new.length > old.length
|
25
|
+
if new.first(old.length) == old
|
26
|
+
document.atomic_array_add_to_sets[key] = new.drop(old.length)
|
27
|
+
else
|
28
|
+
mods[key] = document.attributes[name]
|
29
|
+
end
|
30
|
+
elsif new.length < old.length
|
31
|
+
pulls = old - new
|
32
|
+
if new == old - pulls
|
33
|
+
document.atomic_array_pulls[key] = pulls
|
34
|
+
else
|
35
|
+
mods[key] = document.attributes[name]
|
36
|
+
end
|
37
|
+
elsif new != old
|
38
|
+
mods[key] = document.attributes[name]
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Is this field a foreign key?
|
43
|
+
#
|
44
|
+
# @example Is the field a foreign key?
|
45
|
+
# field.foreign_key?
|
46
|
+
#
|
47
|
+
# @return [ true, false ] If the field is a foreign key.
|
48
|
+
#
|
49
|
+
# @since 2.4.0
|
50
|
+
def foreign_key?
|
51
|
+
true
|
52
|
+
end
|
53
|
+
|
54
|
+
# Evolve the object into an id compatible object.
|
55
|
+
#
|
56
|
+
# @example Evolve the object.
|
57
|
+
# field.evolve(object)
|
58
|
+
#
|
59
|
+
# @param [ Object ] object The object to evolve.
|
60
|
+
#
|
61
|
+
# @return [ Object ] The evolved object.
|
62
|
+
#
|
63
|
+
# @since 3.0.0
|
64
|
+
def evolve(object)
|
65
|
+
if object_id_field? || object.is_a?(Document)
|
66
|
+
object.__evolve_object_id__
|
67
|
+
else
|
68
|
+
related_id_field.evolve(object)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
# Does this field do lazy default evaluation?
|
73
|
+
#
|
74
|
+
# @example Is the field lazy?
|
75
|
+
# field.lazy?
|
76
|
+
#
|
77
|
+
# @return [ true, false ] If the field is lazy.
|
78
|
+
#
|
79
|
+
# @since 3.1.0
|
80
|
+
def lazy?
|
81
|
+
type.resizable?
|
82
|
+
end
|
83
|
+
|
84
|
+
# Mongoize the object into the Mongo friendly value.
|
85
|
+
#
|
86
|
+
# @example Mongoize the object.
|
87
|
+
# field.mongoize(object)
|
88
|
+
#
|
89
|
+
# @param [ Object ] object The object to Mongoize.
|
90
|
+
#
|
91
|
+
# @return [ Object ] The mongoized object.
|
92
|
+
#
|
93
|
+
# @since 3.0.0
|
94
|
+
def mongoize(object)
|
95
|
+
if type.resizable? || object_id_field?
|
96
|
+
type.__mongoize_fk__(constraint, object)
|
97
|
+
else
|
98
|
+
related_id_field.mongoize(object)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
# Is the field a Moped::BSON::ObjectId?
|
103
|
+
#
|
104
|
+
# @example Is the field a Moped::BSON::ObjectId?
|
105
|
+
# field.object_id_field?
|
106
|
+
#
|
107
|
+
# @return [ true, false ] If the field is a Moped::BSON::ObjectId.
|
108
|
+
#
|
109
|
+
# @since 2.2.0
|
110
|
+
def object_id_field?
|
111
|
+
@object_id_field ||=
|
112
|
+
metadata.polymorphic? ? true : metadata.klass.using_object_ids?
|
113
|
+
end
|
114
|
+
|
115
|
+
# Returns true if an array, false if not.
|
116
|
+
#
|
117
|
+
# @example Is the field resizable?
|
118
|
+
# field.resizable?
|
119
|
+
#
|
120
|
+
# @return [ true, false ] If the field is resizable.
|
121
|
+
#
|
122
|
+
# @since 3.0.2
|
123
|
+
def resizable?
|
124
|
+
type.resizable?
|
125
|
+
end
|
126
|
+
|
127
|
+
private
|
128
|
+
|
129
|
+
# Evaluate the default proc. In some cases we need to instance exec,
|
130
|
+
# in others we don't.
|
131
|
+
#
|
132
|
+
# @example Eval the default proc.
|
133
|
+
# field.evaluate_default_proc(band)
|
134
|
+
#
|
135
|
+
# @param [ Document ] doc The document.
|
136
|
+
#
|
137
|
+
# @return [ Object ] The called proc.
|
138
|
+
#
|
139
|
+
# @since 3.0.0
|
140
|
+
def evaluate_default_proc(doc)
|
141
|
+
serialize_default(default_val[])
|
142
|
+
end
|
143
|
+
|
144
|
+
# Get the id field of the relation.
|
145
|
+
#
|
146
|
+
# @api private
|
147
|
+
#
|
148
|
+
# @example Get the related id field.
|
149
|
+
# field.related_id_field
|
150
|
+
#
|
151
|
+
# @return [ Fields::Standard ] The field.
|
152
|
+
#
|
153
|
+
# @since 3.0.0
|
154
|
+
def related_id_field
|
155
|
+
@related_id_field ||= metadata.klass.fields["_id"]
|
156
|
+
end
|
157
|
+
|
158
|
+
# This is used when default values need to be serialized. Most of the
|
159
|
+
# time just return the object.
|
160
|
+
#
|
161
|
+
# @api private
|
162
|
+
#
|
163
|
+
# @example Serialize the default value.
|
164
|
+
# field.serialize_default(obj)
|
165
|
+
#
|
166
|
+
# @param [ Object ] object The default.
|
167
|
+
#
|
168
|
+
# @return [ Object ] The serialized default.
|
169
|
+
#
|
170
|
+
# @since 3.0.0
|
171
|
+
def serialize_default(object); object; end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Fields
|
4
|
+
class Localized < Standard
|
5
|
+
|
6
|
+
# Demongoize the object based on the current locale. Will look in the
|
7
|
+
# hash for the current locale.
|
8
|
+
#
|
9
|
+
# @example Get the demongoized value.
|
10
|
+
# field.demongoize({ "en" => "testing" })
|
11
|
+
#
|
12
|
+
# @param [ Hash ] object The hash of translations.
|
13
|
+
#
|
14
|
+
# @return [ Object ] The value for the current locale.
|
15
|
+
#
|
16
|
+
# @since 2.3.0
|
17
|
+
def demongoize(object)
|
18
|
+
if object
|
19
|
+
type.demongoize(lookup(object))
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# Is the field localized or not?
|
24
|
+
#
|
25
|
+
# @example Is the field localized?
|
26
|
+
# field.localized?
|
27
|
+
#
|
28
|
+
# @return [ true, false ] If the field is localized.
|
29
|
+
#
|
30
|
+
# @since 2.3.0
|
31
|
+
def localized?
|
32
|
+
true
|
33
|
+
end
|
34
|
+
|
35
|
+
# Convert the provided string into a hash for the locale.
|
36
|
+
#
|
37
|
+
# @example Serialize the value.
|
38
|
+
# field.mongoize("testing")
|
39
|
+
#
|
40
|
+
# @param [ String ] object The string to convert.
|
41
|
+
#
|
42
|
+
# @return [ Hash ] The locale with string translation.
|
43
|
+
#
|
44
|
+
# @since 2.3.0
|
45
|
+
def mongoize(object)
|
46
|
+
{ ::I18n.locale.to_s => type.mongoize(object) }
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
# Lookup the value from the provided object.
|
52
|
+
#
|
53
|
+
# @api private
|
54
|
+
#
|
55
|
+
# @example Lookup the value.
|
56
|
+
# field.lookup({ "en" => "test" })
|
57
|
+
#
|
58
|
+
# @param [ Hash ] object The localized object.
|
59
|
+
#
|
60
|
+
# @return [ Object ] The object for the locale.
|
61
|
+
#
|
62
|
+
# @since 3.0.0
|
63
|
+
def lookup(object)
|
64
|
+
locale = ::I18n.locale
|
65
|
+
if ::I18n.respond_to?(:fallbacks)
|
66
|
+
object[::I18n.fallbacks[locale].map(&:to_s).find{ |loc| object[loc] }]
|
67
|
+
else
|
68
|
+
object[locale.to_s]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,273 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Fields
|
4
|
+
class Standard
|
5
|
+
|
6
|
+
# Defines the behaviour for defined fields in the document.
|
7
|
+
# Set readers for the instance variables.
|
8
|
+
attr_accessor :default_val, :label, :name, :options
|
9
|
+
|
10
|
+
delegate :demongoize, :evolve, :mongoize, to: :type
|
11
|
+
|
12
|
+
# Adds the atomic changes for this type of resizable field.
|
13
|
+
#
|
14
|
+
# @example Add the atomic changes.
|
15
|
+
# field.add_atomic_changes(doc, "key", {}, [], [])
|
16
|
+
#
|
17
|
+
# @param [ Document ] document The document to add to.
|
18
|
+
# @param [ String ] name The name of the field.
|
19
|
+
# @param [ String ] key The atomic location of the field.
|
20
|
+
# @param [ Hash ] mods The current modifications.
|
21
|
+
# @param [ Array ] new The new elements to add.
|
22
|
+
# @param [ Array ] old The old elements getting removed.
|
23
|
+
#
|
24
|
+
# @since 2.4.0
|
25
|
+
def add_atomic_changes(document, name, key, mods, new, old)
|
26
|
+
mods[key] = new
|
27
|
+
end
|
28
|
+
|
29
|
+
# Get the constraint from the metadata once.
|
30
|
+
#
|
31
|
+
# @example Get the constraint.
|
32
|
+
# field.constraint
|
33
|
+
#
|
34
|
+
# @return [ Constraint ] The relation's contraint.
|
35
|
+
#
|
36
|
+
# @since 2.1.0
|
37
|
+
def constraint
|
38
|
+
@constraint ||= metadata.constraint
|
39
|
+
end
|
40
|
+
|
41
|
+
# Evaluate the default value and return it. Will handle the
|
42
|
+
# serialization, proc calls, and duplication if necessary.
|
43
|
+
#
|
44
|
+
# @example Evaluate the default value.
|
45
|
+
# field.eval_default(document)
|
46
|
+
#
|
47
|
+
# @param [ Document ] doc The document the field belongs to.
|
48
|
+
#
|
49
|
+
# @return [ Object ] The serialized default value.
|
50
|
+
#
|
51
|
+
# @since 2.1.8
|
52
|
+
def eval_default(doc)
|
53
|
+
if fields = Threaded.selection(doc.criteria_instance_id)
|
54
|
+
evaluated_default(doc) if included?(fields)
|
55
|
+
else
|
56
|
+
evaluated_default(doc)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Is this field a foreign key?
|
61
|
+
#
|
62
|
+
# @example Is the field a foreign key?
|
63
|
+
# field.foreign_key?
|
64
|
+
#
|
65
|
+
# @return [ true, false ] If the field is a foreign key.
|
66
|
+
#
|
67
|
+
# @since 2.4.0
|
68
|
+
def foreign_key?
|
69
|
+
false
|
70
|
+
end
|
71
|
+
|
72
|
+
# Create the new field with a name and optional additional options.
|
73
|
+
#
|
74
|
+
# @example Create the new field.
|
75
|
+
# Field.new(:name, :type => String)
|
76
|
+
#
|
77
|
+
# @param [ Hash ] options The field options.
|
78
|
+
#
|
79
|
+
# @option options [ Class ] :type The class of the field.
|
80
|
+
# @option options [ Object ] :default The default value for the field.
|
81
|
+
# @option options [ String ] :label The field's label.
|
82
|
+
#
|
83
|
+
# @since 3.0.0
|
84
|
+
def initialize(name, options = {})
|
85
|
+
@name = name
|
86
|
+
@options = options
|
87
|
+
@label = options[:label]
|
88
|
+
@default_val = options[:default]
|
89
|
+
|
90
|
+
# @todo: Durran, change API in 4.0 to take the class as a parameter.
|
91
|
+
# This is here temporarily to address #2529 without changing the
|
92
|
+
# constructor signature.
|
93
|
+
if default_val.respond_to?(:call)
|
94
|
+
define_default_method(options[:klass])
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Does this field do lazy default evaluation?
|
99
|
+
#
|
100
|
+
# @example Is the field lazy?
|
101
|
+
# field.lazy?
|
102
|
+
#
|
103
|
+
# @return [ true, false ] If the field is lazy.
|
104
|
+
#
|
105
|
+
# @since 3.1.0
|
106
|
+
def lazy?
|
107
|
+
false
|
108
|
+
end
|
109
|
+
|
110
|
+
# Is the field localized or not?
|
111
|
+
#
|
112
|
+
# @example Is the field localized?
|
113
|
+
# field.localized?
|
114
|
+
#
|
115
|
+
# @return [ true, false ] If the field is localized.
|
116
|
+
#
|
117
|
+
# @since 2.3.0
|
118
|
+
def localized?
|
119
|
+
false
|
120
|
+
end
|
121
|
+
|
122
|
+
# Get the metadata for the field if its a foreign key.
|
123
|
+
#
|
124
|
+
# @example Get the metadata.
|
125
|
+
# field.metadata
|
126
|
+
#
|
127
|
+
# @return [ Metadata ] The relation metadata.
|
128
|
+
#
|
129
|
+
# @since 2.2.0
|
130
|
+
def metadata
|
131
|
+
@metadata ||= options[:metadata]
|
132
|
+
end
|
133
|
+
|
134
|
+
# Is the field a Moped::BSON::ObjectId?
|
135
|
+
#
|
136
|
+
# @example Is the field a Moped::BSON::ObjectId?
|
137
|
+
# field.object_id_field?
|
138
|
+
#
|
139
|
+
# @return [ true, false ] If the field is a Moped::BSON::ObjectId.
|
140
|
+
#
|
141
|
+
# @since 2.2.0
|
142
|
+
def object_id_field?
|
143
|
+
@object_id_field ||= (type == Moped::BSON::ObjectId)
|
144
|
+
end
|
145
|
+
|
146
|
+
# Does the field pre-process its default value?
|
147
|
+
#
|
148
|
+
# @example Does the field pre-process the default?
|
149
|
+
# field.pre_processed?
|
150
|
+
#
|
151
|
+
# @return [ true, false ] If the field's default is pre-processed.
|
152
|
+
#
|
153
|
+
# @since 3.0.0
|
154
|
+
def pre_processed?
|
155
|
+
@pre_processed ||=
|
156
|
+
(options[:pre_processed] || (default_val && !default_val.is_a?(::Proc)))
|
157
|
+
end
|
158
|
+
|
159
|
+
# Get the type of this field - inferred from the class name.
|
160
|
+
#
|
161
|
+
# @example Get the type.
|
162
|
+
# field.type
|
163
|
+
#
|
164
|
+
# @return [ Class ] The name of the class.
|
165
|
+
#
|
166
|
+
# @since 2.1.0
|
167
|
+
def type
|
168
|
+
@type ||= options[:type] || Object
|
169
|
+
end
|
170
|
+
|
171
|
+
private
|
172
|
+
|
173
|
+
# Get the name of the default method for this field.
|
174
|
+
#
|
175
|
+
# @api private
|
176
|
+
#
|
177
|
+
# @example Get the default name.
|
178
|
+
# field.default_name
|
179
|
+
#
|
180
|
+
# @return [ String ] The method name.
|
181
|
+
#
|
182
|
+
# @since 3.0.0
|
183
|
+
def default_name
|
184
|
+
@default_name ||= "__#{name}_default__"
|
185
|
+
end
|
186
|
+
|
187
|
+
# Define the method for getting the default on the document.
|
188
|
+
#
|
189
|
+
# @api private
|
190
|
+
#
|
191
|
+
# @example Define the method.
|
192
|
+
# field.define_default_method(doc)
|
193
|
+
#
|
194
|
+
# @note Ruby's instance_exec was just too slow.
|
195
|
+
#
|
196
|
+
# @param [ Class, Module ] object The class or module the field is
|
197
|
+
# defined on.
|
198
|
+
#
|
199
|
+
# @since 3.0.0
|
200
|
+
def define_default_method(object)
|
201
|
+
object.__send__(:define_method, default_name, default_val)
|
202
|
+
end
|
203
|
+
|
204
|
+
# Is the field included in the fields that were returned from the
|
205
|
+
# database? We can apply the default if:
|
206
|
+
# 1. The field is included in an only limitation (field: 1)
|
207
|
+
# 2. The field is not excluded in a without limitation (field: 0)
|
208
|
+
#
|
209
|
+
# @example Is the field included?
|
210
|
+
# field.included?(fields)
|
211
|
+
#
|
212
|
+
# @param [ Hash ] fields The field limitations.
|
213
|
+
#
|
214
|
+
# @return [ true, false ] If the field was included.
|
215
|
+
#
|
216
|
+
# @since 2.4.4
|
217
|
+
def included?(fields)
|
218
|
+
(fields.values.first == 1 && fields[name.to_s] == 1) ||
|
219
|
+
(fields.values.first == 0 && !fields.has_key?(name.to_s))
|
220
|
+
end
|
221
|
+
|
222
|
+
# Get the evaluated default.
|
223
|
+
#
|
224
|
+
# @example Get the evaluated default.
|
225
|
+
# field.evaluated_default.
|
226
|
+
#
|
227
|
+
# @param [ Document ] doc The doc being applied to.
|
228
|
+
#
|
229
|
+
# @return [ Object ] The default value.
|
230
|
+
#
|
231
|
+
# @since 2.4.4
|
232
|
+
def evaluated_default(doc)
|
233
|
+
if default_val.respond_to?(:call)
|
234
|
+
evaluate_default_proc(doc)
|
235
|
+
else
|
236
|
+
serialize_default(default_val.__deep_copy__)
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
# Evaluate the default proc. In some cases we need to instance exec,
|
241
|
+
# in others we don't.
|
242
|
+
#
|
243
|
+
# @example Eval the default proc.
|
244
|
+
# field.evaluate_default_proc(band)
|
245
|
+
#
|
246
|
+
# @param [ Document ] doc The document.
|
247
|
+
#
|
248
|
+
# @return [ Object ] The called proc.
|
249
|
+
#
|
250
|
+
# @since 3.0.0
|
251
|
+
def evaluate_default_proc(doc)
|
252
|
+
serialize_default(doc.__send__(default_name))
|
253
|
+
end
|
254
|
+
|
255
|
+
# This is used when default values need to be serialized. Most of the
|
256
|
+
# time just return the object.
|
257
|
+
#
|
258
|
+
# @api private
|
259
|
+
#
|
260
|
+
# @example Serialize the default value.
|
261
|
+
# field.serialize_default(obj)
|
262
|
+
#
|
263
|
+
# @param [ Object ] object The default.
|
264
|
+
#
|
265
|
+
# @return [ Object ] The serialized default.
|
266
|
+
#
|
267
|
+
# @since 3.0.0
|
268
|
+
def serialize_default(object)
|
269
|
+
mongoize(object)
|
270
|
+
end
|
271
|
+
end
|
272
|
+
end
|
273
|
+
end
|