Class: Familia::SortedSet

Inherits:
RedisObject show all
Defined in:
lib/familia/redisobject.rb

Instance Attribute Summary

Attributes inherited from RedisObject

#cache, #name, #parent, #redis

Instance Method Summary collapse

Methods inherited from RedisObject

#class?, #clear_cache, #db, #dump_method, #echo, #exists?, #expire, #expireat, #from_redis, inherited, #initialize, #load_method, #move, #parent?, #realttl, #rediskey, register, registration, #to_redis, #ttl, #type, #update_expiration

Constructor Details

This class inherits a constructor from Familia::RedisObject

Instance Method Details

#[]=(v, score) ⇒ Object

NOTE: The argument order is the reverse of #add e.g. obj.metrics = SCORE



560
561
562
# File 'lib/familia/redisobject.rb', line 560

def []= v, score
  add score, v
end

#add(score, v) ⇒ Object

NOTE: The argument order is the reverse of #[]=



565
566
567
# File 'lib/familia/redisobject.rb', line 565

def add score, v
  redis.zadd rediskey, score, to_redis(v)
end

#at(idx) ⇒ Object



705
706
707
# File 'lib/familia/redisobject.rb', line 705

def at idx
  range(idx, idx).first
end

#collect(&blk) ⇒ Object



622
623
624
# File 'lib/familia/redisobject.rb', line 622

def collect &blk
  members.collect &blk
end

#collectraw(&blk) ⇒ Object



638
639
640
# File 'lib/familia/redisobject.rb', line 638

def collectraw &blk
  membersraw.collect &blk
end

#decrement(v, by = 1) ⇒ Object Also known as: decr, decrby



692
693
694
# File 'lib/familia/redisobject.rb', line 692

def decrement v, by=1
  increment v, -by
end

#delete(v) ⇒ Object Also known as: remove, rem, del



698
699
700
# File 'lib/familia/redisobject.rb', line 698

def delete v
  redis.zrem rediskey, to_redis(v)
end

#each(&blk) ⇒ Object



614
615
616
# File 'lib/familia/redisobject.rb', line 614

def each &blk
  members.each &blk
end

#each_with_index(&blk) ⇒ Object



618
619
620
# File 'lib/familia/redisobject.rb', line 618

def each_with_index &blk
  members.each_with_index &blk
end

#eachraw(&blk) ⇒ Object



630
631
632
# File 'lib/familia/redisobject.rb', line 630

def eachraw &blk
  membersraw.each &blk
end

#eachraw_with_index(&blk) ⇒ Object



634
635
636
# File 'lib/familia/redisobject.rb', line 634

def eachraw_with_index &blk
  membersraw.each_with_index &blk
end

#empty?Boolean

Returns:

  • (Boolean)


554
555
556
# File 'lib/familia/redisobject.rb', line 554

def empty?
  size == 0
end

#firstObject

Return the first element in the list. Redis: ZRANGE(0)



710
711
712
# File 'lib/familia/redisobject.rb', line 710

def first
  at(0)
end

#increment(v, by = 1) ⇒ Object Also known as: incr, incrby



686
687
688
# File 'lib/familia/redisobject.rb', line 686

def increment v, by=1
  redis.zincrby(rediskey, by, v).to_i
end

#lastObject

Return the last element in the list. Redis: ZRANGE(-1)



715
716
717
# File 'lib/familia/redisobject.rb', line 715

def last
  at(-1)
end

#member?(v) ⇒ Boolean Also known as: include?

Returns:

  • (Boolean)


575
576
577
# File 'lib/familia/redisobject.rb', line 575

def member? v
  !rank(v).nil?
end

#members(count = -1,, opts = {}) ⇒ Object Also known as: to_a, all



592
593
594
595
# File 'lib/familia/redisobject.rb', line 592

def members count=-1, opts={}
  count -= 1 if count > 0
  range 0, count, opts
end

#membersraw(count = -1,, opts = {}) ⇒ Object



599
600
601
602
# File 'lib/familia/redisobject.rb', line 599

def membersraw count=-1, opts={}
  count -= 1 if count > 0
  rangeraw 0, count, opts
end

#range(sidx, eidx, opts = {}) ⇒ Object



646
647
648
649
# File 'lib/familia/redisobject.rb', line 646

