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

#negatingObject

Returns the value of attribute negating.



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

def negating
  @negating
end

#negating If the next spression is negated.(Ifthe) ⇒ Object



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

attr_accessor :negating, :selector

#selectorObject

Returns the value of attribute selector.



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

def selector
  @selector
end

#selector The query selector.(Thequeryselector.) ⇒ Object



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

attr_accessor :negating, :selector

Class Method Details

.forwardablesArray<Symbol>

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



643
644
645
646
# File 'lib/origin/selectable.rb', line 643

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

Instance Method Details

#all(criterion = nil) ⇒ Selectable 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

#and(*criterion) ⇒ Selectable 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

#between(criterion = nil) ⇒ Selectable

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

#elem_match(criterion = nil) ⇒ Selectable

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

#exists(criterion = nil) ⇒ Selectable

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

#gt(criterion = nil) ⇒ Selectable

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

#gte(criterion = nil) ⇒ Selectable

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

#in(criterion = nil) ⇒ Selectable 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

#lt(criterion = nil) ⇒ Selectable

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

#lte(criterion = nil) ⇒ Selectable

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

#max_distance(criterion = nil) ⇒ Selectable

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

#mod(criterion = nil) ⇒ Selectable

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

#ne(criterion = nil) ⇒ Selectable 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

#near(criterion = nil) ⇒ Selectable

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

#near_sphere(criterion = nil) ⇒ Selectable

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

#negating?true, false

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

#nin(criterion = nil) ⇒ Selectable 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

#nor(*criterion) ⇒ Selectable

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

#not(*criterion) ⇒ Selectable

Negate the next selection.

Examples:

Negate the selection.

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

Add the $not criterion.

selectable.not(name: /Bob/)

Execute a $not in a where query.

selectable.where(:field.not => /Bob/)

Parameters:

  • criterion (Hash)

    The field/value pairs to negate.

Returns:

Since:

  • 1.0.0



366
367
368
# File 'lib/origin/selectable.rb', line 366

def not(*criterion)
  (criterion.size == 0) ? tap { |query| query.negating = true } : __override__(criterion.first, "$not")
end

#or(*criterion) ⇒ Selectable 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



381
382
383
# File 'lib/origin/selectable.rb', line 381

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

#where(criterion = nil) ⇒ Selectable

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



450
451
452
# File 'lib/origin/selectable.rb', line 450

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

#with_size(criterion = nil) ⇒ Selectable

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



402
403
404
405
406
# File 'lib/origin/selectable.rb', line 402

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

#with_type(criterion = nil) ⇒ Selectable

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



426
427
428
429
430
# File 'lib/origin/selectable.rb', line 426

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

#within_box(criterion = nil) ⇒ Selectable

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



467
468
469
# File 'lib/origin/selectable.rb', line 467

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

#within_circle(criterion = nil) ⇒ Selectable

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



485
486
487
# File 'lib/origin/selectable.rb', line 485

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

#within_polygon(criterion = nil) ⇒ Selectable

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



507
508
509
# File 'lib/origin/selectable.rb', line 507

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

#within_spherical_circle(criterion = nil) ⇒ Selectable

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



525
526
527
# File 'lib/origin/selectable.rb', line 525

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