groonga-client 0.3.7 → 0.3.8

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
2
  SHA1:
3
- metadata.gz: 716963b0471224b408c7282c106abf6963eec5e3
4
- data.tar.gz: dda03fa55b5f474b590f81bce1c3fad4761c0b72
3
+ metadata.gz: cfbb43c1be922a0d52d798e0a7e3a768e36eaea6
4
+ data.tar.gz: 3904d0176fa3c87eda914b6065b2dd81d0abf6bb
5
5
  SHA512:
6
- metadata.gz: 5d7ba9d303ce1da3aa3229d82d2af43d76ac4e663d5f6b17e2ffc72be7a385da2a715f4ce6423c3d127546e33b84605eb1d1e6f7eeed0b7b9cf9335fa21ae7be
7
- data.tar.gz: acd4190d4b4e3f4e2b0bb72e9a69cc76eda467fa55fcd00289796b4a4c8ad5d0918af663acc9ba302666b6d4eb9b1ebad652280516629752fa351fd177f1b3cc
6
+ metadata.gz: 47e683987f841ad1bb077876f73023e76f26197f2796387fbbbee717a8902d9df071e0f5d2b8c9715cca7c24ab39c5519d38ea00798b7fadb8f2b0327ba30850
7
+ data.tar.gz: 8f48a51fa09b821d7665ff90e109a571aac501e676f587ad11a2b80c93fac61a8c267f2a030e1b3ebabb3ea2c3901a1baa46d75dac1b2326a1161cbefb32a790
data/doc/text/news.md CHANGED
@@ -1,10 +1,19 @@
1
1
  # NEWS
2
2
 
3
+ ## 0.3.8 - 2016-12-21
4
+
5
+ ### Improvements
6
+
7
+ * `Groonga::Client::Request::Select#filter`: Supported
8
+ `filter(column_name, value)` usage. It's a shortcut of
9
+ `filter("#{column_name} == %{value}", value: value)`.
10
+
3
11
  ## 0.3.7 - 2016-12-20
4
12
 
5
13
  ### Improvements
6
14
 
7
- * `Groonga::Client::Test::GroongaServerRunner`: Supported customizing Groonga server URL.
15
+ * `Groonga::Client::Test::GroongaServerRunner`: Supported
16
+ customizing Groonga server URL.
8
17
 
9
18
  ## 0.3.6 - 2016-12-20
10
19
 
@@ -16,40 +25,55 @@
16
25
 
17
26
  * `Groonga::Client::Response::Schema#plugins`: Supported method access.
18
27
 
19
- * `Groonga::Client::Test::GroongaServerRunner`: Supported restoring DB for existing server.
28
+ * `Groonga::Client::Test::GroongaServerRunner`: Supported restoring
29
+ DB for existing server.
20
30
 
21
31
  ## 0.3.5 - 2016-12-19
22
32
 
23
33
  ### Improvements
24
34
 
25
- * `Groonga::Client::Response::Schema::Column#value_type`: Made `value_type` elements method accessable.
35
+ * `Groonga::Client::Response::Schema::Column#value_type`: Made
36
+ `value_type` elements method accessable.
26
37
 
27
38
  ## 0.3.4 - 2016-12-13
28
39
 
29
40
  ### Improvements
30
41
 
31
42
  * Added request interface from groonga-client-rails.
32
- * Added `Groonga::Client::Response::Schema::Index#full_text_searchable?`.
33
- * Added `Groonga::Client::Response::Schema::Column#have_full_text_search_index?`.
34
- * Added `Groonga::Client::Response::Schema::Table#have_full_text_search_index?`.
43
+
44
+ * Added
45
+ `Groonga::Client::Response::Schema::Index#full_text_searchable?`.
46
+
47
+ * Added
48
+ `Groonga::Client::Response::Schema::Column#have_full_text_search_index?`.
49
+
50
+ * Added
51
+ `Groonga::Client::Response::Schema::Table#have_full_text_search_index?`.
52
+
35
53
  * Added `Groonga::Client::Response::Select#slices`.
54
+
36
55
  * Added test helper from groonga-client-rails.
56
+
37
57
  * Added `Groonga::Client::Response#size` for Kaminari.
58
+
38
59
  * Added enumrable interface for `Groonga::Client::Response::Select`.
39
60
 
40
61
  ## 0.3.3 - 2016-12-07
41
62
 
42
63
  ### Improvements
43
64
 
44
- * `Groonga::Load#loaded_ids`: Renamed from `Groonga::Load#ids`. Because it's renamed in Groonga.
65
+ * `Groonga::Load#loaded_ids`: Renamed from
66
+ `Groonga::Load#ids`. Because it's renamed in Groonga.
45
67
 
46
68
  ## 0.3.2 - 2016-12-06