def range sidx, eidx, opts={}
  echo :range, caller[0] if Familia.debug
  rangeraw(sidx, eidx, opts).collect { |v| from_redis(v) }.compact
end

#rangebyscore(sscore, escore, opts = {}) ⇒ Object

e.g. obj.metrics.rangebyscore (now-12.hours), now, :limit => [0, 10]



667
668
669
670
# File 'lib/familia/redisobject.rb', line 667

def rangebyscore sscore, escore, opts={}
  echo :rangebyscore, caller[0] if Familia.debug
  rangebyscoreraw(sscore, escore, opts).collect { |v| from_redis( v) }.compact
end

#rangebyscoreraw(sscore, escore, opts = {}) ⇒ Object



672
673
674
675
676
# File 'lib/familia/redisobject.rb', line 672

def rangebyscoreraw sscore, escore, opts={}
  echo :rangebyscoreraw, caller[0] if Familia.debug
  opts[:with_scores] = true if opts[:withscores]
  redis.zrangebyscore(rediskey, sscore, escore, opts)
end

#rangeraw(sidx, eidx, opts = {}) ⇒ Object



656
657
658
659
# File 'lib/familia/redisobject.rb', line 656

def rangeraw sidx, eidx, opts={}
  opts[:with_scores] = true if opts[:withscores]
  redis.zrange(rediskey, sidx, eidx, opts)
end

#rank(v) ⇒ Object

rank of member v when ordered lowest to highest (starts at 0)



581
582
583
584
# File 'lib/familia/redisobject.rb', line 581

def rank v
  ret = redis.zrank rediskey, to_redis(v)
  ret.nil? ? nil : ret.to_i
end

#remrangebyrank(srank, erank) ⇒ Object



678
679
680
# File 'lib/familia/redisobject.rb', line 678

def remrangebyrank srank, erank
  redis.zremrangebyrank rediskey, srank, erank
end

#remrangebyscore(sscore, escore) ⇒ Object



682
683
684
# File 'lib/familia/redisobject.rb', line 682

def remrangebyscore sscore, escore
  redis.zremrangebyscore rediskey, sscore, escore
end

#revmembers(count = -1,, opts = {}) ⇒ Object



604
605
606
607
# File 'lib/familia/redisobject.rb', line 604

def revmembers count=-1, opts={}
  count -= 1 if count > 0
  revrange 0, count, opts
end

#revmembersraw(count = -1,, opts = {}) ⇒ Object



609
610
611
612
# File 'lib/familia/redisobject.rb', line 609

def revmembersraw count=-1, opts={}
  count -= 1 if count > 0
  revrangeraw 0, count, opts
end

#revrange(sidx, eidx, opts = {}) ⇒ Object



651
652
653
654
# File 'lib/familia/redisobject.rb', line 651

def revrange sidx, eidx, opts={}
  echo :revrange, caller[0] if Familia.debug
  revrangeraw(sidx, eidx, opts).collect { |v| from_redis(v) }.compact
end

#revrangeraw(sidx, eidx, opts = {}) ⇒ Object



661
662
663
664
# File 'lib/familia/redisobject.rb', line 661

def revrangeraw sidx, eidx, opts={}
  opts[:with_scores] = true if opts[:withscores]
  redis.zrevrange(rediskey, sidx, eidx, opts)
end

#revrank(v) ⇒ Object

rank of member v when ordered highest to lowest (starts at 0)



587
588
589
590
# File 'lib/familia/redisobject.rb', line 587

def revrank v
  ret = redis.zrevrank rediskey, to_redis(v)
  ret.nil? ? nil : ret.to_i
end

#score(v) ⇒ Object Also known as: []



569
570
571
572
# File 'lib/familia/redisobject.rb', line 569

def score v
  ret = redis.zscore rediskey, to_redis(v)
  ret.nil? ? nil : ret.to_f
end

#select(&blk) ⇒ Object



626
627
628
# File 'lib/familia/redisobject.rb', line 626

def select &blk
  members.select &blk
end

#selectraw(&blk) ⇒ Object



642
643
644
# File 'lib/familia/redisobject.rb', line 642

def selectraw &blk
  membersraw.select &blk
end

#sizeObject Also known as: length



549
550
551
# File 'lib/familia/redisobject.rb', line 549

def size
  redis.zcard rediskey
end