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,153 @@
1
+ require File.expand_path '../redis', File.dirname(__FILE__)
2
+ require 'eventmachine'
3
+
4
+ class Redis
5
+
6
+ module PubSub
7
+
8
+ class Subscription
9
+ include EventMachine::Deferrable
10
+
11
+ @@channels ||= {}
12
+ @@pchannels ||= {}
13
+
14
+ def self.publish channel, message
15
+ subs = @@channels[channel] || []
16
+ subs.each do |sub|
17
+ sub.call channel, message
18
+ end
19
+ sent = subs.size
20
+ (@@pchannels || []).each do |pchannel, subs|
21
+ next unless File.fnmatch(pchannel, channel)
22
+ subs.each do |sub|
23
+ sub.pcall pchannel, channel, message
24
+ end
25
+ sent += subs.size
26
+ end
27
+ sent
28
+ end
29
+
30
+ def initialize connection
31
+ @connection = connection
32
+ @subs = []
33
+ @psubs = []
34
+ end
35
+
36
+ def bound
37
+ size > 0
38
+ end
39
+
40
+ def size
41
+ @subs.size + @psubs.size
42
+ end
43
+
44
+ def unbind
45
+ unbind_channels
46
+ unbind_patterns
47
+ end
48
+
49
+ def unbind_channels
50
+ @subs.each do |channel|
51
+ (@@channels[channel] || []).delete self
52
+ end
53
+ @subs.clear
54
+ end
55
+
56
+ def unbind_patterns
57
+ @psubs.each do |channel|
58
+ (@@pchannels[channel] || []).delete self
59
+ end
60
+ @psubs.clear
61
+ end
62
+
63
+ def subscribe channel
64
+ c = (@@channels[channel] ||= [])
65
+ unless c.include? self
66
+ c << self
67
+ @subs << channel
68
+ end
69
+ @connection.send_redis ['subscribe', channel, size]
70
+ end
71
+
72
+ def psubscribe channel
73
+ c = (@@pchannels[channel] ||= [])
74
+ unless c.include? self
75
+ c << self
76
+ @psubs << channel
77
+ end
78
+ @connection.send_redis ['psubscribe', channel, size]
79
+ end
80
+
81
+ def unsubscribe channel
82
+ c = (@@channels[channel] || [])
83
+ @subs.delete channel if c.delete self
84
+ @connection.send_redis ['unsubscribe', channel, size]
85
+ end
86
+
87
+ def punsubscribe channel
88
+ c = (@@pchannels[channel] || [])
89
+ @psubs.delete channel if c.delete self
90
+ @connection.send_redis ['punsubscribe', channel, size]
91
+ end
92
+
93
+ def call channel, message
94
+ @connection.send_redis ['message', channel, message]
95
+ end
96
+
97
+ def pcall pchannel, channel, message
98
+ @connection.send_redis ['pmessage', pchannel, channel, message]
99
+ end
100
+
101
+ end
102
+
103
+ def redis_SUBSCRIBE *channels
104
+ sub = @deferred
105
+ sub = Subscription.new self unless Subscription === sub
106
+ channels.each do |channel|
107
+ sub.subscribe channel
108
+ end
109
+ sub
110
+ end
111
+
112
+ def redis_UNSUBSCRIBE *channels
113
+ sub = @deferred
114
+ sub = Subscription.new self unless Subscription === sub
115
+ if channels.empty?
116
+ sub.unbind_channels
117
+ else
118
+ channels.each do |channel|
119
+ sub.unsubscribe channel
120
+ end
121
+ end
122
+ sub
123
+ end
124
+
125
+ def redis_PSUBSCRIBE *channels
126
+ sub = @deferred
127
+ sub = Subscription.new self unless Subscription === sub
128
+ channels.each do |channel|
129
+ sub.psubscribe channel
130
+ end
131
+ sub
132
+ end
133
+
134
+ def redis_PUNSUBSCRIBE *channels
135
+ sub = @deferred
136
+ sub = Subscription.new self unless Subscription === sub
137
+ if channels.empty?
138
+ sub.unbind_patterns
139
+ else
140
+ channels.each do |channel|
141
+ sub.punsubscribe channel
142
+ end
143
+ end
144
+ sub
145
+ end
146
+
147
+ def redis_PUBLISH channel, message
148
+ Subscription.publish channel, message
149
+ end
150
+
151
+
152
+ end
153
+ end