groonga-client 0.5.8 → 0.5.9

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 4513c924b1dc4c7ca3b26afc382163620d09d26c
4
- data.tar.gz: dd01a037ba7ff770cf04b6d3118d9847061e0fe4
2
+ SHA256:
3
+ metadata.gz: 16493f7abb6c08faa1f10060a64bedca44071acc4772ed06ac400a91a4b96282
4
+ data.tar.gz: 0c94271fb51d35d2758e423a7d52cacc46488ae1c6afbc9ab947b3093dedcfee
5
5
  SHA512:
6
- metadata.gz: a71e2bd65572c69a35956b928c533754ae6411e5788bc5a412e939eeb7435d765b341ac4f623a8ca30778c8ed7ccf356489007628fafdddb8e94c3716ad2119f
7
- data.tar.gz: 698187d4515e5d45bd1b4572f046ca7e30c915f99b35b676a6027c7c107549b5a52c69b5629612ced8a9d2597f29ea0402536d2574529ff82e025f972f78bebd
6
+ metadata.gz: 8df38010cd75c8e29bd0461243ed0ce07a6cb7efe84450e2eae1e5a8612cd3237be4f00c37bda7a10bbd7016bf5be88507961016337664c988a27ee5c66487b5
7
+ data.tar.gz: 3a23a2605d9711c4e46582b5a06021a434763d7021a4bd1263be077e605ec1bdcfdfb7fd8d858e2166bd0213ec2feb24961317699a486d33c817182214c3106b
@@ -1,5 +1,11 @@
1
1
  # NEWS
2
2
 
3
+ ## 0.5.9 - 2018-07-13
4
+
5
+ ### Improvements
6
+
7
+ * Added support for TSV output.
8
+
3
9
  ## 0.5.8 - 2017-11-09
4
10
 
5
11
  ### Improvements
@@ -1,5 +1,5 @@
1
1
  # Copyright (C) 2013 Haruka Yoshihara <yoshihara@clear-code.com>
2
- # Copyright (C) 2013-2016 Kouhei Sutou <kou@clear-code.com>
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
@@ -23,6 +23,7 @@ require "groonga/client/command"
23
23
  require "groonga/client/empty-request"
24
24
  require "groonga/client/protocol/gqtp"
25
25
  require "groonga/client/protocol/http"
26
+ require "groonga/client/protocol/file"
26
27
  require "groonga/client/request"
27
28
 
28
29
  module Groonga
@@ -100,9 +101,11 @@ module Groonga
100
101
  @connection = Groonga::Client::Protocol::GQTP.new(url, options)
101
102
  when "http", "https"
102
103
  @connection = Groonga::Client::Protocol::HTTP.new(url, options)
104
+ when "file"
105
+ @connection = Groonga::Client::Protocol::File.new(url, options)
103
106
  else
104
107
  message = "unsupported scheme: <#{url.scheme}>: "
105
- message << "supported: [gqtp, http, https]"
108
+ message << "supported: [gqtp, http, https, file]"
106
109
  raise ArgumentError, message
107
110
  end
108
111
  end
@@ -219,7 +222,7 @@ module Groonga
219
222
  scheme = (options.delete(:protocol) || "gqtp").to_s
220
223
  host = options.delete(:host) || options.delete(:address) || "127.0.0.1"
221
224
  port = options.delete(:port) || default_port(scheme)
222
- path = options.delete(:path)
225
+ path = options.delete(:path) || default_path(scheme)
223
226
  user = options.delete(:user)
224
227
  password = options.delete(:password)
225
228
  if user and password
@@ -260,6 +263,15 @@ module Groonga
260
263
  end
261
264
  end
262
265
 
266
+ def default_path(scheme)
267
+ case scheme
268
+ when "http", "https"
269
+ "/d/"
270
+ else
271
+ nil
272
+ end
273
+ end
274
+
263
275
  def groonga_command_name?(name)
264
276
  /\A[a-zA-Z][a-zA-Z\d_]+\z/ === name.to_s
265
277
  end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2015-2017 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2015-2018 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,7 +14,9 @@
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
+ require "fileutils"
17
18
  require "json"
19
+ require "pathname"
18
20
  require "securerandom"
19
21
 
20
22
  require "groonga/command/parser"
