groonga-client 0.4.1 → 0.4.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/text/news.md +14 -0
- data/lib/groonga/client.rb +22 -0
- data/lib/groonga/client/request.rb +18 -1
- data/lib/groonga/client/request/{base.rb → generic.rb} +39 -3
- data/lib/groonga/client/request/select.rb +11 -14
- data/lib/groonga/client/response/schema.rb +2 -1
- data/lib/groonga/client/test/groonga-server-runner.rb +1 -5
- data/lib/groonga/client/version.rb +1 -1
- data/test/request/{test-base.rb → test-generic.rb} +3 -3
- data/test/request/test-merger.rb +48 -0
- data/test/test-client.rb +11 -1
- metadata +7 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f56e626e8d1f3ee3b00e41b67707cb96f92e7c88
|
4
|
+
data.tar.gz: ad74c24105a448472102e6c13a47c9fe9e2b0678
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 424579d18aa485f0615c7b0d2eb113f1acd35d5889a8665abe5200eadd05ac6a0273567105d79807d8957b9ad9e8409c1a4668c94a43c5e8e6e292bf317a47f6
|
7
|
+
data.tar.gz: fef4befdfa5f7ab2f61c39d1e23dae58b9f0e2d095ae24388d5a214e051b027a6dae5e8c07074217748de3ff258484ced5eb9750bada21a83565c588fec10aac
|
data/doc/text/news.md
CHANGED
@@ -1,5 +1,19 @@
|
|
1
1
|
# NEWS
|
2
2
|
|
3
|
+
## 0.4.2 - 2016-03-09
|
4
|
+
|
5
|
+
### Improvements
|
6
|
+
|
7
|
+
* `Groonga::Client#request`: Added a new generic request method.
|
8
|
+
|
9
|
+
* `Groonga::Client::Request::Generic#flags_parameter`: Added a
|
10
|
+
convenience method to add a flags parameter such as
|
11
|
+
`table_create`'s `flags` parameter.
|
12
|
+
|
13
|
+
* `Groonga::Client::Request::Generic#values_parameter`: Added a
|
14
|
+
convenience method to add a parameter that takes multiple values
|
15
|
+
such as `select`'s `output_columns` parameter.
|
16
|
+
|
3
17
|
## 0.4.1 - 2016-02-07
|
4
18
|
|
5
19
|
### Improvements
|
data/lib/groonga/client.rb
CHANGED
@@ -176,6 +176,28 @@ module Groonga
|
|
176
176
|
execute_command(command, &block)
|
177
177
|
end
|
178
178
|
|
179
|
+
def request(name)
|
180
|
+
command_name_module = Module.new do
|
181
|
+
define_method :command_name do
|
182
|
+
name
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
client = self
|
187
|
+
open_client_module = Module.new do
|
188
|
+
define_method :open_client do |&block|
|
189
|
+
block.call(client)
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
193
|
+
extensions = [
|
194
|
+
command_name_module,
|
195
|
+
open_client_module,
|
196
|
+
]
|
197
|
+
request_class = Request.find(name)
|
198
|
+
request_class.new(nil, extensions)
|
199
|
+
end
|
200
|
+
|
179
201
|
def method_missing(name, *args, &block)
|
180
202
|
if groonga_command_name?(name)
|
181
203
|
execute(name, *args, &block)
|
@@ -14,9 +14,26 @@
|
|
14
14
|
# License along with this library; if not, write to the Free Software
|
15
15
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
16
|
|
17
|
+
module Groonga
|
18
|
+
class Client
|
19
|
+
module Request
|
20
|
+
@@requests = {}
|
21
|
+
class << self
|
22
|
+
def register(request_class)
|
23
|
+
@@requests[request_class.command_name] = request_class
|
24
|
+
end
|
25
|
+
|
26
|
+
def find(name)
|
27
|
+
@@requests[name.to_s] || Generic
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
17
34
|
require "groonga/client/script-syntax"
|
18
35
|
|
19
|
-
require "groonga/client/request/base"
|
20
36
|
require "groonga/client/request/error"
|
37
|
+
require "groonga/client/request/generic"
|
21
38
|
|
22
39
|
require "groonga/client/request/select"
|
@@ -17,13 +17,17 @@
|
|
17
17
|
module Groonga
|
18
18
|
class Client
|
19
19
|
module Request
|
20
|
-
class
|
20
|
+
class Generic
|
21
21
|
def initialize(parameters=nil, extensions=[])
|
22
22
|
@parameters = parameters
|
23
23
|
@extensions = extensions
|
24
24
|
extend(*@extensions) unless @extensions.empty?
|
25
25
|
end
|
26
26
|
|
27
|
+
def command_name
|
28
|
+
self.class.command_name
|
29
|
+
end
|
30
|
+
|
27
31
|
def response
|
28
32
|
@reponse ||= create_response
|
29
33
|
end
|
@@ -33,6 +37,26 @@ module Groonga
|
|
33
37
|
RequestParameter.new(name, value))
|
34
38
|
end
|
35
39
|
|
40
|
+
def flags_parameter(name_or_names, value)
|
41
|
+
if name_or_names.is_a?(Array)
|
42
|
+
names = name_or_names
|
43
|
+
else
|
44
|
+
names = [name_or_names]
|
45
|
+
end
|
46
|
+
add_parameter(OverwriteMerger,
|
47
|
+
FlagsParameter.new(names, value))
|
48
|
+
end
|
49
|
+
|
50
|
+
def values_parameter(name_or_names, values)
|
51
|
+
if name_or_names.is_a?(Array)
|
52
|
+
names = name_or_names
|
53
|
+
else
|
54
|
+
names = [name_or_names]
|
55
|
+
end
|
56
|
+
add_parameter(OverwriteMerger,
|
57
|
+
ValuesParameter.new(names, values))
|
58
|
+
end
|
59
|
+
|
36
60
|
def to_parameters
|
37
61
|
if @parameters.nil?
|
38
62
|
{}
|
@@ -62,7 +86,7 @@ module Groonga
|
|
62
86
|
|
63
87
|
def create_response
|
64
88
|
open_client do |client|
|
65
|
-
response = client.execute(
|
89
|
+
response = client.execute(command_name, to_parameters)
|
66
90
|
raise ErrorResponse.new(response) unless response.success?
|
67
91
|
response
|
68
92
|
end
|
@@ -168,7 +192,19 @@ module Groonga
|
|
168
192
|
|
169
193
|
class OverwriteMerger < ParameterMerger
|
170
194
|
def to_parameters
|
171
|
-
@parameters1.
|
195
|
+
if @parameters1.nil?
|
196
|
+
if @parameters2.nil?
|
197
|
+
{}
|
198
|
+
else
|
199
|
+
@parameters2.to_parameters
|
200
|
+
end
|
201
|
+
else
|
202
|
+
if @parameters2.nil?
|
203
|
+
@parameters1.to_parameters
|
204
|
+
else
|
205
|
+
@parameters1.to_parameters.merge(@parameters2.to_parameters)
|
206
|
+
end
|
207
|
+
end
|
172
208
|
end
|
173
209
|
end
|
174
210
|
end
|
@@ -17,7 +17,7 @@
|
|
17
17
|
module Groonga
|
18
18
|
class Client
|
19
19
|
module Request
|
20
|
-
class Select <
|
20
|
+
class Select < Generic
|
21
21
|
include Enumerable
|
22
22
|
|
23
23
|
class << self
|
@@ -26,6 +26,8 @@ module Groonga
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
Request.register(self)
|
30
|
+
|
29
31
|
def initialize(table_or_parameters, extensions=[])
|
30
32
|
if table_or_parameters.respond_to?(:to_parameters)
|
31
33
|
parameters = table_or_parameters
|
@@ -36,9 +38,8 @@ module Groonga
|
|
36
38
|
super(parameters, extensions)
|
37
39
|
end
|
38
40
|
|
39
|
-
def match_columns(
|
40
|
-
|
41
|
-
ValuesParameter.new([:match_columns], value))
|
41
|
+
def match_columns(values)
|
42
|
+
values_parameter([:match_columns], values)
|
42
43
|
end
|
43
44
|
|
44
45
|
def query(value)
|
@@ -158,9 +159,8 @@ module Groonga
|
|
158
159
|
@label = label
|
159
160
|
end
|
160
161
|
|
161
|
-
def keys(
|
162
|
-
|
163
|
-
ValuesParameter.new([:"#{prefix}keys"], value))
|
162
|
+
def keys(values)
|
163
|
+
@request.values_parameter([:"#{prefix}keys"], values)
|
164
164
|
end
|
165
165
|
|
166
166
|
def sort_keys(value)
|
@@ -184,8 +184,7 @@ module Groonga
|
|
184
184
|
end
|
185
185
|
|
186
186
|
def calc_types(value)
|
187
|
-
|
188
|
-
FlagsParameter.new([:"#{prefix}calc_types"], value))
|
187
|
+
@request.flags_parameter(:"#{prefix}calc_types", value)
|
189
188
|
end
|
190
189
|
|
191
190
|
def calc_target(value)
|
@@ -219,8 +218,7 @@ module Groonga
|
|
219
218
|
end
|
220
219
|
|
221
220
|
def flags(value)
|
222
|
-
|
223
|
-
FlagsParameter.new([:"#{prefix}flags"], value))
|
221
|
+
@request.flags_parameter(:"#{prefix}flags", value)
|
224
222
|
end
|
225
223
|
|
226
224
|
def value(expression, values=nil)
|
@@ -263,9 +261,8 @@ module Groonga
|
|
263
261
|
# request object.
|
264
262
|
#
|
265
263
|
# @since 0.4.1
|
266
|
-
def group_keys(
|
267
|
-
|
268
|
-
ValuesParameter.new([:"#{prefix}group_keys"], value))
|
264
|
+
def group_keys(values)
|
265
|
+
@request.values_parameter([:"#{prefix}group_keys"], values)
|
269
266
|
end
|
270
267
|
|
271
268
|
private
|
@@ -140,7 +140,7 @@ module Groonga
|
|
140
140
|
break
|
141
141
|
else
|
142
142
|
begin
|
143
|
-
|
143
|
+
Process.waitpid(@pid, Process::WNOHANG)
|
144
144
|
rescue SystemCallError
|
145
145
|
@pid = nil
|
146
146
|
break
|
@@ -150,10 +150,6 @@ module Groonga
|
|
150
150
|
end
|
151
151
|
|
152
152
|
def wait_groonga_shutdown
|
153
|
-
# TODO: Remove me when Groonga 6.0.1 has been released.
|
154
|
-
# Workaround to shutdown as soon as possible.
|
155
|
-
groonga_server_running?
|
156
|
-
|
157
153
|
n_retried = 0
|
158
154
|
while n_retried <= 20
|
159
155
|
n_retried += 1
|
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2016 Kouhei Sutou <kou@clear-code.com>
|
1
|
+
# Copyright (C) 2016-2017 Kouhei Sutou <kou@clear-code.com>
|
2
2
|
#
|
3
3
|
# This library is free software; you can redistribute it and/or
|
4
4
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -14,10 +14,10 @@
|
|
14
14
|
# License along with this library; if not, write to the Free Software
|
15
15
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
16
|
|
17
|
-
class
|
17
|
+
class TestRequestGeneric < Test::Unit::TestCase
|
18
18
|
sub_test_case "#extensions" do
|
19
19
|
setup do
|
20
|
-
@request = Groonga::Client::Request::
|
20
|
+
@request = Groonga::Client::Request::Generic.new("status")
|
21
21
|
end
|
22
22
|
|
23
23
|
test "Module" do
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# Copyright (C) 2017 Kouhei Sutou <kou@clear-code.com>
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License as published by the Free Software Foundation; either
|
6
|
+
# version 2.1 of the License, or (at your option) any later version.
|
7
|
+
#
|
8
|
+
# This library is distributed in the hope that it will be useful,
|
9
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
10
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
11
|
+
# Lesser General Public License for more details.
|
12
|
+
#
|
13
|
+
# You should have received a copy of the GNU Lesser General Public
|
14
|
+
# License along with this library; if not, write to the Free Software
|
15
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
16
|
+
|
17
|
+
class TestRequestMerger < Test::Unit::TestCase
|
18
|
+
sub_test_case "OverwriteMerger" do
|
19
|
+
def merge(parameters1, parameters2)
|
20
|
+
klass = Groonga::Client::Request::OverwriteMerger
|
21
|
+
klass.new(parameters1, parameters2).to_parameters
|
22
|
+
end
|
23
|
+
|
24
|
+
def param(name, value)
|
25
|
+
Groonga::Client::Request::RequestParameter.new(name, value)
|
26
|
+
end
|
27
|
+
|
28
|
+
test "(nil, nil)" do
|
29
|
+
assert_equal({}, merge(nil, nil))
|
30
|
+
end
|
31
|
+
|
32
|
+
test "(nil, parameter)" do
|
33
|
+
assert_equal({"name" => "value"},
|
34
|
+
merge(nil, param("name", "value")))
|
35
|
+
end
|
36
|
+
|
37
|
+
test "(parameter, nil)" do
|
38
|
+
assert_equal({"name" => "value"},
|
39
|
+
merge(param("name", "value"), nil))
|
40
|
+
end
|
41
|
+
|
42
|
+
test "(parameter, parameter)" do
|
43
|
+
assert_equal({"name" => "value2"},
|
44
|
+
merge(param("name", "value1"),
|
45
|
+
param("name", "value2")))
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
data/test/test-client.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Copyright (C) 2013 Haruka Yoshihara <yoshihara@clear-code.com>
|
2
|
-
# Copyright (C) 2013-
|
2
|
+
# Copyright (C) 2013-2017 Kouhei Sutou <kou@clear-code.com>
|
3
3
|
#
|
4
4
|
# This library is free software; you can redistribute it and/or
|
5
5
|
# modify it under the terms of the GNU Lesser General Public
|
@@ -300,6 +300,15 @@ JSON
|
|
300
300
|
end
|
301
301
|
end
|
302
302
|
|
303
|
+
module RequestTests
|
304
|
+
def test_generic
|
305
|
+
expected_response = {"key" => "value"}
|
306
|
+
stub_response(expected_response.to_json)
|
307
|
+
response = client.request(:status).response
|
308
|
+
assert_equal(expected_response, response.body)
|
309
|
+
end
|
310
|
+
end
|
311
|
+
|
303
312
|
module Tests
|
304
313
|
include Utils
|
305
314
|
include Assertions
|
@@ -310,6 +319,7 @@ JSON
|
|
310
319
|
include OpenTests
|
311
320
|
include LoadTests
|
312
321
|
include DefaultOptionsTests
|
322
|
+
include RequestTests
|
313
323
|
end
|
314
324
|
|
315
325
|
class TestGQTP < self
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: groonga-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Haruka Yoshihara
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2017-
|
13
|
+
date: 2017-03-09 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: gqtp
|
@@ -187,8 +187,8 @@ files:
|
|
187
187
|
- lib/groonga/client/protocol/http/synchronous.rb
|
188
188
|
- lib/groonga/client/protocol/http/thread.rb
|
189
189
|
- lib/groonga/client/request.rb
|
190
|
-
- lib/groonga/client/request/base.rb
|
191
190
|
- lib/groonga/client/request/error.rb
|
191
|
+
- lib/groonga/client/request/generic.rb
|
192
192
|
- lib/groonga/client/request/select.rb
|
193
193
|
- lib/groonga/client/response.rb
|
194
194
|
- lib/groonga/client/response/base.rb
|
@@ -229,7 +229,8 @@ files:
|
|
229
229
|
- test/request/select/test-output-columns-parameter.rb
|
230
230
|
- test/request/select/test-sort-keys-parameter.rb
|
231
231
|
- test/request/select/test-values-parameter.rb
|
232
|
-
- test/request/test-
|
232
|
+
- test/request/test-generic.rb
|
233
|
+
- test/request/test-merger.rb
|
233
234
|
- test/request/test-select.rb
|
234
235
|
- test/response/helper.rb
|
235
236
|
- test/response/test-base.rb
|
@@ -283,7 +284,8 @@ test_files:
|
|
283
284
|
- test/request/select/test-output-columns-parameter.rb
|
284
285
|
- test/request/select/test-values-parameter.rb
|
285
286
|
- test/request/select/test-filter-equal-parameter.rb
|
286
|
-
- test/request/test-
|
287
|
+
- test/request/test-merger.rb
|
288
|
+
- test/request/test-generic.rb
|
287
289
|
- test/request/test-select.rb
|
288
290
|
- test/test-command.rb
|
289
291
|
- test/protocol/test-gqtp.rb
|