Class: Familia::Set

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, #multi_from_redis, #parent?, #persist, #qstamp, #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) ⇒ Object



516
517
518
# File 'lib/familia/redisobject.rb', line 516

def << v
  add v
end

#add(*values) ⇒ Object



510
511
512
513
514
# File 'lib/familia/redisobject.rb', line 510

def add *values
  values.flatten.compact.each { |v| redis.sadd rediskey, to_redis(v) }
  update_expiration
  self
end

#collect(&blk) ⇒ Object



540
541
542
# File 'lib/familia/redisobject.rb', line 540

def collect &blk
  members.collect &blk
end

#collectraw(&blk) ⇒ Object



556
557
558
# File 'lib/familia/redisobject.rb', line 556

def collectraw &blk
  membersraw.collect &blk
end

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



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

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

#each(&blk) ⇒ Object



532
533
534
# File 'lib/familia/redisobject.rb', line 532

def each &blk
  members.each &blk
end

#each_with_index(&blk) ⇒ Object



536
537
538
# File 'lib/familia/redisobject.rb', line 536

def each_with_index &blk
  members.each_with_index &blk
end

#eachraw(&blk) ⇒ Object



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

def eachraw &blk
  membersraw.each &blk
end

#eachraw_with_index(&blk) ⇒ Object



552
553
554
# File 'lib/familia/redisobject.rb', line 552

def eachraw_with_index &blk
  membersraw.each_with_index &blk
end

#empty?Boolean

Returns:

  • (Boolean)


506
507
508
# File 'lib/familia/redisobject.rb', line 506

def empty?
  size == 0
end

#intersection(*setkeys) ⇒ Object



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

def intersection *setkeys
  # TODO
end

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

Returns:

  • (Boolean)


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

def member? v
  redis.sismember rediskey, to_redis(v)
end

#membersObject Also known as: all, to_a



520
521
522
523
524
# File 'lib/familia/redisobject.rb', line 520

def members
  echo :members, caller[0] if Familia.debug
  el = membersraw
  multi_from_redis *el
end

#membersrawObject



528
529
530
# File 'lib/familia/redisobject.rb', line 528

def membersraw
  redis.smembers(rediskey)
end

#move(dstkey, v) ⇒ Object



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

def move dstkey, v
  redis.smove rediskey, dstkey, v
end

#popObject



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

def pop
  redis.spop rediskey
end

#randomObject



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

def random
  from_redis randomraw
end

#randomrawObject



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

def randomraw
  redis.srandmember(rediskey)
end

#select(&blk) ⇒ Object



544
545
546
# File 'lib/familia/redisobject.rb', line 544

def select &blk
  members.select &blk
end

#selectraw(&blk) ⇒ Object



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

def selectraw &blk
  membersraw.select &blk
end

#selfObject

Make the value stored at KEY identical to the given list define_method :“#RedisObject#name_sync” do |*latest|

latest = latest.flatten.compact
# Do nothing if we're given an empty Array. 
# Otherwise this would clear all current values
if latest.empty?
  false
else
  # Convert to a list of index values if we got the actual objects
  latest = latest.collect { |obj| obj.index } if klass === latest.first
  current = send("#{name_plural}raw")
  added = latest-current
  removed = current-latest
  #Familia.info "#{self.index}: adding: #{added}"
  added.each { |v| self.send("add_#{name_singular}", v) }
  #Familia.info "#{self.index}: removing: #{removed}"
  removed.each { |v| self.send("remove_#{name_singular}", v) }
  true
end

end



617
# File 'lib/familia/redisobject.rb', line 617

Familia::RedisObject.register self, :set

#sizeObject Also known as: length



501
502
503
# File 'lib/familia/redisobject.rb', line 501

def size
  redis.scard rediskey
end