@@ -45,8 +47,19 @@ module Groonga
45
47
  runner = Runner.new(client, @runner_options)
46
48
 
47
49
  if command_file_paths.empty?
48
- $stdin.each_line do |line|
49
- runner << line
50
+ if $stdin.tty? and $stdout.tty?
51
+ begin
52
+ require "readline"
53
+ rescue LoadError
54
+ repl = BareREPL.new(runner)
55
+ else
56
+ repl = ReadlineREPL.new(runner)
57
+ end
58
+ repl.run
59
+ else
60
+ $stdin.each_line do |line|
61
+ runner << line
62
+ end
50
63
  end
51
64
  else
52
65
  command_file_paths.each do |command_file_path|
@@ -114,6 +127,17 @@ module Groonga
114
127
  @parser.finish
115
128
  end
116
129
 
130
+ def repl
131
+ begin
132
+ require "readline"
133
+ rescue LoadError
134
+ repl = BareREPL.new(self)
135
+ else
136
+ repl = ReadlineREPL.new(self)
137
+ repl_readline
138
+ end
139
+ end
140
+
117
141
  private
118
142
  def create_command_parser
119
143
  parser = Groonga::Command::Parser.new
@@ -176,6 +200,98 @@ module Groonga
176
200
  end
177
201
  end
178
202
  end
203
+
204
+ class BareREPL
205
+ def initialize(runner)
206
+ @runner = runner
207
+ end
208
+
209
+ def run
210
+ loop do
211
+ print("> ")
212
+ $stdout.flush
213
+ line = gets
214
+ break if line.nil?
215
+ @runner << line
216
+ end
217
+ end
218
+ end
219
+
220
+ class ReadlineREPL
221
+ def initialize(runner)
222
+ @runner = runner
223
+ @history_path = guess_history_path
224
+ read_history
225
+ end
226
+
227
+ def run
228
+ loop do
229
+ line = Readline.readline("> ", true)
230
+ break if line.nil?
231
+ add_history(line)
232
+ @runner << line
233
+ @runner << "\n"
234
+ end
235
+ end
236
+
237
+ private
238
+ def guess_history_path
239
+ case RUBY_PLATFORM
240
+ when /mswin/, /mingw/
241
+ base_dir = ENV["LOCALAPPDATA"] || "~/AppData"
242
+ when /darwin/
243
+ base_dir = "~/Library/Preferences"
244
+ else
245
+ base_dir = ENV["XDG_CONFIG_HOME"] || "~/.config"
246
+ end
247
+ Pathname(base_dir).expand_path + "groonga-client" + "history.txt"
248
+ end
249
+
250
+ def read_history
251
+ if @history_path.exist?
252
+ @history_path.open do |history_file|
253
+ history_file.each_line do |line|
254
+ Readline::HISTORY << line.chomp
255
+ end
256
+ end
257
+ @history_timestamp = @history_path.mtime
258
+ else
259
+ @history_timestamp = Time.now
260
+ end
261
+ end
262
+
263
+ def add_history(entry)
264
+ updated = history_is_updated?
265
+
266
+ if new_history_entry?(entry)
267
+ FileUtils.mkdir_p(@history_path.dirname)
268
+ @history_path.open("a") do |history_file|
269
+ history_file << entry
270
+ history_file << "\n"
271
+ end
272
+ else
273
+ Readline::HISTORY.pop
274
+ end
275
+
276
+ if updated
277
+ Readline::HISTORY.clear
278
+ read_history
279
+ end
280
+ end
281
+
282
+ def history_is_updated?
283
+ @history_path.exist? and
284
+ @history_path.mtime > @history_timestamp
285
+ end
286
+
287
+ def new_history_entry?(entry)
288
+ return false if /\A\s*\z/ =~ entry
289
+ if Readline::HISTORY.size > 1 and Readline::HISTORY[-2] == entry
290
+ return false
291
+ end
292
+ true
293
+ end
294
+ end
179
295
  end
180
296
  end
181
297
  end
