groonga-client 0.5.0 → 0.5.1

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: 6f33db5326ba66ef34f99764539597e287337df5
4
- data.tar.gz: ba050f7b65edc1889f843cef883e1784b29c1b8a
3
+ metadata.gz: b8a5665848bb07469199965c91102537be1de8ba
4
+ data.tar.gz: b199fc33a43d039152d4ba068c415259bc4da524
5
5
  SHA512:
6
- metadata.gz: a7869a7e5ac081ed34339ae21665ff97802ed473eb765cb7ef388420319ee5396ab95bde8162a37e0fc434a989aa0a3daa9808d9072b239f34d7704875230afb
7
- data.tar.gz: 44ffaaa3ec83082d908db61985675827684cb8e850317a9363ddebecf1fe84cc1cd52eb96ed7dd27f299fbe90ddd7aefcf0c2efe763a1a67de8c3c7a7f4bce92
6
+ metadata.gz: 9206ea5d72f485a6a47b02bcd4518efe6e1893cc1f462432ac9d9afd67cfb88b3faee72c574e516bad9c76485d94a6efddb9246049773230864c414144a0444c
7
+ data.tar.gz: 39403cfa11da317eb5e17754a7f637234f2c250b2dd62922f501dcc2c0888afa3c74bf849573e61da0d3d14acb1f5b76b7ea7b230fa389b378a2d033017a8aa4
@@ -1,5 +1,17 @@
1
1
  # NEWS
2
2
 
3
+ ## 0.5.1 - 2017-08-21
4
+
5
+ ### Improvements
6
+
7
+ * `Groonga::Client::Request::Select#scorer`: Added a convenience
8
+ method to set scorer. You can use this method by
9
+ `scorer("2 * %{column}", column: :rate)`.
10
+
11
+ * `Groonga::Client::Request::Select#query_flags`: Added a
12
+ convenience method to set query flags. You can use this method by
13
+ `query_flags(["ALLOW_COLUMN", "QUERY_NO_SYNTAX_ERROR"])`.
14
+
3
15
  ## 0.5.0 - 2017-05-08
4
16
 
5
17
  ### Improvements
@@ -47,6 +47,54 @@ module Groonga
47
47
  RequestParameter.new(:query, value))
48
48
  end
49
49
 
50
+ # Sets flags to custom how to parse query.
51
+ #
52
+ # @example One flag
53
+ # request.
54
+ # # Support "COLUMN_NAME:..." syntax
55
+ # query_flags("ALLOW_COLUMN").
56
+ # # -> --query_flags 'ALLOW_COLUMN'
57
+ # query("title:@Groonga")
58
+ # # -> --query_flags 'ALLOW_COLUMN'
59
+ # # --query 'title:@Groonga'
60
+ #
61
+ # @example Multiple flags
62
+ # request.
63
+ # # Support "COLUMN_NAME:..." syntax
64
+ # # Fallback syntax error query to searchable query
65
+ # query_flags(["ALLOW_COLUMN", "QUERY_NO_SYNTAX_ERROR"]).
66
+ # # -> --query_flags 'ALLOW_COLUMN'
67
+ # query("nonexistent:@Groonga")
68
+ # # -> --query_flags 'ALLOW_COLUMN'
69
+ # # --query 'nonexistent:@Groonga'
70
+ # # Normally, "nonexistent:@Groonga" is syntax error
71
+ # # but it's parsed as
72
+ # # "search by one keyword: 'nonexistent:@Groonga'"
73
+ # # because QUERY_NO_SYNTAX_ERROR flag is used
74
+ #
75
+ # @return [Groonga::Client::Request::Select]
76
+ #
77
+ # The new request with the given flag.
78
+ #
79
+ # @overload query_flags(flag)
80
+ #
81
+ # Sets a `#{flag}` flag.
82
+ #
83
+ # @param flag [String] The flag to be used.
84
+ #
85
+ # @since 0.5.1
86
+ #
87
+ # @overload query_flags(flags)
88
+ #
89
+ # Sets `#{flag1}|#{flag2}|...` flags.
90
+ #
91
+ # @param flags [::Array<String>] The flags to be used.
92
+ #
93
+ # @since 0.5.1
94
+ def query_flags(value)
95
+ flags_parameter(:query_flags, value)
96
+ end
97
+
50
98
  # Adds a script syntax condition. If the request already has
51
99
  # any filter condition, they are combined by AND.
52
100
  #
@@ -143,6 +191,70 @@ module Groonga
143
191
  end
144
192
  end
145
193
 
