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,238 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Contextual
|
4
|
+
class GeoNear
|
5
|
+
include Enumerable
|
6
|
+
include Command
|
7
|
+
|
8
|
+
delegate :[], to: :results
|
9
|
+
delegate :==, :empty?, to: :entries
|
10
|
+
|
11
|
+
# Get the average distance for all documents from the point in the
|
12
|
+
# command.
|
13
|
+
#
|
14
|
+
# @example Get the average distance.
|
15
|
+
# geo_near.average_distance
|
16
|
+
#
|
17
|
+
# @return [ Float, nil ] The average distance.
|
18
|
+
#
|
19
|
+
# @since 3.1.0
|
20
|
+
def average_distance
|
21
|
+
average = stats["avgDistance"]
|
22
|
+
average.nan? ? nil : average
|
23
|
+
end
|
24
|
+
|
25
|
+
# Iterates over each of the documents in the $geoNear, excluding the
|
26
|
+
# extra information that was passed back from the database.
|
27
|
+
#
|
28
|
+
# @example Iterate over the results.
|
29
|
+
# geo_near.each do |doc|
|
30
|
+
# p doc
|
31
|
+
# end
|
32
|
+
#
|
33
|
+
# @return [ Enumerator ] The enumerator.
|
34
|
+
#
|
35
|
+
# @since 3.1.0
|
36
|
+
def each
|
37
|
+
if block_given?
|
38
|
+
documents.each do |doc|
|
39
|
+
yield doc
|
40
|
+
end
|
41
|
+
else
|
42
|
+
to_enum
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# Provide a distance multiplier to be used for each returned distance.
|
47
|
+
#
|
48
|
+
# @example Provide the distance multiplier.
|
49
|
+
# geo_near.distance_multiplier(13113.1)
|
50
|
+
#
|
51
|
+
# @param [ Integer, Float ] value The distance multiplier.
|
52
|
+
#
|
53
|
+
# @return [ GeoNear ] The GeoNear wrapper.
|
54
|
+
#
|
55
|
+
# @since 3.1.0
|
56
|
+
def distance_multiplier(value)
|
57
|
+
command[:distanceMultiplier] = value
|
58
|
+
self
|
59
|
+
end
|
60
|
+
|
61
|
+
# Initialize the new map/reduce directive.
|
62
|
+
#
|
63
|
+
# @example Initialize the new map/reduce.
|
64
|
+
# MapReduce.new(criteria, map, reduce)
|
65
|
+
#
|
66
|
+
# @param [ Criteria ] criteria The Mongoid criteria.
|
67
|
+
# @param [ String ] map The map js function.
|
68
|
+
# @param [ String ] reduce The reduce js function.
|
69
|
+
#
|
70
|
+
# @since 3.0.0
|
71
|
+
def initialize(collection, criteria, near)
|
72
|
+
@collection, @criteria = collection, criteria
|
73
|
+
command[:geoNear] = collection.name.to_s
|
74
|
+
command[:near] = near
|
75
|
+
apply_criteria_options
|
76
|
+
end
|
77
|
+
|
78
|
+
# Get a pretty string representation of the command.
|
79
|
+
#
|
80
|
+
# @example Inspect the geoNear.
|
81
|
+
# geo_near.inspect
|
82
|
+
#
|
83
|
+
# @return [ String ] The inspection string.
|
84
|
+
#
|
85
|
+
# @since 3.1.0
|
86
|
+
def inspect
|
87
|
+
%Q{#<Mongoid::Contextual::GeoNear
|
88
|
+
selector: #{criteria.selector.inspect}
|
89
|
+
class: #{criteria.klass}
|
90
|
+
near: #{command[:near]}
|
91
|
+
multiplier: #{command[:distanceMultiplier] || "N/A"}
|
92
|
+
max: #{command[:maxDistance] || "N/A"}
|
93
|
+
unique: #{command[:unique].nil? ? true : command[:unique]}
|
94
|
+
spherical: #{command[:spherical] || false}>
|
95
|
+
}
|
96
|
+
end
|
97
|
+
|
98
|
+
# Specify the maximum distance to find documents for, or get the value of
|
99
|
+
# the document with the furthest distance.
|
100
|
+
#
|
101
|
+
# @example Set the max distance.
|
102
|
+
# geo_near.max_distance(0.5)
|
103
|
+
#
|
104
|
+
# @example Get the max distance.
|
105
|
+
# geo_near.max_distance
|
106
|
+
#
|
107
|
+
# @param [ Integer, Float ] value The maximum distance.
|
108
|
+
#
|
109
|
+
# @return [ GeoNear, Float ] The GeoNear command or the value.
|
110
|
+
#
|
111
|
+
# @since 3.1.0
|
112
|
+
def max_distance(value = nil)
|
113
|
+
if value
|
114
|
+
command[:maxDistance] = value
|
115
|
+
self
|
116
|
+
else
|
117
|
+
stats["maxDistance"]
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# Tell the command to calculate based on spherical distances.
|
122
|
+
#
|
123
|
+
# @example Add the spherical flag.
|
124
|
+
# geo_near.spherical
|
125
|
+
#
|
126
|
+
# @return [ GeoNear ] The command.
|
127
|
+
#
|
128
|
+
# @since 3.1.0
|
129
|
+
def spherical
|
130
|
+
command[:spherical] = true
|
131
|
+
self
|
132
|
+
end
|
133
|
+
|
134
|
+
# Tell the command whether or not the retured results should be unique.
|
135
|
+
#
|
136
|
+
# @example Set the unique flag.
|
137
|
+
# geo_near.unique(false)
|
138
|
+
#
|
139
|
+
# @param [ true, false ] value Whether to return unique documents.
|
140
|
+
#
|
141
|
+
# @return [ GeoNear ] The command.
|
142
|
+
#
|
143
|
+
# @since 3.1.0
|
144
|
+
def unique(value = true)
|
145
|
+
command[:unique] = value
|
146
|
+
self
|
147
|
+
end
|
148
|
+
|
149
|
+
# Execute the $geoNear, returning the raw output.
|
150
|
+
#
|
151
|
+
# @example Run the $geoNear
|
152
|
+
# geo_near.execute
|
153
|
+
#
|
154
|
+
# @return [ Hash ] The raw output
|
155
|
+
#
|
156
|
+
# @since 3.1.0
|
157
|
+
def execute
|
158
|
+
results
|
159
|
+
end
|
160
|
+
|
161
|
+
# Get the stats for the command run.
|
162
|
+
#
|
163
|
+
# @example Get the stats.
|
164
|
+
# geo_near.stats
|
165
|
+
#
|
166
|
+
# @return [ Hash ] The stats from the command run.
|
167
|
+
#
|
168
|
+
# @since 3.1.0
|
169
|
+
def stats
|
170
|
+
results["stats"]
|
171
|
+
end
|
172
|
+
|
173
|
+
# Get the execution time of the command.
|
174
|
+
#
|
175
|
+
# @example Get the execution time.
|
176
|
+
# geo_near.time
|
177
|
+
#
|
178
|
+
# @return [ Float ] The execution time.
|
179
|
+
#
|
180
|
+
# @since 3.1.0
|
181
|
+
def time
|
182
|
+
stats["time"]
|
183
|
+
end
|
184
|
+
|
185
|
+
private
|
186
|
+
|
187
|
+
# Apply criteria specific options - query, limit.
|
188
|
+
#
|
189
|
+
# @api private
|
190
|
+
#
|
191
|
+
# @example Apply the criteria options
|
192
|
+
# geo_near.apply_criteria_options
|
193
|
+
#
|
194
|
+
# @return [ nil ] Nothing.
|
195
|
+
#
|
196
|
+
# @since 3.0.0
|
197
|
+
def apply_criteria_options
|
198
|
+
command[:query] = criteria.selector
|
199
|
+
if limit = criteria.options[:limit]
|
200
|
+
command[:num] = limit
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
204
|
+
# Get the result documents from the $geoNear.
|
205
|
+
#
|
206
|
+
# @api private
|
207
|
+
#
|
208
|
+
# @example Get the documents.
|
209
|
+
# geo_near.documents
|
210
|
+
#
|
211
|
+
# @return [ Array, Cursor ] The documents.
|
212
|
+
#
|
213
|
+
# @since 3.0.0
|
214
|
+
def documents
|
215
|
+
results["results"].map do |attributes|
|
216
|
+
doc = Factory.from_db(criteria.klass, attributes["obj"], criteria.object_id)
|
217
|
+
doc.attributes["geo_near_distance"] = attributes["dis"]
|
218
|
+
doc
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
# Execute the $geoNear command and get the results.
|
223
|
+
#
|
224
|
+
# @api private
|
225
|
+
#
|
226
|
+
# @example Get the results.
|
227
|
+
# geo_near.results
|
228
|
+
#
|
229
|
+
# @return [ Hash ] The results of the command.
|
230
|
+
#
|
231
|
+
# @since 3.0.0
|
232
|
+
def results
|
233
|
+
@results ||= session.command(command)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
@@ -0,0 +1,324 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Mongoid
|
3
|
+
module Contextual
|
4
|
+
class MapReduce
|
5
|
+
include Enumerable
|
6
|
+
include Command
|
7
|
+
|
8
|
+
delegate :[], to: :results
|
9
|
+
delegate :==, :empty?, to: :entries
|
10
|
+
|
11
|
+
# Get all the counts returned by the map/reduce.
|
12
|
+
#
|
13
|
+
# @example Get the counts.
|
14
|
+
# map_reduce.counts
|
15
|
+
#
|
16
|
+
# @return [ Hash ] The counts.
|
17
|
+
#
|
18
|
+
# @since 3.0.0
|
19
|
+
def counts
|
20
|
+
results["counts"]
|
21
|
+
end
|
22
|
+
|
23
|
+
# Iterates over each of the documents in the map/reduce, excluding the
|
24
|
+
# extra information that was passed back from the database.
|
25
|
+
#
|
26
|
+
# @example Iterate over the results.
|
27
|
+
# map_reduce.each do |doc|
|
28
|
+
# p doc
|
29
|
+
# end
|
30
|
+
#
|
31
|
+
# @return [ Enumerator ] The enumerator.
|
32
|
+
#
|
33
|
+
# @since 3.0.0
|
34
|
+
def each
|
35
|
+
if block_given?
|
36
|
+
documents.each do |doc|
|
37
|
+
yield doc
|
38
|
+
end
|
39
|
+
else
|
40
|
+
to_enum
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Get the number of documents emitted by the map/reduce.
|
45
|
+
#
|
46
|
+
# @example Get the emitted document count.
|
47
|
+
# map_reduce.emitted
|
48
|
+
#
|
49
|
+
# @return [ Integer ] The number of emitted documents.
|
50
|
+
#
|
51
|
+
# @since 3.0.0
|
52
|
+
def emitted
|
53
|
+
counts["emit"]
|
54
|
+
end
|
55
|
+
|
56
|
+
# Provide a finalize js function for the map/reduce.
|
57
|
+
#
|
58
|
+
# @example Provide a finalize function.
|
59
|
+
# map_reduce.finalize(func)
|
60
|
+
#
|
61
|
+
# @param [ String ] function The finalize function.
|
62
|
+
#
|
63
|
+
# @return [ MapReduce ] The map reduce.
|
64
|
+
#
|
65
|
+
# @since 3.0.0
|
66
|
+
def finalize(function)
|
67
|
+
command[:finalize] = function
|
68
|
+
self
|
69
|
+
end
|
70
|
+
|
71
|
+
# Initialize the new map/reduce directive.
|
72
|
+
#
|
73
|
+
# @example Initialize the new map/reduce.
|
74
|
+
# MapReduce.new(criteria, map, reduce)
|
75
|
+
#
|
76
|
+
# @param [ Criteria ] criteria The Mongoid criteria.
|
77
|
+
# @param [ String ] map The map js function.
|
78
|
+
# @param [ String ] reduce The reduce js function.
|
79
|
+
#
|
80
|
+
# @since 3.0.0
|
81
|
+
def initialize(collection, criteria, map, reduce)
|
82
|
+
@collection, @criteria = collection, criteria
|
83
|
+
command[:mapreduce] = collection.name.to_s
|
84
|
+
command[:map], command[:reduce] = map, reduce
|
85
|
+
apply_criteria_options
|
86
|
+
end
|
87
|
+
|
88
|
+
# Get the number of documents that were input into the map/reduce.
|
89
|
+
#
|
90
|
+
# @example Get the count of input documents.
|
91
|
+
# map_reduce.input
|
92
|
+
#
|
93
|
+
# @return [ Integer ] The number of input documents.
|
94
|
+
#
|
95
|
+
# @since 3.0.0
|
96
|
+
def input
|
97
|
+
counts["input"]
|
98
|
+
end
|
99
|
+
|
100
|
+
# Sets the map/reduce to use jsMode.
|
101
|
+
#
|
102
|
+
# @example Set the map/reduce to jsMode.
|
103
|
+
# map_reduce.js_mode
|
104
|
+
#
|
105
|
+
# @return [ MapReduce ] The map/reduce.
|
106
|
+
#
|
107
|
+
# @since 3.0.0
|
108
|
+
def js_mode
|
109
|
+
command[:jsMode] = true
|
110
|
+
self
|
111
|
+
end
|
112
|
+
|
113
|
+
# Specifies where the map/reduce output is to be stored.
|
114
|
+
#
|
115
|
+
# @example Store output in memory.
|
116
|
+
# map_reduce.out(inline: 1)
|
117
|
+
#
|
118
|
+
# @example Store output in a collection, replacing existing documents.
|
119
|
+
# map_reduce.out(replace: "collection_name")
|
120
|
+
#
|
121
|
+
# @example Store output in a collection, merging existing documents.
|
122
|
+
# map_reduce.out(merge: "collection_name")
|
123
|
+
#
|
124
|
+
# @example Store output in a collection, reducing existing documents.
|
125
|
+
# map_reduce.out(reduce: "collection_name")
|
126
|
+
#
|
127
|
+
# @param [ Hash ] location The place to store the results.
|
128
|
+
#
|
129
|
+
# @return [ MapReduce ] The map/reduce object.
|
130
|
+
#
|
131
|
+
# @since 3.0.0
|
132
|
+
def out(location)
|
133
|
+
normalized = location.dup
|
134
|
+
normalized.update_values do |value|
|
135
|
+
value.is_a?(::Symbol) ? value.to_s : value
|
136
|
+
end
|
137
|
+
command[:out] = normalized
|
138
|
+
self
|
139
|
+
end
|
140
|
+
|
141
|
+
# Get the number of documents output by the map/reduce.
|
142
|
+
#
|
143
|
+
# @example Get the output document count.
|
144
|
+
# map_reduce.output
|
145
|
+
#
|
146
|
+
# @return [ Integer ] The number of output documents.
|
147
|
+
#
|
148
|
+
# @since 3.0.0
|
149
|
+
def output
|
150
|
+
counts["output"]
|
151
|
+
end
|
152
|
+
|
153
|
+
# Get the raw output from the map/reduce operation.
|
154
|
+
#
|
155
|
+
# @example Get the raw output.
|
156
|
+
# map_reduce.raw
|
157
|
+
#
|
158
|
+
# @return [ Hash ] The raw output.
|
159
|
+
#
|
160
|
+
# @since 3.0.0
|
161
|
+
def raw
|
162
|
+
results
|
163
|
+
end
|
164
|
+
|
165
|
+
# Execute the map/reduce, returning the raw output.
|
166
|
+
# Useful when you don't care about map/reduce's ouptut.
|
167
|
+
#
|
168
|
+
# @example Run the map reduce
|
169
|
+
# map_reduce.execute
|
170
|
+
#
|
171
|
+
# @return [ Hash ] The raw output
|
172
|
+
#
|
173
|
+
# @since 3.1.0
|
174
|
+
alias :execute :raw
|
175
|
+
|
176
|
+
# Get the number of documents reduced by the map/reduce.
|
177
|
+
#
|
178
|
+
# @example Get the reduced document count.
|
179
|
+
# map_reduce.reduced
|
180
|
+
#
|
181
|
+
# @return [ Integer ] The number of reduced documents.
|
182
|
+
#
|
183
|
+
# @since 3.0.0
|
184
|
+
def reduced
|
185
|
+
counts["reduce"]
|
186
|
+
end
|
187
|
+
|
188
|
+
# Adds a javascript object to the global scope of the map/reduce.
|
189
|
+
#
|
190
|
+
# @example Add an object to the global scope.
|
191
|
+
# map_reduce.scope(name: value)
|
192
|
+
#
|
193
|
+
# @param [ Hash ] object A hash of key/values for the global scope.
|
194
|
+
#
|
195
|
+
# @return [ MapReduce ]
|
196
|
+
#
|
197
|
+
# @since 3.0.0
|
198
|
+
def scope(object)
|
199
|
+
command[:scope] = object
|
200
|
+
self
|
201
|
+
end
|
202
|
+
|
203
|
+
# Get the execution time of the map/reduce.
|
204
|
+
#
|
205
|
+
# @example Get the execution time.
|
206
|
+
# map_reduce.time
|
207
|
+
#
|
208
|
+
# @return [ Float ] The time in milliseconds.
|
209
|
+
#
|
210
|
+
# @since 3.0.0
|
211
|
+
def time
|
212
|
+
results["timeMillis"]
|
213
|
+
end
|
214
|
+
|
215
|
+
# Get a pretty string representation of the map/reduce, including the
|
216
|
+
# criteria, map, reduce, finalize, and out option.
|
217
|
+
#
|
218
|
+
# @example Inspect the map_reduce.
|
219
|
+
# map_reduce.inspect
|
220
|
+
#
|
221
|
+
# @return [ String ] The inspection string.
|
222
|
+
#
|
223
|
+
# @since 3.1.0
|
224
|
+
def inspect
|
225
|
+
%Q{#<Mongoid::Contextual::MapReduce
|
226
|
+
selector: #{criteria.selector.inspect}
|
227
|
+
class: #{criteria.klass}
|
228
|
+
map: #{command[:map]}
|
229
|
+
reduce: #{command[:reduce]}
|
230
|
+
finalize: #{command[:finalize]}
|
231
|
+
out: #{command[:out].inspect}>
|
232
|
+
}
|
233
|
+
end
|
234
|
+
|
235
|
+
private
|
236
|
+
|
237
|
+
# Apply criteria specific options - query, sort, limit.
|
238
|
+
#
|
239
|
+
# @api private
|
240
|
+
#
|
241
|
+
# @example Apply the criteria options
|
242
|
+
# map_reduce.apply_criteria_options
|
243
|
+
#
|
244
|
+
# @return [ nil ] Nothing.
|
245
|
+
#
|
246
|
+
# @since 3.0.0
|
247
|
+
def apply_criteria_options
|
248
|
+
command[:query] = criteria.selector
|
249
|
+
if sort = criteria.options[:sort]
|
250
|
+
command[:sort] = sort
|
251
|
+
end
|
252
|
+
if limit = criteria.options[:limit]
|
253
|
+
command[:limit] = limit
|
254
|
+
end
|
255
|
+
end
|
256
|
+
|
257
|
+
# Get the result documents from the map/reduce. If the output was inline
|
258
|
+
# then we grab them from the results key. If the output was a temp
|
259
|
+
# collection then we need to execute a find on that collection.
|
260
|
+
#
|
261
|
+
# @api private
|
262
|
+
#
|
263
|
+
# @example Get the documents.
|
264
|
+
# map_reduce.documents
|
265
|
+
#
|
266
|
+
# @return [ Array, Cursor ] The documents.
|
267
|
+
#
|
268
|
+
# @since 3.0.0
|
269
|
+
def documents
|
270
|
+
return results["results"] if results.has_key?("results")
|
271
|
+
session[output_collection].find
|
272
|
+
end
|
273
|
+
|
274
|
+
# Get the collection that the map/reduce results were stored in.
|
275
|
+
#
|
276
|
+
# @api private
|
277
|
+
#
|
278
|
+
# @example Get the output collection.
|
279
|
+
# map_reduce.output_collection
|
280
|
+
#
|
281
|
+
# @return [ Symbol, String ] The output collection.
|
282
|
+
#
|
283
|
+
# @since 3.0.0
|
284
|
+
def output_collection
|
285
|
+
command[:out].values.first
|
286
|
+
end
|
287
|
+
|
288
|
+
# Execute the map/reduce command and get the results.
|
289
|
+
#
|
290
|
+
# @api private
|
291
|
+
#
|
292
|
+
# @example Get the results.
|
293
|
+
# map_reduce.results
|
294
|
+
#
|
295
|
+
# @return [ Hash ] The results of the command.
|
296
|
+
#
|
297
|
+
# @since 3.0.0
|
298
|
+
def results
|
299
|
+
raise Errors::NoMapReduceOutput.new(command) unless command[:out]
|
300
|
+
@results ||= __session__.command(command)
|
301
|
+
end
|
302
|
+
|
303
|
+
# Get the session with the proper consistency.
|
304
|
+
#
|
305
|
+
# @api private
|
306
|
+
#
|
307
|
+
# @note We can use eventual if the output is set to inline.
|
308
|
+
#
|
309
|
+
# @example Get the session.
|
310
|
+
# map_reduce.__session__
|
311
|
+
#
|
312
|
+
# @return [ Session ] The session with consistency set.
|
313
|
+
#
|
314
|
+
# @since 3.0.15
|
315
|
+
def __session__
|
316
|
+
if command[:out][:inline] != 1
|
317
|
+
session.with(consistency: :strong)
|
318
|
+
else
|
319
|
+
session
|
320
|
+
end
|
321
|
+
end
|
322
|
+
end
|
323
|
+
end
|
324
|
+
end
|