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
@@ -0,0 +1,7 @@
1
+ require File.expand_path '../redis', File.dirname(__FILE__)
2
+
3
+ class Redis
4
+
5
+ VERSION = '0.0.1'
6
+
7
+ end
@@ -0,0 +1,180 @@
1
+ !RBIX
2
+ 6235178746665710376
3
+ x
4
+ M
5
+ 1
6
+ n
7
+ n
8
+ x
9
+ 10
10
+ __script__
11
+ i
12
+ 54
13
+ 5
14
+ 45
15
+ 0
16
+ 1
17
+ 7
18
+ 2
19
+ 64
20
+ 45
21
+ 0
22
+ 3
23
+ 65
24
+ 49
25
+ 4
26
+ 0
27
+ 49
28
+ 5
29
+ 1
30
+ 49
31
+ 6
32
+ 2
33
+ 47
34
+ 49
35
+ 7
36
+ 1
37
+ 15
38
+ 99
39
+ 7
40
+ 8
41
+ 1
42
+ 65
43
+ 49
44
+ 9
45
+ 3
46
+ 13
47
+ 99
48
+ 12
49
+ 7
50
+ 10
51
+ 12
52
+ 7
53
+ 11
54
+ 12
55
+ 65
56
+ 12
57
+ 49
58
+ 12
59
+ 4
60
+ 15
61
+ 49
62
+ 10
63
+ 0
64
+ 15
65
+ 2
66
+ 11
67
+ I
68
+ 6
69
+ I
70
+ 0
71
+ I
72
+ 0
73
+ I
74
+ 0
75
+ n
76
+ p
77
+ 13
78
+ x
79
+ 4
80
+ File
81
+ n
82
+ s
83
+ 8
84
+ ../redis
85
+ n
86
+ x
87
+ 11
88
+ active_path
89
+ x
90
+ 7
91
+ dirname
92
+ x
93
+ 11
94
+ expand_path
95
+ x
96
+ 7
97
+ require
98
+ x
99
+ 5
100
+ Redis
101
+ x
102
+ 10
103
+ open_class
104
+ x
105
+ 14
106
+ __class_init__
107
+ M
108
+ 1
109
+ n
110
+ n
111
+ x
112
+ 5
113
+ Redis
114
+ i
115
+ 12
116
+ 5
117
+ 66
118
+ 65
119
+ 7
120
+ 0
121
+ 7
122
+ 1
123
+ 64
124
+ 49
125
+ 2
126
+ 2
127
+ 11
128
+ I
129
+ 3
130
+ I
131
+ 0
132
+ I
133
+ 0
134
+ I
135
+ 0
136
+ n
137
+ p
138
+ 3
139
+ x
140
+ 7
141
+ VERSION
142
+ s
143
+ 9
144
+ 0.0.1.dev
145
+ x
146
+ 9
147
+ const_set
148
+ p
149
+ 3
150
+ I
151
+ 2
152
+ I
153
+ 5
154
+ I
155
+ c
156
+ x
157
+ 53
158
+ /Users/dturnbull/ruby/ruby-redis/lib/redis/version.rb
159
+ p
160
+ 0
161
+ x
162
+ 13
163
+ attach_method
164
+ p
165
+ 5
166
+ I
167
+ 0
168
+ I
169
+ 1
170
+ I
171
+ 19
172
+ I
173
+ 3
174
+ I
175
+ 36
176
+ x
177
+ 53
178
+ /Users/dturnbull/ruby/ruby-redis/lib/redis/version.rb
179
+ p
180
+ 0
@@ -0,0 +1,281 @@
1
+ require File.expand_path '../redis', File.dirname(__FILE__)
2
+
3
+ class Redis
4
+
5
+ #WARN Time complexity may not match C version in this module yet.
6
+ #TODO Should add and delete manipulate @keys instead of clearing?
7
+
8
+ class ZSet
9
+ include Enumerable
10
+
11
+ def initialize
12
+ @hash = Hash.new
13
+ @keys = nil
14
+ @keys_reverse = nil
15
+ end
16
+
17
+ def add(o, s = 0.0)
18
+ @hash[o] = s
19
+ @keys = nil
20
+ @keys_reverse = nil
21
+ self
22
+ end
23
+
24
+ def delete(o)
25
+ @keys = nil
26
+ @keys_reverse = nil
27
+ @hash.delete(o)
28
+ self
29
+ end
30
+
31
+ def include?(o)
32
+ @hash.include?(o)
33
+ end
34
+
35
+ def score(o)
36
+ @hash[o]
37
+ end
38
+
39
+ def size
40
+ @hash.size
41
+ end
42
+
43
+ def empty?
44
+ @hash.empty?
45
+ end
46
+
47
+ def each
48
+ block_given? or return enum_for(__method__)
49
+ to_a.each { |o| yield(o) }
50
+ self
51
+ end
52
+
53
+ def to_a
54
+ unless @keys
55
+ (@keys = @hash.to_a).sort! do |a, b|
56
+ a.reverse <=> b.reverse
57
+ end
58
+ end
59
+ @keys
60
+ end
61
+
62
+ def to_a_reverse
63
+ unless @keys_reverse
64
+ @keys_reverse = to_a.reverse
65
+ end
66
+ @keys_reverse
67
+ end
68
+
69
+ def range reverse, start ,stop, conversions, withscores = false
70
+ start = conversions.redis_i start
71
+ stop = conversions.redis_i stop
72
+ array = reverse ? to_a_reverse : to_a
73
+ start = 0 if start < -size
74
+ return array[start..stop].flatten(1) if withscores
75
+ (array[start..stop]||[]).collect{|i|i.first}
76
+ end
77
+
78
+ def range_by_score reverse, min, max, conversions, *args
79
+ withscores = offset = count = nil
80
+ until args.empty?
81
+ case args.shift.upcase
82
+ when 'LIMIT'
83
+ offset = args.shift.to_i
84
+ count = args.shift.to_i
85
+ when 'WITHSCORES'
86
+ withscores = true
87
+ else
88
+ raise 'bad arguments'
89
+ end
90
+ end
91
+ result = []
92
+ min_exclusive = false
93
+ if min[0..0] == '('
94
+ min_exclusive = true
95
+ min = min[1..-1]
96
+ end
97
+ min = conversions.redis_f min
98
+ max_exclusive = false
99
+ if max[0..0] == '('
100
+ max_exclusive = true
101
+ max = max[1..-1]
102
+ end
103
+ max = conversions.redis_f max
104
+ if reverse
105
+ x = min; min = max; max = x
106
+ end
107
+ (reverse ? to_a_reverse : to_a).each do |member, score|
108
+ next if min > score or (min_exclusive and min >= score)
109
+ next if max < score or (max_exclusive and max <= score)
110
+ if offset
111
+ offset -= 1
112
+ next unless offset < 0
113
+ offset = nil
114
+ end
115
+ result << member
116
+ result << score if withscores
117
+ if count
118
+ count -= 1
119
+ break if count == 0
120
+ end
121
+ end
122
+ result
123
+ end
124
+
125
+ def self.aggregate database, is_and, destination, numkeys, conversions, *args
126
+ numkeys = numkeys.to_i
127
+ aggregate = 'SUM'
128
+ keys = []
129
+ keys << args.shift while (numkeys -= 1) >= 0
130
+ weights = Array.new keys.size, 1
131
+ until args.empty?
132
+ case args.shift.upcase
133
+ when 'WEIGHTS'
134
+ weights = []
135
+ keys.size.times {weights << conversions.redis_f(args.shift, 'weight value is not a double')}
136
+ when 'AGGREGATE'
137
+ aggregate = args.shift.upcase
138
+ else
139
+ raise 'bad arguments'
140
+ end
141
+ end
142
+ results = []
143
+ keys.zip(weights) do |key, weight|
144
+ inner_result = ZSet.new
145
+ record = database[key] || ZSet.new
146
+ record.each do |member, score|
147
+ inner_result.add member, (score||1) * weight
148
+ end
149
+ results << inner_result
150
+ end
151
+ result = results.reduce do |memo, result|
152
+ n = is_and ? new : memo
153
+ result.each do |member, score|
154
+ next if is_and and !memo.include?(member)
155
+ test = [score, memo.score(member)].compact
156
+ text << 0 if test.empty?
157
+ case aggregate
158
+ when 'SUM'
159
+ score = test.reduce :+
160
+ when 'MIN'
161
+ score = test.min
162
+ when 'MAX'
163
+ score = test.max
164
+ else
165
+ raise 'bad arguments'
166
+ end
167
+ n.add member, score
168
+ end
169
+ n
170
+ end
171
+ database[destination] = result unless result.empty?
172
+ result.size
173
+ end
174
+
175
+ end
176
+
177
+ module ZSets
178
+
179
+ def redis_ZADD key, score, member
180
+ record = (@database[key] ||= ZSet.new)
181
+ result = !record.include?(member)
182
+ record.add member, redis_f(score)
183
+ result
184
+ end
185
+
186
+ def redis_ZINCRBY key, increment, member
187
+ record = (@database[key] ||= ZSet.new)
188
+ increment = redis_f increment
189
+ if record.include?(member)
190
+ score = record.score(member) + increment
191
+ else
192
+ score = increment
193
+ end
194
+ raise 'NaN' if score.nan?
195
+ record.add member, score
196
+ score
197
+ end
198
+
199
+ def redis_ZRANK key, member
200
+ record = (@database[key] || ZSet.new).to_a
201
+ record.index {|i| i[0]==member}
202
+ end
203
+
204
+ def redis_ZREM key, member
205
+ record = @database[key] || []
206
+ return false unless record.include? member
207
+ record.delete member
208
+ @database.delete key if record.empty?
209
+ return true
210
+ end
211
+
212
+ def redis_ZSCORE key, member
213
+ (@database[key] || ZSet.new).score member
214
+ end
215
+
216
+ def redis_ZREVRANK key, member
217
+ record = (@database[key] || ZSet.new).to_a_reverse
218
+ record.index {|i| i[0]==member}
219
+ end
220
+
221
+ def redis_ZCARD key
222
+ (@database[key] || []).size
223
+ end
224
+
225
+ def redis_ZREMRANGEBYSCORE key, min, max
226
+ record = @database[key] || ZSet.new
227
+ range = record.range_by_score(false, min, max, self)
228
+ range.each do |member, score|
229
+ record.delete member
230
+ end
231
+ range.size
232
+ end
233
+
234
+ def redis_ZCOUNT key, min, max
235
+ record = @database[key] || ZSet.new
236
+ record.range_by_score(false, min, max, self).size
237
+ end
238
+
239
+ def redis_ZREVRANGEBYSCORE key, min, max, *args
240
+ record = @database[key] || ZSet.new
241
+ record.range_by_score true, min, max, self, *args
242
+ end
243
+
244
+ def redis_ZRANGEBYSCORE key, min, max, *args
245
+ record = @database[key] || ZSet.new
246
+ record.range_by_score false, min, max, self, *args
247
+ end
248
+
249
+ def redis_ZRANGE key, start ,stop, withscores = false
250
+ record = @database[key] || ZSet.new
251
+ start = redis_i start
252
+ stop = redis_i stop
253
+ record.range false, start, stop, self, withscores
254
+ end
255
+
256
+ def redis_ZREVRANGE key, start ,stop, withscores = false
257
+ record = @database[key] || ZSet.new
258
+ start = redis_i start
259
+ stop = redis_i stop
260
+ record.range true, start, stop, self, withscores
261
+ end
262
+
263
+ def redis_ZREMRANGEBYRANK key, start, stop
264
+ record = @database[key] || ZSet.new
265
+ range = record.range false, start, stop, self
266
+ range.each do |member, score|
267
+ record.delete member
268
+ end
269
+ range.size
270
+ end
271
+
272
+ def redis_ZUNIONSTORE destination, numkeys, *args
273
+ ZSet.aggregate @database, false, destination, numkeys, self, *args
274
+ end
275
+
276
+ def redis_ZINTERSTORE destination, numkeys, *args
277
+ ZSet.aggregate @database, true, destination, numkeys, self, *args
278
+ end
279
+
280
+ end
281
+ end