groonga-command 1.3.9 → 1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA256:
3
- metadata.gz: df5f0941b5d73fcc9d7375e5fe8962025092023641ca609002589ce0f1933fc9
4
- data.tar.gz: 1fc0f07a6703553d9552f43880bccfd3c7003235f185dfca08f1a5bf221fd4ab
2
+ SHA1:
3
+ metadata.gz: 94a17f5c7b56db7a29320cb7af65395183b7a43c
4
+ data.tar.gz: 5a199858fd2c1a291bc6fdc4f0e5d76518f19011
5
5
  SHA512:
6
- metadata.gz: 672af58bbf47ae2e9e97a2eec2340fc2892b46f07a436c957a031e328c5de8ea28a8d018d0120fc79ef21d19e92bec327dbf5934984a31431c11f31fb6c7ba5c
7
- data.tar.gz: 80b33c5adf0266ab0383d960d0e5c849ea01f9c023b52177728193d2fc4df2fca3b16ed4a2e99daa9b66e477c56f1b4af99fb5928ff6106f95038ebe123e24ba
6
+ metadata.gz: '0107882a318b6518b8825d68c9c38958b9a98ef3f0e110de7985c848425046e3202ae13a32670353bb99c34a3ac685b697248dabe25ce2747fe3daff0a907bc7'
7
+ data.tar.gz: 2f83719bcb481a8a745deca1f3c5337f1f4e6c341f34299f3d03c740e7f9e9a458c07cfe7928cc2c5c30444830ab90ba25549011c09e919915ca082496a2e013
data/doc/text/news.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # News
2
2
 
