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, #multi_from_redis, #parent?, #persist, #realttl, #rediskey, register, registration, #rename, #renamenx, #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



595
596
597
# File 'lib/familia/redisobject.rb', line 595

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

#add(score, v) ⇒ Object

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



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

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

#at(idx) ⇒ Object



747
748
749
# File 'lib/familia/redisobject.rb', line 747

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

#collect(&blk) ⇒ Object



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

def collect &blk
  members.collect &blk
end

#collectraw(&blk) ⇒ Object



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

def collectraw &blk
  membersraw.collect &blk
end

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



734
735
736
# File 'lib/familia/redisobject.rb', line 734

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

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



740
741
742
# File 'lib/familia/redisobject.rb', line 740

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

#each(&blk) ⇒ Object



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

def each &blk
  members.each &blk
end

#each_with_index(&blk) ⇒ Object



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

def each_with_index &blk
  members.each_with_index &blk
end

#eachraw(&blk) ⇒ Object



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

def eachraw &blk
  membersraw.each &blk
end

#eachraw_with_index(&blk) ⇒ Object



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

def eachraw_with_index &blk
  membersraw.each_with_index &blk
end

#empty?Boolean

Returns:

  • (Boolean)


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

def empty?
  size == 0
end

#firstObject

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



752
753
754
# File 'lib/familia/redisobject.rb', line 752

def first
  at(0)
end

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



728
729
730
# File 'lib/familia/redisobject.rb', line 728

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

#lastObject

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



757
758
759
# File 'lib/familia/redisobject.rb', line 757

def last
  at(-1)
end

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

Returns:

  • (Boolean)


612
613
614
# File 'lib/familia/redisobject.rb', line 612

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

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



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

def members count=-1, opts={}
  count -= 1 if count > 0
  el = membersraw count, opts
  multi_from_redis *el
end

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



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

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

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



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

def range sidx, eidx, opts={}
  echo :range, caller[0] if Familia.debug
  el = rangeraw(sidx, eidx, opts)
  multi_from_redis *el
end

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

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



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

def rangebyscore sscore, escore, opts={}
  echo :rangebyscore, caller[0] if Familia.debug
  el = rangebyscoreraw(sscore, escore, opts)
  multi_from_redis *el
end

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



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

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



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

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)



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

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

#remrangebyrank(srank, erank) ⇒ Object



720
721
722
# File 'lib/familia/redisobject.rb', line 720

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

#remrangebyscore(sscore, escore) ⇒ Object



724
725
726
# File 'lib/familia/redisobject.rb', line 724

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

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



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

def revmembers count=-1, opts={}
  count -= 1 if count > 0
  el = revmembersraw count, opts
  multi_from_redis *el
end

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



648
649
650
651
# File 'lib/familia/redisobject.rb', line 648

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

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



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

def revrange sidx, eidx, opts={}
  echo :revrange, caller[0] if Familia.debug
  el = revrangeraw(sidx, eidx, opts)
  multi_from_redis *el
end

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



702
703
704
705
# File 'lib/familia/redisobject.rb', line 702

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)



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

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

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



606
607
608
609
# File 'lib/familia/redisobject.rb', line 606

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

#select(&blk) ⇒ Object



665
666
667
# File 'lib/familia/redisobject.rb', line 665

def select &blk
  members.select &blk
end

#selectraw(&blk) ⇒ Object



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

def selectraw &blk
  membersraw.select &blk
end

#sizeObject Also known as: length



584
585
586
# File 'lib/familia/redisobject.rb', line 584

def size
  redis.zcard rediskey
end