Class: Zermelo::Filters::Redis

Inherits:
Object
  • Object
show all
Includes:
Zermelo::Filter
Defined in:
lib/zermelo/filters/redis.rb

Constant Summary collapse

SHORTCUTS =
{
  :list => {
    :ids     => proc {|key|     Zermelo::OrderedSet.new(Zermelo.redis.lrange(key, 0, -1)) },
    :count   => proc {|key|     Zermelo.redis.llen(key) },
    :exists? => proc {|key, id| Zermelo.redis.lrange(key, 0, -1).include?(id) },
    :first   => proc {|key|     Zermelo.redis.lrange(key, 0, 0).first },
    :last    => proc {|key|     Zermelo.redis.lrevrange(key, 0, 0).first }
  },
  :set => {
    :ids     => proc {|key|     Set.new(Zermelo.redis.smembers(key)) },
    :count   => proc {|key|     Zermelo.redis.scard(key) },
    :exists? => proc {|key, id| Zermelo.redis.sismember(key, id) }
  },
  :sorted_set => {
    :ids     => proc {|key, order|
      Zermelo::OrderedSet.new(Zermelo.redis.send((:desc.eql?(order) ? :zrevrange : :zrange), key, 0, -1))
    },
    :count   => proc {|key, order|     Zermelo.redis.zcard(key) },
    :exists? => proc {|key, order, id| !Zermelo.redis.zscore(key, id).nil? },
    :first   => proc {|key, order|
      Zermelo.redis.send((:desc.eql?(order) ? :zrevrange : :zrange), key, 0, 0).first
    },
    :last    => proc {|key, order|
      Zermelo.redis.send((:desc.eql?(order) ? :zrange : :zrevrange), key, 0, 0).first
    }
  }
}

Instance Attribute Summary

Attributes included from Zermelo::Filter

#backend, #steps

Instance Method Summary collapse

Methods included from Zermelo::Filter

#all, #associated_ids_for, #associations_for, #collect, #count, #destroy_all, #diff, #each, #empty, #empty?, #exists?, #find_by_id, #find_by_id!, #find_by_ids, #find_by_ids!, #ids, #initialize, #intersect, #offset, #page, #reject, #select, #sort, #union

Instance Method Details

#firstObject

more step users



48
49
50
51
52
53
# File 'lib/zermelo/filters/redis.rb', line 48

def first
  lock {
    first_id = resolve_steps(:first)
    first_id.nil? ? nil : _load(first_id)
  }
end

#lastObject



55
56
57
58
59
60
# File 'lib/zermelo/filters/redis.rb', line 55

def last
  lock {
    last_id = resolve_steps(:last)
    last_id.nil? ? nil : _load(last_id)
  }
end