ruby-redis 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. data/LICENSE +9 -0
  2. data/README +90 -0
  3. data/bin/ruby-redis +12 -0
  4. data/bin/ruby-redis.compiled.rbc +243 -0
  5. data/lib/redis/bin.rb +74 -0
  6. data/lib/redis/bin.rbc +1325 -0
  7. data/lib/redis/buftok.rbc +2658 -0
  8. data/lib/redis/config.rb +46 -0
  9. data/lib/redis/config.rbc +1009 -0
  10. data/lib/redis/connection.rb +69 -0
  11. data/lib/redis/connection.rbc +1354 -0
  12. data/lib/redis/database.rb +109 -0
  13. data/lib/redis/database.rbc +2275 -0
  14. data/lib/redis/hashes.rb +72 -0
  15. data/lib/redis/hashes.rbc +1843 -0
  16. data/lib/redis/hiredis.rbc +658 -0
  17. data/lib/redis/keys.rb +165 -0
  18. data/lib/redis/keys.rbc +3386 -0
  19. data/lib/redis/lists.rb +227 -0
  20. data/lib/redis/lists.rbc +5241 -0
  21. data/lib/redis/logger.rb +81 -0
  22. data/lib/redis/logger.rbc +2106 -0
  23. data/lib/redis/protocol.rb +170 -0
  24. data/lib/redis/protocol.rbc +3735 -0
  25. data/lib/redis/pubsub.rb +153 -0
  26. data/lib/redis/pubsub.rbc +3447 -0
  27. data/lib/redis/reader.rb +164 -0
  28. data/lib/redis/reader.rbc +2769 -0
  29. data/lib/redis/send.rbc +1268 -0
  30. data/lib/redis/sender.rb +49 -0
  31. data/lib/redis/sender.rbc +1057 -0
  32. data/lib/redis/server.rb +62 -0
  33. data/lib/redis/server.rbc +1177 -0
  34. data/lib/redis/sets.rb +105 -0
  35. data/lib/redis/sets.rbc +2800 -0
  36. data/lib/redis/strict.rb +67 -0
  37. data/lib/redis/strict.rbc +1419 -0
  38. data/lib/redis/strings.rb +144 -0
  39. data/lib/redis/strings.rbc +3338 -0
  40. data/lib/redis/synchrony.rb +58 -0
  41. data/lib/redis/synchrony.rbc +1397 -0
  42. data/lib/redis/version.rb +7 -0
  43. data/lib/redis/version.rbc +180 -0
  44. data/lib/redis/zsets.rb +281 -0
  45. data/lib/redis/zsets.rbc +6596 -0
  46. data/lib/redis.rb +215 -0
  47. data/lib/redis.rbc +4391 -0
  48. metadata +117 -0
data/lib/redis/sets.rb ADDED
@@ -0,0 +1,105 @@
1
+ require File.expand_path '../redis', File.dirname(__FILE__)
2
+ require 'set'
3
+
4
+ class Redis
5
+ module Sets
6
+
7
+ def redis_SADD key, member
8
+ record = (@database[key] ||= Set.new)
9
+ redis_t Set, record
10
+ return false if record.include? member
11
+ record.add member
12
+ true
13
+ end
14
+
15
+ def redis_SREM key, member
16
+ record = @database[key] || []
17
+ return false unless record.include? member
18
+ record.delete member
19
+ @database.delete key if record.empty?
20
+ return true
21
+ end
22
+
23
+ # Type checks are only to make tests pass
24
+ def redis_SMOVE source, destination, member
25
+ source_record = @database[source] || Set.new
26
+ dest_record = @database[destination]
27
+ redis_t Set, source_record
28
+ redis_t NilClass, Set, dest_record
29
+ return false unless source_record.include? member
30
+ (@database[destination] ||= Set.new).add member
31
+ source_record.delete member
32
+ @database.delete source if source_record.empty?
33
+ return true
34
+ end
35
+
36
+ def redis_SCARD key
37
+ (@database[key] || []).size
38
+ end
39
+
40
+ def redis_SISMEMBER key, member
41
+ (@database[key] || []).include? member
42
+ end
43
+
44
+ def redis_SMEMBERS key
45
+ (@database[key] || []).to_a
46
+ end
47
+
48
+ def redis_SINTER *keys
49
+ keys.each { |key| redis_t NilClass, Array, Set, @database[key] }
50
+ keys.reduce(nil) do |memo, key|
51
+ memo ? memo & (@database[key]||[]) : (@database[key]||Set.new)
52
+ end
53
+ end
54
+
55
+ def redis_SINTERSTORE destination, *keys
56
+ record = redis_SINTER *keys
57
+ if record.empty?
58
+ @database.delete destination
59
+ else
60
+ @database[destination] = record
61
+ end
62
+ record.size
63
+ end
64
+
65
+ def redis_SUNION *keys
66
+ keys.each { |key| redis_t NilClass, Array, Set, @database[key] }
67
+ keys.reduce(Set.new) { |memo, key| memo | (@database[key]||[]) }
68
+ end
69
+
70
+ def redis_SUNIONSTORE destination, *keys
71
+ record = redis_SUNION *keys
72
+ if record.empty?
73
+ @database.delete destination
74
+ else
75
+ @database[destination] = record
76
+ end
77
+ record.size
78
+ end
79
+
80
+ def redis_SDIFF *keys
81
+ keys.reduce(nil) { |memo, key| memo ? memo - (@database[key]||[]) : (@database[key]||Set.new) }
82
+ end
83
+
84
+ def redis_SDIFFSTORE destination, *keys
85
+ (@database[destination] = redis_SDIFF *keys).size
86
+ end
87
+
88
+ def redis_SPOP key
89
+ set = @database[key]
90
+ return nil unless set
91
+ rec = rand set.size
92
+ result = set.to_a[rec]
93
+ set.delete result
94
+ @database.delete key if set.empty?
95
+ result
96
+ end
97
+
98
+ def redis_SRANDMEMBER key
99
+ set = (@database[key] || [])
100
+ return nil if set.empty?
101
+ set.to_a[rand set.size]
102
+ end
103
+
104
+ end
105
+ end