@@ -0,0 +1,76 @@
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
+ require "groonga/client/version"
18
+ require "groonga/client/protocol/error"
19
+
20
+ module Groonga
21
+ class Client
22
+ module Protocol
23
+ class File
24
+ def initialize(url, options)
25
+ @url = url
26
+ @options = options
27
+ end
28
+
29
+ def send(command, &block)
30
+ open_pipes do |input, output, error|
31
+ options = {
32
+ :in => input[0],
33
+ :out => output[1],
34
+ :err => error[1],
35
+ }
36
+ pid = spawn("groonga", @url.path, options)
37
+ input[0].close
38
+ output[1].close
39
+ error[1].close
40
+
41
+ input[1].puts(command.to_command_format)
42
+ input[1].close
43
+ response = output[0].read
44
+ Process.waitpid(pid)
45
+ yield(response)
46
+ EmptyRequest.new
47
+ end
48
+ end
49
+
50
+ def connected?
51
+ false
52
+ end
53
+
54
+ def close(&block)
55
+ if block_given?
56
+ yield
57
+ EmptyRequest.new
58
+ else
59
+ false
60
+ end
61
+ end
62
+
63
+ private
64
+ def open_pipes
65
+ IO.pipe do |input|
66
+ IO.pipe do |output|
67
+ IO.pipe do |error|
68
+ yield(input, output, error)
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
76
+ end
@@ -21,7 +21,12 @@ module Groonga
21
21
  module PathResolvable
22
22
  private
23
23
  def resolve_path(uri, path)
24
- uri.path.chomp("/") + path
24
+ path_prefix = uri.path.chomp("/")
25
+ if path_prefix.empty?
26
+ path
27
+ else
28
+ path.sub(/\A\/d/) {path_prefix}
29
+ end
25
30
  end
26
31
  end
27
32
  end
@@ -17,6 +17,7 @@
17
17
  # License along with this library; if not, write to the Free Software
18
18
  # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
19
 
20
+ require "csv"
20
21
  require "rexml/document"
21
22
  require "json"
22
23
 
@@ -78,6 +79,9 @@ module Groonga
78
79
  when :xml
79
80
  header, body = parse_xml(raw_response)
80
81
  return_code = header[0] if header
82
+ when :tsv
83
+ header, body = parse_tsv(raw_response)
84
+ return_code = header["return_code"] if header
81
85
  else
82
86
  header = nil
83
87
  body = raw_response
@@ -129,6 +133,46 @@ module Groonga
129
133
  end
130
134
  end
131
135
  end
136
+
137
+ def parse_tsv(response)
138
+ tsv = CSV.new(response, col_sep: "\t")
139
+ raw_header = tsv.shift
140
+ return nil, nil if raw_header.nil?
141
+
142
+ header = parse_tsv_header(raw_header)
143
+ return header, nil unless header["return_code"].zero?
144
+
145
+ body = parse_tsv_body(tsv)
146
+ [header, body]
147
+ end
148
+
149
+ def parse_tsv_header(raw_header)
150
+ header = {
151
+ "return_code" => Integer(raw_header[0], 10),
152
+ "start_time" => Float(raw_header[1]),
153
+ "elapsed_time" => Float(raw_header[2]),
154
+ }
155
+ if raw_header.size >= 4
156
+ header["error"] = {
157
+ "message" => raw_header[3],
158
+ }
159
+ if raw_header.size >= 5
160
+ header["error"]["function"] = raw_header[4]
161
+ header["error"]["file"] = raw_header[5]
162
+ header["error"]["line"] = Integer(raw_header[6])
163
+ end
164
+ end
165
+ header
166
+ end
167
+
168
+ def parse_tsv_body(tsv)
169
+ body = []
170
+ tsv.each do |row|
171
+ break if row.size == 1 and row[0] == "END"
172
+ body << row
173
+ end
174
+ body
175
+ end
132
176
  end
133
177
 
134
178
  # @return [Groonga::Command] The command for the request.
@@ -20,10 +20,50 @@ module Groonga
20
20
  class Client
21
21
  module Response
22
22
  class Error < Base
23
- # @return [String] The error message of the error response.
23
+ # @return [String, nil] The error message of the error response.
24
+ #
24
25
  # @since 0.1.0
25
26
  def message