194
+ # Sets scorer.
195
+ #
196
+ # @return [Groonga::Client::Request::Select]
197
+ # The new request with the given scorer.
198
+ #
199
+ # @since 0.5.1
200
+ #
201
+ # @overload scorer(column_name)
202
+ #
203
+ # Sets `_score = #{column_name}` scorer.
204
+ #
205
+ # @example Use column value as score
206
+ # request.scorer(:rate)
207
+ # # -> --scorer '_score = rate'
208
+ #
209
+ # @param column_name [Symbol] The column name to be used as score.
210
+ #
211
+ # @overload scorer(expression, values=nil)
212
+ #
213
+ # Adds a `_score = #{expression % values}` scorer. If
214
+ # `expression` is already assignment form such as `_score =
215
+ # %{column}`, `_score = ` isn't prepended automatically.
216
+ #
217
+ # @example Compute score by expression
218
+ # request.scorer("2 * rate")
219
+ # # -> --scorer '_score = 2 * rate'
220
+ #
221
+ # @example Expand values
222
+ # request.scorer("2 * %{column}", column: :rate)
223
+ # # -> --scorer '_score = 2 * rate'
224
+ #
225
+ # @param expression [String] The script syntax expression.
226
+ # It can includes `%{name}`s as placeholder. They are expanded
227
+ # by `String#%` with the given `values` argument.
228
+ #
229
+ # @param values [nil, ::Hash] The values to be expanded.
230
+ # If the given `expression` doesn't have placeholder, you
231
+ # should specify `nil`.
232
+ #
233
+ # Values are escaped automatically. Values passed from
234
+ # external should be escaped.
235
+ def scorer(expression_or_column_name, values=nil)
236
+ case expression_or_column_name
237
+ when Symbol
238
+ expression = "_score = %{column}"
239
+ column_name = expression_or_column_name
240
+ values = { column: column_name }
241
+ when String
242
+ expression = expression_or_column_name
243
+ case expression
244
+ when /\A\s*\z/
245
+ expression = nil
246
+ when /\A[_a-zA-Z\d]+\s*=/
247
+ # have assignment such as "_score = "
248
+ else
249
+ expression = "_score = #{expression}"
250
+ end
251
+ else
252
+ expression = expression_or_column_name
253
+ end
254
+ add_parameter(OverwriteMerger,
255
+ ScorerExpressionParameter.new(expression, values))
256
+ end
257
+
146
258
  def output_columns(value)
147
259
  add_parameter(OverwriteMerger,
148
260
  OutputColumnsParameter.new("", value))
@@ -729,6 +841,12 @@ module Groonga
729
841
  end
730
842
  end
731
843
 
844
+ class ScorerExpressionParameter < ScriptSyntaxExpressionParameter
845
+ def initialize(expression, values)
846
+ super(:scorer, expression, values)
847
+ end
848
+ end
849
+
732
850
  # @private
733
851
  class OutputColumnsParameter < ValuesParameter
734
852
  def initialize(prefix, output_columns)
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Groonga
18
18
  class Client
19
- VERSION = "0.5.0"
19
+ VERSION = "0.5.1"
20
20
  end
21
21
  end
@@ -0,0 +1,112 @@
1
+ # Copyright (C) 2017 Yasuhiro Horimoto <horimoto@clear-code.com>
2
+ # Copyright (C) 2017 Kouhei Sutou <kou@clear-code.com>
3
+ #
4
+ # This library is free software; you can redistribute it and/or
5
+ # modify it under the terms of the GNU Lesser General Public
6
+ # License as published by the Free Software Foundation; either
7
+ # version 2.1 of the License, or (at your option) any later version.
8
+ #
9
+ # This library is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
+ # Lesser General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Lesser General Public
15
+ # License along with this library; if not, write to the Free Software
16
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
+
18
+ class TestRequestSelectScorer < Test::Unit::TestCase
19
+ setup do
20
+ @request = Groonga::Client::Request::Select.new("posts")
21
+ end
22
+
23
+ def scorer(*args)
24
+ @request.scorer(*args).to_parameters
25
+ end
26
+
27
+ sub_test_case("expression") do
28
+ def test_nil
29
+ assert_equal({
30
+ :table => "posts",
31
+ },
32
+ scorer(nil))
33
+ end
34
+
35
+ def test_string
36
+ assert_equal({
37
+ :table => "posts",
38
+ :scorer => "_score = age",
39
+ },
40
+ scorer("_score = age"))
41
+ end
42
+
43
+ def test_empty_string
44
+ assert_equal({
45
+ :table => "posts",
46
+ },
47
+ scorer(""))
48
+ end
49
+
50
+ def test_space_only_string
51
+ assert_equal({
52
+ :table => "posts",
53
+ },
54
+ scorer(" \t\r\n"))
55
+ end
56
+
57
+ def test_have_assignment
58
+ assert_equal({
59
+ :table => "posts",
60
+ :scorer => "persistent_score = _score",
61
+ },
62
+ scorer("persistent_score = %{score}", score: :_score))
63
+ end
64
+
65
+ def test_symbol
66
+ assert_equal({
67
+ :table => "posts",
68
+ :scorer => "_score = age",
69
+ },
70
+ scorer(:age))
71
+ end
72
+ end
73
+
74
+ sub_test_case("values") do
75
+ test("Symbol") do
76
+ assert_equal({
77
+ :table => "posts",
78
+ :scorer => "_score = age",
79
+ },
80
+ scorer("_score = %{column}", :column => :age))
81
+ end
82
+
83
+ test("Symbols") do
84
+ assert_equal({
85
+ :table => "posts",
86
+ :scorer => "_score = -geo_distance(location, \"35.68138194x139.766083888889\")",
87
+ },
88
+ scorer("-geo_distance(%{column}, %{point})",
89
+ column: :location, point: "35.68138194x139.766083888889"))
90
+ end
91
+
92
+ test("Numeric") do
93
+ assert_equal({
94
+ :table => "posts",
95
+ :scorer => "_score = 29",
96
+ },
97
+ scorer("_score = %{value}",
98
+ :value => 29))
99
+ end
100
+ end
101
+
102
+ def test_multiple
103
+ assert_equal({
104
+ :table => "posts",
105
+ :scorer => "_score = age",
106
+ },
107
+ @request.
108
+ scorer("_score = %{value}", :value => 29).
109
+ scorer(:age).
110
+ to_parameters)
111
+ end
112
+ end
@@ -311,4 +311,26 @@ class TestRequestSelect < Test::Unit::TestCase
311
311
  end
