Module: Origin::Selectable

Extended by:
Macroable
Includes:
Mergeable
Included in:
Queryable
Defined in:
lib/origin/selectable.rb

Overview

An origin selectable is selectable, in that it has the ability to select document from the database. The selectable module brings all functionality to the selectable that has to do with building MongoDB selectors.

Instance Attribute Summary (collapse)

Attributes included from Mergeable

#strategy, #strategy The name of the current strategy.

Class Method Summary (collapse)

Instance Method Summary (collapse)

Methods included from Macroable

key

Methods included from Mergeable

#intersect, #override, #reset_strategies!, #union

Instance Attribute Details

- (Object) negating

Returns the value of attribute negating



13
14
15
# File 'lib/origin/selectable.rb', line 13

def negating
  @negating
end

- (Object) negating If the next spression is negated.



13
# File 'lib/origin/selectable.rb', line 13

attr_accessor :negating, :selector

- (Object) selector

Returns the value of attribute selector



13
14
15
# File 'lib/origin/selectable.rb', line 13

def selector
  @selector
end

- (Object) selector The query selector.



13
# File 'lib/origin/selectable.rb', line 13

attr_accessor :negating, :selector

Class Method Details

+ (Array<Symbol>) forwardables

Get the methods on the selectable that can be forwarded to from a model.

Examples:

Get the forwardable methods.

Selectable.forwardables

Returns:

  • (Array<Symbol>)

    The names of the forwardable methods.

Since:

  • 1.0.0



634
635
636
637
# File 'lib/origin/selectable.rb', line 634

def forwardables
  public_instance_methods(false) -
    [ :negating, :negating=, :negating?, :selector, :selector= ]
end

Instance Method Details

- (Selectable) all(criterion = nil) Also known as: all_in

Add the $all criterion.

Examples:

Add the criterion.

selectable.all(field: [ 1, 2 ])

Execute an $all in a where query.

selectable.where(:field.all => [ 1, 2 ])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The key value pairs for $all matching.

Returns:

Since:

  • 1.0.0



28
29
30
# File 'lib/origin/selectable.rb', line 28

def all(criterion = nil)
  send(strategy || :__union__, with_array_values(criterion), "$all")
end

- (Selectable) and(*criterion) Also known as: all_of

Add the $and criterion.

Examples:

Add the criterion.

selectable.and({ field: value }, { other: value })

Parameters:

  • criterion (Array<Hash>)

    Multiple key/value pair matches that all must match to return results.

Returns:

Since:

  • 1.0.0



45
46
47
# File 'lib/origin/selectable.rb', line 45

def and(*criterion)
  __multi__(criterion, "$and")
end

- (Selectable) between(criterion = nil)

Add the range selection.

Examples:

Match on results within a single range.

selectable.between(field: 1..2)

Match on results between multiple ranges.

selectable.between(field: 1..2, other: 5..7)

Parameters:

  • criterion (Hash) (defaults to: nil)

    Multiple key/range pairs.

Returns:

Since:

  • 1.0.0



63
64
65
66
67
68
69
70
# File 'lib/origin/selectable.rb', line 63

def between(criterion = nil)
  selection(criterion) do |selector, field, value|
    selector.store(
      field,
      { "$gte" => value.min, "$lte" => value.max }
    )
  end
end

- (Selectable) elem_match(criterion = nil)

Select with an $elemMatch.

Examples:

Add criterion for a single match.

selectable.elem_match(field: { name: "value" })

Add criterion for multiple matches.

selectable.elem_match(
  field: { name: "value" },
  other: { name: "value"}
)

Execute an $elemMatch in a where query.

selectable.where(:field.elem_match => { name: "value" })

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/match pairs.

Returns:

Since:

  • 1.0.0



91
92
93
# File 'lib/origin/selectable.rb', line 91

def elem_match(criterion = nil)
  __override__(criterion, "$elemMatch")
