Class: Familia::Set

Inherits:
RedisType show all
Defined in:
lib/familia/redistype/types/unsorted_set.rb

Instance Attribute Summary

Attributes inherited from RedisType

#dump_method, #keystring, #load_method, #opts, #parent

Attributes included from Features

#features_enabled

Instance Method Summary collapse

Methods inherited from RedisType

#class?, #db, #initialize, #parent?, #parent_class?, #parent_instance?, #redis, #rediskey, #uri

Methods included from Features

#feature

Methods included from RedisType::ClassMethods

#db, #has_relations?, #inherited, #register, #uri, #valid_keys_only

Methods included from RedisType::Serialization

#deserialize_value, #deserialize_values, #deserialize_values_with_nil, #serialize_value

Methods included from RedisType::Commands

#delete!, #echo, #exists?, #expire, #expireat, #persist, #realttl, #rename, #renamenx, #type

Methods included from Base

add_feature, #generate_id, #update_expiration, #uuid

Constructor Details

This class inherits a constructor from Familia::RedisType

Instance Method Details

#<<(v) ⇒ Object



23
24
25
# File 'lib/familia/redistype/types/unsorted_set.rb', line 23

def <<(v)
  add v
end

#add(*values) ⇒ Object



17
18
19
20
21
# File 'lib/familia/redistype/types/unsorted_set.rb', line 17

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

#collect(&blk) ⇒ Object



47
48
49
# File 'lib/familia/redistype/types/unsorted_set.rb', line 47

def collect(&blk)
  members.collect(&blk)
end

#collectraw(&blk) ⇒ Object



63
64
65
# File 'lib/familia/redistype/types/unsorted_set.rb', line 63

def collectraw(&blk)
  membersraw.collect(&blk)
end

#each(&blk) ⇒ Object



39
40
41
# File 'lib/familia/redistype/types/unsorted_set.rb', line 39

def each(&blk)
  members.each(&blk)
end

#each_with_index(&blk) ⇒ Object



43
44
45
# File 'lib/familia/redistype/types/unsorted_set.rb', line 43

def each_with_index(&blk)
  members.each_with_index(&blk)
end

#eachraw(&blk) ⇒ Object



55
56
57
# File 'lib/familia/redistype/types/unsorted_set.rb', line 55

def eachraw(&blk)
  membersraw.each(&blk)
end

#eachraw_with_index(&blk) ⇒ Object



59
60
61
# File 'lib/familia/redistype/types/unsorted_set.rb', line 59

def eachraw_with_index(&blk)
  membersraw.each_with_index(&blk)
end

#element_countInteger Also known as: size

Returns the number of elements in the unsorted set

Returns:

  • (Integer)

    number of elements



8
9
10
# File 'lib/familia/redistype/types/unsorted_set.rb', line 8

def element_count
  redis.scard rediskey
end

#empty?Boolean

Returns:

  • (Boolean)


13
14
15
# File 'lib/familia/redistype/types/unsorted_set.rb', line 13

def empty?
  element_count.zero?
end

#intersection(*setkeys) ⇒ Object



84
85
86
# File 'lib/familia/redistype/types/unsorted_set.rb', line 84

def intersection *setkeys
  # TODO
end

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

Returns:

  • (Boolean)


71
72
73
# File 'lib/familia/redistype/types/unsorted_set.rb', line 71

def member?(val)
  redis.sismember rediskey, serialize_value(val)
end

#membersObject Also known as: all, to_a



27
28
29
30
31
# File 'lib/familia/redistype/types/unsorted_set.rb', line 27

def members
  echo :members, caller(1..1).first if Familia.debug
  elements = membersraw
  deserialize_values(*elements)
end

#membersrawObject



35
36
37
# File 'lib/familia/redistype/types/unsorted_set.rb', line 35

def membersraw
  redis.smembers(rediskey)
end

#move(dstkey, val) ⇒ Object



92
93
94
# File 'lib/familia/redistype/types/unsorted_set.rb', line 92

def move(dstkey, val)
  redis.smove rediskey, dstkey, val
end

#popObject



88
89
90
# File 'lib/familia/redistype/types/unsorted_set.rb', line 88

def pop
  redis.spop rediskey
end

#randomObject



96
97
98
# File 'lib/familia/redistype/types/unsorted_set.rb', line 96

def random
  deserialize_value randomraw
end

#randomrawObject



100
101
102
# File 'lib/familia/redistype/types/unsorted_set.rb', line 100

def randomraw
  redis.srandmember(rediskey)
end

#remove_element(value) ⇒ Integer Also known as: remove

Removes a member from the set

Parameters:

  • value

    The value to remove from the set

Returns:

  • (Integer)

    The number of members that were removed (0 or 1)



79
80
81
# File 'lib/familia/redistype/types/unsorted_set.rb', line 79

def remove_element(value)
  redis.srem rediskey, serialize_value(value)
end

#select(&blk) ⇒ Object



51
52
53
# File 'lib/familia/redistype/types/unsorted_set.rb', line 51

def select(&blk)
  members.select(&blk)
end

#selectraw(&blk) ⇒ Object



67
68
69
# File 'lib/familia/redistype/types/unsorted_set.rb', line 67

def selectraw(&blk)
  membersraw.select(&blk)
end

#selfObject

Make the value stored at KEY identical to the given list define_method :“#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



125
# File 'lib/familia/redistype/types/unsorted_set.rb', line 125

Familia::RedisType.register self, :set