312
312
  end
313
313
  end
314
+
315
+ sub_test_case("#query_flags") do
316
+ def query_flags(*args)
317
+ @request.query_flags(*args).to_parameters
318
+ end
319
+
320
+ test("one") do
321
+ assert_equal({
322
+ :table => "posts",
323
+ :query_flags => "ALLOW_COLUMN",
324
+ },
325
+ query_flags("ALLOW_COLUMN"))
326
+ end
327
+
328
+ test("multiple") do
329
+ assert_equal({
330
+ :table => "posts",
331
+ :query_flags => "ALLOW_COLUMN|QUERY_NO_SYNTAX_ERROR",
332
+ },
333
+ query_flags(["ALLOW_COLUMN", "QUERY_NO_SYNTAX_ERROR"]))
334
+ end
335
+ end
314
336
  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.0
4
+ version: 0.5.1
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-05-08 00:00:00.000000000 Z
13
+ date: 2017-08-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: gqtp
@@ -226,6 +226,7 @@ files:
226
226
  - test/request/select/test-backward-compatible-sort-keys-parameter.rb
227
227
  - test/request/select/test-filter.rb
228
228
  - test/request/select/test-output-columns-parameter.rb
229
+ - test/request/select/test-scorer.rb
229
230
  - test/request/select/test-sort-keys-parameter.rb
230
231
  - test/request/select/test-values-parameter.rb
231
232
  - test/request/test-generic.rb
@@ -269,37 +270,38 @@ required_rubygems_version: !ruby/object:Gem::Requirement
269
270
  version: '0'
270
271
  requirements: []
271
272
  rubyforge_project:
272
- rubygems_version: 2.2.2
273
+ rubygems_version: 2.5.2
273
274
  signing_key:
274
275
  specification_version: 4
275
276
  summary: Groonga-client is a client for Groonga (http://groonga.org/) implemented
276
277
  with pure Ruby. You can use it without Groonga.
277
278
  test_files:
279
+ - test/test-client.rb
280
+ - test/test-script-syntax.rb
281
+ - test/request/select/test-backward-compatible-sort-keys-parameter.rb
282
+ - test/request/select/test-filter.rb
283
+ - test/request/select/test-sort-keys-parameter.rb
284
+ - test/request/select/test-output-columns-parameter.rb
285
+ - test/request/select/test-values-parameter.rb
286
+ - test/request/select/test-scorer.rb
287
+ - test/request/test-merger.rb
288
+ - test/request/test-generic.rb
289
+ - test/request/test-select.rb
290
+ - test/test-command.rb
291
+ - test/protocol/test-gqtp.rb
292
+ - test/protocol/test-http.rb
278
293
  - test/run-test.rb
294
+ - test/response/test-base.rb
295
+ - test/response/test-load.rb
296
+ - test/response/test-column-list.rb
297
+ - test/response/helper.rb
279
298
  - test/response/test-error.rb
299
+ - test/response/test-table-list.rb
300
+ - test/response/test-status.rb
301
+ - test/response/test-schema.rb
280
302
  - test/response/test-select-command-version3.rb
281
303
  - test/response/test-select-command-version1.rb
282
304
  - test/response/test-table-create.rb
283
- - test/response/helper.rb
284
- - test/response/test-status.rb
285
- - test/response/test-column-list.rb
286
- - test/response/test-schema.rb
287
- - test/response/test-table-list.rb
288
- - test/response/test-load.rb
289
- - test/response/test-base.rb
290
305
  - test/response/test-table-remove.rb
291
- - test/test-script-syntax.rb
292
- - test/protocol/test-http.rb
293
- - test/protocol/test-gqtp.rb
294
306
  - test/results/test-column-list.rb
295
307
  - test/results/test-table-list.rb
296
- - test/test-command.rb
297
- - test/request/select/test-values-parameter.rb
298
- - test/request/select/test-filter.rb
299
- - test/request/select/test-output-columns-parameter.rb
300
- - test/request/select/test-sort-keys-parameter.rb
301
- - test/request/select/test-backward-compatible-sort-keys-parameter.rb
302
- - test/request/test-merger.rb
303
- - test/request/test-generic.rb
304
- - test/request/test-select.rb
305
- - test/test-client.rb