em-hiredis 0.0.1 → 0.1.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.
@@ -0,0 +1,14 @@
1
+ $:.unshift File.expand_path(File.dirname(__FILE__) + "/../lib")
2
+ require 'em-hiredis'
3
+ require 'rspec'
4
+ require 'em-spec/rspec'
5
+
6
+ require 'support/connection_helper'
7
+ require 'support/redis_mock'
8
+ require 'stringio'
9
+
10
+ RSpec.configure do |config|
11
+ config.include ConnectionHelper
12
+ config.include EventMachine::SpecHelper
13
+ config.include RedisMock::Helper
14
+ end
@@ -0,0 +1,9 @@
1
+ module ConnectionHelper
2
+ def connect(url = nil, &blk)
3
+ em do
4
+ redis = EventMachine::Hiredis.connect(url)
5
+ redis.flushall
6
+ blk.call(redis)
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,65 @@
1
+ # nabbed from redis-rb, thanks!
2
+ require "socket"
3
+
4
+ module RedisMock
5
+ def self.start(port = 6380)
6
+ server = TCPServer.new("127.0.0.1", port)
7
+
8
+ loop do
9
+ session = server.accept
10
+
11
+ while line = session.gets
12
+ parts = Array.new(line[1..-3].to_i) do
13
+ bytes = session.gets[1..-3].to_i
14
+ argument = session.read(bytes)
15
+ session.read(2) # Discard \r\n
16
+ argument
17
+ end
18
+
19
+ response = yield(*parts)
20
+
21
+ if response.nil?
22
+ session.shutdown(Socket::SHUT_RDWR)
23
+ break
24
+ else
25
+ session.write(response)
26
+ session.write("\r\n")
27
+ end
28
+ end
29
+ end
30
+ end
31
+
32
+ module Helper
33
+ # Forks the current process and starts a new mock Redis server on
34
+ # port 6380.
35
+ #
36
+ # The server will reply with a `+OK` to all commands, but you can
37
+ # customize it by providing a hash. For example:
38
+ #
39
+ # redis_mock(:ping => lambda { "+PONG" }) do
40
+ # assert_equal "PONG", Redis.new(:port => 6380).ping
41
+ # end
42
+ #
43
+ def redis_mock(replies = {})
44
+ begin
45
+ pid = fork do
46
+ trap("TERM") { exit }
47
+
48
+ RedisMock.start do |command, *args|
49
+ (replies[command.to_sym] || lambda { |*_| "+OK" }).call(*args)
50
+ end
51
+ end
52
+
53
+ sleep 1 # Give time for the socket to start listening.
54
+
55
+ yield
56
+
57
+ ensure
58
+ if pid
59
+ Process.kill("TERM", pid)
60
+ Process.wait(pid)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,43 @@
1
+ # adapted from redis-rb
2
+ require 'spec_helper'
3
+
4
+ describe EventMachine::Hiredis, "URL parsing" do
5
+ it "defaults URL defaults to 127.0.0.1:6379" do
6
+ redis = EventMachine::Hiredis.setup
7
+
8
+ redis.host.should == "127.0.0.1"
9
+ redis.port.should == 6379
10
+ redis.db.should == "0"
11
+ redis.password.should == nil
12
+ end
13
+
14
+ it "allows to pass in a URL" do
15
+ redis = EventMachine::Hiredis.setup "redis://:secr3t@foo.com:999/2"
16
+
17
+ redis.host.should == "foo.com"
18
+ redis.port.should == 999
19
+ redis.db.should == "2"
20
+ redis.password.should == "secr3t"
21
+ end
22
+
23
+ it "does not modify the passed options" do
24
+ options = "redis://:secr3t@foo.com:999/2"
25
+
26
+ redis = EventMachine::Hiredis.setup(options)
27
+
28
+ options.should == "redis://:secr3t@foo.com:999/2"
29
+ end
30
+
31
+ it "uses REDIS_URL over default if available" do
32
+ ENV["REDIS_URL"] = "redis://:secr3t@foo.com:999/2"
33
+
34
+ redis = EventMachine::Hiredis.setup
35
+
36
+ redis.host.should == "foo.com"
37
+ redis.port.should == 999
38
+ redis.db.should == "2"
39
+ redis.password.should == "secr3t"
40
+
41
+ ENV.delete("REDIS_URL")
42
+ end
43
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: em-hiredis
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Martyn Loughran
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-03-11 00:00:00 -08:00
13
+ date: 2011-05-04 00:00:00 +01:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -21,7 +21,7 @@ dependencies:
21
21
  requirements:
22
22
  - - ~>
23
23
  - !ruby/object:Gem::Version
24
- version: 0.2.0
24
+ version: 0.3.0
25
25
  type: :runtime
26
26
  version_requirements: *id001
27
27
  description: Eventmachine redis client using hiredis native parser
@@ -35,6 +35,7 @@ extra_rdoc_files: []
35
35
 
36
36
  files:
37
37
  - .gitignore
38
+ - .rspec
38
39
  - Gemfile
39
40
  - README.md
40
41
  - Rakefile
@@ -44,6 +45,13 @@ files:
44
45
  - lib/em-hiredis/connection.rb
45
46
  - lib/em-hiredis/event_emitter.rb
46
47
  - lib/em-hiredis/version.rb
48
+ - spec/connection_spec.rb
49
+ - spec/live_redis_protocol_spec.rb
50
+ - spec/redis_commands_spec.rb
51
+ - spec/spec_helper.rb
52
+ - spec/support/connection_helper.rb
53
+ - spec/support/redis_mock.rb
54
+ - spec/url_param_spec.rb
47
55
  has_rdoc: true
48
56
  homepage: http://github.com/mloughran/em-hiredis
49
57
  licenses: []
@@ -68,9 +76,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
68
76
  requirements: []
69
77
 
70
78
  rubyforge_project: em-hiredis
71
- rubygems_version: 1.5.3
79
+ rubygems_version: 1.6.2
72
80
  signing_key:
73
81
  specification_version: 3
74
82
  summary: Eventmachine redis client
75
- test_files: []
76
-
83
+ test_files:
84
+ - spec/connection_spec.rb
85
+ - spec/live_redis_protocol_spec.rb
86
+ - spec/redis_commands_spec.rb
87
+ - spec/spec_helper.rb
88
+ - spec/support/connection_helper.rb
89
+ - spec/support/redis_mock.rb
90
+ - spec/url_param_spec.rb