groonga-command 1.2.7 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aaa9e5d607968c538c0fc7900edd0e0fd8c10c4d
4
- data.tar.gz: 2ca7cd45a8c6709e18dead9c1f36b7f8f6fb6793
3
+ metadata.gz: b5d52462003c9ca479ef592591f48e0b9d001fe1
4
+ data.tar.gz: bad56b2b66c55244d5385ca60f73b2ca94d81c57
5
5
  SHA512:
6
- metadata.gz: 2a0eb7b2a7539445cbd61947e76c77e4d4d3169f83143573bcf3cf2b162b57283245c1afac76d1990616b422c57b00cd966fc371896f9ed7a0c9931209828d3f
7
- data.tar.gz: d0807f8d4b8e9812ece1e03b9a319cdb84e2809e39845559dcde9c61a36b9b7ba492e73c2f5095a8d46453c931744ddcec3620a7ca0b8fc2174bfaa4596216f2
6
+ metadata.gz: d6fc11658893bb743cef7a9bd77ff4b1e38061c2d08ebd4932e0f555a095b71b6963379ab70d7981ce5cc19467edef208ad86a7bb64d7063246c2776f7c3bcd9
7
+ data.tar.gz: fe21795f21cb493d9a7f6f38fc09759a93cf2f20678804d821e99fdccb65461d7d29fe418dd753068604a7bdb590dfaa628774f6e92dcd1439228b3ebbb15937
data/doc/text/news.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # News
2
2
 