47
69
 
48
70
  ### Improvements
49
71
 
50
- * `Groonga::Load#n_loaded_records`: Added. It's a convenience method to get the number of loaded records.
72
+ * `Groonga::Load#n_loaded_records`: Added. It's a convenience method
73
+ to get the number of loaded records.
51
74
 
52
- * `Groonga::Load#ids`: Added. It's for `load --output_ids yes --command_version 3` that can be used with Groonga 6.1.2 or later.
75
+ * `Groonga::Load#ids`: Added. It's for `load --output_ids yes
76
+ --command_version 3` that can be used with Groonga 6.1.2 or later.
53
77
 
54
78
  ## 0.3.1 - 2016-10-11
55
79
 
@@ -46,9 +46,49 @@ module Groonga
46
46
  RequestParameter.new(:query, value))
47
47
  end
48
48
 
49
- def filter(expression, values=nil)
50
- add_parameter(FilterMerger,
51
- FilterParameter.new(expression, values))
49
+ # Adds a script syntax condition. If the request already has
50
+ # any filter condition, they are combined by AND.
51
+ #
52
+ # @example: Multiple filters
53
+ # request.
54
+ # filter("user", "alice").
55
+ # # -> --filter 'user == "alice"'
56
+ # filter("tags @ %{tag}", tag: "Ruby")
57
+ # # -> --filter '(user == "alice") && (tags @ "Ruby")'
58
+ #
59
+ # @return [Groonga::Client::Request::Select]
60
+ # The new request with the given condition.
61
+ #
62
+ # @overload filter(column_name, value)
63
+ # @param [String, Symbol] column_name The target column name.
64
+ # @param [Object] value The column value. It's escaped automatically.
65
+ #
66
+ # Adds a `#{column_name} == #{value}` condition.
67
+ #
68
+ # @overload filter(expression, values=nil)
69
+ # @param [String] expression The script syntax expression.
70
+ # It can includes `%{name}`s as placeholder. They are expanded
71
+ # by `String#%` with the given `values` argument.
72
+ # @param [nil, ::Hash] values The values to be expanded.
73
+ # If the given `expression` doesn't have placeholder, you
74
+ # should specify `nil`.
75
+ #
76
+ # Values are escaped automatically. Values passed from
77
+ # external should be escaped.
78
+ #
79
+ # Adds a `#{expression % values}` condition.
80
+ def filter(expression_or_column_name, values_or_value=nil)
81
+ if expression_or_column_name.is_a?(Symbol)
82
+ parameter = FilterEqualParameter.new(expression_or_column_name,
83
+ values_or_value)
84
+ elsif values_or_value.nil? or values_or_value.is_a?(::Hash)
85
+ parameter = FilterExpressionParameter.new(expression_or_column_name,
86
+ values_or_value)
87
+ else
88
+ parameter = FilterEqualParameter.new(expression_or_column_name,
89
+ values_or_value)
90
+ end
91
+ add_parameter(FilterMerger, parameter)
52
92
  end
53
93
 
54
94
  def output_columns(value)
@@ -190,36 +230,7 @@ module Groonga
190
230
  end
191
231
 
192
232
  # @private
193
- class FilterParameter
194
- def initialize(expression, values)
195
- @expression = expression
196
- @values = values
197
- end
198
-
199
- def to_parameters
200
- case @expression
201
- when String
202
- return {} if /\A\s*\z/ === @expression
203
- expression = @expression
204
- when NilClass
205
- return {}
206
- else
207
- expression = @expression
208
- end
209
-
210
- if @values.is_a?(::Hash) and not @values.empty?
211
- escaped_values = {}
212
- @values.each do |key, value|
213
- escaped_values[key] = escape_filter_value(value)
214
- end
215
- expression = expression % escaped_values
216
- end
217
-
218
- {
219
- filter: expression,
220
- }
221
- end
222
-
233
+ module FilterValueEscapable
223
234
  private
224
235
  def escape_filter_value(value)
225
236
  case value
@@ -257,6 +268,56 @@ module Groonga
257
268
  end
258
269
  end
259
270
 
271
+ # @private
272
+ class FilterExpressionParameter
273
+ include FilterValueEscapable
274
+
275
+ def initialize(expression, values)
276
+ @expression = expression
277
+ @values = values
278
+ end
279
+
280
+ def to_parameters
281
+ case @expression
282
+ when String
283
+ return {} if /\A\s*\z/ === @expression
284
+ expression = @expression
285
+ when NilClass
286
+ return {}
287
+ else
288
+ expression = @expression
289
+ end
290
+
291
+ if @values.is_a?(::Hash) and not @values.empty?
292
+ escaped_values = {}
293
+ @values.each do |key, value|
294
+ escaped_values[key] = escape_filter_value(value)
295
+ end
296
+ expression = expression % escaped_values
297
+ end
298
+
299
+ {
300
+ filter: expression,
301
+ }
302
+ end
303
+ end
304
+
305
+ # @private
306
+ class FilterEqualParameter
307
+ include FilterValueEscapable
308
+
309
+ def initialize(column_name, value)
310
+ @column_name = column_name
311
+ @value = value
312
+ end
313
+
314
+ def to_parameters
315
+ {
316
+ filter: "#{@column_name} == #{escape_filter_value(@value)}",
317
+ }
318
+ end
319
+ end
320
+
260
321
  # @private
261
322
  class OutputColumnsParameter < ValuesParameter
262
323
  def initialize(prefix, output_columns)
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Groonga
18
18
  class Client
19
- VERSION = "0.3.7"
19
+ VERSION = "0.3.8"
20
20
  end
21
21
  end
@@ -0,0 +1,82 @@
1
+ # Copyright (C) 2016 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 TestRequestSelectFilterEqualParmater < Test::Unit::TestCase
18
+ def filter_parameter(column_name, value)
19
+ Groonga::Client::Request::Select::FilterEqualParameter.new(column_name,
20
+ value)
21
+ end
22
+
23
+ def to_parameters(column_name, value)
24
+ filter_parameter(column_name, value).to_parameters
25
+ end
26
+
27
+ sub_test_case("column name") do
28
+ def test_string
29
+ assert_equal({
30
+ :filter => "_key == 29",
31
+ },
32
+ to_parameters("_key", 29))
33
+ end
34
+
35
+ def test_symbol
36
+ assert_equal({
37
+ :filter => "_key == 29",
38
+ },
39
+ to_parameters(:_key, 29))
40
+ end
41
+ end
42
+
43
+ sub_test_case("value") do
44
+ def test_string
45
+ filter = <<-'FILTER'.strip
46
+ title == "[\"He\\ llo\"]"
47
+ FILTER
48
+ assert_equal({
49
+ :filter => filter,
50
+ },
51
+ to_parameters("title", "[\"He\\ llo\"]"))
52
+ end
53
+
54
+ def test_symbol
55
+ assert_equal({
56
+ :filter => "title == \"Hello\"",
57
+ },
58
+ to_parameters("title", :Hello))
59
+ end
60
+
61
+ def test_number
62
+ assert_equal({
63
+ :filter => "age == 29",
64
+ },
65
+ to_parameters("age", 29))
66
+ end
67
+
68
+ def test_true
69
+ assert_equal({
70
+ :filter => "published == true",
71
+ },
72
+ to_parameters("published", true))
73
+ end
74
+
75
+ def test_false
76
+ assert_equal({
77
+ :filter => "published == false",
78
+ },
79
+ to_parameters("published", false))
80
+ end
81
+ end
82
+ end
@@ -14,9 +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 TestRequestSelectFilterParmater < Test::Unit::TestCase
17
+ class TestRequestSelectFilterExpressionParmater < Test::Unit::TestCase
18
18
  def filter_parameter(expression, values=nil)
19
- Groonga::Client::Request::Select::FilterParameter.new(expression, values)
19
+ Groonga::Client::Request::Select::FilterExpressionParameter.new(expression,
20
+ values)
20
21
  end
21
22
 
22
23
  def to_parameters(expression, values=nil)
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.3.7
4
+ version: 0.3.8
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: 2016-12-20 00:00:00.000000000 Z
13
+ date: 2016-12-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: gqtp
@@ -223,7 +223,8 @@ files:
223
223
  - lib/groonga/client/version.rb
224
224
  - test/protocol/test-gqtp.rb
225
225
  - test/protocol/test-http.rb
226
- - test/request/select/test-filter-parameter.rb
226
+ - test/request/select/test-filter-equal-parameter.rb
227
+ - test/request/select/test-filter-expression-parameter.rb
227
228
  - test/request/select/test-output-columns-parameter.rb
228
229
  - test/request/select/test-sort-keys-columns-parameter.rb
229
230
  - test/request/select/test-values-parameter.rb
@@ -275,9 +276,10 @@ summary: Groonga-client is a client for Groonga (http://groonga.org/) implemente
275
276
  test_files:
276
277
  - test/test-client.rb
277
278
  - test/test-script-syntax.rb
278
- - test/request/select/test-filter-parameter.rb
279
+ - test/request/select/test-filter-expression-parameter.rb
279
280
  - test/request/select/test-output-columns-parameter.rb
280
281
  - test/request/select/test-values-parameter.rb
282
+ - test/request/select/test-filter-equal-parameter.rb
281
283
  - test/request/select/test-sort-keys-columns-parameter.rb
282
284
  - test/request/test-base.rb
283
285
  - test/request/test-select.rb