mongoid 4.0.2 → 5.0.0.beta
Sign up to get free protection for your applications and to get access to all the features.
- 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
|