daikon 0.3.0 → 0.4.0

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.
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{daikon}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Nick Quaranto"]
12
- s.date = %q{2010-11-29}
12
+ s.date = %q{2010-12-06}
13
13
  s.default_executable = %q{daikon}
14
14
  s.description = %q{daikon, a radishapp.com client}
15
15
  s.email = %q{nick@quaran.to}
@@ -36,6 +36,7 @@ Gem::Specification.new do |s|
36
36
  "lib/daikon/configuration.rb",
37
37
  "lib/daikon/daemon.rb",
38
38
  "lib/daikon/namespace_tools.rb",
39
+ "lib/daikon/redis_hacks.rb",
39
40
  "spec/client_spec.rb",
40
41
  "spec/configuration_spec.rb",
41
42
  "spec/daemon_spec.rb",
@@ -22,7 +22,8 @@ require 'daikon/namespace_tools'
22
22
  require 'daikon/configuration'
23
23
  require 'daikon/client'
24
24
  require 'daikon/daemon'
25
+ require 'daikon/redis_hacks'
25
26
 
26
27
  module Daikon
27
- VERSION = "0.3.0"
28
+ VERSION = "0.4.0"
28
29
  end
@@ -17,17 +17,21 @@ module Daikon
17
17
  def setup(config, logger = nil)
18
18
  self.config = config
19
19
  self.logger = logger
20
- self.redis = Redis.new(:host => config.redis_host, :port => config.redis_port)
20
+ self.redis = connect
21
21
  self.http = Net::HTTP::Persistent.new
22
22
  http.headers['Authorization'] = config.api_key
23
23
 
24
24
  log "Started Daikon v#{VERSION}"
25
25
  end
26
26
 
27
+ def connect
28
+ Redis.new(:host => config.redis_host, :port => config.redis_port)
29
+ end
30
+
27
31
  def start_monitor
28
32
  self.monitor = StringIO.new
29
33
  Thread.new do
30
- Redis.new(:port => config.redis_port).monitor do |line|
34
+ connect.monitor do |line|
31
35
  monitor.puts line
32
36
  end
33
37
  end
@@ -0,0 +1,43 @@
1
+ # All of this craziness is necessary since redis-rb doesn't support the
2
+ # old way of connecting to MONITOR since it doesn't return the format bytes
3
+
4
+ class Redis
5
+ def monitor(&block)
6
+ @_redis_version ||= info["redis_version"]
7
+
8
+ if @_redis_version < "2"
9
+ @client.call_loop_with_old_protocol(:monitor, &block)
10
+ else
11
+ @client.call_loop(:monitor, &block)
12
+ end
13
+ end
14
+
15
+ class Client
16
+ def call_loop_with_old_protocol(*args)
17
+ without_socket_timeout do
18
+ process(args) do
19
+ loop { yield(read_with_old_protocol) }
20
+ end
21
+ end
22
+ end
23
+
24
+ def read_with_old_protocol
25
+ begin
26
+ connection.read_with_old_protocol
27
+ rescue Errno::EAGAIN
28
+ disconnect
29
+ raise Errno::EAGAIN, "Timeout reading from the socket"
30
+ rescue Errno::ECONNRESET
31
+ raise Errno::ECONNRESET, "Connection lost"
32
+ end
33
+ end
34
+ end
35
+
36
+ class Connection
37
+ def read_with_old_protocol
38
+ reply_type = @sock.gets
39
+ raise Errno::ECONNRESET unless reply_type
40
+ reply_type
41
+ end
42
+ end
43
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: daikon
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Nick Quaranto
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-29 00:00:00 -05:00
18
+ date: 2010-12-06 00:00:00 -05:00
19
19
  default_executable: daikon
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -195,6 +195,7 @@ files:
195
195
  - lib/daikon/configuration.rb
196
196
  - lib/daikon/daemon.rb
197
197
  - lib/daikon/namespace_tools.rb
198
+ - lib/daikon/redis_hacks.rb
198
199
  - spec/client_spec.rb
199
200
  - spec/configuration_spec.rb
200
201
  - spec/daemon_spec.rb