end

- (Selectable) exists(criterion = nil)

Add the $exists selection.

Examples:

Add a single selection.

selectable.exists(field: true)

Add multiple selections.

selectable.exists(field: true, other: false)

Execute an $exists in a where query.

selectable.where(:field.exists => true)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/boolean existence checks.

Returns:

Since:

  • 1.0.0



112
113
114
115
116
# File 'lib/origin/selectable.rb', line 112

def exists(criterion = nil)
  typed_override(criterion, "$exists") do |value|
    ::Boolean.evolve(value)
  end
end

- (Selectable) gt(criterion = nil)

Add the $gt criterion to the selector.

Examples:

Add the $gt criterion.

selectable.gt(age: 60)

Execute an $gt in a where query.

selectable.where(:field.gt => 10)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/value pairs to check.

Returns:

Since:

  • 1.0.0



134
135
136
# File 'lib/origin/selectable.rb', line 134

def gt(criterion = nil)
  __override__(criterion, "$gt")
end

- (Selectable) gte(criterion = nil)

Add the $gte criterion to the selector.

Examples:

Add the $gte criterion.

selectable.gte(age: 60)

Execute an $gte in a where query.

selectable.where(:field.gte => 10)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/value pairs to check.

Returns:

Since:

  • 1.0.0



152
153
154
# File 'lib/origin/selectable.rb', line 152

def gte(criterion = nil)
  __override__(criterion, "$gte")
end

- (Selectable) in(criterion = nil) Also known as: any_in

Adds the $in selection to the selectable.

Examples:

Add $in selection on an array.

selectable.in(age: [ 1, 2, 3 ])

Add $in selection on a range.

selectable.in(age: 18..24)

Execute an $in in a where query.

selectable.where(:field.in => [ 1, 2, 3 ])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/value criterion pairs.

Returns:

Since:

  • 1.0.0



173
174
175
# File 'lib/origin/selectable.rb', line 173

def in(criterion = nil)
  send(strategy || :__intersect__, with_array_values(criterion), "$in")
end

- (Selectable) lt(criterion = nil)

Add the $lt criterion to the selector.

Examples:

Add the $lt criterion.

selectable.lt(age: 60)

Execute an $lt in a where query.

selectable.where(:field.lt => 10)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/value pairs to check.

Returns:

Since:

  • 1.0.0



192
193
194
# File 'lib/origin/selectable.rb', line 192

def lt(criterion = nil)
  __override__(criterion, "$lt")
end

- (Selectable) lte(criterion = nil)

Add the $lte criterion to the selector.

Examples:

Add the $lte criterion.

selectable.lte(age: 60)

Execute an $lte in a where query.

selectable.where(:field.lte => 10)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/value pairs to check.

Returns:

Since:

  • 1.0.0



210
211
212
# File 'lib/origin/selectable.rb', line 210

def lte(criterion = nil)
  __override__(criterion, "$lte")
end

- (Selectable) max_distance(criterion = nil)

Add a $maxDistance selection to the selectable.

Examples:

Add the $maxDistance selection.

selectable.max_distance(location: 10)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/distance pairs.

Returns:

Since:

  • 1.0.0



225
226
227
# File 'lib/origin/selectable.rb', line 225

def max_distance(criterion = nil)
  __add__(criterion, "$maxDistance")
end

- (Selectable) mod(criterion = nil)

Adds $mod selection to the selectable.

Examples:

Add the $mod selection.

selectable.mod(field: [ 10, 1 ])

Execute an $mod in a where query.

selectable.where(:field.mod => [ 10, 1 ])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/mod selections.

Returns:

Since:

  • 1.0.0



242
243
244
# File 'lib/origin/selectable.rb', line 242

def mod(criterion = nil)
  __override__(criterion, "$mod")
end

- (Selectable) ne(criterion = nil) Also known as: excludes

Adds $ne selection to the selectable.

