mongoid 4.0.2 → 5.0.0.beta
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
- data/CHANGELOG.md +66 -1
- data/README.md +14 -13
- data/lib/config/locales/en.yml +28 -28
- data/lib/mongoid.rb +28 -21
- data/lib/mongoid/atomic.rb +2 -4
- data/lib/mongoid/attributes.rb +7 -7
- data/lib/mongoid/attributes/processing.rb +4 -1
- data/lib/mongoid/attributes/readonly.rb +2 -2
- data/lib/mongoid/changeable.rb +4 -6
- data/lib/mongoid/clients.rb +142 -0
- data/lib/mongoid/clients/factory.rb +78 -0
- data/lib/mongoid/{sessions → clients}/options.rb +30 -19
- data/lib/mongoid/{sessions → clients}/storage_options.rb +27 -13
- data/lib/mongoid/{sessions → clients}/thread_options.rb +6 -3
- data/lib/mongoid/clients/validators.rb +2 -0
- data/lib/mongoid/{sessions → clients}/validators/storage.rb +5 -2
- data/lib/mongoid/composable.rb +3 -3
- data/lib/mongoid/config.rb +39 -41
- data/lib/mongoid/config/environment.rb +1 -1
- data/lib/mongoid/config/validators.rb +1 -1
- data/lib/mongoid/config/validators/{session.rb → client.rb} +31 -28
- data/lib/mongoid/contextual/aggregable/mongo.rb +1 -1
- data/lib/mongoid/contextual/atomic.rb +11 -11
- data/lib/mongoid/contextual/command.rb +9 -6
- data/lib/mongoid/contextual/geo_near.rb +17 -1
- data/lib/mongoid/contextual/map_reduce.rb +12 -11
- data/lib/mongoid/contextual/memory.rb +2 -5
- data/lib/mongoid/contextual/mongo.rb +92 -82
- data/lib/mongoid/contextual/none.rb +13 -0
- data/lib/mongoid/copyable.rb +6 -1
- data/lib/mongoid/criteria.rb +36 -3
- data/lib/mongoid/document.rb +3 -4
- data/lib/mongoid/errors.rb +6 -6
- data/lib/mongoid/errors/{mixed_session_configuration.rb → mixed_client_configuration.rb} +5 -5
- data/lib/mongoid/errors/no_client_config.rb +22 -0
- data/lib/mongoid/errors/{no_session_database.rb → no_client_database.rb} +4 -4
- data/lib/mongoid/errors/{no_session_hosts.rb → no_client_hosts.rb} +4 -4
- data/lib/mongoid/errors/{no_sessions_config.rb → no_clients_config.rb} +4 -4
- data/lib/mongoid/errors/no_default_client.rb +23 -0
- data/lib/mongoid/extensions/hash.rb +5 -1
- data/lib/mongoid/extensions/object.rb +3 -2
- data/lib/mongoid/extensions/set.rb +5 -5
- data/lib/mongoid/factory.rb +4 -2
- data/lib/mongoid/fields.rb +7 -2
- data/lib/mongoid/findable.rb +4 -1
- data/lib/mongoid/indexable.rb +15 -9
- data/lib/mongoid/persistable.rb +1 -2
- data/lib/mongoid/persistable/creatable.rb +2 -2
- data/lib/mongoid/persistable/deletable.rb +3 -3
- data/lib/mongoid/persistable/incrementable.rb +1 -1
- data/lib/mongoid/persistable/logical.rb +1 -1
- data/lib/mongoid/persistable/poppable.rb +1 -1
- data/lib/mongoid/persistable/pullable.rb +2 -2
- data/lib/mongoid/persistable/pushable.rb +2 -2
- data/lib/mongoid/persistable/renamable.rb +1 -1
- data/lib/mongoid/persistable/settable.rb +1 -1
- data/lib/mongoid/persistable/unsettable.rb +1 -1
- data/lib/mongoid/persistable/updatable.rb +2 -2
- data/lib/mongoid/persistable/upsertable.rb +1 -1
- data/lib/mongoid/query_cache.rb +98 -104
- data/lib/mongoid/railtie.rb +1 -21
- data/lib/mongoid/railties/database.rake +1 -1
- data/lib/mongoid/relations/builders.rb +3 -1
- data/lib/mongoid/relations/counter_cache.rb +1 -1
- data/lib/mongoid/relations/embedded/batchable.rb +3 -10
- data/lib/mongoid/relations/embedded/many.rb +4 -2
- data/lib/mongoid/relations/many.rb +1 -0
- data/lib/mongoid/relations/proxy.rb +6 -6
- data/lib/mongoid/relations/referenced/many.rb +2 -1
- data/lib/mongoid/relations/targets/enumerable.rb +11 -11
- data/lib/mongoid/relations/touchable.rb +1 -1
- data/lib/mongoid/reloadable.rb +2 -2
- data/lib/mongoid/scopable.rb +6 -17
- data/lib/mongoid/selectable.rb +1 -36
- data/lib/mongoid/serializable.rb +2 -2
- data/lib/mongoid/stateful.rb +0 -1
- data/lib/mongoid/tasks/database.rake +2 -2
- data/lib/mongoid/tasks/database.rb +23 -16
- data/lib/mongoid/threaded.rb +54 -33
- data/lib/mongoid/threaded/lifecycle.rb +21 -16
- data/lib/mongoid/traversable.rb +16 -1
- data/lib/mongoid/validatable.rb +1 -1
- data/lib/mongoid/validatable/queryable.rb +1 -1
- data/lib/mongoid/validatable/uniqueness.rb +3 -20
- data/lib/mongoid/version.rb +1 -1
- data/lib/rails/generators/mongoid/config/templates/mongoid.yml +91 -57
- data/lib/rails/mongoid.rb +2 -2
- data/spec/app/models/audio.rb +1 -1
- data/spec/app/models/band.rb +1 -0
- data/spec/app/models/company.rb +5 -0
- data/spec/app/models/label.rb +7 -0
- data/spec/app/models/pub.rb +6 -0
- data/spec/app/models/staff.rb +7 -0
- data/spec/app/models/store_as_dup_test1.rb +5 -0
- data/spec/app/models/store_as_dup_test2.rb +5 -0
- data/spec/config/mongoid.yml +7 -25
- data/spec/mongoid/atomic/paths_spec.rb +3 -11
- data/spec/mongoid/attributes/nested_spec.rb +16 -16
- data/spec/mongoid/attributes/readonly_spec.rb +80 -18
- data/spec/mongoid/attributes_spec.rb +3 -3
- data/spec/mongoid/changeable_spec.rb +70 -0
- data/spec/mongoid/clients/factory_spec.rb +284 -0
- data/spec/mongoid/{sessions → clients}/options_spec.rb +4 -6
- data/spec/mongoid/clients_spec.rb +739 -0
- data/spec/mongoid/config/environment_spec.rb +14 -11
- data/spec/mongoid/config_spec.rb +33 -48
- data/spec/mongoid/contextual/atomic_spec.rb +1 -17
- data/spec/mongoid/contextual/geo_near_spec.rb +35 -0
- data/spec/mongoid/contextual/mongo_spec.rb +26 -83
- data/spec/mongoid/contextual/none_spec.rb +15 -0
- data/spec/mongoid/copyable_spec.rb +35 -1
- data/spec/mongoid/criteria/findable_spec.rb +197 -0
- data/spec/mongoid/criteria/modifiable_spec.rb +7 -29
- data/spec/mongoid/criteria_spec.rb +74 -91
- data/spec/mongoid/document_spec.rb +1 -1
- data/spec/mongoid/errors/{mixed_session_configuration_spec.rb → mixed_client_configuration_spec.rb} +1 -1
- data/spec/mongoid/errors/{no_session_config_spec.rb → no_client_config_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_database_spec.rb → no_client_database_spec.rb} +4 -4
- data/spec/mongoid/errors/{no_session_hosts_spec.rb → no_client_hosts_spec.rb} +3 -3
- data/spec/mongoid/errors/{no_sessions_config_spec.rb → no_clients_config_spec.rb} +2 -2
- data/spec/mongoid/fields/localized_spec.rb +1 -0
- data/spec/mongoid/fields_spec.rb +1 -0
- data/spec/mongoid/findable_spec.rb +2 -23
- data/spec/mongoid/indexable_spec.rb +12 -8
- data/spec/mongoid/interceptable_spec.rb +15 -0
- data/spec/mongoid/persistable/settable_spec.rb +16 -0
- data/spec/mongoid/persistable/updatable_spec.rb +3 -2
- data/spec/mongoid/persistable_spec.rb +4 -4
- data/spec/mongoid/query_cache_spec.rb +13 -8
- data/spec/mongoid/relations/auto_save_spec.rb +1 -1
- data/spec/mongoid/relations/counter_cache_spec.rb +34 -0
- data/spec/mongoid/relations/eager/belongs_to_spec.rb +9 -0
- data/spec/mongoid/relations/eager/has_and_belongs_to_many_spec.rb +3 -3
- data/spec/mongoid/relations/embedded/many_spec.rb +123 -1
- data/spec/mongoid/relations/embedded/one_spec.rb +3 -3
- data/spec/mongoid/relations/proxy_spec.rb +28 -0
- data/spec/mongoid/relations/referenced/in_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/many_spec.rb +47 -23
- data/spec/mongoid/relations/referenced/many_to_many_spec.rb +1 -1
- data/spec/mongoid/relations/referenced/one_spec.rb +1 -1
- data/spec/mongoid/relations/targets/enumerable_spec.rb +9 -2
- data/spec/mongoid/reloadable_spec.rb +6 -6
- data/spec/mongoid/scopable_spec.rb +41 -28
- data/spec/mongoid/selectable_spec.rb +6 -16
- data/spec/mongoid/tasks/database_rake_spec.rb +13 -13
- data/spec/mongoid/tasks/database_spec.rb +2 -2
- data/spec/mongoid/threaded_spec.rb +0 -7
- data/spec/mongoid/traversable_spec.rb +2 -2
- data/spec/mongoid/validatable/uniqueness_spec.rb +30 -1
- data/spec/mongoid_spec.rb +13 -15
- data/spec/rails/mongoid_spec.rb +13 -4
- data/spec/spec_helper.rb +44 -27
- data/spec/support/authorization.rb +12 -0
- data/spec/support/expectations.rb +14 -0
- metadata +52 -59
- data/lib/mongoid/contextual/find_and_modify.rb +0 -69
- data/lib/mongoid/contextual/text_search.rb +0 -178
- data/lib/mongoid/criteria/#findable.rb# +0 -141
- data/lib/mongoid/errors/no_default_session.rb +0 -23
- data/lib/mongoid/errors/no_session_config.rb +0 -22
- data/lib/mongoid/log_subscriber.rb +0 -55
- data/lib/mongoid/positional.rb +0 -71
- data/lib/mongoid/sessions.rb +0 -125
- data/lib/mongoid/sessions/factory.rb +0 -131
- data/lib/mongoid/sessions/mongo_uri.rb +0 -93
- data/lib/mongoid/sessions/validators.rb +0 -2
- data/lib/mongoid/support/query_counter.rb +0 -23
- data/spec/helpers.rb +0 -18
- data/spec/mongoid/#atomic_spec.rb# +0 -365
- data/spec/mongoid/contextual/find_and_modify_spec.rb +0 -220
- data/spec/mongoid/contextual/text_search_spec.rb +0 -209
- data/spec/mongoid/log_subscriber_spec.rb +0 -75
- data/spec/mongoid/positional_spec.rb +0 -222
- data/spec/mongoid/sessions/factory_spec.rb +0 -333
- data/spec/mongoid/sessions/mongo_uri_spec.rb +0 -103
- data/spec/mongoid/sessions_spec.rb +0 -1252
@@ -1,69 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Contextual
|
4
|
-
class FindAndModify
|
5
|
-
include Command
|
6
|
-
|
7
|
-
# @attribute [r] criteria The criteria for the context.
|
8
|
-
# @attribute [r] options The command options.
|
9
|
-
# @attribute [r] update The updates.
|
10
|
-
# @attribute [r] query The Moped query.
|
11
|
-
attr_reader :criteria, :options, :update, :query
|
12
|
-
|
13
|
-
# Initialize the find and modify command, used for MongoDB's
|
14
|
-
# $findAndModify.
|
15
|
-
#
|
16
|
-
# @example Initialize the command.
|
17
|
-
# FindAndModify.new(criteria, { "$set" => { likes: 1 }})
|
18
|
-
#
|
19
|
-
# @param [ Criteria ] criteria The criteria.
|
20
|
-
# @param [ Hash ] update The updates.
|
21
|
-
# @param [ Hash ] options The command options.
|
22
|
-
#
|
23
|
-
# @option options [ true, false ] :new Return the updated document.
|
24
|
-
# @option options [ true, false ] :remove Delete the first document.
|
25
|
-
# @option options [ true, false ] :upsert Create the document if it doesn't exist.
|
26
|
-
#
|
27
|
-
# @since 3.0.0
|
28
|
-
def initialize(collection, criteria, update, options = {})
|
29
|
-
@collection, @criteria, @options, @update =
|
30
|
-
collection, criteria, options, update.mongoize
|
31
|
-
@query = collection.find(criteria.selector)
|
32
|
-
apply_criteria_options
|
33
|
-
end
|
34
|
-
|
35
|
-
# Get the result of the $findAndModify.
|
36
|
-
#
|
37
|
-
# @example Get the result.
|
38
|
-
# find_and_modify.result
|
39
|
-
#
|
40
|
-
# @return [ Hash ] The result of the command.
|
41
|
-
#
|
42
|
-
# @since 3.0.0
|
43
|
-
def result
|
44
|
-
query.modify(update, options)
|
45
|
-
end
|
46
|
-
|
47
|
-
private
|
48
|
-
|
49
|
-
# Apply criteria specific options - query, sort, fields.
|
50
|
-
#
|
51
|
-
# @api private
|
52
|
-
#
|
53
|
-
# @example Apply the criteria options
|
54
|
-
# find_and_modify.apply_criteria_options
|
55
|
-
#
|
56
|
-
# @return [ nil ] Nothing.
|
57
|
-
#
|
58
|
-
# @since 3.0.0
|
59
|
-
def apply_criteria_options
|
60
|
-
if spec = criteria.options[:sort]
|
61
|
-
query.sort(spec)
|
62
|
-
end
|
63
|
-
if spec = criteria.options[:fields]
|
64
|
-
query.select(spec)
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
@@ -1,178 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Contextual
|
4
|
-
|
5
|
-
# Wraps behaviour around a lazy text search command.
|
6
|
-
#
|
7
|
-
# @since 4.0.0
|
8
|
-
class TextSearch
|
9
|
-
include Enumerable
|
10
|
-
include Command
|
11
|
-
|
12
|
-
delegate :[], to: :results
|
13
|
-
delegate :==, :empty?, to: :entries
|
14
|
-
|
15
|
-
# Iterate over the results of the text search command.
|
16
|
-
#
|
17
|
-
# @example Iterate over the results.
|
18
|
-
# text_search.each do |doc|
|
19
|
-
# #...
|
20
|
-
# end
|
21
|
-
#
|
22
|
-
# @return [ Enumerator ] The enumerator.
|
23
|
-
#
|
24
|
-
# @since 4.0.0
|
25
|
-
def each
|
26
|
-
if block_given?
|
27
|
-
documents.each do |doc|
|
28
|
-
yield doc
|
29
|
-
end
|
30
|
-
else
|
31
|
-
to_enum
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
# Instantiate a new text search lazy proxy.
|
36
|
-
#
|
37
|
-
# @example Instantiate the text search.
|
38
|
-
# TextSearch.new(collection, criteria, "test")
|
39
|
-
#
|
40
|
-
# @param [ Moped::Collection ] collection The collection to execute on.
|
41
|
-
# @param [ Criteria ] criteria The criteria to filter results.
|
42
|
-
# @param [ String ] search_string The search string.
|
43
|
-
#
|
44
|
-
# @since 4.0.0
|
45
|
-
def initialize(collection, criteria, search_string)
|
46
|
-
@collection, @criteria = collection, criteria
|
47
|
-
command[:text] = collection.name.to_s
|
48
|
-
command[:search] = search_string
|
49
|
-
apply_criteria_options
|
50
|
-
end
|
51
|
-
|
52
|
-
# Inspect the text search object.
|
53
|
-
#
|
54
|
-
# @example Inspect the text search.
|
55
|
-
# text_search.inspect
|
56
|
-
#
|
57
|
-
# @return [ String ] The inspection.
|
58
|
-
#
|
59
|
-
# @since 4.0.0
|
60
|
-
def inspect
|
61
|
-
%Q{#<Mongoid::Contextual::TextSearch
|
62
|
-
selector: #{criteria.selector.inspect}
|
63
|
-
class: #{criteria.klass}
|
64
|
-
search: #{command[:search]}
|
65
|
-
filter: #{command[:filter] || "N/A"}
|
66
|
-
project: #{command[:project] || "N/A"}
|
67
|
-
limit: #{command[:limit] || "N/A"}
|
68
|
-
language: #{command[:language] || "default"}>
|
69
|
-
}
|
70
|
-
end
|
71
|
-
|
72
|
-
# Execute the text search command, and return the raw results (in hash
|
73
|
-
# form).
|
74
|
-
#
|
75
|
-
# @example Execute the command.
|
76
|
-
# text_search.execute
|
77
|
-
#
|
78
|
-
# @return [ Hash ] The raw results.
|
79
|
-
#
|
80
|
-
# @since 4.0.0
|
81
|
-
def execute
|
82
|
-
results
|
83
|
-
end
|
84
|
-
|
85
|
-
# Set the language of the text search.
|
86
|
-
#
|
87
|
-
# @example Set the text search language.
|
88
|
-
# text_search.language("deutsch")
|
89
|
-
#
|
90
|
-
# @param [ String ] value The name of the language.
|
91
|
-
#
|
92
|
-
# @return [ TextSearch ] The modified text search.
|
93
|
-
#
|
94
|
-
# @since 4.0.0
|
95
|
-
def language(value)
|
96
|
-
command[:language] = value
|
97
|
-
self
|
98
|
-
end
|
99
|
-
|
100
|
-
# Limits the fields returned by the text search for each document. By
|
101
|
-
# default, _id is always included.
|
102
|
-
#
|
103
|
-
# @example Limit the returned fields.
|
104
|
-
# text_search.project(name: 1, title: 1)
|
105
|
-
#
|
106
|
-
# @param [ Hash ] value The fields to project.
|
107
|
-
#
|
108
|
-
# @return [ TextSearch ] The modified text search.
|
109
|
-
#
|
110
|
-
# @since 4.0.0
|
111
|
-
def project(value)
|
112
|
-
command[:project] = value
|
113
|
-
self
|
114
|
-
end
|
115
|
-
|
116
|
-
# Get the raw statistics returned from the text search.
|
117
|
-
#
|
118
|
-
# @example Get the stats.
|
119
|
-
# text_search.stats
|
120
|
-
#
|
121
|
-
# @return [ Hash ] The raw statistics.
|
122
|
-
#
|
123
|
-
# @since 4.0.0
|
124
|
-
def stats
|
125
|
-
results["stats"]
|
126
|
-
end
|
127
|
-
|
128
|
-
private
|
129
|
-
|
130
|
-
# Apply the options from the criteria to the text search command.
|
131
|
-
#
|
132
|
-
# @api private
|
133
|
-
#
|
134
|
-
# @example Apply the criteria options, filter and limit only.
|
135
|
-
# text_search.apply_criteria_options
|
136
|
-
#
|
137
|
-
# @return [ nil ] Nothing.
|
138
|
-
#
|
139
|
-
# @since 4.0.0
|
140
|
-
def apply_criteria_options
|
141
|
-
command[:filter] = criteria.selector
|
142
|
-
if limit = criteria.options[:limit]
|
143
|
-
command[:limit] = limit
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
# Get the results of the text search as documents.
|
148
|
-
#
|
149
|
-
# @api private
|
150
|
-
#
|
151
|
-
# @example Get the results as documents.
|
152
|
-
# text_search.documents
|
153
|
-
#
|
154
|
-
# @return [ Array<Document> ] The documents.
|
155
|
-
#
|
156
|
-
# @since 4.0.0
|
157
|
-
def documents
|
158
|
-
results["results"].map do |attributes|
|
159
|
-
Factory.from_db(criteria.klass, attributes["obj"], command[:project])
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
# Get the raw results.
|
164
|
-
#
|
165
|
-
# @api private
|
166
|
-
#
|
167
|
-
# @example Get the raw results.
|
168
|
-
# text_search.results
|
169
|
-
#
|
170
|
-
# @return [ Hash ] The raw results.
|
171
|
-
#
|
172
|
-
# @since 4.0.0
|
173
|
-
def results
|
174
|
-
@results ||= session.command(command)
|
175
|
-
end
|
176
|
-
end
|
177
|
-
end
|
178
|
-
end
|
@@ -1,141 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
class Criteria
|
4
|
-
module Findable
|
5
|
-
|
6
|
-
# Execute the criteria or raise an error if no documents found.
|
7
|
-
#
|
8
|
-
# @example Execute or raise
|
9
|
-
# criteria.execute_or_raise(id)
|
10
|
-
#
|
11
|
-
# @param [ Object ] args The arguments passed.
|
12
|
-
#
|
13
|
-
# @raise [ Errors::DocumentNotFound ] If nothing returned.
|
14
|
-
#
|
15
|
-
# @return [ Document, Array<Document> ] The document(s).
|
16
|
-
#
|
17
|
-
# @since 2.0.0
|
18
|
-
def execute_or_raise(ids, multi)
|
19
|
-
result = multiple_from_db(ids)
|
20
|
-
check_for_missing_documents!(result, ids)
|
21
|
-
multi ? result : result.first
|
22
|
-
end
|
23
|
-
|
24
|
-
# Find the matchind document(s) in the criteria for the provided ids.
|
25
|
-
#
|
26
|
-
# @example Find by an id.
|
27
|
-
# criteria.find(BSON::ObjectId.new)
|
28
|
-
#
|
29
|
-
# @example Find by multiple ids.
|
30
|
-
# criteria.find([ BSON::ObjectId.new, BSON::ObjectId.new ])
|
31
|
-
#
|
32
|
-
# @param [ Array<BSON::ObjectId> ] args The ids to search for.
|
33
|
-
#
|
34
|
-
# @return [ Array<Document>, Document ] The matching document(s).
|
35
|
-
#
|
36
|
-
# @since 1.0.0
|
37
|
-
def find(*args)
|
38
|
-
ids = args.__find_args__
|
39
|
-
raise_invalid if ids.any?(&:nil?)
|
40
|
-
p "YOOO"
|
41
|
-
p ids
|
42
|
-
for_ids(ids).execute_or_raise(ids, args.multi_arged?)
|
43
|
-
end
|
44
|
-
|
45
|
-
# Adds a criterion to the +Criteria+ that specifies an id that must be matched.
|
46
|
-
#
|
47
|
-
# @example Add a single id criteria.
|
48
|
-
# criteria.for_ids([ 1 ])
|
49
|
-
#
|
50
|
-
# @example Add multiple id criteria.
|
51
|
-
# criteria.for_ids([ 1, 2 ])
|
52
|
-
#
|
53
|
-
# @param [ Array ] ids The array of ids.
|
54
|
-
#
|
55
|
-
# @return [ Criteria ] The cloned criteria.
|
56
|
-
def for_ids(ids)
|
57
|
-
ids = mongoize_ids(ids)
|
58
|
-
if ids.size > 1
|
59
|
-
send(id_finder, { _id: { "$in" => ids }})
|
60
|
-
else
|
61
|
-
send(id_finder, { _id: ids.first })
|
62
|
-
end
|
63
|
-
end
|
64
|
-
|
65
|
-
# Get the documents from the identity map, and if not found hit the
|
66
|
-
# database.
|
67
|
-
#
|
68
|
-
# @example Get the documents from the map or criteria.
|
69
|
-
# criteria.multiple_from_map_or_db(ids)
|
70
|
-
#
|
71
|
-
# @param [ ids ] The searched ids.
|
72
|
-
#
|
73
|
-
# @return [ Array<Document> ] The found documents.
|
74
|
-
def multiple_from_db(ids)
|
75
|
-
return entries if embedded?
|
76
|
-
ids = mongoize_ids(ids)
|
77
|
-
ids.empty? ? [] : from_database(ids)
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
# Get the finder used to generate the id query.
|
83
|
-
#
|
84
|
-
# @api private
|
85
|
-
#
|
86
|
-
# @example Get the id finder.
|
87
|
-
# criteria.id_finder
|
88
|
-
#
|
89
|
-
# @return [ Symbol ] The name of the finder method.
|
90
|
-
#
|
91
|
-
# @since 3.1.0
|
92
|
-
def id_finder
|
93
|
-
@id_finder ||= extract_id ? :all_of : :where
|
94
|
-
end
|
95
|
-
|
96
|
-
# Get documents from the database only.
|
97
|
-
#
|
98
|
-
# @api private
|
99
|
-
#
|
100
|
-
# @example Get documents from the database.
|
101
|
-
# criteria.from_database(ids)
|
102
|
-
#
|
103
|
-
# @param [ Array<Object> ] ids The ids to fetch with.
|
104
|
-
#
|
105
|
-
# @return [ Array<Document> ] The matching documents.
|
106
|
-
#
|
107
|
-
# @since 3.0.0
|
108
|
-
def from_database(ids)
|
109
|
-
(ids.size > 1 ? any_in(id: ids) : where(id: ids.first)).entries
|
110
|
-
end
|
111
|
-
|
112
|
-
# Convert all the ids to their proper types.
|
113
|
-
#
|
114
|
-
# @api private
|
115
|
-
#
|
116
|
-
# @example Convert the ids.
|
117
|
-
# criteria.mongoize_ids(ids)
|
118
|
-
#
|
119
|
-
# @param [ Array<Object> ] ids The ids to convert.
|
120
|
-
#
|
121
|
-
# @return [ Array<Object> ] The converted ids.
|
122
|
-
#
|
123
|
-
# @since 3.0.0
|
124
|
-
def mongoize_ids(ids)
|
125
|
-
ids.map{ |id| klass.fields["_id"].mongoize(id) }
|
126
|
-
end
|
127
|
-
|
128
|
-
# Convenience method of raising an invalid options error.
|
129
|
-
#
|
130
|
-
# @example Raise the error.
|
131
|
-
# criteria.raise_invalid
|
132
|
-
#
|
133
|
-
# @raise [ Errors::InvalidOptions ] The error.
|
134
|
-
#
|
135
|
-
# @since 2.0.0
|
136
|
-
def raise_invalid
|
137
|
-
raise Errors::InvalidFind.new
|
138
|
-
end
|
139
|
-
end
|
140
|
-
end
|
141
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Errors
|
4
|
-
|
5
|
-
# This error is raised when a default session is not defined.
|
6
|
-
class NoDefaultSession < MongoidError
|
7
|
-
|
8
|
-
# Create the new error with the defined session names.
|
9
|
-
#
|
10
|
-
# @example Create the new error.
|
11
|
-
# NoDefaultSession.new([ :secondary ])
|
12
|
-
#
|
13
|
-
# @param [ Array<Symbol> ] keys The defined sessions.
|
14
|
-
#
|
15
|
-
# @since 3.0.0
|
16
|
-
def initialize(keys)
|
17
|
-
super(
|
18
|
-
compose_message("no_default_session", { keys: keys.join(", ") })
|
19
|
-
)
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
module Errors
|
4
|
-
|
5
|
-
# This error is raised when attempting to create a new session that does
|
6
|
-
# not have a named configuration.
|
7
|
-
class NoSessionConfig < MongoidError
|
8
|
-
|
9
|
-
# Create the new error.
|
10
|
-
#
|
11
|
-
# @example Create the error.
|
12
|
-
# NoSessionConfig.new(:secondary)
|
13
|
-
#
|
14
|
-
# @param [ String, Symbol ] name The name of the session.
|
15
|
-
#
|
16
|
-
# @since 3.0.0
|
17
|
-
def initialize(name)
|
18
|
-
super(compose_message("no_session_config", { name: name }))
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,55 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
module Mongoid
|
3
|
-
# A Log subscriber to the moped queries
|
4
|
-
#
|
5
|
-
# @since 4.0.0
|
6
|
-
class LogSubscriber < ActiveSupport::LogSubscriber
|
7
|
-
|
8
|
-
# Log the query operation on moped
|
9
|
-
#
|
10
|
-
# @since 4.0.0
|
11
|
-
def query(event)
|
12
|
-
return unless logger.debug?
|
13
|
-
|
14
|
-
payload = event.payload
|
15
|
-
runtime = ("%.4fms" % event.duration)
|
16
|
-
debug(payload[:prefix], payload[:ops], runtime)
|
17
|
-
end
|
18
|
-
|
19
|
-
def query_cache(event)
|
20
|
-
return unless logger.debug?
|
21
|
-
|
22
|
-
database, collection, selector = event.payload[:key]
|
23
|
-
operation = "%-12s database=%s collection=%s selector=%s" % ["QUERY CACHE", database, collection, selector.inspect]
|
24
|
-
logger.debug operation
|
25
|
-
end
|
26
|
-
# Log the provided operations.
|
27
|
-
#
|
28
|
-
# @example Delegates the operation to moped so it can log it.
|
29
|
-
# subscriber.debug("MOPED", {}, 30)
|
30
|
-
#
|
31
|
-
# @param [ String ] prefix The prefix for all operations in the log.
|
32
|
-
# @param [ Array ] ops The operations.
|
33
|
-
# @param [ String ] runtime The runtime in formatted ms.
|
34
|
-
#
|
35
|
-
# @since 4.0.0
|
36
|
-
def debug(prefix, operations, runtime)
|
37
|
-
Moped::Loggable.log_operations(prefix, operations, runtime)
|
38
|
-
end
|
39
|
-
|
40
|
-
# Get the logger.
|
41
|
-
#
|
42
|
-
# @example Get the logger.
|
43
|
-
# subscriber.logger
|
44
|
-
#
|
45
|
-
# @return [ Logger ] The logger.
|
46
|
-
#
|
47
|
-
# @since 4.0.0
|
48
|
-
def logger
|
49
|
-
Moped.logger
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
Mongoid::LogSubscriber.attach_to :moped
|
55
|
-
Mongoid::LogSubscriber.attach_to :mongoid
|