26
- (header || [0, 0, 0.0, ""])[3]
27
+ error_message
28
+ end
29
+
30
+ # @return [String, nil] The function name where the error is occurred.
31
+ #
32
+ # @since 0.5.9
33
+ def function
34
+ if header.nil?
35
+ nil
36
+ elsif header_v1?
37
+ header[4]
38
+ else
39
+ (header["error"] || {})["function"]
40
+ end
41
+ end
42
+
43
+ # @return [String, nil] The file name where the error is occurred.
44
+ #
45
+ # @since 0.5.9
46
+ def file
47
+ if header.nil?
48
+ nil
49
+ elsif header_v1?
50
+ header[5]
51
+ else
52
+ (header["error"] || {})["file"]
53
+ end
54
+ end
55
+
56
+ # @return [String, nil] The line where the error is occurred.
57
+ #
58
+ # @since 0.5.9
59
+ def line
60
+ if header.nil?
61
+ nil
62
+ elsif header_v1?
63
+ header[5]
64
+ else
65
+ (header["error"] || {})["line"]
66
+ end
27
67
  end
28
68
  end
29
69
  end
@@ -100,6 +100,78 @@ module Groonga
100
100
 
101
101
  drilldowns
102
102
  end
103
+
104
+ def parse_tsv_body(tsv)
105
+ record_sets = []
106
+
107
+ n_hits = parse_tsv_n_hits(tsv.shift)
108
+ columns = parse_tsv_columns(tsv.shift)
109
+ records = []
110
+ loop do
111
+ row = tsv.shift
112
+ break if row.size == 1 and row[0] == "END"
113
+ if (row.size % 4).zero? and row[0] == "[" and row[-1] == "]"
114
+ next_n_hits_row = records.pop
115
+ record_sets << [
116
+ [n_hits],
117
+ columns,
118
+ *records,
119
+ ]
120
+ n_hits = parse_tsv_n_hits(next_n_hits_row)
121
+ columns = parse_tsv_columns(row)
122
+ records = []
123
+ next
124
+ end
125
+ records << parse_tsv_record(row)
126
+ end
127
+
128
+ record_sets << [
129
+ [n_hits],
130
+ columns,
131
+ *records,
132
+ ]
133
+ record_sets
134
+ end
135
+
136
+ def parse_tsv_n_hits(row)
137
+ Integer(row[0], 10)
138
+ end
139
+
140
+ def parse_tsv_columns(row)
141
+ columns = []
142
+ column = nil
143
+ row.each do |value|
144
+ case value
145
+ when "["
146
+ column = []
147
+ when "]"
148
+ columns << column
149
+ else
150
+ column << value
151
+ end
152
+ end
153
+ columns
154
+ end
155
+
156
+ def parse_tsv_record(row)
157
+ record = []
158
+ column_value = nil
159
+ row.each do |value|
160
+ case value
161
+ when "["
162
+ column_value = []
163
+ when "]"
164
+ record << column_value
165
+ else
166
+ if column_value
167
+ column_value << value
168
+ else
169
+ record << value
170
+ end
171
+ end
172
+ end
173
+ record
174
+ end
103
175
  end
104
176
 
105
177
  include Enumerable
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Groonga
18
18
  class Client
19
- VERSION = "0.5.8"
19
+ VERSION = "0.5.9"
20
20
  end
21
21
  end
@@ -30,4 +30,9 @@ module TestResponseHelper
30
30
  parse_raw_response_raw(command_name, {"output_type" => "xml"},
31
31
  raw_response)
32
32
  end
33
+
34
+ def parse_raw_tsv_response(command_name, raw_response)
35
+ parse_raw_response_raw(command_name, {"output_type" => "tsv"},
36
+ raw_response)
37
+ end
33
38
  end
@@ -55,7 +55,7 @@ class TestResponseError < Test::Unit::TestCase
55
55
 
56
56
  def test_no_header
57
57
  response = Groonga::Client::Response::Error.new(nil, nil, nil)
58
- assert_equal("", response.message)
58
+ assert_nil(response.message)
59
59
  end
60
60
  end
61
61
  end
