Module: Origin::Optional
Overview
The optional module includes all behaviour that has to do with extra options surrounding queries, like skip, limit, sorting, etc.
Instance Attribute Summary collapse
-
#options ⇒ Object
Returns the value of attribute options.
- #options The query options.(Thequeryoptions.) ⇒ Object
Class Method Summary collapse
-
.forwardables ⇒ Array<Symbol>
Get the methods on the optional that can be forwarded to from a model.
Instance Method Summary collapse
-
#ascending(*fields) ⇒ Optional
(also: #asc)
Add ascending sorting options for all the provided fields.
-
#batch_size(value = nil) ⇒ Optional
Adds the option for telling MongoDB how many documents to retrieve in it’s batching.
-
#collation(collation_doc) ⇒ Optional
Set the collation.
-
#comment(comment = nil) ⇒ Optional
Associate a comment with the query.
-
#cursor_type(type) ⇒ Optional
Set the cursor type.
-
#descending(*fields) ⇒ Optional
(also: #desc)
Add descending sorting options for all the provided fields.
-
#hint(value = nil) ⇒ Optional
Add an index hint to the query options.
-
#limit(value = nil) ⇒ Optional
Add the number of documents to limit in the returned results.
-
#max_scan(value = nil) ⇒ Optional
Adds the option to limit the number of documents scanned in the collection.
-
#no_timeout ⇒ Optional
Tell the query not to timeout.
-
#only(*args) ⇒ Optional
Limits the results to only contain the fields provided.
-
#order_by(*spec) ⇒ Optional
(also: #order)
Adds sorting criterion to the options.
-
#reorder(*spec) ⇒ Optional
Instead of merging the order criteria, use this method to completely replace the existing ordering with the provided.
-
#skip(value = nil) ⇒ Optional
(also: #offset)
Add the number of documents to skip.
-
#slice(criterion = nil) ⇒ Optional
Limit the returned results via slicing embedded arrays.
-
#snapshot ⇒ Optional
Tell the query to operate in snapshot mode.
-
#without(*args) ⇒ Optional
Limits the results to only contain the fields not provided.
Methods included from Macroable
Instance Attribute Details
#options ⇒ Object
Returns the value of attribute options.
10 11 12 |
# File 'lib/origin/optional.rb', line 10 def @options end |
#options The query options.(Thequeryoptions.) ⇒ Object
10 |
# File 'lib/origin/optional.rb', line 10 attr_accessor :options |
Class Method Details
.forwardables ⇒ Array<Symbol>
Get the methods on the optional that can be forwarded to from a model.
401 402 403 |
# File 'lib/origin/optional.rb', line 401 def forwardables public_instance_methods(false) - [ :options, :options= ] end |
Instance Method Details
#ascending(*fields) ⇒ Optional Also known as: asc
Add ascending sorting options for all the provided fields.
22 23 24 |
# File 'lib/origin/optional.rb', line 22 def ascending(*fields) sort_with_list(*fields, 1) end |
#batch_size(value = nil) ⇒ Optional
Adds the option for telling MongoDB how many documents to retrieve in it’s batching.
40 41 42 |
# File 'lib/origin/optional.rb', line 40 def batch_size(value = nil) option(value) { || .store(:batch_size, value) } end |
#collation(collation_doc) ⇒ Optional
Set the collation. Can only be used with server versions >= 3.4.
316 317 318 |
# File 'lib/origin/optional.rb', line 316 def collation(collation_doc) clone.tap { |query| query..store(:collation, collation_doc) } end |
#comment(comment = nil) ⇒ Optional
Set profilingLevel to 2 and the comment will be logged in the profile collection along with the query.
Associate a comment with the query.
283 284 285 286 287 |
# File 'lib/origin/optional.rb', line 283 def comment(comment = nil) clone.tap do |query| query..store(:comment, comment) end end |
#cursor_type(type) ⇒ Optional
The cursor can be type :tailable or :tailable_await.
Set the cursor type.
302 303 304 |
# File 'lib/origin/optional.rb', line 302 def cursor_type(type) clone.tap { |query| query..store(:cursor_type, type) } end |
#descending(*fields) ⇒ Optional Also known as: desc
Add descending sorting options for all the provided fields.
54 55 56 |
# File 'lib/origin/optional.rb', line 54 def descending(*fields) sort_with_list(*fields, -1) end |
#hint(value = nil) ⇒ Optional
Add an index hint to the query options.
71 72 73 |
# File 'lib/origin/optional.rb', line 71 def hint(value = nil) option(value) { || .store(:hint, value) } end |
#limit(value = nil) ⇒ Optional
Add the number of documents to limit in the returned results.
85 86 87 88 89 90 91 |
# File 'lib/origin/optional.rb', line 85 def limit(value = nil) option(value) do |, query| val = value.to_i .store(:limit, val) query.pipeline.push("$limit" => val) if aggregating? end end |
#max_scan(value = nil) ⇒ Optional
Adds the option to limit the number of documents scanned in the collection.
104 105 106 |
# File 'lib/origin/optional.rb', line 104 def max_scan(value = nil) option(value) { || .store(:max_scan, value) } end |
#no_timeout ⇒ Optional
Tell the query not to timeout.
116 117 118 |
# File 'lib/origin/optional.rb', line 116 def no_timeout clone.tap { |query| query..store(:timeout, false) } end |
#only(*args) ⇒ Optional
Limits the results to only contain the fields provided.
130 131 132 133 134 135 136 137 |
# File 'lib/origin/optional.rb', line 130 def only(*args) args = args.flatten option(*args) do || .store( :fields, args.inject([:fields] || {}){ |sub, field| sub.tap { sub[field] = 1 }} ) end end |
#order_by(*spec) ⇒ Optional Also known as: order
Adds sorting criterion to the options.
170 171 172 173 174 175 176 177 178 179 |
# File 'lib/origin/optional.rb', line 170 def order_by(*spec) option(spec) do |, query| spec.compact.each do |criterion| criterion.__sort_option__.each_pair do |field, direction| add_sort_option(, field, direction) end query.pipeline.push("$sort" => [:sort]) if aggregating? end end end |
#reorder(*spec) ⇒ Optional
Instead of merging the order criteria, use this method to completely replace the existing ordering with the provided.
193 194 195 196 |
# File 'lib/origin/optional.rb', line 193 def reorder(*spec) .delete(:sort) order_by(*spec) end |
#skip(value = nil) ⇒ Optional Also known as: offset
Add the number of documents to skip.
208 209 210 211 212 213 214 |
# File 'lib/origin/optional.rb', line 208 def skip(value = nil) option(value) do |, query| val = value.to_i .store(:skip, val) query.pipeline.push("$skip" => val) if aggregating? end end |
#slice(criterion = nil) ⇒ Optional
Limit the returned results via slicing embedded arrays.
227 228 229 230 231 232 233 234 235 |
# File 'lib/origin/optional.rb', line 227 def slice(criterion = nil) option(criterion) do || .__union__( fields: criterion.inject({}) do |option, (field, val)| option.tap { |opt| opt.store(field, { "$slice" => val }) } end ) end end |
#snapshot ⇒ Optional
Tell the query to operate in snapshot mode.
245 246 247 248 249 |
# File 'lib/origin/optional.rb', line 245 def snapshot clone.tap do |query| query..store(:snapshot, true) end end |
#without(*args) ⇒ Optional
Limits the results to only contain the fields not provided.
261 262 263 264 265 266 267 268 |
# File 'lib/origin/optional.rb', line 261 def without(*args) args = args.flatten option(*args) do || .store( :fields, args.inject([:fields] || {}){ |sub, field| sub.tap { sub[field] = 0 }} ) end end |