kyototycoon-client 0.0.2 → 0.0.3
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.
data/.gitignore
CHANGED
@@ -81,9 +81,9 @@ module Kyototycoon
|
|
81
81
|
records.each do |r|
|
82
82
|
request << [r.db_id, r.key.length].pack("nN") << r.key
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
@socket.write(request)
|
86
|
-
response = @socket.read(5)
|
86
|
+
response = @socket.read(5)
|
87
87
|
raise "no response" unless response
|
88
88
|
|
89
89
|
magic, count = response.unpack("CN")
|
data/lib/kyototycoon/client.rb
CHANGED
@@ -35,10 +35,11 @@ module Kyototycoon
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def script(method, key, value)
|
38
|
-
script_bulk(method, { key => value } )
|
38
|
+
script_bulk(method, { key => value } )
|
39
39
|
end
|
40
40
|
|
41
41
|
def set_bulk(keyvalues, dbid = 0)
|
42
|
+
return 0 if keyvalues.empty?
|
42
43
|
raise "connection closed" unless @connection.is_open
|
43
44
|
|
44
45
|
records = []
|
@@ -53,6 +54,7 @@ module Kyototycoon
|
|
53
54
|
end
|
54
55
|
|
55
56
|
def get_bulk(keys, dbid=0)
|
57
|
+
return [] if keys.empty?
|
56
58
|
raise "connection closed" unless @connection.is_open
|
57
59
|
|
58
60
|
records = []
|
@@ -65,12 +67,13 @@ module Kyototycoon
|
|
65
67
|
end
|
66
68
|
|
67
69
|
def remove_bulk(keys, dbid=0)
|
70
|
+
return 0 if keys.empty?
|
68
71
|
raise "connection closed" unless @connection.is_open
|
69
72
|
|
70
73
|
records = []
|
71
74
|
keys.each do |k|
|
72
75
|
records.push(Record.new(k, nil, nil, dbid))
|
73
|
-
end
|
76
|
+
end
|
74
77
|
@connection.remove(records)
|
75
78
|
end
|
76
79
|
|
@@ -1,9 +1,13 @@
|
|
1
1
|
require "helper"
|
2
2
|
|
3
3
|
class ClientTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
HOST = ENV["HOST"] || "localhost"
|
6
|
+
PORT = (ENV["PORT"] || 1978).to_i
|
7
|
+
|
4
8
|
def setup
|
5
|
-
raise "host and port of KyotoTycoon test server is required: rake test HOST=xxx PORT=xxx" if (!
|
6
|
-
@client = Kyototycoon::Client.new(
|
9
|
+
raise "host and port of KyotoTycoon test server is required: rake test HOST=xxx PORT=xxx" if (!HOST || !PORT)
|
10
|
+
@client = Kyototycoon::Client.new(HOST, PORT)
|
7
11
|
end
|
8
12
|
|
9
13
|
def test_open
|
@@ -24,12 +28,14 @@ class ClientTest < Test::Unit::TestCase
|
|
24
28
|
|
25
29
|
def test_clud_bulk
|
26
30
|
@client.open
|
31
|
+
@client.remove_bulk(["key1", "key2", "key3", "key4"])
|
32
|
+
|
27
33
|
assert_equal( @client.set_bulk( {"key1" => "valueA", "key2" => "valueB", "key3" => "valueC"} ), 3)
|
28
|
-
assert_equal( @client.get_bulk( ["key1", "key2", "key3", "key4"] ),
|
29
|
-
|
34
|
+
assert_equal( @client.get_bulk( ["key1", "key2", "key3", "key4"] ),
|
35
|
+
{"key1" => "valueA", "key2" => "valueB", "key3" => "valueC"} )
|
30
36
|
assert_equal( @client.remove_bulk( ["key1", "key2"] ), 2 )
|
31
|
-
assert_equal( @client.get_bulk( ["key1", "key2", "key3", "key4"] ),
|
32
|
-
|
37
|
+
assert_equal( @client.get_bulk( ["key1", "key2", "key3", "key4"] ),
|
38
|
+
{"key3" => "valueC"} )
|
33
39
|
@client.close
|
34
40
|
end
|
35
41
|
|
@@ -61,6 +67,39 @@ class ClientTest < Test::Unit::TestCase
|
|
61
67
|
@client.close
|
62
68
|
end
|
63
69
|
|
70
|
+
def test_empty_records
|
71
|
+
client = Kyototycoon::Client.new(HOST, PORT)
|
72
|
+
client.instance_eval do |obj|
|
73
|
+
class << self
|
74
|
+
define_method :connection=, Proc.new { |connection|
|
75
|
+
@connection = connection
|
76
|
+
}
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
mock = MockConnection.new
|
81
|
+
client.connection = mock
|
82
|
+
|
83
|
+
client.get_bulk([])
|
84
|
+
assert_equal false, mock.called_get?
|
85
|
+
|
86
|
+
client.set_bulk([])
|
87
|
+
assert_equal false, mock.called_set?
|
88
|
+
|
89
|
+
client.remove_bulk([])
|
90
|
+
assert_equal false, mock.called_remove?
|
91
|
+
|
92
|
+
client.get(1)
|
93
|
+
assert_equal true, mock.called_get?
|
94
|
+
|
95
|
+
client.set(1, 1)
|
96
|
+
assert_equal true, mock.called_set?
|
97
|
+
|
98
|
+
client.remove(1)
|
99
|
+
assert_equal true, mock.called_remove?
|
100
|
+
end
|
101
|
+
|
102
|
+
|
64
103
|
# def test_script
|
65
104
|
# return unless @client
|
66
105
|
|
@@ -70,3 +109,42 @@ class ClientTest < Test::Unit::TestCase
|
|
70
109
|
# @client.close
|
71
110
|
# end
|
72
111
|
end
|
112
|
+
|
113
|
+
class MockConnection
|
114
|
+
def initialize
|
115
|
+
@get = false
|
116
|
+
@set = false
|
117
|
+
@remove = false
|
118
|
+
end
|
119
|
+
|
120
|
+
def is_open
|
121
|
+
true
|
122
|
+
end
|
123
|
+
|
124
|
+
def get(records)
|
125
|
+
@get = true
|
126
|
+
[]
|
127
|
+
end
|
128
|
+
|
129
|
+
def set(records)
|
130
|
+
@set = true
|
131
|
+
0
|
132
|
+
end
|
133
|
+
|
134
|
+
def remove(records)
|
135
|
+
@remove = true
|
136
|
+
true
|
137
|
+
end
|
138
|
+
|
139
|
+
def called_get?
|
140
|
+
@get
|
141
|
+
end
|
142
|
+
|
143
|
+
def called_set?
|
144
|
+
@set
|
145
|
+
end
|
146
|
+
|
147
|
+
def called_remove?
|
148
|
+
@remove
|
149
|
+
end
|
150
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kyototycoon-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-10-21 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|