@@ -0,0 +1,127 @@
1
+ # Copyright (C) 2018 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
+ require "response/helper"
18
+
19
+ class TestResponseSelectTSV < Test::Unit::TestCase
20
+ include TestResponseHelper
21
+
22
+ def drilldown(key, n_hits, records)
23
+ Groonga::Client::Response::Select::Drilldown.new(key, n_hits, records)
24
+ end
25
+
26
+ def test_error
27
+ raw_response = <<-TSV
28
+ -22 0 0.0 "message" "function" "file" 29
29
+
30
+ END
31
+ TSV
32
+
33
+ response = parse_raw_tsv_response("select", raw_response)
34
+ assert_equal({
35
+ :return_code => -22,
36
+ :start_time => Time.at(0),
37
+ :elapsed_time => 0.0,
38
+ :error => {
39
+ :message => "message",
40
+ :function => "function",
41
+ :file => "file",
42
+ :line => 29,
43
+ },
44
+ },
45
+ {
46
+ :return_code => response.return_code,
47
+ :start_time => response.start_time,
48
+ :elapsed_time => response.elapsed_time,
49
+ :error => {
50
+ :message => response.message,
51
+ :function => response.function,
52
+ :file => response.file,
53
+ :line => response.line,
54
+ },
55
+ })
56
+ end
57
+
58
+ def test_basic
59
+ raw_response = <<-TSV
60
+ 0 0 0.0
61
+ 100
62
+ [ "_id" "UInt32" ]
63
+ 1
64
+ 2
65
+ END
66
+ TSV
67
+
68
+ response = parse_raw_tsv_response("select", raw_response)
69
+ assert_equal({
70
+ :return_code => 0,
71
+ :start_time => Time.at(0),
72
+ :elapsed_time => 0.0,
73
+ :records => [
74
+ {"_id" => "1"},
75
+ {"_id" => "2"},
76
+ ],
77
+ },
78
+ {
79
+ :return_code => response.return_code,
80
+ :start_time => response.start_time,
81
+ :elapsed_time => response.elapsed_time,
82
+ :records => response.records,
83
+ })
84
+ end
85
+
86
+ def test_drilldown
87
+ raw_response = <<-TSV
88
+ 0 0 0.0
89
+ 100
90
+ [ "_id" "UInt32" ]
91
+ 7
92
+ [ "_key" "ShortText" ] [ "_nsubrecs" "UInt32" ]
93
+ "2.2.0" "18044"
94
+ "2.3.0" "18115"
95
+ "2.4.0" "14594"
96
+ END
97
+ TSV
98
+
99
+ response = parse_raw_response_raw("select",
100
+ {
101
+ "drilldown" => "version",
102
+ "output_type" => "tsv",
103
+ },
104
+ raw_response)
105
+ drilldown_records = [
106
+ {"_key" => "2.2.0", "_nsubrecs" => "18044"},
107
+ {"_key" => "2.3.0", "_nsubrecs" => "18115"},
108
+ {"_key" => "2.4.0", "_nsubrecs" => "14594"},
109
+ ]
110
+ assert_equal({
111
+ :return_code => 0,
112
+ :start_time => Time.at(0),
113
+ :elapsed_time => 0.0,
114
+ :records => [],
115
+ :drilldowns => [
116
+ drilldown("version", 7, drilldown_records),
117
+ ],
118
+ },
119
+ {
120
+ :return_code => response.return_code,
121
+ :start_time => response.start_time,
122
+ :elapsed_time => response.elapsed_time,
123
+ :records => response.records,
124
+ :drilldowns => response.drilldowns,
125
+ })
126
+ end
127
+ end
@@ -491,7 +491,7 @@ EOH
491
491
 
492
492
  def test_with_trailing_slash
493
493
  stub_response("[]")
494
- options = component_based_open_options.merge(:path => "/sub_path/")
494
+ options = component_based_open_options.merge(:path => "/sub_path/d/")
495
495
  Groonga::Client.open(options) do |client|
496
496
  client.status
497
497
  end
@@ -500,7 +500,7 @@ EOH
500
500
 
501
501
  def test_without_trailing_slash
502
502
  stub_response("[]")
503
- options = component_based_open_options.merge(:path => "/sub_path")
503
+ options = component_based_open_options.merge(:path => "/sub_path/d")
504
504
  Groonga::Client.open(options) do |client|
505
505
  client.status
506
506
  end
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.5.8
4
+ version: 0.5.9
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-11-10 00:00:00.000000000 Z
13
+ date: 2018-07-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: gqtp
@@ -161,9 +161,9 @@ email:
161
161
  - kou@clear-code.com
162
162
  - tfortress58@gmail.com
163
163
  executables:
