class NoBrainer::GeoResultSet

Attributes

klass[RW]
rql[RW]

Public Class Methods

new(klass, rql) click to toggle source
# File lib/nobrainer_geospatial.rb, line 9
def initialize(klass, rql)
  self.rql = rql
  self.klass = klass
end

Public Instance Methods

[](index) click to toggle source
# File lib/nobrainer_geospatial.rb, line 77
def [](index)
  to_a()[index]
end
all() click to toggle source
# File lib/nobrainer_geospatial.rb, line 18
def all
  to_a
end
count() click to toggle source
# File lib/nobrainer_geospatial.rb, line 32
def count
  NoBrainer.run { self.rql.count }
end
each(&block) click to toggle source
# File lib/nobrainer_geospatial.rb, line 26
def each(&block)
  NoBrainer.run { self.rql }.each do |result|
    block.call(new_from_db result)
  end
end
first() click to toggle source
# File lib/nobrainer_geospatial.rb, line 22
def first
  new_from_db NoBrainer.run { self.rql }.first
end
limit(n) click to toggle source
# File lib/nobrainer_geospatial.rb, line 44
def limit(n)
  GeoResultSet.new(self.klass, self.rql.limit(n))
end
order_by(args, order = :asc) click to toggle source
# File lib/nobrainer_geospatial.rb, line 52
def order_by(args, order = :asc)

  conditions = []

  raise "Invalid sort order: #{order}" unless order == :asc || order == :desc

  if args.class == Array
    conditions = args.map do |arg|
      if order == :asc
        RethinkDB::RQL.new.asc(arg)
      else
        RethinkDB::RQL.new.desc(arg)
      end
    end
  else
    if order == :asc
      conditions = RethinkDB::RQL.new.asc(args)
    else
      conditions = RethinkDB::RQL.new.desc(args)
    end
  end

  GeoResultSet.new(self.klass, self.rql.order_by(*conditions))
end
skip(n) click to toggle source
# File lib/nobrainer_geospatial.rb, line 48
def skip(n)
  GeoResultSet.new(self.klass, self.rql.skip(n))
end
to_a() click to toggle source
# File lib/nobrainer_geospatial.rb, line 14
def to_a
  NoBrainer.run { self.rql }.to_a.map {|r| new_from_db(r) }
end
to_rql() click to toggle source
# File lib/nobrainer_geospatial.rb, line 81
def to_rql
  self.rql
end
where(args = nil, &block) click to toggle source
# File lib/nobrainer_geospatial.rb, line 36
def where(args = nil, &block)
  if block_given?
    GeoResultSet.new(self.klass, self.rql.filter(block))
  else
    GeoResultSet.new(self.klass, self.rql.filter(args))
  end
end

Private Instance Methods

new_from_db(result) click to toggle source
# File lib/nobrainer_geospatial.rb, line 86
def new_from_db(result)
  obj = klass.new_from_db(result)
  if result['_distance']
    obj.singleton_class.class_eval do
      attr_accessor :distance
    end
    obj.distance = result['_distance']
  end
  return obj
end