3
+ ## 1.2.8: 2016-10-11
4
+
5
+ ### Improvements
6
+
7
+ * {Groonga::Command::Select}: Supported labeled drilldowns.
8
+
9
+ * {Groonga::Command::Select}: Supported `adjuster` parameter.
10
+
11
+ * {Groonga::Command::Select}: Supported `drilldown_calc_types` parameter.
12
+
13
+ * {Groonga::Command::Select}: Supported `drilldown_calc_target` parameter.
14
+
15
+ * {Groonga::Command::Select}: Supported `sort_keys` parameter.
16
+
17
+ * {Groonga::Command::Select}: Supported `drilldown_sort_keys` parameter.
18
+
19
+ * {Groonga::Command::Select#sort_keys}: Added.
20
+
21
+ * {Groonga::Command::Select#sortby}: Deprecated. Use
22
+ {Groonga::Command::Select#sort_keys} instead.
23
+
24
+ * {Groonga::Command::Select#drilldown_sort_keys}: Added.
25
+
3
26
  ## 1.2.7: 2016-08-15
4
27
 
5
28
  ### Improvements
@@ -184,8 +184,12 @@ module Groonga
184
184
  end
185
185
 
186
186
  def integer_value(name)
187
- value = self[name]
187
+ parse_integer_value(self[name])
188
+ end
189
+
190
+ def parse_integer_value(value)
188
191
  return value if value.nil?
192
+ return nil if value.empty?
189
193
 
190
194
  begin
191
195
  Integer(value)
@@ -195,7 +199,12 @@ module Groonga
195
199
  end
196
200
 
197
201
  def array_value(name)
198
- (self[name] || "").strip.split(/\s*,\s*/)
202
+ parse_array_value(self[name] || "")
203
+ end
204
+
205
+ def parse_array_value(value)
206
+ return nil if value.nil?
207
+ value.strip.split(/\s*,\s*/)
199
208
  end
200
209
  end
201
210
  end
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2012-2013 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2012-2016 Kouhei Sutou <kou@clear-code.com>
4
2
  #
5
3
  # This library is free software; you can redistribute it and/or
6
4
  # modify it under the terms of the GNU Lesser General Public
@@ -47,16 +45,32 @@ module Groonga
47
45
  :query_expansion,
48
46
  :query_flags,
49
47
  :query_expander,
48
+ :adjuster,
49
+ :drilldown_calc_types,
50
+ :drilldown_calc_target,
51
+ :sort_keys,
52
+ :drilldown_sort_keys,
50
53
  ]
51
54
  end
52
55
  end
53
56
 
54
57
  Command.register(command_name, self)
55
58
 
59
+ # @return [String] The sort keys as String. Each key is
60
+ # separated by "," or spaces.
61
+ #
62
+ # @deprecated since 1.2.8. Use {#sort_keys} instead.
56
63
  def sortby
57
64
  self[:sortby]
58
65
  end
59
66
 
67
+ # @return [::Array<String>] The sort keys.
68
+ #
69
+ # @since 1.2.8
70
+ def sort_keys
71
+ parse_array_value(self[:sort_keys] || self[:sortby] || "")
72
+ end
73
+
60
74
  def scorer
61
75
  self[:scorer]
62
76
  end
@@ -77,6 +91,21 @@ module Groonga
77
91
  @drilldowns ||= array_value(:drilldown)
78
92
  end
79
93
 
94
+ # @return [::Array<String>] The sort keys for drilldowns.
95
+ #
96
+ # @since 1.2.8
97
+ def drilldown_sort_keys
98
+ value = self[:drilldown_sort_keys] || self[:drilldown_sortby] || ""
99
+ parse_array_value(value)
100
+ end
101
+
102
+ # @return [::Hash<String, Drilldown>] The labeled drilldowns.
103
+ #
104
+ # @since 1.2.8
105
+ def labeled_drilldowns
106
+ @labeled_drilldowns ||= parse_labeled_drilldowns
107
+ end
108
+
80
109
  def output_columns
81
110
  self[:output_columns]
82
111
  end
@@ -90,6 +119,52 @@ module Groonga
90
119
  condition
91
120
  end
92
121
  end
122
+
123
+ def parse_labeled_drilldowns
124
+ raw_labeled_drilldowns = {}
125
+ @arguments.each do |name, value|
126
+ case name.to_s
127
+ when /\Adrilldowns?\[(.+?)\]\.(.+?)\z/
128
+ label = $1
129
+ parameter_name = $2
130
+ raw_labeled_drilldowns[label] ||= {}
131
+ raw_labeled_drilldowns[label][parameter_name] = value
132
+ end
133
+ end
134
+ build_labeled_drilldowns(raw_labeled_drilldowns)
135
+ end
136
+
137
+ def build_labeled_drilldowns(raw_labeled_drilldowns)
138
+ labeled_drilldowns = {}
139
+ raw_labeled_drilldowns.each do |label, raw_drilldown|
140
+ keys = parse_array_value(raw_drilldown["keys"])
141
+ sort_keys = raw_drilldown["sort_keys"] || raw_drilldown["sortby"]
142
+ sort_keys = parse_array_value(sort_keys)
143
+ output_columns = parse_array_value(raw_drilldown["output_columns"])
144
+ offset = parse_integer_value(raw_drilldown["offset"])
145
+ limit = parse_integer_value(raw_drilldown["limit"])
146
+ calc_types = parse_array_value(raw_drilldown["calc_types"])
147
+ calc_target = raw_drilldown["calc_target"]
148
+ drilldown = Drilldown.new(keys,
149
+ sort_keys,
150
+ output_columns,
151
+ offset,
152
+ limit,
153
+ calc_types,
154
+ calc_target)
155
+ labeled_drilldowns[label] = drilldown
156
+ end
157
+ labeled_drilldowns
158
+ end
159
+
160
+ class Drilldown < Struct.new(:keys,
161
+ :sort_keys,
162
+ :output_columns,
163
+ :offset,
164
+ :limit,
165
+ :calc_types,
166
+ :calc_target)
167
+ end
93
168
  end
94
169
  end
95
170
  end
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Groonga
18
18
  module Command
19
- VERSION = "1.2.7"
19
+ VERSION = "1.2.8"
20
20
  end
21
21
  end
@@ -1,6 +1,4 @@
1
- # -*- coding: utf-8 -*-
2
- #
3
- # Copyright (C) 2011-2013 Kouhei Sutou <kou@clear-code.com>
1
+ # Copyright (C) 2011-2016 Kouhei Sutou <kou@clear-code.com>
4
2
  #
5
3
  # This library is free software; you can redistribute it and/or
6
4
  # modify it under the terms of the GNU Lesser General Public
@@ -43,6 +41,11 @@ class SelectCommandTest < Test::Unit::TestCase
43
41
  query_expansion = "deprecated"
44
42
  query_flags = "ALLOW_LEADING_NOT"
45
43
  query_expander = "Terms.synonym"
44
+ adjuster = "tag * 10"
45
+ drilldown_calc_types = "MIN, MAX"
46
+ drilldown_calc_target = "age"
47
+ sort_keys = "-_score"
48
+ drilldown_sort_keys = "-_nsubrecs"
46
49
 
47
50
  ordered_arguments = [
48
51
  table,
@@ -64,6 +67,11 @@ class SelectCommandTest < Test::Unit::TestCase
64
67
  query_expansion,
65
68
  query_flags,
66
69
  query_expander,
70
+ adjuster,
71
+ drilldown_calc_types,
72
+ drilldown_calc_target,
73
+ sort_keys,
74
+ drilldown_sort_keys,
67
75
  ]
68
76
  command = select_command({}, ordered_arguments)
69
77
 
@@ -87,6 +95,11 @@ class SelectCommandTest < Test::Unit::TestCase
87
95
  :query_expansion => query_expansion,
88
96
  :query_flags => query_flags,
89
97
  :query_expander => query_expander,
98
+ :adjuster => adjuster,
99
+ :drilldown_calc_types => drilldown_calc_types,
100
+ :drilldown_calc_target => drilldown_calc_target,
101
+ :sort_keys => sort_keys,
102
+ :drilldown_sort_keys => drilldown_sort_keys,
90
103
  },
91
104
  command.arguments)
92
105
  end
@@ -126,4 +139,81 @@ class SelectCommandTest < Test::Unit::TestCase
126
139
  command.conditions)