164
- - groonga-client
165
164
  - groonga-client-index-check
166
165
  - groonga-client-index-recreate
166
+ - groonga-client
167
167
  extensions: []
168
168
  extra_rdoc_files: []
169
169
  files:
@@ -188,6 +188,7 @@ files:
188
188
  - lib/groonga/client/empty-request.rb
189
189
  - lib/groonga/client/error.rb
190
190
  - lib/groonga/client/protocol/error.rb
191
+ - lib/groonga/client/protocol/file.rb
191
192
  - lib/groonga/client/protocol/gqtp.rb
192
193
  - lib/groonga/client/protocol/http.rb
193
194
  - lib/groonga/client/protocol/http/coolio.rb
@@ -251,6 +252,7 @@ files:
251
252
  - test/response/test-schema.rb
252
253
  - test/response/test-select-command-version1.rb
253
254
  - test/response/test-select-command-version3.rb
255
+ - test/response/test-select-tsv.rb
254
256
  - test/response/test-select-xml.rb
255
257
  - test/response/test-status.rb
256
258
  - test/response/test-table-create.rb
@@ -281,41 +283,42 @@ required_rubygems_version: !ruby/object:Gem::Requirement
281
283
  version: '0'
282
284
  requirements: []
283
285
  rubyforge_project:
284
- rubygems_version: 2.5.2.1
286
+ rubygems_version: 2.7.6
285
287
  signing_key:
286
288
  specification_version: 4
287
289
  summary: Groonga-client is a client for Groonga (http://groonga.org/) implemented
288
290
  with pure Ruby. You can use it without Groonga.
289
291
  test_files:
292
+ - test/test-client.rb
293
+ - test/command-line/test-index-check.rb
294
+ - test/command-line/helper.rb
295
+ - test/command-line/test-index-recreate.rb
290
296
  - test/test-script-syntax.rb
291
- - test/protocol/test-http.rb
297
+ - test/request/select/test-backward-compatible-sort-keys-parameter.rb
298
+ - test/request/select/test-filter.rb
299
+ - test/request/select/test-sort-keys-parameter.rb
300
+ - test/request/select/test-output-columns-parameter.rb
301
+ - test/request/select/test-values-parameter.rb
302
+ - test/request/select/test-scorer.rb
303
+ - test/request/test-merger.rb
304
+ - test/request/test-generic.rb
305
+ - test/request/test-select.rb
306
+ - test/test-command.rb
292
307
  - test/protocol/test-gqtp.rb
293
- - test/response/test-schema.rb
308
+ - test/protocol/test-http.rb
309
+ - test/run-test.rb
310
+ - test/response/test-base.rb
311
+ - test/response/test-select-tsv.rb
312
+ - test/response/test-load.rb
313
+ - test/response/test-column-list.rb
314
+ - test/response/helper.rb
294
315
  - test/response/test-error.rb
295
- - test/response/test-table-remove.rb
316
+ - test/response/test-table-list.rb
317
+ - test/response/test-status.rb
296
318
  - test/response/test-select-xml.rb
319
+ - test/response/test-schema.rb
297
320
  - test/response/test-select-command-version3.rb
298
- - test/response/test-table-list.rb
299
- - test/response/test-column-list.rb
300
- - test/response/test-load.rb
301
- - test/response/helper.rb
302
- - test/response/test-base.rb
303
321
  - test/response/test-select-command-version1.rb
304
- - test/response/test-status.rb
305
322
  - test/response/test-table-create.rb
323
+ - test/response/test-table-remove.rb
306
324
  - test/results/test-table-list.rb
307
- - test/test-command.rb
308
- - test/run-test.rb
309
- - test/request/test-generic.rb
310
- - test/request/select/test-values-parameter.rb
311
- - test/request/select/test-output-columns-parameter.rb
312
- - test/request/select/test-scorer.rb
313
- - test/request/select/test-backward-compatible-sort-keys-parameter.rb
314
- - test/request/select/test-filter.rb
315
- - test/request/select/test-sort-keys-parameter.rb
316
- - test/request/test-select.rb
317
- - test/request/test-merger.rb
318
- - test/test-client.rb
319
- - test/command-line/test-index-recreate.rb
320
- - test/command-line/helper.rb
321
- - test/command-line/test-index-check.rb