3
+ ## 1.4.0: 2019-03-20
4
+
5
+ ### Improvements
6
+
7
+ * {Groonga::Command::Format::Elasticsearch}: Added.
8
+
9
+ * {Groonga::Command::Base#to_elasticsearch_format}: Added.
10
+
3
11
  ## 1.3.9: 2019-03-19
4
12
 
5
13
  ### Improvements
@@ -1,4 +1,5 @@
1
1
  # Copyright (C) 2012-2017 Kouhei Sutou <kou@clear-code.com>
2
+ # Copyright (C) 2019 Yasuhiro Horimoto <horimoto@clear-code.com>
2
3
  #
3
4
  # This library is free software; you can redistribute it and/or
4
5
  # modify it under the terms of the GNU Lesser General Public
@@ -16,6 +17,7 @@
16
17
 
17
18
  require "groonga/command/format/uri"
18
19
  require "groonga/command/format/command"
20
+ require "groonga/command/format/elasticsearch"
19
21
 
20
22
  module Groonga
21
23
  module Command
@@ -153,6 +155,11 @@ module Groonga
153
155
  format.command_line(options)
154
156
  end
155
157
 
158
+ def to_elasticsearch_format(options={})
159
+ format = Format::Elasticsearch.new(@command_name, normalized_arguments)
160
+ format.json(options)
161
+ end
162
+
156
163
  def to_s
157
164
  if uri_format?
158
165
  to_uri_format
@@ -0,0 +1,90 @@
1
+ # Copyright (C) 2019 Yasuhiro Horimoto <horimoto@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
+ module Groonga
18
+ module Command
19
+ module Format
20
+ class Elasticsearch
21
+ def initialize(name, arguments)
22
+ @name = name
23
+ @arguments = arguments
24
+ end
25
+
26
+ def json(options={})
27
+ return nil unless @name == "load"
28
+
29
+ components = []
30
+ elasticsearch_version = options[:version] || 5
31
+
32
+ sorted_arguments = @arguments.sort_by(&:first)
33
+ sorted_arguments.each do |name, value|
34
+ case name
35
+ when :table
36
+ case elasticsearch_version
37
+ when 7
38
+ header = {
39
+ "index" => {
40
+ "_index" => value.downcase,
41
+ "_type"=>"_doc",
42
+ }
43
+ }
44
+ when 8
45
+ header = {
46
+ "index" => {
47
+ "_index" => value.downcase,
48
+ }
49
+ }
50
+ else
51
+ # Version 5.x or 6.x
52
+ header = {
53
+ "index" => {
54
+ "_index" => value.downcase,
55
+ "_type" => "groonga",
56
+ }
57
+ }
58
+ end
59
+ components << JSON.generate(header)
60
+ when :values
61
+ record = JSON.parse(value)
62
+
63
+ if record[0].is_a?(::Array)
64
+ column_names = nil
65
+
66
+ record.each do |load_value|
67
+ if column_names.nil?
68
+ column_names = load_value
69
+ next
70
+ end
71
+ body = {}
72
+ column_values = load_value
73
+ column_names.zip(column_values) do |column_name, column_value|
74
+ body[column_name] = column_value
75
+ end
76
+ components << JSON.generate(body)
77
+ end
78
+ else
79
+ record.each do |load_value|
80
+ components << JSON.generate(load_value)
81
+ end
82
+ end
83
+ end
84
+ end
85
+ components.join("\n")
86
+ end
87
+ end
88
+ end
89
+ end
90
+ end
@@ -1,4 +1,4 @@
1
- # Copyright (C) 2012-2018 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2012-2019 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
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Groonga
18
18
  module Command
19
- VERSION = "1.3.9"
19
+ VERSION = "1.4.0"
20
20
  end
21
21
  end
@@ -122,6 +122,138 @@ select \\
122
122
  end
123
123
  end
124
124
 
125
+ class CovnertToElasticsearchFormatTest < self
126
+ sub_test_case("non target command") do
127
+ def test_select_command
128
+ select = Groonga::Command::Base.new("select",
129
+ :table => "Users",
130
+ :filter => "age<=30",
131
+ :output_type => "json")
132
+ assert_equal(nil,
133
+ select.to_elasticsearch_format)
134
+ end
135
+ end
136
+
137
+ sub_test_case("single record") do
138
+ def test_brackets_format
139
+ load = Groonga::Command::Base.new("load",
140
+ :table => "Site",
141
+ :values => <<-VALUES)
142
+ [
143
+ ["_key","title"],
144
+ ["http://example.org/","This is test record 1!"]
145
+ ]
146
+ VALUES
147
+
148
+ expected = <<-OUTPUT.chomp
149
+ {"index":{"_index":"site","_type":"groonga"}}
150
+ {"_key":"http://example.org/","title":"This is test record 1!"}
151
+ OUTPUT
152
+
153
+ assert_equal(expected, load.to_elasticsearch_format)
154
+ end
155
+
156
+ def test_curly_brackets_format
157
+ load = Groonga::Command::Base.new("load",
158
+ :table => "Site",
159
+ :values => <<-VALUES)
160
+ [
161
+ {"_key": "http://example.org/", "title": "This is test record 1!"}
162
+ ]
163
+ VALUES
164
+
165
+ expected = <<-OUTPUT.chomp
166
+ {"index":{"_index":"site","_type":"groonga"}}
167
+ {"_key":"http://example.org/","title":"This is test record 1!"}
168
+ OUTPUT
169
+
170
+ assert_equal(expected, load.to_elasticsearch_format)
171
+ end
172
+ end
173
+
174
+ sub_test_case("multiple records") do
175
+ def test_brackets_format
176
+ load = Groonga::Command::Base.new("load",
177
+ :table => "Site",
178
+ :values => <<-VALUES)
179
+ [
180
+ ["_key","title"],
181
+ ["http://example.org/","This is test record 1!"],
182
+ ["http://example.net/","This is test record 2!"]
183
+ ]
184
+ VALUES
185
+
186
+ expected = <<-OUTPUT.chomp
187
+ {"index":{"_index":"site","_type":"groonga"}}
188
+ {"_key":"http://example.org/","title":"This is test record 1!"}
189
+ {"_key":"http://example.net/","title":"This is test record 2!"}
190
+ OUTPUT
191
+
192
+ assert_equal(expected, load.to_elasticsearch_format)
193
+ end
194
+
195
+ def test_curly_brackets_format
196
+ load = Groonga::Command::Base.new("load",
197
+ :table => "Site",
198
+ :values => <<-VALUES)
199
+ [
200
+ {"_key": "http://example.org/", "title": "This is test record 1!"},
201
+ {"_key": "http://example.net/", "title": "This is test record 2!"}
202
+ ]
203
+ VALUES
204
+
205
+ expected = <<-OUTPUT.chomp
206
+ {"index":{"_index":"site","_type":"groonga"}}
207
+ {"_key":"http://example.org/","title":"This is test record 1!"}
208
+ {"_key":"http://example.net/","title":"This is test record 2!"}
209
+ OUTPUT
210
+
211
+ assert_equal(expected, load.to_elasticsearch_format)
212
+ end
213
+ end
214
+
215
+ def setup
216
+ @load = Groonga::Command::Base.new("load",
217
+ :table => "Site",
218
+ :values => <<-VALUES)
219
+ [
220
+ ["_key","title"],
221
+ ["http://example.org/","This is test record 1!"]
222
+ ]
223
+ VALUES
224
+ end
225
+
226
+ sub_test_case(":version") do
227
+ def test_5
228
+ assert_equal(<<-REQUESTS.chomp, @load.to_elasticsearch_format(:version => 5))
229
+ {"index":{"_index":"site","_type":"groonga"}}
230
+ {"_key":"http://example.org/","title":"This is test record 1!"}
231
+ REQUESTS
232
+ end
233
+
234
+ def test_6
235
+ assert_equal(<<-REQUESTS.chomp, @load.to_elasticsearch_format(:version => 6))
236
+ {"index":{"_index":"site","_type":"groonga"}}
237
+ {"_key":"http://example.org/","title":"This is test record 1!"}
238
+ REQUESTS
239
+ end
240
+
241
+ def test_7
242
+ assert_equal(<<-REQUESTS.chomp, @load.to_elasticsearch_format(:version => 7))
243
+ {"index":{"_index":"site","_type":"_doc"}}
244
+ {"_key":"http://example.org/","title":"This is test record 1!"}
245
+ REQUESTS
246
+ end
247
+
248
+ def test_8
249
+ assert_equal(<<-REQUESTS.chomp, @load.to_elasticsearch_format(:version => 8))
250
+ {"index":{"_index":"site"}}
251
+ {"_key":"http://example.org/","title":"This is test record 1!"}
252
+ REQUESTS
253
+ end
254
+ end
255
+ end
256
+
125
257
  sub_test_case("#to_s") do
126
258
  def setup
127
259
  @table = "Users"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: groonga-command
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.9
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-19 00:00:00.000000000 Z
11
+ date: 2019-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -150,6 +150,7 @@ files:
150
150
  - lib/groonga/command/dump.rb
151
151
  - lib/groonga/command/error.rb
152
152
  - lib/groonga/command/format/command.rb
153
+ - lib/groonga/command/format/elasticsearch.rb
153
154
  - lib/groonga/command/format/uri.rb
154
155
  - lib/groonga/command/get.rb
155
156
  - lib/groonga/command/index-column-diff.rb
@@ -271,65 +272,65 @@ required_rubygems_version: !ruby/object:Gem::Requirement
271
272
  version: '0'
272
273
  requirements: []
273
274
  rubyforge_project:
274
- rubygems_version: 2.7.6
275
+ rubygems_version: 2.5.2.1
275
276
  signing_key:
276
277
  specification_version: 4
277
278
  summary: Groonga-command is a library that represents [Groonga](http://groonga.org/)'s
278
279
  command. You can write a program that handle Groonga's command by using groonga-command.
279
280
  test_files:
280
281
  - test/run-test.rb
281
- - test/command/format/test-command.rb
282
- - test/command/test-status.rb
283
- - test/command/test-shutdown.rb
284
- - test/command/test-io-flush.rb
285
- - test/command/test-base.rb
286
- - test/command/test-column-remove.rb
282
+ - test/groonga-command-test-utils.rb
283
+ - test/command/test-query-log-flags-add.rb
284
+ - test/command/test-log-put.rb
287
285
  - test/command/test-column-create.rb
288
286
  - test/command/test-config-get.rb
287
+ - test/command/test-logical-select.rb
288
+ - test/command/test-plugin-register.rb
289
+ - test/command/test-io-flush.rb
290
+ - test/command/test-column-remove.rb
291
+ - test/command/test-query-expand.rb
292
+ - test/command/test-logical-count.rb
293
+ - test/command/test-log-level.rb
294
+ - test/command/test-shutdown.rb
295
+ - test/command/test-column-copy.rb
296
+ - test/command/test-suggest.rb
297
+ - test/command/test-get.rb
289
298
  - test/command/test-index-column-diff.rb
299
+ - test/command/test-logical-shard-list.rb
300
+ - test/command/test-table-create.rb
290
301
  - test/command/test-logical-table-remove.rb
291
302
  - test/command/test-query-log-flags-get.rb
292
- - test/command/test-reindex.rb
293
- - test/command/test-plugin-register.rb
294
- - test/command/test-object-remove.rb
295
- - test/command/test-dump.rb
296
- - test/command/test-query-log-flags-add.rb
303
+ - test/command/test-query-log-flags-set.rb
304
+ - test/command/test-plugin-unregister.rb
305
+ - test/command/test-delete.rb
306
+ - test/command/test-status.rb
297
307
  - test/command/test-logical-range-filter.rb
308
+ - test/command/test-column-list.rb
309
+ - test/command/test-config-delete.rb
310
+ - test/command/test-dump.rb
311
+ - test/command/format/test-command.rb
312
+ - test/command/test-tokenize.rb
298
313
  - test/command/test-table-tokenize.rb
299
- - test/command/test-query-expand.rb
314
+ - test/command/test-table-rename.rb
315
+ - test/command/test-object-remove.rb
300
316
  - test/command/test-range-filter.rb
301
- - test/command/test-query-log-flags-set.rb
302
- - test/command/test-logical-shard-list.rb
303
- - test/command/test-load.rb
304
- - test/command/test-config-set.rb
305
- - test/command/test-register.rb
306
- - test/command/test-column-rename.rb
307
- - test/command/test-config-delete.rb
308
- - test/command/test-ruby-eval.rb
309
317
  - test/command/test-table-copy.rb
310
- - test/command/test-delete.rb
311
- - test/command/test-column-list.rb
312
- - test/command/test-request-cancel.rb
313
- - test/command/test-schema.rb
314
- - test/command/test-get.rb
315
- - test/command/test-ruby-load.rb
316
318
  - test/command/test-query-log-flags-remove.rb
319
+ - test/command/test-column-rename.rb
320
+ - test/command/test-config-set.rb
321
+ - test/command/test-thread-limit.rb
322
+ - test/command/test-select.rb
323
+ - test/command/test-reindex.rb
324
+ - test/command/test-schema.rb
317
325
  - test/command/test-truncate.rb
318
- - test/command/test-suggest.rb
319
- - test/command/test-logical-select.rb
326
+ - test/command/test-ruby-eval.rb
327
+ - test/command/test-ruby-load.rb
328
+ - test/command/test-request-cancel.rb
329
+ - test/command/test-table-list.rb
330
+ - test/command/test-load.rb
320
331
  - test/command/test-object-inspect.rb
321
- - test/command/test-table-remove.rb
322
- - test/command/test-column-copy.rb
332
+ - test/command/test-register.rb
333
+ - test/command/test-base.rb
323
334
  - test/command/test-object-exist.rb
324
- - test/command/test-thread-limit.rb
325
- - test/command/test-tokenize.rb
326
- - test/command/test-select.rb
327
- - test/command/test-log-put.rb
328
- - test/command/test-log-level.rb
329
- - test/command/test-plugin-unregister.rb
330
- - test/command/test-table-rename.rb
331
335
  - test/command/test-normalize.rb
332
- - test/command/test-logical-count.rb
333
- - test/command/test-table-list.rb
334
- - test/command/test-table-create.rb
335
- - test/groonga-command-test-utils.rb
336
+ - test/command/test-table-remove.rb