127
140
  end
128
141
  end
142
+
143
+ class SortKeysTest < self
144
+ def test_reader
145
+ command = select_command(:sort_keys => "-_score,_key")
146
+ assert_equal(["-_score", "_key"],
147
+ command.sort_keys)
148
+ end
149
+
150
+ def test_sortby
151
+ command = select_command(:sortby => "-_score,_key")
152
+ assert_equal(["-_score", "_key"],
153
+ command.sort_keys)
154
+ end
155
+ end
156
+
157
+ class DrilldownSortKeysTest < self
158
+ def test_reader
159
+ command = select_command(:drilldown_sort_keys => "-_nsubrecs,_key")
160
+ assert_equal(["-_nsubrecs", "_key"],
161
+ command.drilldown_sort_keys)
162
+ end
163
+
164
+ def test_sortby
165
+ command = select_command(:drilldown_sortby => "-_nsubrecs,_key")
166
+ assert_equal(["-_nsubrecs", "_key"],
167
+ command.drilldown_sort_keys)
168
+ end
169
+ end
170
+
171
+ class LabeledDrilldownsTest < self
172
+ def test_multiple
173
+ parameters = {
174
+ "drilldowns[tag].keys" => "tag",
175
+ "drilldowns[tag].sort_keys" => "-_nsubrecs,_key",
176
+ "drilldowns[tag].output_columns" => "_key,_nsubrecs,_min,_max",
177
+ "drilldowns[tag].offset" => "1",
178
+ "drilldowns[tag].limit" => "10",
179
+ "drilldowns[tag].calc_types" => "MIN,MAX",
180
+ "drilldowns[tag].calc_target" => "_nsubrecs",
181
+
182
+ "drilldowns[author_tag].keys" => "author,tag",
183
+ "drilldowns[author_tag].sort_keys" => "_value.author",
184
+ "drilldowns[author_tag].output_columns" => "_value.author,_nsubrecs",
185
+ }
186
+ command = select_command(parameters)
187
+ drilldowns = {
188
+ "author_tag" => drilldown(:keys => ["author", "tag"],
189
+ :sort_keys => ["_value.author"],
190
+ :output_columns => [
191
+ "_value.author",
192
+ "_nsubrecs",
193
+ ]),
194
+ "tag" => drilldown(:keys => ["tag"],
195
+ :sort_keys => ["-_nsubrecs", "_key"],
196
+ :output_columns => [
197
+ "_key",
198
+ "_nsubrecs",
199
+ "_min",
200
+ "_max",
201
+ ],
202
+ :offset => 1,
203
+ :limit => 10,
204
+ :calc_types => ["MIN", "MAX"],
205
+ :calc_target => "_nsubrecs"),
206
+ }
207
+ assert_equal(drilldowns,
208
+ command.labeled_drilldowns)
209
+ end
210
+
211
+ def drilldown(parameters)
212
+ drilldown = Groonga::Command::Select::Drilldown.new
213
+ parameters.each do |key, value|
214
+ drilldown[key] = value
215
+ end
216
+ drilldown
217
+ end
218
+ end
129
219
  end
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.2.7
4
+ version: 1.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-15 00:00:00.000000000 Z
11
+ date: 2016-10-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -266,55 +266,54 @@ specification_version: 4
266
266
  summary: Groonga-command is a library that represents [Groonga](http://groonga.org/)'s
267
267
  command. You can write a program that handle Groonga's command by using groonga-command.
268
268
  test_files:
269
- - test/command/test-schema.rb
270
- - test/command/test-column-remove.rb
271
- - test/command/test-range-filter.rb
272
- - test/command/test-object-inspect.rb
273
- - test/command/test-column-copy.rb
274
- - test/command/test-io-flush.rb
275
- - test/command/test-log-put.rb
276
- - test/command/test-plugin-unregister.rb
277
- - test/command/test-table-remove.rb
278
- - test/command/test-column-rename.rb
279
- - test/command/test-column-create.rb
280
- - test/command/test-select.rb
281
- - test/command/test-shutdown.rb
269
+ - test/groonga-command-test-utils.rb
270
+ - test/command/test-config-delete.rb
282
271
  - test/command/test-object-remove.rb
283
- - test/command/test-logical-select.rb
284
272
  - test/command/test-table-tokenize.rb
285
- - test/command/test-logical-shard-list.rb
286
- - test/command/test-object-exist.rb
287
- - test/command/test-suggest.rb
288
- - test/command/test-request-cancel.rb
289
- - test/command/test-query-expand.rb
290
- - test/command/test-log-level.rb
291
- - test/command/test-table-list.rb
292
- - test/command/test-column-list.rb
293
- - test/command/test-load.rb
294
- - test/command/test-dump.rb
295
- - test/command/test-truncate.rb
296
- - test/command/test-delete.rb
297
- - test/command/test-ruby-load.rb
298
- - test/command/test-plugin-register.rb
273
+ - test/command/test-reindex.rb
274
+ - test/command/test-plugin-unregister.rb
275
+ - test/command/test-io-flush.rb
299
276
  - test/command/test-base.rb
300
- - test/command/test-table-rename.rb
301
- - test/command/test-config-get.rb
302
277
  - test/command/test-logical-count.rb
278
+ - test/command/test-table-rename.rb
279
+ - test/command/test-column-rename.rb
280
+ - test/command/test-dump.rb
303
281
  - test/command/test-normalize.rb
304
- - test/command/test-table-copy.rb
305
- - test/command/test-get.rb
282
+ - test/command/test-config-get.rb
283
+ - test/command/test-register.rb
284
+ - test/command/test-shutdown.rb
285
+ - test/command/test-delete.rb
286
+ - test/command/test-column-copy.rb
287
+ - test/command/test-tokenize.rb
288
+ - test/command/test-log-put.rb
289
+ - test/command/test-load.rb
290
+ - test/command/test-column-list.rb
291
+ - test/command/test-plugin-register.rb
292
+ - test/command/test-request-cancel.rb
293
+ - test/command/test-column-create.rb
294
+ - test/command/test-config-set.rb
306
295
  - test/command/test-logical-range-filter.rb
307
- - test/command/test-config-delete.rb
308
- - test/command/test-logical-table-remove.rb
296
+ - test/command/test-object-inspect.rb
309
297
  - test/command/format/test-command.rb
310
- - test/command/test-reindex.rb
298
+ - test/command/test-logical-select.rb
299
+ - test/command/test-get.rb
311
300
  - test/command/test-thread-limit.rb
312
- - test/command/test-config-set.rb
313
- - test/command/test-tokenize.rb
314
- - test/command/test-ruby-eval.rb
301
+ - test/command/test-table-list.rb
302
+ - test/command/test-object-exist.rb
303
+ - test/command/test-log-level.rb
304
+ - test/command/test-range-filter.rb
315
305
  - test/command/test-status.rb
316
- - test/command/test-register.rb
306
+ - test/command/test-logical-shard-list.rb
307
+ - test/command/test-schema.rb
308
+ - test/command/test-suggest.rb
309
+ - test/command/test-select.rb
310
+ - test/command/test-column-remove.rb
311
+ - test/command/test-ruby-eval.rb
317
312
  - test/command/test-table-create.rb
313
+ - test/command/test-table-remove.rb
314
+ - test/command/test-ruby-load.rb
315
+ - test/command/test-table-copy.rb
316
+ - test/command/test-query-expand.rb
317
+ - test/command/test-truncate.rb
318
+ - test/command/test-logical-table-remove.rb
318
319
  - test/run-test.rb
319
- - test/groonga-command-test-utils.rb
320
- has_rdoc: