class Relix::OrderedIndex::QueryClause

Public Class Methods

new(redis, index) click to toggle source
# File lib/relix/indexes/ordered.rb, line 35
def initialize(redis, index)
  @redis, @index = redis, index
  @lt, @gt, @limit, @offset, @order = '+inf', '-inf', nil, nil, :asc
end

Public Instance Methods

eq(value) click to toggle source
# File lib/relix/indexes/ordered.rb, line 60
def eq(value)
  lte(value)
  gte(value)
end
gt(value) click to toggle source
# File lib/relix/indexes/ordered.rb, line 50
def gt(value)
  @gt = "(#{@index.score_for_value(value)}"
  self
end
gte(value) click to toggle source
# File lib/relix/indexes/ordered.rb, line 55
def gte(value)
  @gt = @index.score_for_value(value)
  self
end
limit(value) click to toggle source
# File lib/relix/indexes/ordered.rb, line 74
def limit(value)
  @limit = value
  self
end
lookup() click to toggle source
# File lib/relix/indexes/ordered.rb, line 91
def lookup
  command, score_1, score_2 = case @order
    when :desc then [:zrevrangebyscore, @lt, @gt]
    when :asc  then [:zrangebyscore,    @gt, @lt]
  end

  @redis.send(command, @index.sorted_set_name, score_1, score_2, limit: zrangebyscore_limit)
end
lt(value) click to toggle source
# File lib/relix/indexes/ordered.rb, line 40
def lt(value)
  @lt = "(#{@index.score_for_value(value)}"
  self
end
lte(value) click to toggle source
# File lib/relix/indexes/ordered.rb, line 45
def lte(value)
  @lt = @index.score_for_value(value)
  self
end
offset(value) click to toggle source
# File lib/relix/indexes/ordered.rb, line 79
def offset(value)
  @offset = value
  self
end
order(value) click to toggle source
# File lib/relix/indexes/ordered.rb, line 65
def order(value)
  unless [:asc, :desc].include?(value)
    raise InvalidQueryOption.new("order must be :asc or :desc but was #{value.inspect}")
  end

  @order = value
  self
end
zrangebyscore_limit() click to toggle source
# File lib/relix/indexes/ordered.rb, line 84
def zrangebyscore_limit
  # zrangebyscore uses offset/count rather than start/stop like zrange
  offset, stop = @index.range_from_options(@redis, offset: @offset, limit: @limit)
  count = stop == -1 ? -1 : (stop - offset + 1)
  [offset, count]
end