Examples:

Query for a value $ne to something.

selectable.ne(field: 10)

Execute an $ne in a where query.

selectable.where(:field.ne => "value")

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/ne selections.

Returns:

Since:

  • 1.0.0



260
261
262
# File 'lib/origin/selectable.rb', line 260

def ne(criterion = nil)
  __override__(criterion, "$ne")
end

- (Selectable) near(criterion = nil)

Adds a $near criterion to a geo selection.

Examples:

Add the $near selection.

selectable.near(location: [ 23.1, 12.1 ])

Execute an $near in a where query.

selectable.where(:field.near => [ 23.2, 12.1 ])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/location pair.

Returns:

Since:

  • 1.0.0



279
280
281
# File 'lib/origin/selectable.rb', line 279

def near(criterion = nil)
  __override__(criterion, "$near")
end

- (Selectable) near_sphere(criterion = nil)

Adds a $nearSphere criterion to a geo selection.

Examples:

Add the $nearSphere selection.

selectable.near_sphere(location: [ 23.1, 12.1 ])

Execute an $nearSphere in a where query.

selectable.where(:field.near_sphere => [ 10.11, 3.22 ])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/location pair.

Returns:

Since:

  • 1.0.0



297
298
299
# File 'lib/origin/selectable.rb', line 297

def near_sphere(criterion = nil)
  __override__(criterion, "$nearSphere")
end

- (true, false) negating?

Is the current selectable negating the next selection?

Examples:

Is the selectable negating?

selectable.negating?

Returns:

  • (true, false)

    If the selectable is negating.

Since:

  • 1.0.0



346
347
348
# File 'lib/origin/selectable.rb', line 346

def negating?
  !!negating
end

- (Selectable) nin(criterion = nil) Also known as: not_in

Adds the $nin selection to the selectable.

Examples:

Add $nin selection on an array.

selectable.nin(age: [ 1, 2, 3 ])

Add $nin selection on a range.

selectable.nin(age: 18..24)

Execute an $nin in a where query.

selectable.where(:field.nin => [ 1, 2, 3 ])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/value criterion pairs.

Returns:

Since:

  • 1.0.0



318
319
320
# File 'lib/origin/selectable.rb', line 318

def nin(criterion = nil)
  send(strategy || :__intersect__, with_array_values(criterion), "$nin")
end

- (Selectable) nor(*criterion)

Adds $nor selection to the selectable.

Examples:

Add the $nor selection.

selectable.nor(field: 1, field: 2)

Parameters:

  • criterion (Array)

    An array of hash criterion.

Returns:

Since:

  • 1.0.0



334
335
336
# File 'lib/origin/selectable.rb', line 334

def nor(*criterion)
  __multi__(criterion, "$nor")
end

- (Selectable) not

Negate the next selection.

Examples:

Negate the selection.

selectable.not.in(field: [ 1, 2 ])

Returns:

Since:

  • 1.0.0



358
359
360
# File 'lib/origin/selectable.rb', line 358

def not
  tap { |query| query.negating = true }
end

- (Selectable) or(*criterion) Also known as: any_of

Adds $or selection to the selectable.

Examples:

Add the $or selection.

selectable.or(field: 1, field: 2)

Parameters:

  • criterion (Array)

    An array of hash criterion.

Returns:

Since:

  • 1.0.0



372
373
374
# File 'lib/origin/selectable.rb', line 372

def or(*criterion)
  __multi__(criterion, "$or")
end

- (Selectable) where(criterion = nil)

This is the general entry point for most MongoDB queries. This either creates a standard field: value selection, and expanded selection with the use of hash methods, or a $where selection if a string is provided.

Examples:

Add a standard selection.

selectable.where(name: "syd")

Add a javascript selection.

selectable.where("this.name == 'syd'")

Parameters:

  • criterion (String, Hash) (defaults to: nil)

    The javascript or standard selection.

Returns:

Since:

  • 1.0.0



441
442
443
# File 'lib/origin/selectable.rb', line 441

def where(criterion = nil)
  criterion.is_a?(String) ? js_query(criterion) : expr_query(criterion)
end

- (Selectable) with_size(criterion = nil)

Note:

This method is named #with_size not to conflict with any existing #size method on enumerables or symbols.

Add a $size selection for array fields.

Examples:

Add the $size selection.

selectable.with_size(field: 5)

Execute an $size in a where query.

selectable.where(:field.with_size => 10)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/size pairs criterion.

Returns:

Since:

  • 1.0.0



393
394
395
396
397
# File 'lib/origin/selectable.rb', line 393

def with_size(criterion = nil)
  typed_override(criterion, "$size") do |value|
    ::Integer.evolve(value)
  end
end

- (Selectable) with_type(criterion = nil)

Note:

vurl.me/PGOU contains a list of all types.

Adds a $type selection to the selectable.

Examples:

Add the $type selection.

selectable.with_type(field: 15)

Execute an $type in a where query.

selectable.where(:field.with_type => 15)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/type pairs.

Returns:

Since:

  • 1.0.0



417
418
419
420
421
# File 'lib/origin/selectable.rb', line 417

def with_type(criterion = nil)
  typed_override(criterion, "$type") do |value|
    ::Integer.evolve(value)
  end
end

- (Selectable) within_box(criterion = nil)

Adds the $within/$box selection to the selectable.

Examples:

Add the selection.

selectable.within_box(location: [[ 1, 10 ], [ 10, 1 ]])

Execute an $within/$box in a where query.

selectable.where(:field.within_box => [[ 1, 10 ], [ 10, 1 ]])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/box corner criterion.

Returns:

Since:

  • 1.0.0



458
459
460
# File 'lib/origin/selectable.rb', line 458

def within_box(criterion = nil)
  __expanded__(criterion, "$within", "$box")
end

- (Selectable) within_circle(criterion = nil)

Adds the $within/$center selection to the selectable.

Examples:

Add the selection.

selectable.within_circle(location: [[ 1, 10 ], 25 ])

Execute an $within/$center in a where query.

selectable.where(:field.within_circle => [[ 1, 10 ], 25 ])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/radius criterion.

Returns:

Since:

  • 1.0.0



476
477
478
# File 'lib/origin/selectable.rb', line 476

def within_circle(criterion = nil)
  __expanded__(criterion, "$within", "$center")
end

- (Selectable) within_polygon(criterion = nil)

Adds the $within/$polygon selection to the selectable.

Examples:

Add the selection.

selectable.within_polygon(
  location: [[ 10, 20 ], [ 10, 40 ], [ 30, 40 ], [ 30, 20 ]]
)

Execute an $within/$polygon in a where query.

selectable.where(
  :field.within_polygon => [[ 10, 20 ], [ 10, 40 ], [ 30, 40 ], [ 30, 20 ]]
)

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/polygon points criterion.

Returns:

Since:

  • 1.0.0



498
499
500
# File 'lib/origin/selectable.rb', line 498

def within_polygon(criterion = nil)
  __expanded__(criterion, "$within", "$polygon")
end

- (Selectable) within_spherical_circle(criterion = nil)

Adds the $within/$centerSphere selection to the selectable.

Examples:

Add the selection.

selectable.within_spherical_circle(location: [[ 1, 10 ], 25 ])

Execute an $within/$centerSphere in a where query.

selectable.where(:field.within_spherical_circle => [[ 1, 10 ], 25 ])

Parameters:

  • criterion (Hash) (defaults to: nil)

    The field/distance criterion.

Returns:

Since:

  • 1.0.0



516
517
518
# File 'lib/origin/selectable.rb', line 516

def within_spherical_circle(criterion = nil)
  __expanded__(criterion, "$within", "$centerSphere")
end