mongoid 6.4.4 → 7.1.7
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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +13 -13
- data/LICENSE +1 -0
- data/README.md +25 -18
- data/Rakefile +28 -5
- data/lib/config/locales/en.yml +76 -50
- data/lib/mongoid/association/accessors.rb +417 -0
- data/lib/mongoid/{relations/binding.rb → association/bindable.rb} +39 -57
- data/lib/mongoid/association/builders.rb +93 -0
- data/lib/mongoid/association/constrainable.rb +46 -0
- data/lib/mongoid/association/depending.rb +140 -0
- data/lib/mongoid/{relations/eager.rb → association/eager_loadable.rb} +13 -11
- data/lib/mongoid/{relations → association}/embedded/batchable.rb +23 -21
- data/lib/mongoid/association/embedded/cyclic.rb +111 -0
- data/lib/mongoid/association/embedded/embedded_in/binding.rb +59 -0
- data/lib/mongoid/association/embedded/embedded_in/buildable.rb +41 -0
- data/lib/mongoid/association/embedded/embedded_in/proxy.rb +124 -0
- data/lib/mongoid/association/embedded/embedded_in.rb +157 -0
- data/lib/mongoid/{relations/bindings/embedded/many.rb → association/embedded/embeds_many/binding.rb} +14 -9
- data/lib/mongoid/{relations/builders/embedded/many.rb → association/embedded/embeds_many/buildable.rb} +19 -7
- data/lib/mongoid/association/embedded/embeds_many/proxy.rb +555 -0
- data/lib/mongoid/association/embedded/embeds_many.rb +214 -0
- data/lib/mongoid/{relations/bindings/embedded/one.rb → association/embedded/embeds_one/binding.rb} +15 -10
- data/lib/mongoid/association/embedded/embeds_one/buildable.rb +42 -0
- data/lib/mongoid/association/embedded/embeds_one/proxy.rb +133 -0
- data/lib/mongoid/association/embedded/embeds_one.rb +177 -0
- data/lib/mongoid/association/embedded.rb +7 -0
- data/lib/mongoid/association/macros.rb +206 -0
- data/lib/mongoid/{relations → association}/many.rb +32 -59
- data/lib/mongoid/{relations → association}/marshalable.rb +9 -5
- data/lib/mongoid/association/nested/many.rb +202 -0
- data/lib/mongoid/association/nested/nested_buildable.rb +75 -0
- data/lib/mongoid/association/nested/one.rb +129 -0
- data/lib/mongoid/association/nested.rb +18 -0
- data/lib/mongoid/{relations → association}/one.rb +9 -7
- data/lib/mongoid/association/options.rb +155 -0
- data/lib/mongoid/{relations → association}/proxy.rb +59 -69
- data/lib/mongoid/association/referenced/auto_save.rb +82 -0
- data/lib/mongoid/association/referenced/belongs_to/binding.rb +89 -0
- data/lib/mongoid/association/referenced/belongs_to/buildable.rb +49 -0
- data/lib/mongoid/association/referenced/belongs_to/eager.rb +74 -0
- data/lib/mongoid/association/referenced/belongs_to/proxy.rb +138 -0
- data/lib/mongoid/association/referenced/belongs_to.rb +251 -0
- data/lib/mongoid/association/referenced/counter_cache.rb +165 -0
- data/lib/mongoid/association/referenced/eager.rb +184 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/binding.rb +77 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/buildable.rb +43 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/eager.rb +54 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many/proxy.rb +319 -0
- data/lib/mongoid/association/referenced/has_and_belongs_to_many.rb +297 -0
- data/lib/mongoid/{relations/bindings/referenced/many.rb → association/referenced/has_many/binding.rb} +9 -6
- data/lib/mongoid/association/referenced/has_many/buildable.rb +41 -0
- data/lib/mongoid/association/referenced/has_many/eager.rb +45 -0
- data/lib/mongoid/association/referenced/has_many/enumerable.rb +517 -0
- data/lib/mongoid/association/referenced/has_many/proxy.rb +581 -0
- data/lib/mongoid/association/referenced/has_many.rb +278 -0
- data/lib/mongoid/{relations/bindings/referenced/one.rb → association/referenced/has_one/binding.rb} +14 -9
- data/lib/mongoid/association/referenced/has_one/buildable.rb +67 -0
- data/lib/mongoid/association/referenced/has_one/eager.rb +37 -0
- data/lib/mongoid/{relations/builders/nested_attributes/one.rb → association/referenced/has_one/nested_builder.rb} +20 -18
- data/lib/mongoid/association/referenced/has_one/proxy.rb +120 -0
- data/lib/mongoid/association/referenced/has_one.rb +207 -0
- data/lib/mongoid/association/referenced/syncable.rb +172 -0
- data/lib/mongoid/association/referenced.rb +10 -0
- data/lib/mongoid/association/reflections.rb +70 -0
- data/lib/mongoid/association/relatable.rb +514 -0
- data/lib/mongoid/association.rb +152 -0
- data/lib/mongoid/atomic/modifiers.rb +24 -1
- data/lib/mongoid/atomic/paths/embedded/many.rb +5 -3
- data/lib/mongoid/atomic/paths/embedded/one.rb +5 -3
- data/lib/mongoid/atomic/paths/embedded.rb +3 -1
- data/lib/mongoid/atomic/paths/root.rb +4 -2
- data/lib/mongoid/atomic/paths.rb +2 -0
- data/lib/mongoid/atomic.rb +16 -4
- data/lib/mongoid/attributes/dynamic.rb +18 -15
- data/lib/mongoid/attributes/nested.rb +29 -16
- data/lib/mongoid/attributes/processing.rb +10 -8
- data/lib/mongoid/attributes/readonly.rb +5 -5
- data/lib/mongoid/attributes.rb +62 -44
- data/lib/mongoid/cacheable.rb +3 -1
- data/lib/mongoid/changeable.rb +4 -2
- data/lib/mongoid/clients/factory.rb +3 -2
- data/lib/mongoid/clients/options.rb +17 -13
- data/lib/mongoid/clients/sessions.rb +23 -4
- data/lib/mongoid/clients/storage_options.rb +7 -5
- data/lib/mongoid/clients/validators/storage.rb +2 -0
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/clients.rb +2 -0
- data/lib/mongoid/composable.rb +8 -6
- data/lib/mongoid/config/environment.rb +23 -8
- data/lib/mongoid/config/options.rb +20 -12
- data/lib/mongoid/config/validators/client.rb +2 -0
- data/lib/mongoid/config/validators/option.rb +2 -0
- data/lib/mongoid/config/validators.rb +2 -0
- data/lib/mongoid/config.rb +53 -9
- data/lib/mongoid/contextual/aggregable/memory.rb +3 -1
- data/lib/mongoid/contextual/aggregable/mongo.rb +3 -1
- data/lib/mongoid/contextual/atomic.rb +24 -6
- data/lib/mongoid/contextual/command.rb +2 -0
- data/lib/mongoid/contextual/geo_near.rb +6 -4
- data/lib/mongoid/contextual/map_reduce.rb +5 -2
- data/lib/mongoid/contextual/memory.rb +23 -3
- data/lib/mongoid/contextual/mongo.rb +16 -9
- data/lib/mongoid/contextual/none.rb +2 -0
- data/lib/mongoid/contextual/queryable.rb +2 -0
- data/lib/mongoid/contextual.rb +7 -4
- data/lib/mongoid/copyable.rb +14 -7
- data/lib/mongoid/criteria/findable.rb +11 -1
- data/lib/mongoid/criteria/includable.rb +21 -19
- data/lib/mongoid/criteria/inspectable.rb +2 -0
- data/lib/mongoid/criteria/marshalable.rb +2 -0
- data/lib/mongoid/criteria/modifiable.rb +10 -3
- data/lib/mongoid/criteria/options.rb +4 -2
- data/lib/mongoid/criteria/permission.rb +2 -0
- data/lib/mongoid/criteria/queryable/aggregable.rb +2 -0
- data/lib/mongoid/criteria/queryable/expandable.rb +93 -0
- data/lib/mongoid/criteria/queryable/extensions/array.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/big_decimal.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/boolean.rb +2 -0
- data/lib/mongoid/criteria/queryable/extensions/date.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/date_time.rb +5 -6
- data/lib/mongoid/criteria/queryable/extensions/hash.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/nil_class.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/numeric.rb +4 -2
- data/lib/mongoid/criteria/queryable/extensions/object.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/range.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/regexp.rb +9 -7
- data/lib/mongoid/criteria/queryable/extensions/set.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/string.rb +4 -2
- data/lib/mongoid/criteria/queryable/extensions/symbol.rb +3 -1
- data/lib/mongoid/criteria/queryable/extensions/time.rb +4 -2
- data/lib/mongoid/criteria/queryable/extensions/time_with_zone.rb +15 -1
- data/lib/mongoid/criteria/queryable/extensions.rb +2 -0
- data/lib/mongoid/criteria/queryable/key.rb +101 -14
- data/lib/mongoid/criteria/queryable/macroable.rb +3 -1
- data/lib/mongoid/criteria/queryable/mergeable.rb +158 -15
- data/lib/mongoid/criteria/queryable/optional.rb +5 -3
- data/lib/mongoid/criteria/queryable/options.rb +2 -0
- data/lib/mongoid/criteria/queryable/pipeline.rb +14 -6
- data/lib/mongoid/criteria/queryable/selectable.rb +376 -90
- data/lib/mongoid/criteria/queryable/selector.rb +43 -36
- data/lib/mongoid/criteria/queryable/smash.rb +2 -0
- data/lib/mongoid/criteria/queryable/storable.rb +233 -0
- data/lib/mongoid/criteria/queryable.rb +7 -2
- data/lib/mongoid/criteria/scopable.rb +2 -0
- data/lib/mongoid/criteria.rb +27 -6
- data/lib/mongoid/document.rb +16 -4
- data/lib/mongoid/equality.rb +3 -2
- data/lib/mongoid/errors/ambiguous_relationship.rb +4 -2
- data/lib/mongoid/errors/callback.rb +2 -0
- data/lib/mongoid/errors/criteria_argument_required.rb +19 -0
- data/lib/mongoid/errors/delete_restriction.rb +3 -2
- data/lib/mongoid/errors/document_not_destroyed.rb +2 -0
- data/lib/mongoid/errors/document_not_found.rb +2 -0
- data/lib/mongoid/errors/eager_load.rb +6 -2
- data/lib/mongoid/errors/in_memory_collation_not_supported.rb +2 -0
- data/lib/mongoid/errors/invalid_collection.rb +2 -0
- data/lib/mongoid/errors/invalid_config_option.rb +2 -0
- data/lib/mongoid/errors/invalid_dependent_strategy.rb +34 -0
- data/lib/mongoid/errors/invalid_field.rb +2 -0
- data/lib/mongoid/errors/invalid_field_option.rb +2 -0
- data/lib/mongoid/errors/invalid_find.rb +2 -0
- data/lib/mongoid/errors/invalid_includes.rb +2 -0
- data/lib/mongoid/errors/invalid_index.rb +2 -0
- data/lib/mongoid/errors/invalid_options.rb +4 -2
- data/lib/mongoid/errors/invalid_path.rb +2 -0
- data/lib/mongoid/errors/invalid_persistence_option.rb +2 -0
- data/lib/mongoid/errors/invalid_relation.rb +4 -2
- data/lib/mongoid/errors/invalid_relation_option.rb +31 -0
- data/lib/mongoid/errors/invalid_scope.rb +2 -0
- data/lib/mongoid/errors/invalid_session_use.rb +2 -0
- data/lib/mongoid/errors/invalid_set_polymorphic_relation.rb +6 -4
- data/lib/mongoid/errors/invalid_storage_options.rb +2 -0
- data/lib/mongoid/errors/invalid_storage_parent.rb +2 -0
- data/lib/mongoid/errors/invalid_time.rb +2 -0
- data/lib/mongoid/errors/invalid_value.rb +2 -0
- data/lib/mongoid/errors/inverse_not_found.rb +3 -1
- data/lib/mongoid/errors/mixed_client_configuration.rb +2 -0
- data/lib/mongoid/errors/mixed_relations.rb +2 -0
- data/lib/mongoid/errors/mongoid_error.rb +2 -0
- data/lib/mongoid/errors/nested_attributes_metadata_not_found.rb +3 -1
- data/lib/mongoid/errors/no_client_config.rb +4 -2
- data/lib/mongoid/errors/no_client_database.rb +2 -0
- data/lib/mongoid/errors/no_client_hosts.rb +2 -0
- data/lib/mongoid/errors/no_clients_config.rb +2 -0
- data/lib/mongoid/errors/no_default_client.rb +3 -1
- data/lib/mongoid/errors/no_environment.rb +2 -0
- data/lib/mongoid/errors/no_map_reduce_output.rb +2 -0
- data/lib/mongoid/errors/no_metadata.rb +2 -0
- data/lib/mongoid/errors/no_parent.rb +2 -0
- data/lib/mongoid/errors/readonly_attribute.rb +2 -0
- data/lib/mongoid/errors/readonly_document.rb +2 -0
- data/lib/mongoid/errors/scope_overwrite.rb +2 -0
- data/lib/mongoid/errors/too_many_nested_attribute_records.rb +3 -0
- data/lib/mongoid/errors/unknown_attribute.rb +2 -0
- data/lib/mongoid/errors/unknown_model.rb +27 -0
- data/lib/mongoid/errors/unsaved_document.rb +2 -0
- data/lib/mongoid/errors/unsupported_javascript.rb +2 -0
- data/lib/mongoid/errors/validations.rb +2 -0
- data/lib/mongoid/errors.rb +6 -0
- data/lib/mongoid/evolvable.rb +3 -1
- data/lib/mongoid/extensions/array.rb +28 -11
- data/lib/mongoid/extensions/big_decimal.rb +2 -0
- data/lib/mongoid/extensions/boolean.rb +2 -0
- data/lib/mongoid/extensions/date.rb +13 -3
- data/lib/mongoid/extensions/date_time.rb +4 -3
- data/lib/mongoid/extensions/decimal128.rb +2 -0
- data/lib/mongoid/extensions/false_class.rb +2 -0
- data/lib/mongoid/extensions/float.rb +5 -3
- data/lib/mongoid/extensions/hash.rb +56 -11
- data/lib/mongoid/extensions/integer.rb +5 -3
- data/lib/mongoid/extensions/module.rb +2 -0
- data/lib/mongoid/extensions/nil_class.rb +2 -0
- data/lib/mongoid/extensions/object.rb +20 -8
- data/lib/mongoid/extensions/object_id.rb +2 -0
- data/lib/mongoid/extensions/range.rb +3 -0
- data/lib/mongoid/extensions/regexp.rb +3 -1
- data/lib/mongoid/extensions/set.rb +2 -0
- data/lib/mongoid/extensions/string.rb +23 -12
- data/lib/mongoid/extensions/symbol.rb +2 -0
- data/lib/mongoid/extensions/time.rb +14 -0
- data/lib/mongoid/extensions/time_with_zone.rb +14 -0
- data/lib/mongoid/extensions/true_class.rb +2 -0
- data/lib/mongoid/extensions.rb +2 -4
- data/lib/mongoid/factory.rb +38 -5
- data/lib/mongoid/fields/foreign_key.rb +8 -6
- data/lib/mongoid/fields/localized.rb +2 -0
- data/lib/mongoid/fields/standard.rb +8 -17
- data/lib/mongoid/fields/validators/macro.rb +17 -3
- data/lib/mongoid/fields/validators.rb +2 -0
- data/lib/mongoid/fields.rb +8 -5
- data/lib/mongoid/findable.rb +9 -4
- data/lib/mongoid/indexable/specification.rb +3 -1
- data/lib/mongoid/indexable/validators/options.rb +2 -0
- data/lib/mongoid/indexable.rb +7 -2
- data/lib/mongoid/inspectable.rb +3 -1
- data/lib/mongoid/interceptable.rb +17 -9
- data/lib/mongoid/loggable.rb +13 -7
- data/lib/mongoid/matchable/all.rb +6 -3
- data/lib/mongoid/matchable/and.rb +3 -1
- data/lib/mongoid/matchable/default.rb +73 -24
- data/lib/mongoid/matchable/elem_match.rb +11 -3
- data/lib/mongoid/matchable/eq.rb +23 -0
- data/lib/mongoid/matchable/exists.rb +2 -0
- data/lib/mongoid/matchable/gt.rb +2 -0
- data/lib/mongoid/matchable/gte.rb +2 -0
- data/lib/mongoid/matchable/in.rb +2 -0
- data/lib/mongoid/matchable/lt.rb +2 -0
- data/lib/mongoid/matchable/lte.rb +2 -0
- data/lib/mongoid/matchable/ne.rb +3 -1
- data/lib/mongoid/matchable/nin.rb +2 -0
- data/lib/mongoid/matchable/nor.rb +2 -1
- data/lib/mongoid/matchable/or.rb +2 -0
- data/lib/mongoid/matchable/regexp.rb +5 -2
- data/lib/mongoid/matchable/size.rb +2 -0
- data/lib/mongoid/matchable.rb +19 -16
- data/lib/mongoid/persistable/creatable.rb +3 -1
- data/lib/mongoid/persistable/deletable.rb +10 -7
- data/lib/mongoid/persistable/destroyable.rb +3 -1
- data/lib/mongoid/persistable/incrementable.rb +7 -3
- data/lib/mongoid/persistable/logical.rb +5 -2
- data/lib/mongoid/persistable/poppable.rb +3 -1
- data/lib/mongoid/persistable/pullable.rb +3 -1
- data/lib/mongoid/persistable/pushable.rb +14 -3
- data/lib/mongoid/persistable/renamable.rb +10 -3
- data/lib/mongoid/persistable/savable.rb +3 -1
- data/lib/mongoid/persistable/settable.rb +60 -13
- data/lib/mongoid/persistable/unsettable.rb +8 -3
- data/lib/mongoid/persistable/updatable.rb +3 -1
- data/lib/mongoid/persistable/upsertable.rb +3 -1
- data/lib/mongoid/persistable.rb +136 -19
- data/lib/mongoid/persistence_context.rb +47 -20
- data/lib/mongoid/positional.rb +3 -1
- data/lib/mongoid/query_cache.rb +76 -29
- data/lib/mongoid/railtie.rb +3 -1
- data/lib/mongoid/railties/controller_runtime.rb +4 -1
- data/lib/mongoid/railties/database.rake +9 -0
- data/lib/mongoid/reloadable.rb +4 -2
- data/lib/mongoid/scopable.rb +2 -1
- data/lib/mongoid/selectable.rb +3 -1
- data/lib/mongoid/serializable.rb +27 -17
- data/lib/mongoid/shardable.rb +60 -6
- data/lib/mongoid/stateful.rb +3 -1
- data/lib/mongoid/tasks/database.rake +12 -5
- data/lib/mongoid/tasks/database.rb +85 -0
- data/lib/mongoid/threaded/lifecycle.rb +2 -0
- data/lib/mongoid/threaded.rb +2 -0
- data/lib/mongoid/timestamps/created/short.rb +2 -0
- data/lib/mongoid/timestamps/created.rb +3 -1
- data/lib/mongoid/timestamps/short.rb +2 -0
- data/lib/mongoid/timestamps/timeless.rb +6 -2
- data/lib/mongoid/timestamps/updated/short.rb +2 -0
- data/lib/mongoid/timestamps/updated.rb +3 -1
- data/lib/mongoid/timestamps.rb +3 -1
- data/lib/mongoid/touchable.rb +110 -0
- data/lib/mongoid/traversable.rb +7 -5
- data/lib/mongoid/validatable/associated.rb +4 -2
- data/lib/mongoid/validatable/format.rb +2 -0
- data/lib/mongoid/validatable/length.rb +2 -0
- data/lib/mongoid/validatable/localizable.rb +2 -0
- data/lib/mongoid/validatable/macros.rb +3 -1
- data/lib/mongoid/validatable/presence.rb +6 -4
- data/lib/mongoid/validatable/queryable.rb +2 -0
- data/lib/mongoid/validatable/uniqueness.rb +9 -7
- data/lib/mongoid/validatable.rb +15 -13
- data/lib/mongoid/version.rb +3 -1
- data/lib/mongoid.rb +11 -2
- data/lib/rails/generators/mongoid/config/config_generator.rb +2 -0
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +44 -26
- data/lib/rails/generators/mongoid/model/model_generator.rb +3 -1
- data/lib/rails/generators/mongoid/model/templates/model.rb.tt +1 -1
- data/lib/rails/generators/mongoid_generator.rb +2 -0
- data/lib/rails/mongoid.rb +4 -2
- data/lib/support/ruby_version.rb +3 -0
- data/spec/README.md +18 -0
- data/spec/app/models/account.rb +3 -0
- data/spec/app/models/acolyte.rb +3 -0
- data/spec/app/models/actor.rb +3 -0
- data/spec/app/models/actress.rb +3 -0
- data/spec/app/models/address.rb +3 -0
- data/spec/app/models/address_component.rb +3 -0
- data/spec/app/models/address_number.rb +3 -0
- data/spec/app/models/agency.rb +3 -0
- data/spec/app/models/agent.rb +3 -0
- data/spec/app/models/album.rb +3 -0
- data/spec/app/models/alert.rb +3 -0
- data/spec/app/models/animal.rb +5 -1
- data/spec/app/models/answer.rb +3 -0
- data/spec/app/models/appointment.rb +3 -0
- data/spec/app/models/array_field.rb +1 -0
- data/spec/app/models/article.rb +3 -0
- data/spec/app/models/artist.rb +3 -0
- data/spec/app/models/artwork.rb +3 -0
- data/spec/app/models/audio.rb +3 -0
- data/spec/app/models/augmentation.rb +3 -0
- data/spec/app/models/author.rb +3 -0
- data/spec/app/models/baby.rb +3 -0
- data/spec/app/models/band.rb +3 -0
- data/spec/app/models/bar.rb +3 -0
- data/spec/app/models/basic.rb +3 -0
- data/spec/app/models/bed.rb +3 -0
- data/spec/app/models/big_palette.rb +3 -0
- data/spec/app/models/birthday.rb +3 -0
- data/spec/app/models/bomb.rb +4 -1
- data/spec/app/models/book.rb +3 -0
- data/spec/app/models/breed.rb +3 -0
- data/spec/app/models/browser.rb +3 -0
- data/spec/app/models/building.rb +3 -0
- data/spec/app/models/building_address.rb +3 -0
- data/spec/app/models/bus.rb +3 -0
- data/spec/app/models/business.rb +3 -0
- data/spec/app/models/callback_test.rb +3 -0
- data/spec/app/models/canvas.rb +3 -0
- data/spec/app/models/car.rb +3 -0
- data/spec/app/models/cat.rb +3 -0
- data/spec/app/models/category.rb +3 -0
- data/spec/app/models/child.rb +3 -0
- data/spec/app/models/child_doc.rb +3 -0
- data/spec/app/models/church.rb +3 -0
- data/spec/app/models/circle.rb +3 -0
- data/spec/app/models/circuit.rb +3 -0
- data/spec/app/models/circus.rb +3 -0
- data/spec/app/models/code.rb +3 -0
- data/spec/app/models/coding/pull_request.rb +12 -0
- data/spec/app/models/coding.rb +4 -0
- data/spec/app/models/comment.rb +3 -0
- data/spec/app/models/company.rb +3 -0
- data/spec/app/models/consumption_period.rb +3 -0
- data/spec/app/models/contextable_item.rb +3 -0
- data/spec/app/models/contractor.rb +3 -0
- data/spec/app/models/cookie.rb +3 -0
- data/spec/app/models/country_code.rb +3 -0
- data/spec/app/models/courier_job.rb +3 -0
- data/spec/app/models/customer.rb +11 -0
- data/spec/app/models/customer_address.rb +12 -0
- data/spec/app/models/definition.rb +3 -0
- data/spec/app/models/delegating_patient.rb +16 -0
- data/spec/app/models/description.rb +3 -0
- data/spec/app/models/dictionary.rb +9 -0
- data/spec/app/models/division.rb +3 -0
- data/spec/app/models/doctor.rb +3 -0
- data/spec/app/models/dog.rb +3 -0
- data/spec/app/models/dokument.rb +3 -0
- data/spec/app/models/draft.rb +3 -0
- data/spec/app/models/dragon.rb +3 -0
- data/spec/app/models/driver.rb +3 -0
- data/spec/app/models/drug.rb +3 -0
- data/spec/app/models/dungeon.rb +3 -0
- data/spec/app/models/edit.rb +3 -0
- data/spec/app/models/email.rb +3 -0
- data/spec/app/models/employer.rb +3 -0
- data/spec/app/models/entry.rb +3 -0
- data/spec/app/models/eraser.rb +3 -0
- data/spec/app/models/even.rb +3 -0
- data/spec/app/models/event.rb +3 -0
- data/spec/app/models/exhibition.rb +3 -0
- data/spec/app/models/exhibitor.rb +3 -0
- data/spec/app/models/explosion.rb +3 -0
- data/spec/app/models/eye.rb +3 -0
- data/spec/app/models/eye_bowl.rb +3 -0
- data/spec/app/models/face.rb +3 -0
- data/spec/app/models/favorite.rb +3 -0
- data/spec/app/models/filesystem.rb +3 -0
- data/spec/app/models/fire_hydrant.rb +3 -0
- data/spec/app/models/firefox.rb +3 -0
- data/spec/app/models/fish.rb +3 -0
- data/spec/app/models/folder.rb +3 -0
- data/spec/app/models/folder_item.rb +3 -0
- data/spec/app/models/fruits.rb +3 -0
- data/spec/app/models/game.rb +3 -0
- data/spec/app/models/ghost.rb +3 -0
- data/spec/app/models/home.rb +3 -0
- data/spec/app/models/house.rb +3 -0
- data/spec/app/models/html_writer.rb +3 -0
- data/spec/app/models/id_key.rb +3 -0
- data/spec/app/models/image.rb +3 -0
- data/spec/app/models/implant.rb +3 -0
- data/spec/app/models/item.rb +3 -0
- data/spec/app/models/jar.rb +3 -0
- data/spec/app/models/kaleidoscope.rb +3 -0
- data/spec/app/models/kangaroo.rb +4 -1
- data/spec/app/models/label.rb +3 -0
- data/spec/app/models/language.rb +3 -0
- data/spec/app/models/lat_lng.rb +3 -0
- data/spec/app/models/league.rb +3 -0
- data/spec/app/models/learner.rb +3 -0
- data/spec/app/models/line_item.rb +3 -0
- data/spec/app/models/location.rb +3 -0
- data/spec/app/models/login.rb +3 -0
- data/spec/app/models/manufacturer.rb +3 -0
- data/spec/app/models/meat.rb +3 -0
- data/spec/app/models/membership.rb +3 -0
- data/spec/app/models/message.rb +4 -1
- data/spec/app/models/minim.rb +7 -0
- data/spec/app/models/mixed_drink.rb +3 -0
- data/spec/app/models/movie.rb +3 -0
- data/spec/app/models/my_hash.rb +3 -0
- data/spec/app/models/name.rb +3 -0
- data/spec/app/models/name_only.rb +9 -0
- data/spec/app/models/node.rb +3 -0
- data/spec/app/models/note.rb +3 -0
- data/spec/app/models/odd.rb +3 -0
- data/spec/app/models/ordered_post.rb +3 -0
- data/spec/app/models/ordered_preference.rb +3 -0
- data/spec/app/models/oscar.rb +3 -0
- data/spec/app/models/other_owner_object.rb +5 -0
- data/spec/app/models/override.rb +3 -0
- data/spec/app/models/ownable.rb +3 -0
- data/spec/app/models/owner.rb +3 -0
- data/spec/app/models/pack.rb +3 -0
- data/spec/app/models/page.rb +3 -0
- data/spec/app/models/page_question.rb +3 -0
- data/spec/app/models/palette.rb +3 -0
- data/spec/app/models/parent.rb +3 -0
- data/spec/app/models/parent_doc.rb +3 -0
- data/spec/app/models/passport.rb +4 -0
- data/spec/app/models/patient.rb +3 -0
- data/spec/app/models/pdf_writer.rb +3 -0
- data/spec/app/models/pencil.rb +3 -0
- data/spec/app/models/person.rb +10 -2
- data/spec/app/models/pet.rb +3 -0
- data/spec/app/models/pet_owner.rb +3 -0
- data/spec/app/models/phone.rb +4 -0
- data/spec/app/models/pizza.rb +3 -0
- data/spec/app/models/player.rb +3 -0
- data/spec/app/models/post.rb +3 -0
- data/spec/app/models/post_genre.rb +3 -0
- data/spec/app/models/powerup.rb +3 -0
- data/spec/app/models/preference.rb +3 -0
- data/spec/app/models/princess.rb +3 -0
- data/spec/app/models/product.rb +3 -0
- data/spec/app/models/profile.rb +3 -0
- data/spec/app/models/pronunciation.rb +3 -0
- data/spec/app/models/pub.rb +3 -0
- data/spec/app/models/publication/encyclopedia.rb +12 -0
- data/spec/app/models/publication/review.rb +14 -0
- data/spec/app/models/publication.rb +5 -0
- data/spec/app/models/purchase.rb +3 -0
- data/spec/app/models/question.rb +3 -0
- data/spec/app/models/quiz.rb +3 -0
- data/spec/app/models/rating.rb +3 -0
- data/spec/app/models/record.rb +3 -0
- data/spec/app/models/registry.rb +3 -0
- data/spec/app/models/role.rb +3 -0
- data/spec/app/models/root_category.rb +3 -0
- data/spec/app/models/sandwich.rb +3 -0
- data/spec/app/models/scheduler.rb +3 -0
- data/spec/app/models/seo.rb +3 -0
- data/spec/app/models/series.rb +4 -0
- data/spec/app/models/server.rb +3 -0
- data/spec/app/models/service.rb +3 -0
- data/spec/app/models/shape.rb +3 -0
- data/spec/app/models/shelf.rb +3 -0
- data/spec/app/models/shipment_address.rb +4 -0
- data/spec/app/models/shipping_container.rb +3 -0
- data/spec/app/models/shipping_pack.rb +3 -0
- data/spec/app/models/shop.rb +3 -0
- data/spec/app/models/short_agent.rb +3 -0
- data/spec/app/models/short_quiz.rb +3 -0
- data/spec/app/models/simple.rb +3 -0
- data/spec/app/models/slave.rb +3 -0
- data/spec/app/models/song.rb +3 -0
- data/spec/app/models/sound.rb +3 -0
- data/spec/app/models/square.rb +3 -0
- data/spec/app/models/staff.rb +3 -0
- data/spec/app/models/store_as_dup_test1.rb +3 -0
- data/spec/app/models/store_as_dup_test2.rb +3 -0
- data/spec/app/models/store_as_dup_test3.rb +8 -0
- data/spec/app/models/store_as_dup_test4.rb +8 -0
- data/spec/app/models/strategy.rb +3 -0
- data/spec/app/models/sub_item.rb +3 -0
- data/spec/app/models/subscription.rb +3 -0
- data/spec/app/models/survey.rb +3 -0
- data/spec/app/models/symptom.rb +3 -0
- data/spec/app/models/tag.rb +3 -0
- data/spec/app/models/target.rb +3 -0
- data/spec/app/models/template.rb +3 -0
- data/spec/app/models/thing.rb +3 -0
- data/spec/app/models/title.rb +3 -0
- data/spec/app/models/tool.rb +3 -0
- data/spec/app/models/topping.rb +3 -0
- data/spec/app/models/track.rb +3 -0
- data/spec/app/models/translation.rb +3 -0
- data/spec/app/models/tree.rb +3 -0
- data/spec/app/models/truck.rb +3 -0
- data/spec/app/models/updatable.rb +8 -0
- data/spec/app/models/user.rb +3 -0
- data/spec/app/models/user_account.rb +3 -0
- data/spec/app/models/validation_callback.rb +3 -0
- data/spec/app/models/vehicle.rb +3 -0
- data/spec/app/models/version.rb +3 -0
- data/spec/app/models/vertex.rb +9 -0
- data/spec/app/models/vet_visit.rb +3 -0
- data/spec/app/models/video.rb +3 -0
- data/spec/app/models/video_game.rb +3 -0
- data/spec/app/models/weapon.rb +3 -0
- data/spec/app/models/wiki_page.rb +5 -1
- data/spec/app/models/word.rb +3 -0
- data/spec/app/models/word_origin.rb +3 -0
- data/spec/app/models/writer.rb +3 -0
- data/spec/config/mongoid.yml +14 -3
- data/spec/integration/app_spec.rb +287 -0
- data/spec/integration/associations/belongs_to_spec.rb +16 -0
- data/spec/integration/associations/embedded_spec.rb +175 -0
- data/spec/integration/associations/embeds_many_spec.rb +24 -0
- data/spec/integration/associations/embeds_one_spec.rb +24 -0
- data/spec/integration/associations/foreign_key_spec.rb +99 -0
- data/spec/integration/associations/foreign_key_spec_models.rb +65 -0
- data/spec/integration/associations/has_many_spec.rb +76 -0
- data/spec/integration/associations/has_one_spec.rb +76 -0
- data/spec/integration/associations/reverse_population_spec.rb +35 -0
- data/spec/integration/associations/reverse_population_spec_models.rb +37 -0
- data/spec/integration/bson_regexp_raw_spec.rb +20 -0
- data/spec/integration/callbacks_models.rb +49 -0
- data/spec/integration/callbacks_spec.rb +216 -0
- data/spec/integration/criteria/date_field_spec.rb +41 -0
- data/spec/integration/criteria/default_scope_spec.rb +21 -0
- data/spec/integration/criteria/logical_spec.rb +94 -0
- data/spec/integration/criteria/time_with_zone_spec.rb +32 -0
- data/spec/integration/document_spec.rb +22 -0
- data/spec/integration/i18n_fallbacks_spec.rb +90 -0
- data/spec/integration/matchable_spec.rb +680 -0
- data/spec/integration/shardable_spec.rb +149 -0
- data/spec/lite_spec_helper.rb +75 -0
- data/spec/mongoid/{relations → association}/accessors_spec.rb +281 -64
- data/spec/mongoid/{relations → association}/auto_save_spec.rb +63 -12
- data/spec/mongoid/{relations → association}/builders_spec.rb +4 -1
- data/spec/mongoid/association/constrainable_spec.rb +118 -0
- data/spec/mongoid/{relations → association}/counter_cache_spec.rb +4 -1
- data/spec/mongoid/association/depending_spec.rb +869 -0
- data/spec/mongoid/{relations → association}/eager_spec.rb +15 -12
- data/spec/mongoid/{relations → association/embedded}/cyclic_spec.rb +4 -1
- data/spec/mongoid/{relations → association}/embedded/dirty_spec.rb +3 -0
- data/spec/mongoid/{relations/bindings/embedded/in_spec.rb → association/embedded/embedded_in/binding_spec.rb} +16 -13
- data/spec/mongoid/association/embedded/embedded_in/buildable_spec.rb +37 -0
- data/spec/mongoid/{relations/embedded/in_spec.rb → association/embedded/embedded_in/proxy_spec.rb} +58 -77
- data/spec/mongoid/association/embedded/embedded_in_spec.rb +904 -0
- data/spec/mongoid/{relations/bindings/embedded/many_spec.rb → association/embedded/embeds_many/binding_spec.rb} +6 -3
- data/spec/mongoid/{relations/builders/embedded/many_spec.rb → association/embedded/embeds_many/buildable_spec.rb} +20 -45
- data/spec/mongoid/{relations/embedded/many_spec.rb → association/embedded/embeds_many/proxy_spec.rb} +127 -182
- data/spec/mongoid/association/embedded/embeds_many_models.rb +53 -0
- data/spec/mongoid/association/embedded/embeds_many_query_spec.rb +52 -0
- data/spec/mongoid/association/embedded/embeds_many_spec.rb +865 -0
- data/spec/mongoid/{relations/bindings/embedded/one_spec.rb → association/embedded/embeds_one/binding_spec.rb} +7 -4
- data/spec/mongoid/{relations/builders/embedded/one_spec.rb → association/embedded/embeds_one/buildable_spec.rb} +17 -34
- data/spec/mongoid/{relations/embedded/one_spec.rb → association/embedded/embeds_one/proxy_spec.rb} +42 -84
- data/spec/mongoid/association/embedded/embeds_one_dnl_models.rb +9 -0
- data/spec/mongoid/association/embedded/embeds_one_models.rb +54 -0
- data/spec/mongoid/association/embedded/embeds_one_query_spec.rb +29 -0
- data/spec/mongoid/association/embedded/embeds_one_spec.rb +957 -0
- data/spec/mongoid/{relations → association}/macros_spec.rb +151 -73
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/many_spec.rb +19 -19
- data/spec/mongoid/{relations/builders/nested_attributes → association/nested}/one_spec.rb +20 -20
- data/spec/mongoid/association/options_spec.rb +1324 -0
- data/spec/mongoid/{relations → association}/polymorphic_spec.rb +69 -34
- data/spec/mongoid/{relations/bindings/referenced/in_spec.rb → association/referenced/belongs_to/binding_spec.rb} +10 -7
- data/spec/mongoid/{relations/builders/referenced/in_spec.rb → association/referenced/belongs_to/buildable_spec.rb} +49 -79
- data/spec/mongoid/association/referenced/belongs_to/eager_spec.rb +377 -0
- data/spec/mongoid/{relations/referenced/in_spec.rb → association/referenced/belongs_to/proxy_spec.rb} +60 -91
- data/spec/mongoid/association/referenced/belongs_to_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/belongs_to_spec.rb +2026 -0
- data/spec/mongoid/{relations/bindings/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/binding_spec.rb} +8 -5
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/buildable_spec.rb +124 -0
- data/spec/mongoid/{relations/eager/has_and_belongs_to_many_spec.rb → association/referenced/has_and_belongs_to_many/eager_spec.rb} +42 -7
- data/spec/mongoid/association/referenced/has_and_belongs_to_many/proxy_persistence_spec.rb +77 -0
- data/spec/mongoid/{relations/referenced/many_to_many_spec.rb → association/referenced/has_and_belongs_to_many/proxy_spec.rb} +283 -112
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_models.rb +50 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_query_spec.rb +40 -0
- data/spec/mongoid/association/referenced/has_and_belongs_to_many_spec.rb +1051 -0
- data/spec/mongoid/{relations/bindings/referenced/many_spec.rb → association/referenced/has_many/binding_spec.rb} +8 -5
- data/spec/mongoid/association/referenced/has_many/buildable_spec.rb +122 -0
- data/spec/mongoid/{relations/eager/has_many_spec.rb → association/referenced/has_many/eager_spec.rb} +43 -13
- data/spec/mongoid/{relations/targets → association/referenced/has_many}/enumerable_spec.rb +230 -1
- data/spec/mongoid/association/referenced/has_many/proxy_query_spec.rb +24 -0
- data/spec/mongoid/{relations/referenced/many_spec.rb → association/referenced/has_many/proxy_spec.rb} +33 -94
- data/spec/mongoid/association/referenced/has_many_models.rb +40 -0
- data/spec/mongoid/association/referenced/has_many_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_many_spec.rb +1228 -0
- data/spec/mongoid/{relations/bindings/referenced/one_spec.rb → association/referenced/has_one/binding_spec.rb} +7 -4
- data/spec/mongoid/association/referenced/has_one/buildable_spec.rb +116 -0
- data/spec/mongoid/{relations/eager/has_one_spec.rb → association/referenced/has_one/eager_spec.rb} +27 -12
- data/spec/mongoid/{relations/referenced/one_spec.rb → association/referenced/has_one/proxy_spec.rb} +12 -109
- data/spec/mongoid/association/referenced/has_one_models.rb +51 -0
- data/spec/mongoid/association/referenced/has_one_query_spec.rb +38 -0
- data/spec/mongoid/association/referenced/has_one_spec.rb +1363 -0
- data/spec/mongoid/{relations → association}/reflections_spec.rb +4 -12
- data/spec/mongoid/{relations/synchronization_spec.rb → association/syncable_spec.rb} +7 -2
- data/spec/mongoid/{relations_spec.rb → association_spec.rb} +4 -1
- data/spec/mongoid/atomic/modifiers_spec.rb +5 -2
- data/spec/mongoid/atomic/paths/embedded/many_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/embedded/one_spec.rb +3 -0
- data/spec/mongoid/atomic/paths/root_spec.rb +3 -0
- data/spec/mongoid/atomic/paths_spec.rb +44 -0
- data/spec/mongoid/atomic_spec.rb +7 -4
- data/spec/mongoid/attributes/dynamic_spec.rb +153 -0
- data/spec/mongoid/attributes/nested_spec.rb +32 -11
- data/spec/mongoid/attributes/readonly_spec.rb +83 -125
- data/spec/mongoid/attributes_spec.rb +60 -9
- data/spec/mongoid/cacheable_spec.rb +3 -0
- data/spec/mongoid/changeable_spec.rb +26 -0
- data/spec/mongoid/clients/factory_spec.rb +57 -33
- data/spec/mongoid/clients/options_spec.rb +81 -56
- data/spec/mongoid/clients/sessions_spec.rb +24 -8
- data/spec/mongoid/clients/transactions_spec.rb +393 -0
- data/spec/mongoid/clients_spec.rb +73 -10
- data/spec/mongoid/composable_spec.rb +3 -0
- data/spec/mongoid/config/environment_spec.rb +3 -0
- data/spec/mongoid/config/options_spec.rb +23 -3
- data/spec/mongoid/config_spec.rb +66 -1
- data/spec/mongoid/contextual/aggregable/memory_spec.rb +3 -0
- data/spec/mongoid/contextual/aggregable/mongo_spec.rb +3 -0
- data/spec/mongoid/contextual/atomic_spec.rb +120 -10
- data/spec/mongoid/contextual/geo_near_spec.rb +15 -2
- data/spec/mongoid/contextual/map_reduce_spec.rb +23 -5
- data/spec/mongoid/contextual/memory_spec.rb +22 -0
- data/spec/mongoid/contextual/mongo_spec.rb +113 -57
- data/spec/mongoid/contextual/none_spec.rb +3 -0
- data/spec/mongoid/copyable_spec.rb +93 -6
- data/spec/mongoid/copyable_spec_models.rb +20 -0
- data/spec/mongoid/criteria/findable_spec.rb +58 -0
- data/spec/mongoid/criteria/inspectable_spec.rb +3 -0
- data/spec/mongoid/criteria/marshalable_spec.rb +3 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +180 -4
- data/spec/mongoid/criteria/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/aggregable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/expandable_spec.rb +135 -0
- data/spec/mongoid/criteria/queryable/extensions/array_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/big_decimal_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/bignum_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/boolean_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/date_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/date_time_spec.rb +36 -17
- data/spec/mongoid/criteria/queryable/extensions/fixnum_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/float_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/hash_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/integer_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/nil_class_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/numeric_spec.rb +54 -0
- data/spec/mongoid/criteria/queryable/extensions/object_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/range_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/regexp_raw_spec.rb +4 -1
- data/spec/mongoid/criteria/queryable/extensions/regexp_spec.rb +10 -7
- data/spec/mongoid/criteria/queryable/extensions/set_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/string_spec.rb +47 -1
- data/spec/mongoid/criteria/queryable/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/extensions/time_spec.rb +43 -23
- data/spec/mongoid/criteria/queryable/extensions/time_with_zone_spec.rb +31 -1
- data/spec/mongoid/criteria/queryable/key_spec.rb +51 -6
- data/spec/mongoid/criteria/queryable/mergeable_spec.rb +48 -12
- data/spec/mongoid/criteria/queryable/optional_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/options_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/pipeline_spec.rb +15 -0
- data/spec/mongoid/criteria/queryable/queryable_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/selectable_logical_spec.rb +1865 -0
- data/spec/mongoid/criteria/queryable/selectable_spec.rb +1007 -2389
- data/spec/mongoid/criteria/queryable/selector_spec.rb +40 -0
- data/spec/mongoid/criteria/queryable/smash_spec.rb +3 -0
- data/spec/mongoid/criteria/queryable/storable_spec.rb +190 -0
- data/spec/mongoid/criteria/scopable_spec.rb +3 -0
- data/spec/mongoid/criteria_spec.rb +108 -19
- data/spec/mongoid/document_fields_spec.rb +88 -0
- data/spec/mongoid/document_persistence_context_spec.rb +33 -0
- data/spec/mongoid/document_query_spec.rb +39 -0
- data/spec/mongoid/document_spec.rb +32 -4
- data/spec/mongoid/equality_spec.rb +3 -0
- data/spec/mongoid/errors/ambiguous_relationship_spec.rb +6 -3
- data/spec/mongoid/errors/callback_spec.rb +3 -0
- data/spec/mongoid/errors/delete_restriction_spec.rb +3 -0
- data/spec/mongoid/errors/document_not_destroyed_spec.rb +3 -0
- data/spec/mongoid/errors/document_not_found_spec.rb +3 -0
- data/spec/mongoid/errors/eager_load_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_collection_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_config_option_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_field_option_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_field_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_find_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_includes_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_index_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_options_spec.rb +5 -2
- data/spec/mongoid/errors/invalid_path_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_relation_spec.rb +5 -2
- data/spec/mongoid/errors/invalid_scope_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_set_polymorphic_relation_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_storage_options_spec.rb +3 -0
- data/spec/mongoid/errors/invalid_time_spec.rb +3 -0
- data/spec/mongoid/errors/inverse_not_found_spec.rb +4 -1
- data/spec/mongoid/errors/mixed_client_configuration_spec.rb +3 -0
- data/spec/mongoid/errors/mixed_relations_spec.rb +3 -0
- data/spec/mongoid/errors/mongoid_error_spec.rb +3 -0
- data/spec/mongoid/errors/nested_attributes_metadata_not_found_spec.rb +6 -3
- data/spec/mongoid/errors/no_client_config_spec.rb +5 -2
- data/spec/mongoid/errors/no_client_database_spec.rb +6 -3
- data/spec/mongoid/errors/no_client_hosts_spec.rb +6 -3
- data/spec/mongoid/errors/no_clients_config_spec.rb +3 -0
- data/spec/mongoid/errors/no_environment_spec.rb +3 -0
- data/spec/mongoid/errors/no_map_reduce_output_spec.rb +3 -0
- data/spec/mongoid/errors/no_metadata_spec.rb +5 -2
- data/spec/mongoid/errors/no_parent_spec.rb +4 -1
- data/spec/mongoid/errors/readonly_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/readonly_document_spec.rb +3 -0
- data/spec/mongoid/errors/scope_overwrite_spec.rb +3 -0
- data/spec/mongoid/errors/too_many_nested_attribute_records_spec.rb +3 -0
- data/spec/mongoid/errors/unknown_attribute_spec.rb +3 -0
- data/spec/mongoid/errors/unsaved_document_spec.rb +4 -1
- data/spec/mongoid/errors/unsupported_javascript_spec.rb +3 -0
- data/spec/mongoid/errors/validations_spec.rb +3 -0
- data/spec/mongoid/extensions/array_spec.rb +37 -58
- data/spec/mongoid/extensions/big_decimal_spec.rb +3 -0
- data/spec/mongoid/extensions/binary_spec.rb +3 -0
- data/spec/mongoid/extensions/boolean_spec.rb +3 -0
- data/spec/mongoid/extensions/date_class_mongoize_spec.rb +336 -0
- data/spec/mongoid/extensions/date_spec.rb +9 -160
- data/spec/mongoid/extensions/date_time_spec.rb +18 -60
- data/spec/mongoid/extensions/decimal128_spec.rb +3 -0
- data/spec/mongoid/extensions/false_class_spec.rb +3 -0
- data/spec/mongoid/extensions/float_spec.rb +18 -3
- data/spec/mongoid/extensions/hash_spec.rb +124 -1
- data/spec/mongoid/extensions/integer_spec.rb +15 -2
- data/spec/mongoid/extensions/module_spec.rb +3 -0
- data/spec/mongoid/extensions/nil_class_spec.rb +3 -0
- data/spec/mongoid/extensions/object_id_spec.rb +3 -0
- data/spec/mongoid/extensions/object_spec.rb +21 -35
- data/spec/mongoid/extensions/range_spec.rb +10 -0
- data/spec/mongoid/extensions/regexp_spec.rb +3 -0
- data/spec/mongoid/extensions/set_spec.rb +3 -0
- data/spec/mongoid/extensions/string_spec.rb +95 -33
- data/spec/mongoid/extensions/symbol_spec.rb +3 -0
- data/spec/mongoid/extensions/time_spec.rb +30 -0
- data/spec/mongoid/extensions/time_with_zone_spec.rb +34 -0
- data/spec/mongoid/extensions/true_class_spec.rb +3 -0
- data/spec/mongoid/extensions_spec.rb +3 -0
- data/spec/mongoid/factory_spec.rb +46 -1
- data/spec/mongoid/fields/foreign_key_spec.rb +27 -32
- data/spec/mongoid/fields/localized_spec.rb +3 -0
- data/spec/mongoid/fields/standard_spec.rb +3 -0
- data/spec/mongoid/fields_spec.rb +42 -1
- data/spec/mongoid/findable_spec.rb +4 -1
- data/spec/mongoid/indexable/specification_spec.rb +3 -0
- data/spec/mongoid/indexable_spec.rb +27 -12
- data/spec/mongoid/inspectable_spec.rb +3 -0
- data/spec/mongoid/interceptable_spec.rb +87 -1
- data/spec/mongoid/interceptable_spec_models.rb +76 -0
- data/spec/mongoid/loggable_spec.rb +3 -0
- data/spec/mongoid/matchable/all_spec.rb +3 -0
- data/spec/mongoid/matchable/and_spec.rb +3 -0
- data/spec/mongoid/matchable/default_spec.rb +13 -3
- data/spec/mongoid/matchable/elem_match_spec.rb +23 -0
- data/spec/mongoid/matchable/eq_spec.rb +49 -0
- data/spec/mongoid/matchable/exists_spec.rb +3 -0
- data/spec/mongoid/matchable/gt_spec.rb +3 -0
- data/spec/mongoid/matchable/gte_spec.rb +3 -0
- data/spec/mongoid/matchable/in_spec.rb +3 -0
- data/spec/mongoid/matchable/lt_spec.rb +3 -0
- data/spec/mongoid/matchable/lte_spec.rb +3 -0
- data/spec/mongoid/matchable/ne_spec.rb +3 -0
- data/spec/mongoid/matchable/nin_spec.rb +3 -0
- data/spec/mongoid/matchable/nor_spec.rb +1 -0
- data/spec/mongoid/matchable/or_spec.rb +3 -0
- data/spec/mongoid/matchable/regexp_spec.rb +5 -2
- data/spec/mongoid/matchable/size_spec.rb +3 -0
- data/spec/mongoid/matchable_spec.rb +5 -2
- data/spec/mongoid/persistable/creatable_spec.rb +3 -0
- data/spec/mongoid/persistable/deletable_spec.rb +3 -0
- data/spec/mongoid/persistable/destroyable_spec.rb +3 -0
- data/spec/mongoid/persistable/incrementable_spec.rb +17 -0
- data/spec/mongoid/persistable/logical_spec.rb +17 -0
- data/spec/mongoid/persistable/poppable_spec.rb +17 -0
- data/spec/mongoid/persistable/pullable_spec.rb +31 -0
- data/spec/mongoid/persistable/pushable_spec.rb +86 -1
- data/spec/mongoid/persistable/renamable_spec.rb +17 -0
- data/spec/mongoid/persistable/savable_spec.rb +5 -2
- data/spec/mongoid/persistable/settable_spec.rb +112 -10
- data/spec/mongoid/persistable/unsettable_spec.rb +17 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -0
- data/spec/mongoid/persistable/upsertable_spec.rb +3 -0
- data/spec/mongoid/persistable_spec.rb +106 -14
- data/spec/mongoid/persistence_context_spec.rb +4 -1
- data/spec/mongoid/positional_spec.rb +3 -0
- data/spec/mongoid/query_cache_middleware_spec.rb +48 -0
- data/spec/mongoid/query_cache_spec.rb +131 -65
- data/spec/mongoid/relations/proxy_spec.rb +127 -124
- data/spec/mongoid/reloadable_spec.rb +3 -0
- data/spec/mongoid/scopable_spec.rb +5 -1
- data/spec/mongoid/selectable_spec.rb +3 -0
- data/spec/mongoid/serializable_spec.rb +132 -18
- data/spec/mongoid/shardable_models.rb +61 -0
- data/spec/mongoid/shardable_spec.rb +104 -28
- data/spec/mongoid/stateful_spec.rb +3 -0
- data/spec/mongoid/tasks/database_rake_spec.rb +16 -13
- data/spec/mongoid/tasks/database_spec.rb +4 -1
- data/spec/mongoid/threaded_spec.rb +3 -0
- data/spec/mongoid/timestamps/created/short_spec.rb +3 -0
- data/spec/mongoid/timestamps/created_spec.rb +3 -0
- data/spec/mongoid/timestamps/timeless_spec.rb +3 -0
- data/spec/mongoid/timestamps/updated/short_spec.rb +3 -0
- data/spec/mongoid/timestamps/updated_spec.rb +3 -0
- data/spec/mongoid/timestamps_spec.rb +3 -0
- data/spec/mongoid/{relations/touchable_spec.rb → touchable_spec.rb} +89 -4
- data/spec/mongoid/traversable_spec.rb +3 -0
- data/spec/mongoid/validatable/associated_spec.rb +4 -1
- data/spec/mongoid/validatable/format_spec.rb +3 -0
- data/spec/mongoid/validatable/length_spec.rb +3 -0
- data/spec/mongoid/validatable/numericality_spec.rb +3 -0
- data/spec/mongoid/validatable/presence_spec.rb +10 -6
- data/spec/mongoid/validatable/uniqueness_spec.rb +36 -6
- data/spec/mongoid/validatable_spec.rb +4 -1
- data/spec/mongoid_spec.rb +3 -0
- data/spec/rails/controller_extension/controller_runtime_spec.rb +4 -1
- data/spec/rails/mongoid_spec.rb +5 -2
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +211 -0
- data/spec/shared/lib/mrss/constraints.rb +330 -0
- data/spec/shared/lib/mrss/docker_runner.rb +262 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +175 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +69 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +149 -0
- data/spec/shared/share/Dockerfile.erb +229 -0
- data/spec/shared/shlib/distro.sh +73 -0
- data/spec/shared/shlib/server.sh +270 -0
- data/spec/shared/shlib/set_env.sh +128 -0
- data/spec/spec_helper.rb +56 -55
- data/spec/support/authorization.rb +3 -0
- data/spec/support/child_process_helper.rb +76 -0
- data/spec/support/cluster_config.rb +158 -0
- data/spec/support/constraints.rb +256 -0
- data/spec/support/expectations.rb +22 -3
- data/spec/support/helpers.rb +11 -0
- data/spec/support/lite_constraints.rb +22 -0
- data/spec/support/macros.rb +21 -0
- data/spec/support/session_registry.rb +50 -0
- data/spec/support/shared/time.rb +54 -0
- data/spec/support/spec_config.rb +50 -0
- data.tar.gz.sig +2 -1
- metadata +737 -550
- metadata.gz.sig +0 -0
- data/lib/mongoid/criteria/queryable/forwardable.rb +0 -65
- data/lib/mongoid/relations/accessors.rb +0 -267
- data/lib/mongoid/relations/auto_save.rb +0 -94
- data/lib/mongoid/relations/bindings/embedded/in.rb +0 -59
- data/lib/mongoid/relations/bindings/referenced/in.rb +0 -65
- data/lib/mongoid/relations/bindings/referenced/many_to_many.rb +0 -70
- data/lib/mongoid/relations/bindings.rb +0 -9
- data/lib/mongoid/relations/builder.rb +0 -57
- data/lib/mongoid/relations/builders/embedded/in.rb +0 -29
- data/lib/mongoid/relations/builders/embedded/one.rb +0 -30
- data/lib/mongoid/relations/builders/nested_attributes/many.rb +0 -199
- data/lib/mongoid/relations/builders/referenced/in.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many.rb +0 -26
- data/lib/mongoid/relations/builders/referenced/many_to_many.rb +0 -39
- data/lib/mongoid/relations/builders/referenced/one.rb +0 -26
- data/lib/mongoid/relations/builders.rb +0 -106
- data/lib/mongoid/relations/cascading/delete.rb +0 -44
- data/lib/mongoid/relations/cascading/destroy.rb +0 -43
- data/lib/mongoid/relations/cascading/nullify.rb +0 -35
- data/lib/mongoid/relations/cascading/restrict.rb +0 -39
- data/lib/mongoid/relations/cascading.rb +0 -56
- data/lib/mongoid/relations/constraint.rb +0 -55
- data/lib/mongoid/relations/conversions.rb +0 -34
- data/lib/mongoid/relations/counter_cache.rb +0 -160
- data/lib/mongoid/relations/cyclic.rb +0 -107
- data/lib/mongoid/relations/eager/base.rb +0 -153
- data/lib/mongoid/relations/eager/belongs_to.rb +0 -31
- data/lib/mongoid/relations/eager/has_and_belongs_to_many.rb +0 -47
- data/lib/mongoid/relations/eager/has_many.rb +0 -38
- data/lib/mongoid/relations/eager/has_one.rb +0 -30
- data/lib/mongoid/relations/embedded/in.rb +0 -241
- data/lib/mongoid/relations/embedded/many.rb +0 -683
- data/lib/mongoid/relations/embedded/one.rb +0 -235
- data/lib/mongoid/relations/macros.rb +0 -367
- data/lib/mongoid/relations/metadata.rb +0 -1179
- data/lib/mongoid/relations/nested_builder.rb +0 -74
- data/lib/mongoid/relations/options.rb +0 -49
- data/lib/mongoid/relations/polymorphic.rb +0 -39
- data/lib/mongoid/relations/referenced/in.rb +0 -304
- data/lib/mongoid/relations/referenced/many.rb +0 -812
- data/lib/mongoid/relations/referenced/many_to_many.rb +0 -479
- data/lib/mongoid/relations/referenced/one.rb +0 -290
- data/lib/mongoid/relations/reflections.rb +0 -64
- data/lib/mongoid/relations/synchronization.rb +0 -169
- data/lib/mongoid/relations/targets/enumerable.rb +0 -493
- data/lib/mongoid/relations/targets.rb +0 -2
- data/lib/mongoid/relations/touchable.rb +0 -97
- data/lib/mongoid/relations.rb +0 -148
- data/spec/mongoid/criteria/queryable/forwardable_spec.rb +0 -87
- data/spec/mongoid/fields/internal/foreign_keys/array_spec.rb +0 -184
- data/spec/mongoid/fields/internal/foreign_keys/object_spec.rb +0 -201
- data/spec/mongoid/relations/builders/embedded/in_spec.rb +0 -34
- data/spec/mongoid/relations/builders/referenced/many_spec.rb +0 -137
- data/spec/mongoid/relations/builders/referenced/many_to_many_spec.rb +0 -178
- data/spec/mongoid/relations/builders/referenced/one_spec.rb +0 -111
- data/spec/mongoid/relations/cascading/delete_spec.rb +0 -101
- data/spec/mongoid/relations/cascading/destroy_spec.rb +0 -47
- data/spec/mongoid/relations/cascading/nullify_spec.rb +0 -32
- data/spec/mongoid/relations/cascading/restrict_spec.rb +0 -68
- data/spec/mongoid/relations/cascading_spec.rb +0 -355
- data/spec/mongoid/relations/constraint_spec.rb +0 -75
- data/spec/mongoid/relations/conversions_spec.rb +0 -128
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +0 -163
- data/spec/mongoid/relations/metadata_spec.rb +0 -1985
- data/spec/mongoid/relations/options_spec.rb +0 -35
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
# encoding: utf-8
|
|
3
|
+
|
|
2
4
|
module Mongoid
|
|
3
5
|
class Criteria
|
|
4
6
|
module Queryable
|
|
@@ -41,8 +43,32 @@ module Mongoid
|
|
|
41
43
|
# @return [ Selectable ] The cloned selectable.
|
|
42
44
|
#
|
|
43
45
|
# @since 1.0.0
|
|
44
|
-
def all(
|
|
45
|
-
|
|
46
|
+
def all(*criteria)
|
|
47
|
+
if criteria.empty?
|
|
48
|
+
return clone.tap do |query|
|
|
49
|
+
query.reset_strategies!
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
criteria.inject(clone) do |query, condition|
|
|
54
|
+
if condition.nil?
|
|
55
|
+
raise Errors::CriteriaArgumentRequired, :all
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
condition = expand_condition_to_array_values(condition)
|
|
59
|
+
|
|
60
|
+
if strategy
|
|
61
|
+
send(strategy, condition, "$all")
|
|
62
|
+
else
|
|
63
|
+
condition.inject(query) do |_query, (field, value)|
|
|
64
|
+
v = {'$all' => value}
|
|
65
|
+
if negating?
|
|
66
|
+
v = {'$not' => v}
|
|
67
|
+
end
|
|
68
|
+
_query.add_field_expression(field.to_s, v)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end.reset_strategies!
|
|
46
72
|
end
|
|
47
73
|
alias :all_in :all
|
|
48
74
|
key :all, :union, "$all"
|
|
@@ -52,14 +78,44 @@ module Mongoid
|
|
|
52
78
|
# @example Add the criterion.
|
|
53
79
|
# selectable.and({ field: value }, { other: value })
|
|
54
80
|
#
|
|
55
|
-
# @param [ Array<Hash> ]
|
|
56
|
-
# all must match to return results.
|
|
81
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
82
|
+
# matches or Criteria objects that all must match to return results.
|
|
57
83
|
#
|
|
58
|
-
# @return [ Selectable ] The
|
|
84
|
+
# @return [ Selectable ] The new selectable.
|
|
59
85
|
#
|
|
60
86
|
# @since 1.0.0
|
|
61
|
-
def and(*
|
|
62
|
-
|
|
87
|
+
def and(*criteria)
|
|
88
|
+
_mongoid_flatten_arrays(criteria).inject(self.clone) do |c, new_s|
|
|
89
|
+
if new_s.is_a?(Selectable)
|
|
90
|
+
new_s = new_s.selector
|
|
91
|
+
end
|
|
92
|
+
normalized = _mongoid_expand_keys(new_s)
|
|
93
|
+
normalized.each do |k, v|
|
|
94
|
+
k = k.to_s
|
|
95
|
+
if c.selector[k]
|
|
96
|
+
# There is already a condition on k.
|
|
97
|
+
# If v is an operator, and all existing conditions are
|
|
98
|
+
# also operators, and v isn't present in existing conditions,
|
|
99
|
+
# we can add to existing conditions.
|
|
100
|
+
# Otherwise use $and.
|
|
101
|
+
if v.is_a?(Hash) &&
|
|
102
|
+
v.length == 1 &&
|
|
103
|
+
(new_k = v.keys.first).start_with?('$') &&
|
|
104
|
+
(existing_kv = c.selector[k]).is_a?(Hash) &&
|
|
105
|
+
!existing_kv.key?(new_k) &&
|
|
106
|
+
existing_kv.keys.all? { |sub_k| sub_k.start_with?('$') }
|
|
107
|
+
then
|
|
108
|
+
merged_v = c.selector[k].merge(v)
|
|
109
|
+
c.selector.store(k, merged_v)
|
|
110
|
+
else
|
|
111
|
+
c = c.send(:__multi__, [k => v], '$and')
|
|
112
|
+
end
|
|
113
|
+
else
|
|
114
|
+
c.selector.store(k, v)
|
|
115
|
+
end
|
|
116
|
+
end
|
|
117
|
+
c
|
|
118
|
+
end
|
|
63
119
|
end
|
|
64
120
|
alias :all_of :and
|
|
65
121
|
|
|
@@ -76,7 +132,11 @@ module Mongoid
|
|
|
76
132
|
# @return [ Selectable ] The cloned selectable.
|
|
77
133
|
#
|
|
78
134
|
# @since 1.0.0
|
|
79
|
-
def between(criterion
|
|
135
|
+
def between(criterion)
|
|
136
|
+
if criterion.nil?
|
|
137
|
+
raise Errors::CriteriaArgumentRequired, :between
|
|
138
|
+
end
|
|
139
|
+
|
|
80
140
|
selection(criterion) do |selector, field, value|
|
|
81
141
|
selector.store(
|
|
82
142
|
field,
|
|
@@ -104,7 +164,11 @@ module Mongoid
|
|
|
104
164
|
# @return [ Selectable ] The cloned selectable.
|
|
105
165
|
#
|
|
106
166
|
# @since 1.0.0
|
|
107
|
-
def elem_match(criterion
|
|
167
|
+
def elem_match(criterion)
|
|
168
|
+
if criterion.nil?
|
|
169
|
+
raise Errors::CriteriaArgumentRequired, :elem_match
|
|
170
|
+
end
|
|
171
|
+
|
|
108
172
|
__override__(criterion, "$elemMatch")
|
|
109
173
|
end
|
|
110
174
|
key :elem_match, :override, "$elemMatch"
|
|
@@ -125,7 +189,11 @@ module Mongoid
|
|
|
125
189
|
# @return [ Selectable ] The cloned selectable.
|
|
126
190
|
#
|
|
127
191
|
# @since 1.0.0
|
|
128
|
-
def exists(criterion
|
|
192
|
+
def exists(criterion)
|
|
193
|
+
if criterion.nil?
|
|
194
|
+
raise Errors::CriteriaArgumentRequired, :exists
|
|
195
|
+
end
|
|
196
|
+
|
|
129
197
|
typed_override(criterion, "$exists") do |value|
|
|
130
198
|
::Boolean.evolve(value)
|
|
131
199
|
end
|
|
@@ -170,7 +238,11 @@ module Mongoid
|
|
|
170
238
|
# @return [ Selectable ] The cloned selectable.
|
|
171
239
|
#
|
|
172
240
|
# @since 2.0.0
|
|
173
|
-
def geo_spacial(criterion
|
|
241
|
+
def geo_spacial(criterion)
|
|
242
|
+
if criterion.nil?
|
|
243
|
+
raise Errors::CriteriaArgumentRequired, :geo_spacial
|
|
244
|
+
end
|
|
245
|
+
|
|
174
246
|
__merge__(criterion)
|
|
175
247
|
end
|
|
176
248
|
key :intersects_line, :override, "$geoIntersects", "$geometry" do |value|
|
|
@@ -200,7 +272,11 @@ module Mongoid
|
|
|
200
272
|
# @return [ Selectable ] The cloned selectable.
|
|
201
273
|
#
|
|
202
274
|
# @since 1.0.0
|
|
203
|
-
def gt(criterion
|
|
275
|
+
def gt(criterion)
|
|
276
|
+
if criterion.nil?
|
|
277
|
+
raise Errors::CriteriaArgumentRequired, :gt
|
|
278
|
+
end
|
|
279
|
+
|
|
204
280
|
__override__(criterion, "$gt")
|
|
205
281
|
end
|
|
206
282
|
key :gt, :override, "$gt"
|
|
@@ -218,7 +294,11 @@ module Mongoid
|
|
|
218
294
|
# @return [ Selectable ] The cloned selectable.
|
|
219
295
|
#
|
|
220
296
|
# @since 1.0.0
|
|
221
|
-
def gte(criterion
|
|
297
|
+
def gte(criterion)
|
|
298
|
+
if criterion.nil?
|
|
299
|
+
raise Errors::CriteriaArgumentRequired, :gte
|
|
300
|
+
end
|
|
301
|
+
|
|
222
302
|
__override__(criterion, "$gte")
|
|
223
303
|
end
|
|
224
304
|
key :gte, :override, "$gte"
|
|
@@ -234,13 +314,29 @@ module Mongoid
|
|
|
234
314
|
# @example Execute an $in in a where query.
|
|
235
315
|
# selectable.where(:field.in => [ 1, 2, 3 ])
|
|
236
316
|
#
|
|
237
|
-
# @param [ Hash ]
|
|
317
|
+
# @param [ Hash ] condition The field/value criterion pairs.
|
|
238
318
|
#
|
|
239
319
|
# @return [ Selectable ] The cloned selectable.
|
|
240
320
|
#
|
|
241
321
|
# @since 1.0.0
|
|
242
|
-
def in(
|
|
243
|
-
|
|
322
|
+
def in(condition)
|
|
323
|
+
if condition.nil?
|
|
324
|
+
raise Errors::CriteriaArgumentRequired, :in
|
|
325
|
+
end
|
|
326
|
+
|
|
327
|
+
condition = expand_condition_to_array_values(condition)
|
|
328
|
+
|
|
329
|
+
if strategy
|
|
330
|
+
send(strategy, condition, "$in")
|
|
331
|
+
else
|
|
332
|
+
condition.inject(clone) do |query, (field, value)|
|
|
333
|
+
v = {'$in' => value}
|
|
334
|
+
if negating?
|
|
335
|
+
v = {'$not' => v}
|
|
336
|
+
end
|
|
337
|
+
query.add_field_expression(field.to_s, v)
|
|
338
|
+
end.reset_strategies!
|
|
339
|
+
end
|
|
244
340
|
end
|
|
245
341
|
alias :any_in :in
|
|
246
342
|
key :in, :intersect, "$in"
|
|
@@ -258,7 +354,11 @@ module Mongoid
|
|
|
258
354
|
# @return [ Selectable ] The cloned selectable.
|
|
259
355
|
#
|
|
260
356
|
# @since 1.0.0
|
|
261
|
-
def lt(criterion
|
|
357
|
+
def lt(criterion)
|
|
358
|
+
if criterion.nil?
|
|
359
|
+
raise Errors::CriteriaArgumentRequired, :lt
|
|
360
|
+
end
|
|
361
|
+
|
|
262
362
|
__override__(criterion, "$lt")
|
|
263
363
|
end
|
|
264
364
|
key :lt, :override, "$lt"
|
|
@@ -276,7 +376,11 @@ module Mongoid
|
|
|
276
376
|
# @return [ Selectable ] The cloned selectable.
|
|
277
377
|
#
|
|
278
378
|
# @since 1.0.0
|
|
279
|
-
def lte(criterion
|
|
379
|
+
def lte(criterion)
|
|
380
|
+
if criterion.nil?
|
|
381
|
+
raise Errors::CriteriaArgumentRequired, :lte
|
|
382
|
+
end
|
|
383
|
+
|
|
280
384
|
__override__(criterion, "$lte")
|
|
281
385
|
end
|
|
282
386
|
key :lte, :override, "$lte"
|
|
@@ -291,7 +395,12 @@ module Mongoid
|
|
|
291
395
|
# @return [ Selectable ] The cloned selectable.
|
|
292
396
|
#
|
|
293
397
|
# @since 1.0.0
|
|
294
|
-
def max_distance(criterion
|
|
398
|
+
def max_distance(criterion)
|
|
399
|
+
if criterion.nil?
|
|
400
|
+
raise Errors::CriteriaArgumentRequired, :max_distance
|
|
401
|
+
end
|
|
402
|
+
|
|
403
|
+
# $maxDistance must be given together with $near
|
|
295
404
|
__add__(criterion, "$maxDistance")
|
|
296
405
|
end
|
|
297
406
|
|
|
@@ -308,7 +417,11 @@ module Mongoid
|
|
|
308
417
|
# @return [ Selectable ] The cloned selectable.
|
|
309
418
|
#
|
|
310
419
|
# @since 1.0.0
|
|
311
|
-
def mod(criterion
|
|
420
|
+
def mod(criterion)
|
|
421
|
+
if criterion.nil?
|
|
422
|
+
raise Errors::CriteriaArgumentRequired, :mod
|
|
423
|
+
end
|
|
424
|
+
|
|
312
425
|
__override__(criterion, "$mod")
|
|
313
426
|
end
|
|
314
427
|
key :mod, :override, "$mod"
|
|
@@ -326,7 +439,11 @@ module Mongoid
|
|
|
326
439
|
# @return [ Selectable ] The cloned selectable.
|
|
327
440
|
#
|
|
328
441
|
# @since 1.0.0
|
|
329
|
-
def ne(criterion
|
|
442
|
+
def ne(criterion)
|
|
443
|
+
if criterion.nil?
|
|
444
|
+
raise Errors::CriteriaArgumentRequired, :ne
|
|
445
|
+
end
|
|
446
|
+
|
|
330
447
|
__override__(criterion, "$ne")
|
|
331
448
|
end
|
|
332
449
|
alias :excludes :ne
|
|
@@ -345,7 +462,11 @@ module Mongoid
|
|
|
345
462
|
# @return [ Selectable ] The cloned selectable.
|
|
346
463
|
#
|
|
347
464
|
# @since 1.0.0
|
|
348
|
-
def near(criterion
|
|
465
|
+
def near(criterion)
|
|
466
|
+
if criterion.nil?
|
|
467
|
+
raise Errors::CriteriaArgumentRequired, :near
|
|
468
|
+
end
|
|
469
|
+
|
|
349
470
|
__override__(criterion, "$near")
|
|
350
471
|
end
|
|
351
472
|
key :near, :override, "$near"
|
|
@@ -363,7 +484,11 @@ module Mongoid
|
|
|
363
484
|
# @return [ Selectable ] The cloned selectable.
|
|
364
485
|
#
|
|
365
486
|
# @since 1.0.0
|
|
366
|
-
def near_sphere(criterion
|
|
487
|
+
def near_sphere(criterion)
|
|
488
|
+
if criterion.nil?
|
|
489
|
+
raise Errors::CriteriaArgumentRequired, :near_sphere
|
|
490
|
+
end
|
|
491
|
+
|
|
367
492
|
__override__(criterion, "$nearSphere")
|
|
368
493
|
end
|
|
369
494
|
key :near_sphere, :override, "$nearSphere"
|
|
@@ -379,13 +504,29 @@ module Mongoid
|
|
|
379
504
|
# @example Execute an $nin in a where query.
|
|
380
505
|
# selectable.where(:field.nin => [ 1, 2, 3 ])
|
|
381
506
|
#
|
|
382
|
-
# @param [ Hash ]
|
|
507
|
+
# @param [ Hash ] condition The field/value criterion pairs.
|
|
383
508
|
#
|
|
384
509
|
# @return [ Selectable ] The cloned selectable.
|
|
385
510
|
#
|
|
386
511
|
# @since 1.0.0
|
|
387
|
-
def nin(
|
|
388
|
-
|
|
512
|
+
def nin(condition)
|
|
513
|
+
if condition.nil?
|
|
514
|
+
raise Errors::CriteriaArgumentRequired, :nin
|
|
515
|
+
end
|
|
516
|
+
|
|
517
|
+
condition = expand_condition_to_array_values(condition)
|
|
518
|
+
|
|
519
|
+
if strategy
|
|
520
|
+
send(strategy, condition, "$nin")
|
|
521
|
+
else
|
|
522
|
+
condition.inject(clone) do |query, (field, value)|
|
|
523
|
+
v = {'$nin' => value}
|
|
524
|
+
if negating?
|
|
525
|
+
v = {'$not' => v}
|
|
526
|
+
end
|
|
527
|
+
query.add_field_expression(field.to_s, v)
|
|
528
|
+
end.reset_strategies!
|
|
529
|
+
end
|
|
389
530
|
end
|
|
390
531
|
alias :not_in :nin
|
|
391
532
|
key :nin, :intersect, "$nin"
|
|
@@ -395,13 +536,14 @@ module Mongoid
|
|
|
395
536
|
# @example Add the $nor selection.
|
|
396
537
|
# selectable.nor(field: 1, field: 2)
|
|
397
538
|
#
|
|
398
|
-
# @param [ Array
|
|
539
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
540
|
+
# matches or Criteria objects.
|
|
399
541
|
#
|
|
400
|
-
# @return [ Selectable ] The
|
|
542
|
+
# @return [ Selectable ] The new selectable.
|
|
401
543
|
#
|
|
402
544
|
# @since 1.0.0
|
|
403
|
-
def nor(*
|
|
404
|
-
|
|
545
|
+
def nor(*criteria)
|
|
546
|
+
_mongoid_add_top_level_operation('$nor', criteria)
|
|
405
547
|
end
|
|
406
548
|
|
|
407
549
|
# Is the current selectable negating the next selection?
|
|
@@ -416,9 +558,9 @@ module Mongoid
|
|
|
416
558
|
!!negating
|
|
417
559
|
end
|
|
418
560
|
|
|
419
|
-
# Negate the next selection.
|
|
561
|
+
# Negate the arguments, or the next selection if no arguments are given.
|
|
420
562
|
#
|
|
421
|
-
# @example Negate the selection.
|
|
563
|
+
# @example Negate the next selection.
|
|
422
564
|
# selectable.not.in(field: [ 1, 2 ])
|
|
423
565
|
#
|
|
424
566
|
# @example Add the $not criterion.
|
|
@@ -427,34 +569,145 @@ module Mongoid
|
|
|
427
569
|
# @example Execute a $not in a where query.
|
|
428
570
|
# selectable.where(:field.not => /Bob/)
|
|
429
571
|
#
|
|
430
|
-
# @param [ Hash ]
|
|
572
|
+
# @param [ Array<Hash | Criteria> ] criteria Multiple key/value pair
|
|
573
|
+
# matches or Criteria objects to negate.
|
|
431
574
|
#
|
|
432
|
-
# @return [ Selectable ] The
|
|
575
|
+
# @return [ Selectable ] The new selectable.
|
|
433
576
|
#
|
|
434
577
|
# @since 1.0.0
|
|
435
|
-
def not(*
|
|
436
|
-
if
|
|
437
|
-
tap { |query| query.negating = true }
|
|
578
|
+
def not(*criteria)
|
|
579
|
+
if criteria.empty?
|
|
580
|
+
dup.tap { |query| query.negating = true }
|
|
438
581
|
else
|
|
439
|
-
|
|
582
|
+
criteria.compact.inject(self.clone) do |c, new_s|
|
|
583
|
+
if new_s.is_a?(Selectable)
|
|
584
|
+
new_s = new_s.selector
|
|
585
|
+
end
|
|
586
|
+
_mongoid_expand_keys(new_s).each do |k, v|
|
|
587
|
+
k = k.to_s
|
|
588
|
+
if c.selector[k] || k[0] == ?$
|
|
589
|
+
c = c.send(:__multi__, [{'$nor' => [{k => v}]}], '$and')
|
|
590
|
+
else
|
|
591
|
+
if v.is_a?(Hash)
|
|
592
|
+
c = c.send(:__multi__, [{'$nor' => [{k => v}]}], '$and')
|
|
593
|
+
else
|
|
594
|
+
if v.is_a?(Regexp)
|
|
595
|
+
negated_operator = '$not'
|
|
596
|
+
else
|
|
597
|
+
negated_operator = '$ne'
|
|
598
|
+
end
|
|
599
|
+
c = c.send(:__override__, {k => v}, negated_operator)
|
|
600
|
+
end
|
|
601
|
+
end
|
|
602
|
+
end
|
|
603
|
+
c
|
|
604
|
+
end
|
|
440
605
|
end
|
|
441
606
|
end
|
|
442
607
|
key :not, :override, "$not"
|
|
443
608
|
|
|
444
|
-
#
|
|
609
|
+
# Creates a disjunction using $or from the existing criteria in the
|
|
610
|
+
# receiver and the provided arguments.
|
|
611
|
+
#
|
|
612
|
+
# This behavior (receiver becoming one of the disjunction operands)
|
|
613
|
+
# matches ActiveRecord's +or+ behavior.
|
|
614
|
+
#
|
|
615
|
+
# Use +any_of+ to add a disjunction of the arguments as an additional
|
|
616
|
+
# constraint to the criteria already existing in the receiver.
|
|
445
617
|
#
|
|
446
|
-
#
|
|
618
|
+
# Each argument can be a Hash, a Criteria object, an array of
|
|
619
|
+
# Hash or Criteria objects, or a nested array. Nested arrays will be
|
|
620
|
+
# flattened and can be of any depth. Passing arrays is deprecated.
|
|
621
|
+
#
|
|
622
|
+
# @example Add the $or selection where both fields must have the specified values.
|
|
447
623
|
# selectable.or(field: 1, field: 2)
|
|
448
624
|
#
|
|
449
|
-
# @
|
|
625
|
+
# @example Add the $or selection where either value match is sufficient.
|
|
626
|
+
# selectable.or({field: 1}, {field: 2})
|
|
450
627
|
#
|
|
451
|
-
# @
|
|
628
|
+
# @example Same as previous example but using the deprecated array wrap.
|
|
629
|
+
# selectable.or([{field: 1}, {field: 2}])
|
|
630
|
+
#
|
|
631
|
+
# @example Same as previous example, also deprecated.
|
|
632
|
+
# selectable.or([{field: 1}], [{field: 2}])
|
|
633
|
+
#
|
|
634
|
+
# @param [ Hash | Criteria | Array<Hash | Criteria>, ... ] criteria
|
|
635
|
+
# Multiple key/value pair matches or Criteria objects, or arrays
|
|
636
|
+
# thereof. Passing arrays is deprecated.
|
|
637
|
+
#
|
|
638
|
+
# @return [ Selectable ] The new selectable.
|
|
452
639
|
#
|
|
453
640
|
# @since 1.0.0
|
|
454
|
-
def or(*
|
|
455
|
-
|
|
641
|
+
def or(*criteria)
|
|
642
|
+
_mongoid_add_top_level_operation('$or', criteria)
|
|
643
|
+
end
|
|
644
|
+
|
|
645
|
+
# Adds a disjunction of the arguments as an additional constraint
|
|
646
|
+
# to the criteria already existing in the receiver.
|
|
647
|
+
#
|
|
648
|
+
# Use +or+ to make the receiver one of the disjunction operands.
|
|
649
|
+
#
|
|
650
|
+
# Each argument can be a Hash, a Criteria object, an array of
|
|
651
|
+
# Hash or Criteria objects, or a nested array. Nested arrays will be
|
|
652
|
+
# flattened and can be of any depth. Passing arrays is deprecated.
|
|
653
|
+
#
|
|
654
|
+
# @example Add the $or selection where both fields must have the specified values.
|
|
655
|
+
# selectable.any_of(field: 1, field: 2)
|
|
656
|
+
#
|
|
657
|
+
# @example Add the $or selection where either value match is sufficient.
|
|
658
|
+
# selectable.any_of({field: 1}, {field: 2})
|
|
659
|
+
#
|
|
660
|
+
# @example Same as previous example but using the deprecated array wrap.
|
|
661
|
+
# selectable.any_of([{field: 1}, {field: 2}])
|
|
662
|
+
#
|
|
663
|
+
# @example Same as previous example, also deprecated.
|
|
664
|
+
# selectable.any_of([{field: 1}], [{field: 2}])
|
|
665
|
+
#
|
|
666
|
+
# @param [ Hash | Criteria | Array<Hash | Criteria>, ... ] criteria
|
|
667
|
+
# Multiple key/value pair matches or Criteria objects, or arrays
|
|
668
|
+
# thereof. Passing arrays is deprecated.
|
|
669
|
+
#
|
|
670
|
+
# @return [ Selectable ] The new selectable.
|
|
671
|
+
#
|
|
672
|
+
# @since 1.0.0
|
|
673
|
+
def any_of(*criteria)
|
|
674
|
+
criteria = _mongoid_flatten_arrays(criteria)
|
|
675
|
+
case criteria.length
|
|
676
|
+
when 0
|
|
677
|
+
clone
|
|
678
|
+
when 1
|
|
679
|
+
# When we have a single criteria, any_of behaves like and.
|
|
680
|
+
# Note: criteria can be a Query object, which #where method does
|
|
681
|
+
# not support.
|
|
682
|
+
self.and(*criteria)
|
|
683
|
+
else
|
|
684
|
+
# When we have multiple criteria, combine them all with $or
|
|
685
|
+
# and add the result to self.
|
|
686
|
+
exprs = criteria.map do |criterion|
|
|
687
|
+
if criterion.is_a?(Selectable)
|
|
688
|
+
_mongoid_expand_keys(criterion.selector)
|
|
689
|
+
else
|
|
690
|
+
Hash[criterion.map do |k, v|
|
|
691
|
+
if k.is_a?(Symbol)
|
|
692
|
+
[k.to_s, v]
|
|
693
|
+
else
|
|
694
|
+
[k, v]
|
|
695
|
+
end
|
|
696
|
+
end]
|
|
697
|
+
end
|
|
698
|
+
end
|
|
699
|
+
# Should be able to do:
|
|
700
|
+
#where('$or' => exprs)
|
|
701
|
+
# But since that is broken do instead:
|
|
702
|
+
clone.tap do |query|
|
|
703
|
+
if query.selector['$or']
|
|
704
|
+
query.selector.store('$or', query.selector['$or'] + exprs)
|
|
705
|
+
else
|
|
706
|
+
query.selector.store('$or', exprs)
|
|
707
|
+
end
|
|
708
|
+
end
|
|
709
|
+
end
|
|
456
710
|
end
|
|
457
|
-
alias :any_of :or
|
|
458
711
|
|
|
459
712
|
# Add a $size selection for array fields.
|
|
460
713
|
#
|
|
@@ -472,7 +725,11 @@ module Mongoid
|
|
|
472
725
|
# @return [ Selectable ] The cloned selectable.
|
|
473
726
|
#
|
|
474
727
|
# @since 1.0.0
|
|
475
|
-
def with_size(criterion
|
|
728
|
+
def with_size(criterion)
|
|
729
|
+
if criterion.nil?
|
|
730
|
+
raise Errors::CriteriaArgumentRequired, :with_size
|
|
731
|
+
end
|
|
732
|
+
|
|
476
733
|
typed_override(criterion, "$size") do |value|
|
|
477
734
|
::Integer.evolve(value)
|
|
478
735
|
end
|
|
@@ -496,7 +753,11 @@ module Mongoid
|
|
|
496
753
|
# @return [ Selectable ] The cloned selectable.
|
|
497
754
|
#
|
|
498
755
|
# @since 1.0.0
|
|
499
|
-
def with_type(criterion
|
|
756
|
+
def with_type(criterion)
|
|
757
|
+
if criterion.nil?
|
|
758
|
+
raise Errors::CriteriaArgumentRequired, :with_type
|
|
759
|
+
end
|
|
760
|
+
|
|
500
761
|
typed_override(criterion, "$type") do |value|
|
|
501
762
|
::Integer.evolve(value)
|
|
502
763
|
end
|
|
@@ -527,21 +788,23 @@ module Mongoid
|
|
|
527
788
|
#
|
|
528
789
|
# @since 2.2.0
|
|
529
790
|
def text_search(terms, opts = nil)
|
|
791
|
+
if terms.nil?
|
|
792
|
+
raise Errors::CriteriaArgumentRequired, :terms
|
|
793
|
+
end
|
|
794
|
+
|
|
530
795
|
clone.tap do |query|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
query.selector = query.selector.merge(criterion)
|
|
544
|
-
end
|
|
796
|
+
criterion = {'$text' => { '$search' => terms }}
|
|
797
|
+
criterion['$text'].merge!(opts) if opts
|
|
798
|
+
if query.selector['$text']
|
|
799
|
+
# Per https://docs.mongodb.com/manual/reference/operator/query/text/
|
|
800
|
+
# multiple $text expressions are not currently supported by
|
|
801
|
+
# MongoDB server, but build the query correctly instead of
|
|
802
|
+
# overwriting previous text search condition with the currently
|
|
803
|
+
# given one.
|
|
804
|
+
Mongoid.logger.warn('Multiple $text expressions per query are not currently supported by the server')
|
|
805
|
+
query.selector = {'$and' => [query.selector]}.merge(criterion)
|
|
806
|
+
else
|
|
807
|
+
query.selector = query.selector.merge(criterion)
|
|
545
808
|
end
|
|
546
809
|
end
|
|
547
810
|
end
|
|
@@ -561,15 +824,38 @@ module Mongoid
|
|
|
561
824
|
# @return [ Selectable ] The cloned selectable.
|
|
562
825
|
#
|
|
563
826
|
# @since 1.0.0
|
|
564
|
-
def where(
|
|
565
|
-
|
|
827
|
+
def where(*criteria)
|
|
828
|
+
criteria.inject(clone) do |query, criterion|
|
|
829
|
+
if criterion.nil?
|
|
830
|
+
raise Errors::CriteriaArgumentRequired, :where
|
|
831
|
+
end
|
|
832
|
+
|
|
833
|
+
# We need to save the criterion in an instance variable so
|
|
834
|
+
# Modifiable methods know how to create a polymorphic object.
|
|
835
|
+
# Note that this method in principle accepts multiple criteria,
|
|
836
|
+
# but only the first one will be stored in @criterion. This
|
|
837
|
+
# works out to be fine because first_or_create etc. methods
|
|
838
|
+
# only ever specify one criterion to #where.
|
|
839
|
+
@criterion = criterion
|
|
840
|
+
if criterion.is_a?(String)
|
|
841
|
+
js_query(criterion)
|
|
842
|
+
else
|
|
843
|
+
expr_query(criterion)
|
|
844
|
+
end
|
|
845
|
+
end.reset_strategies!
|
|
566
846
|
end
|
|
567
847
|
|
|
568
848
|
private
|
|
569
849
|
|
|
570
|
-
#
|
|
850
|
+
# Adds the specified expression to the query.
|
|
571
851
|
#
|
|
572
|
-
#
|
|
852
|
+
# Criterion must be a hash in one of the following forms:
|
|
853
|
+
# - {field_name: value}
|
|
854
|
+
# - {'field_name' => value}
|
|
855
|
+
# - {key_instance: value}
|
|
856
|
+
# - {'$operator' => operator_value_expression}
|
|
857
|
+
#
|
|
858
|
+
# Field name and operator may be given as either strings or symbols.
|
|
573
859
|
#
|
|
574
860
|
# @example Create the selection.
|
|
575
861
|
# selectable.expr_query(age: 50)
|
|
@@ -579,9 +865,24 @@ module Mongoid
|
|
|
579
865
|
# @return [ Selectable ] The cloned selectable.
|
|
580
866
|
#
|
|
581
867
|
# @since 1.0.0
|
|
868
|
+
# @api private
|
|
582
869
|
def expr_query(criterion)
|
|
583
|
-
|
|
584
|
-
|
|
870
|
+
if criterion.nil?
|
|
871
|
+
raise ArgumentError, 'Criterion cannot be nil here'
|
|
872
|
+
end
|
|
873
|
+
|
|
874
|
+
clone.tap do |query|
|
|
875
|
+
criterion.each do |field, value|
|
|
876
|
+
field_s = field.to_s
|
|
877
|
+
if field_s[0] == ?$
|
|
878
|
+
# Query expression-level operator, like $and or $where
|
|
879
|
+
query.add_operator_expression(field_s, value)
|
|
880
|
+
else
|
|
881
|
+
exp_field, exp_value = expand_one_condition(field, value)
|
|
882
|
+
query.add_field_expression(exp_field, exp_value)
|
|
883
|
+
end
|
|
884
|
+
end
|
|
885
|
+
query.reset_strategies!
|
|
585
886
|
end
|
|
586
887
|
end
|
|
587
888
|
|
|
@@ -620,15 +921,19 @@ module Mongoid
|
|
|
620
921
|
# @since 1.0.0
|
|
621
922
|
def js_query(criterion)
|
|
622
923
|
clone.tap do |query|
|
|
623
|
-
|
|
924
|
+
if negating?
|
|
925
|
+
query.add_operator_expression('$and',
|
|
926
|
+
[{'$nor' => [{'$where' => criterion}]}])
|
|
927
|
+
else
|
|
928
|
+
query.add_operator_expression('$where', criterion)
|
|
929
|
+
end
|
|
930
|
+
query.reset_strategies!
|
|
624
931
|
end
|
|
625
932
|
end
|
|
626
933
|
|
|
627
934
|
# Take the provided criterion and store it as a selection in the query
|
|
628
935
|
# selector.
|
|
629
936
|
#
|
|
630
|
-
# @api private
|
|
631
|
-
#
|
|
632
937
|
# @example Store the selection.
|
|
633
938
|
# selectable.selection({ field: "value" })
|
|
634
939
|
#
|
|
@@ -637,6 +942,7 @@ module Mongoid
|
|
|
637
942
|
# @return [ Selectable ] The cloned selectable.
|
|
638
943
|
#
|
|
639
944
|
# @since 1.0.0
|
|
945
|
+
# @api private
|
|
640
946
|
def selection(criterion = nil)
|
|
641
947
|
clone.tap do |query|
|
|
642
948
|
if criterion
|
|
@@ -648,26 +954,6 @@ module Mongoid
|
|
|
648
954
|
end
|
|
649
955
|
end
|
|
650
956
|
|
|
651
|
-
# Convert the criterion values to $in friendly values. This means you,
|
|
652
|
-
# array.
|
|
653
|
-
#
|
|
654
|
-
# @api private
|
|
655
|
-
#
|
|
656
|
-
# @example Convert all the values to arrays.
|
|
657
|
-
# selectable.with_array_values({ key: 1...4 })
|
|
658
|
-
#
|
|
659
|
-
# @param [ Hash ] criterion The criterion.
|
|
660
|
-
#
|
|
661
|
-
# @return [ Hash ] The $in friendly criterion (array values).
|
|
662
|
-
#
|
|
663
|
-
# @since 1.0.0
|
|
664
|
-
def with_array_values(criterion)
|
|
665
|
-
return nil unless criterion
|
|
666
|
-
criterion.each_pair do |key, value|
|
|
667
|
-
criterion[key] = value.__array__
|
|
668
|
-
end
|
|
669
|
-
end
|
|
670
|
-
|
|
671
957
|
class << self
|
|
672
958
|
|
|
673
959
|
# Get the methods on the selectable that can be forwarded to from a model.
|