rroonga 6.0.0 → 6.0.2

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: f9a06f513e61395d0a9b41c473681f08dc6e9846
4
- data.tar.gz: 9e2b7293b0d792b1afa8aa345628e98645a6c572
3
+ metadata.gz: 475b1c66414213ee96bd581c7de7a6689abf3863
4
+ data.tar.gz: bec353bd58e2ab048f379cd73a33be130690242e
5
5
  SHA512:
6
- metadata.gz: 422261d8eb54df1265f9f306cffe91c8dcb1df761a7604214b12b022a76ab837e4840a00cfbe5eb111b79427906f07b95303d67155834e048d658589152cb0dd
7
- data.tar.gz: 634ff3ebc00b02e6288a1915905d5274a2ad6e11a4bb033b6fdb73c87081f32c2687d5999b46c32ed3448aa965a5678005b071bdccd0fb1b9ba70764993b3e94
6
+ metadata.gz: b091a21fe716b530d6c6d3d044fe164efe746665a4a0ef106a24cd4c1ffcc0c78dc4029edc1e755cade63286aa890f49654840c3a2aee67ce742a9d58a843095
7
+ data.tar.gz: 8876710a8d73dc06b1255800cd0b67203d74bdfe525c5b24c767126e79d4102aaa4d1acba4f0bf81012bb8bfb762466dbfa1488fc73fe7303fa62f0b9bbdeac9
data/doc/text/news.md CHANGED
@@ -1,5 +1,42 @@
1
1
  # NEWS
2
2
 
3
+ ## 6.0.2 2016-05-18 {#version-6-0-2}
4
+
5
+ ### Improvements
6
+
7
+ * Supported Groonga 6.0.2. Groonga 6.0.1 or older aren't supported.
8
+
9
+ * {Groonga::Table#select}: Supported nested array as conditions.
10
+
11
+ * Supported HTTP proxy with authentication on install.
12
+ [GitHub#129] [Patch by ngram]
13
+
14
+ * {Groonga::Cancel}: Added a new error class.
15
+
16
+ * {Groonga::Table#select}: Supported passing Hash as function argument.
17
+
18
+ * {Groonga::Hash.create}: Added `:key_large` option to create hash
19
+ table that supports 1TiB total key size.
20
+
21
+ * {Groonga::Type#text_family?}: Added a new predicate that returns
22
+ `true` for `ShortText`, `Text` and `LongText` types.
23
+
24
+ * {Groonga::Type#number_family?}: Added a new predicate that returns
25
+ `true` for `UInt8`, `Int8`, ..., `UInt64`, `Int64` and `Float`
26
+ types.
27
+
28
+ * {Groonga::Type#builtin?}: Added a new predicate that returns
29
+ `true` for builtin types such as `Int32`.
30
+
31
+ * {Groonga::Object#remove}: Added `:dependent` option to remove all
32
+ tables and columns that depend on the object.
33
+
34
+ * {Groonga::RequestCanceler}: Added an interface that cancels one or
35
+ more requests.
36
+
37
+ * {Groonga::RequestTimer}: Added an interface that provides request
38
+ timeout feature.
39
+
3
40
  ## 6.0.0: 2016-03-06 {#version-6-0-0}
4
41
 
5
42
  ### Improvements
@@ -22,7 +59,7 @@
22
59
  as number object. The number object was always treated as ID not
23
60
  key.
24
61
 
25
- It's backward compatible change but we introduced the
62
+ It's backward incompatible change but we introduced the
26
63
  change. Because we marked this behavior as a bug.
27
64
 
28
65
  * Supported `require "rroonga"` for `Bundler.require`.
@@ -21,6 +21,7 @@ require "mkmf"
21
21
  require "fileutils"
22
22
  require "shellwords"
23
23
  require "open-uri"
24
+ require "uri"
24
25
 
25
26
  require "pkg-config"
26
27
 
@@ -83,7 +84,19 @@ def download(url)
83
84
  if File.exist?(base_name)
84
85
  message(" skip (use downloaded file)\n")
85
86
  else
86
- open(url, "rb") do |input|
87
+ options = {}
88
+ proxy_env = ENV["http_proxy"]
89
+ if proxy_env
90
+ proxy_url = URI.parse(proxy_env)
91
+ if proxy_url.user
92
+ options[:proxy_http_basic_authentication] = [
93
+ proxy_url,
94
+ proxy_url.user,
95
+ proxy_url.password,
96
+ ]
97
+ end
98
+ end
99
+ open(url, "rb", options) do |input|
87
100
  File.open(base_name, "wb") do |output|
88
101
  while (buffer = input.read(1024))
89
102
  output.print(buffer)
@@ -90,7 +90,7 @@ rb_grn_array_s_create (int argc, VALUE *argv, VALUE klass)
90
90
  grn_obj *value_type = NULL, *table;
91
91
  const char *name = NULL, *path = NULL;
92
92
  unsigned name_size = 0;
93
- grn_obj_flags flags = GRN_OBJ_TABLE_NO_KEY;
93
+ grn_table_flags flags = GRN_OBJ_TABLE_NO_KEY;
94
94
  VALUE rb_table;
95
95
  VALUE options, rb_context, rb_name, rb_path, rb_persistent;
96
96
  VALUE rb_value_type, rb_sub_records;
@@ -245,7 +245,7 @@ rb_grn_double_array_trie_s_create (int argc, VALUE *argv, VALUE klass)
245
245
  grn_obj *key_type = NULL, *value_type = NULL, *table;
246
246
  const char *name = NULL, *path = NULL;
247
247
  unsigned name_size = 0;
248
- grn_obj_flags flags = GRN_OBJ_TABLE_DAT_KEY;
248
+ grn_table_flags flags = GRN_OBJ_TABLE_DAT_KEY;
249
249
  VALUE rb_table;
250
250
  VALUE options, rb_context, rb_name, rb_path, rb_persistent;
251
251
  VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
@@ -100,6 +100,7 @@ static VALUE eGrnTokenFilterError;
100
100
  static VALUE eGrnCommandError;
101
101
  static VALUE eGrnPluginError;
102
102
  static VALUE eGrnScorerError;
103
+ static VALUE eGrnCancel;
103
104
 
104
105
  VALUE
105
106
  rb_grn_rc_to_exception (grn_rc rc)
@@ -341,6 +342,9 @@ rb_grn_rc_to_exception (grn_rc rc)
341
342
  case GRN_SCORER_ERROR:
342
343
  exception = eGrnScorerError;
343
344
  break;
345
+ case GRN_CANCEL:
346
+ exception = eGrnCancel;
347
+ break;
344
348
  }
345
349
 
346
350
  if (NIL_P(exception))
@@ -589,6 +593,9 @@ rb_grn_rc_to_message (grn_rc rc)
589
593
  case GRN_SCORER_ERROR:
590
594
  message = "scorer error";
591
595
  break;
596
+ case GRN_CANCEL:
597
+ message = "cancel";
598
+ break;
592
599
  }
593
600
 
594
601
  if (!message)
@@ -1276,6 +1283,16 @@ rb_grn_init_exception (VALUE mGrn)
1276
1283
  *
1277
1284
  * @since 5.0.1
1278
1285
  */
1279
- eGrnPluginError =
1286
+ eGrnScorerError =
1280
1287
  rb_define_class_under(mGrn, "ScorerError", rb_eGrnError);
1288
+
1289
+ /*
1290
+ * Document-class: Groonga::Cancel
1291
+ *
1292
+ * It is used when a processing is canceled.
1293
+ *
1294
+ * @since 6.0.2
1295
+ */
1296
+ eGrnCancel =
1297
+ rb_define_class_under(mGrn, "Cancel", rb_eGrnError);
1281
1298
  }
@@ -203,8 +203,6 @@ rb_grn_expression_define_variable (int argc, VALUE *argv, VALUE self)
203
203
  return rb_variable;
204
204
  }
205
205
 
206
- /* TODO: Enable when Groonga 6.0.1 is released. */
207
- /*
208
206
  typedef struct
209
207
  {
210
208
  grn_ctx *context;
@@ -238,7 +236,6 @@ rb_grn_hash_from_ruby_hash_body (VALUE rb_key,
238
236
 
239
237
  return ST_CONTINUE;
240
238
  }
241
- */
242
239
 
243
240
  /*
244
241
  * _object_ を追加し、 _n_arguments_ 個の引数を取る _operation_ を追加する。
@@ -269,8 +266,6 @@ rb_grn_expression_append_object (int argc, VALUE *argv, VALUE self)
269
266
  NULL, NULL,
270
267
  NULL, NULL, NULL);
271
268
 
272
- /* TODO: Enable when Groonga 6.0.1 is released. */
273
- /*
274
269
  if (RB_TYPE_P(rb_object, RUBY_T_HASH)) {
275
270
  RbGrnHashFromRubyHashData data;
276
271
  data.context = context;
@@ -288,13 +283,10 @@ rb_grn_expression_append_object (int argc, VALUE *argv, VALUE self)
288
283
  grn_expr_append_obj(context, expression, (grn_obj *)(data.hash),
289
284
  operation, n_arguments);
290
285
  } else {
291
- */
292
286
  object = RVAL2GRNOBJECT(rb_object, &context);
293
287
  grn_expr_append_obj(context, expression, object,
294
288
  operation, n_arguments);
295
- /*
296
289
  }
297
- */
298
290
  rb_grn_context_check(context, self);
299
291
  rb_ary_push(rb_iv_get(self, "@objects"), rb_object);
300
292
 
@@ -1,6 +1,6 @@
1
1
  /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
2
  /*
3
- Copyright (C) 2009-2012 Kouhei Sutou <kou@clear-code.com>
3
+ Copyright (C) 2009-2016 Kouhei Sutou <kou@clear-code.com>
4
4
 
5
5
  This library is free software; you can redistribute it and/or
6
6
  modify it under the terms of the GNU Lesser General Public
@@ -103,6 +103,12 @@ VALUE rb_cGrnHash;
103
103
  *
104
104
  * @deprecated Use @:normalizer => "NormalizerAuto"@ instead.
105
105
  *
106
+ * @option options [Boolean] :key_large (false)
107
+ * It specifies whether total key size is large or not. The
108
+ * default total key size is 4GiB. Large total key size is 1TiB.
109
+ *
110
+ * @since 6.0.1
111
+ *
106
112
  * @option options :key_type
107
113
  * キーの種類を示すオブジェクトを指定する。キーの種類には型
108
114
  * 名("Int32"や"ShortText"など)または {Groonga::Type} または
@@ -158,10 +164,12 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
158
164
  grn_obj *key_type = NULL, *value_type = NULL, *table;
159
165
  const char *name = NULL, *path = NULL;
160
166
  unsigned name_size = 0;
161
- grn_obj_flags flags = GRN_OBJ_TABLE_HASH_KEY;
167
+ grn_table_flags flags = GRN_OBJ_TABLE_HASH_KEY;
162
168
  VALUE rb_table;
163
169
  VALUE options, rb_context, rb_name, rb_path, rb_persistent;
164
- VALUE rb_key_normalize, rb_key_type, rb_value_type, rb_default_tokenizer;
170
+ VALUE rb_key_normalize;
171
+ VALUE rb_key_large;
172
+ VALUE rb_key_type, rb_value_type, rb_default_tokenizer;
165
173
  VALUE rb_token_filters;
166
174
  VALUE rb_sub_records;
167
175
  VALUE rb_normalizer;
@@ -174,6 +182,7 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
174
182
  "path", &rb_path,
175
183
  "persistent", &rb_persistent,
176
184
  "key_normalize", &rb_key_normalize,
185
+ "key_large", &rb_key_large,
177
186
  "key_type", &rb_key_type,
178
187
  "value_type", &rb_value_type,
179
188
  "default_tokenizer", &rb_default_tokenizer,
@@ -201,6 +210,9 @@ rb_grn_hash_s_create (int argc, VALUE *argv, VALUE klass)
201
210
  if (RVAL2CBOOL(rb_key_normalize))
202
211
  flags |= GRN_OBJ_KEY_NORMALIZE;
203
212
 
213
+ if (RVAL2CBOOL(rb_key_large))
214
+ flags |= GRN_OBJ_KEY_LARGE;
215
+
204
216
  if (NIL_P(rb_key_type)) {
205
217
  key_type = grn_ctx_at(context, GRN_DB_SHORT_TEXT);
206
218
  } else {
@@ -28,9 +28,9 @@
28
28
  #define GRNLOGLEVEL2RVAL(level) (rb_grn_log_level_to_ruby_object(level))
29
29
  #define RVAL2GRNLOGLEVEL(rb_level) (rb_grn_log_level_from_ruby_object(rb_level))
30
30
 
31
- VALUE cGrnLogger;
32
- VALUE mGrnLoggerFlags;
33
- VALUE cGrnCallbackLogger;
31
+ VALUE rb_cGrnLogger;
32
+ VALUE rb_mGrnLoggerFlags;
33
+ VALUE rb_cGrnCallbackLogger;
34
34
 
35
35
  static ID id_caller_locations;
36
36
  static ID id_path;
@@ -333,7 +333,7 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
333
333
  if (!NIL_P(rb_logger)) {
334
334
  rb_options = rb_logger;
335
335
  }
336
- rb_logger = rb_funcall(cGrnCallbackLogger, id_new, 1, rb_callback);
336
+ rb_logger = rb_funcall(rb_cGrnCallbackLogger, id_new, 1, rb_callback);
337
337
  }
338
338
 
339
339
  rb_grn_scan_options(rb_options,
@@ -361,7 +361,7 @@ rb_grn_logger_s_register (int argc, VALUE *argv, VALUE klass)
361
361
  flags |= GRN_LOG_LOCATION;
362
362
  }
363
363
  if (!NIL_P(rb_flags)) {
364
- flags = rb_funcall(mGrnLoggerFlags, id_parse, 2,
364
+ flags = rb_funcall(rb_mGrnLoggerFlags, id_parse, 2,
365
365
  INT2NUM(flags), rb_flags);
366
366
  }
367
367
 
@@ -617,34 +617,34 @@ rb_grn_init_logger (VALUE mGrn)
617
617
 
618
618
  rb_grn_logger.user_data = (void *)Qnil;
619
619
 
620
- cGrnLogger = rb_define_class_under(mGrn, "Logger", rb_cObject);
620
+ rb_cGrnLogger = rb_define_class_under(mGrn, "Logger", rb_cObject);
621
621
 
622
- rb_cv_set(cGrnLogger, "@@current_logger", Qnil);
623
- rb_define_singleton_method(cGrnLogger, "log",
622
+ rb_cv_set(rb_cGrnLogger, "@@current_logger", Qnil);
623
+ rb_define_singleton_method(rb_cGrnLogger, "log",
624
624
  rb_grn_logger_s_log, -1);
625
- rb_define_singleton_method(cGrnLogger, "register",
625
+ rb_define_singleton_method(rb_cGrnLogger, "register",
626
626
  rb_grn_logger_s_register, -1);
627
- rb_define_singleton_method(cGrnLogger, "unregister",
627
+ rb_define_singleton_method(rb_cGrnLogger, "unregister",
628
628
  rb_grn_logger_s_unregister, 0);
629
- rb_define_singleton_method(cGrnLogger, "reopen",
629
+ rb_define_singleton_method(rb_cGrnLogger, "reopen",
630
630
  rb_grn_logger_s_reopen, 0);
631
- rb_define_singleton_method(cGrnLogger, "max_level",
631
+ rb_define_singleton_method(rb_cGrnLogger, "max_level",
632
632
  rb_grn_logger_s_get_max_level, 0);
633
- rb_define_singleton_method(cGrnLogger, "max_level=",
633
+ rb_define_singleton_method(rb_cGrnLogger, "max_level=",
634
634
  rb_grn_logger_s_set_max_level, 1);
635
- rb_define_singleton_method(cGrnLogger, "path",
635
+ rb_define_singleton_method(rb_cGrnLogger, "path",
636
636
  rb_grn_logger_s_get_path, 0);
637
- rb_define_singleton_method(cGrnLogger, "path=",
637
+ rb_define_singleton_method(rb_cGrnLogger, "path=",
638
638
  rb_grn_logger_s_set_path, 1);
639
- rb_define_singleton_method(cGrnLogger, "rotate_threshold_size",
639
+ rb_define_singleton_method(rb_cGrnLogger, "rotate_threshold_size",
640
640
  rb_grn_logger_s_get_rotate_threshold_size, 0);
641
- rb_define_singleton_method(cGrnLogger, "rotate_threshold_size=",
641
+ rb_define_singleton_method(rb_cGrnLogger, "rotate_threshold_size=",
642
642
  rb_grn_logger_s_set_rotate_threshold_size, 1);
643
- rb_set_end_proc(rb_grn_logger_reset, cGrnLogger);
643
+ rb_set_end_proc(rb_grn_logger_reset, rb_cGrnLogger);
644
644
 
645
- mGrnLoggerFlags = rb_define_module_under(cGrnLogger, "Flags");
645
+ rb_mGrnLoggerFlags = rb_define_module_under(rb_cGrnLogger, "Flags");
646
646
  #define DEFINE_FLAG(NAME) \
647
- rb_define_const(mGrnLoggerFlags, \
647
+ rb_define_const(rb_mGrnLoggerFlags, \
648
648
  #NAME, INT2NUM(GRN_LOG_ ## NAME))
649
649
  DEFINE_FLAG(TIME);
650
650
  DEFINE_FLAG(TITLE);
@@ -652,6 +652,6 @@ rb_grn_init_logger (VALUE mGrn)
652
652
  DEFINE_FLAG(LOCATION);
653
653
  #undef DEFINE_FLAG
654
654
 
655
- cGrnCallbackLogger =
656
- rb_define_class_under(mGrn, "CallbackLogger", cGrnLogger);
655
+ rb_cGrnCallbackLogger =
656
+ rb_define_class_under(mGrn, "CallbackLogger", rb_cGrnLogger);
657
657
  }
@@ -1461,23 +1461,45 @@ rb_grn_object_prepend_value (VALUE self, VALUE rb_id, VALUE rb_value)
1461
1461
  }
1462
1462
 
1463
1463
  /*
1464
- * _object_ をメモリから解放し、それが永続オブジェクトであっ
1465
- * た場合は、該当するファイル一式を削除する。
1464
+ * Free the `object`. If the `object` is persistent object, all files
1465
+ * related with the object are removed.
1466
1466
  *
1467
- * @overload remove
1467
+ * @overload remove(options={})
1468
+ *
1469
+ * @param [::Hash] options The optional parameters.
1470
+ *
1471
+ * @option options [Boolean] :dependent (false)
1472
+ * If it's `true`, all tables and columns that depend on the
1473
+ * `object`.
1468
1474
  */
1469
1475
  static VALUE
1470
- rb_grn_object_remove (VALUE self)
1476
+ rb_grn_object_remove (int argc, VALUE *argv, VALUE self)
1471
1477
  {
1472
1478
  RbGrnObject *rb_grn_object;
1473
1479
  grn_ctx *context;
1480
+ VALUE rb_options;
1481
+ VALUE rb_dependent_p;
1482
+ grn_bool dependent_p = GRN_FALSE;
1474
1483
 
1475
1484
  rb_grn_object = SELF(self);
1476
1485
  if (!rb_grn_object->object)
1477
1486
  return Qnil;
1478
1487
 
1488
+ rb_scan_args(argc, argv, "01", &rb_options);
1489
+ rb_grn_scan_options(rb_options,
1490
+ "dependent", &rb_dependent_p,
1491
+ NULL);
1492
+
1493
+ if (!NIL_P(rb_dependent_p)) {
1494
+ dependent_p = RVAL2CBOOL(rb_dependent_p);
1495
+ }
1496
+
1479
1497
  context = rb_grn_object->context;
1480
- grn_obj_remove(context, rb_grn_object->object);
1498
+ if (dependent_p) {
1499
+ grn_obj_remove_dependent(context, rb_grn_object->object);
1500
+ } else {
1501
+ grn_obj_remove(context, rb_grn_object->object);
1502
+ }
1481
1503
  rb_grn_context_check(context, self);
1482
1504
 
1483
1505
  rb_iv_set(self, "@context", Qnil);
@@ -1750,7 +1772,7 @@ rb_grn_init_object (VALUE mGrn)
1750
1772
  rb_define_method(rb_cGrnObject, "append", rb_grn_object_append_value, 2);
1751
1773
  rb_define_method(rb_cGrnObject, "prepend", rb_grn_object_prepend_value, 2);
1752
1774
 
1753
- rb_define_method(rb_cGrnObject, "remove", rb_grn_object_remove, 0);
1775
+ rb_define_method(rb_cGrnObject, "remove", rb_grn_object_remove, -1);
1754
1776
 
1755
1777
  rb_define_method(rb_cGrnObject, "builtin?", rb_grn_object_builtin_p, 0);
1756
1778
  rb_define_method(rb_cGrnObject, "table?", rb_grn_object_table_p, 0);
@@ -166,7 +166,7 @@ rb_grn_patricia_trie_s_create (int argc, VALUE *argv, VALUE klass)
166
166
  grn_obj *key_type = NULL, *value_type = NULL, *table;
167
167
  const char *name = NULL, *path = NULL;
168
168
  unsigned name_size = 0;
169
- grn_obj_flags flags = GRN_OBJ_TABLE_PAT_KEY;
169
+ grn_table_flags flags = GRN_OBJ_TABLE_PAT_KEY;
170
170
  VALUE rb_table;
171
171
  VALUE options, rb_context, rb_name, rb_path, rb_persistent;
172
172
  VALUE rb_key_normalize, rb_key_with_sis, rb_key_type;
@@ -0,0 +1,164 @@
1
+ /* -*- coding: utf-8; mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
+ /*
3
+ Copyright (C) 2016 Kouhei Sutou <kou@clear-code.com>
4
+
5
+ This library is free software; you can redistribute it and/or
6
+ modify it under the terms of the GNU Lesser General Public
7
+ License version 2.1 as published by the Free Software Foundation.
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
+
19
+ #include "rb-grn.h"
20
+
21
+ /*
22
+ * Document-module: Groonga::RequestCanceler
23
+ *
24
+ * This module provides API for canceling requests.
25
+ */
26
+
27
+ VALUE rb_mGrnRequestCanceler;
28
+
29
+ /*
30
+ * Registers a request. The request can be canceled by
31
+ * {Groonga::RequestCanceler.cancel}.
32
+ *
33
+ * @example Register a request
34
+ * request_id = "request-29"
35
+ * Groonga::RequestCanceler.register(request_id)
36
+ *
37
+ * @overload register(request_id)
38
+ * @param request_id [String] The ID of request to be registered.
39
+ * @return [void]
40
+ *
41
+ * @since 6.0.2
42
+ */
43
+ static VALUE
44
+ rb_grn_request_canceler_s_register (int argc, VALUE *argv, VALUE module)
45
+ {
46
+ VALUE rb_request_id;
47
+ VALUE rb_options;
48
+ VALUE rb_context;
49
+ const char *request_id;
50
+ unsigned int request_id_size;
51
+ grn_ctx *context;
52
+
53
+ rb_scan_args(argc, argv, "11", &rb_request_id, &rb_options);
54
+ rb_grn_scan_options(rb_options,
55
+ "context", &rb_context,
56
+ NULL);
57
+ context = rb_grn_context_ensure(&rb_context);
58
+
59
+ request_id = StringValuePtr(rb_request_id);
60
+ request_id_size = RSTRING_LEN(rb_request_id);
61
+ grn_request_canceler_register(context, request_id, request_id_size);
62
+
63
+ return Qnil;
64
+ }
65
+
66
+ /*
67
+ * Unregisters the specified request.
68
+ *
69
+ * @example Unregister a request by ID
70
+ * request_id = "request-29"
71
+ * Groonga::RequestCanceler.unregister(request_id)
72
+ *
73
+ * @overload unregister(request_id)
74
+ * @param request_id [String] The ID of request to be unregistered.
75
+ * @return [void]
76
+ *
77
+ * @since 6.0.2
78
+ */
79
+ static VALUE
80
+ rb_grn_request_canceler_s_unregister (int argc, VALUE *argv, VALUE module)
81
+ {
82
+ VALUE rb_request_id;
83
+ VALUE rb_options;
84
+ VALUE rb_context;
85
+ const char *request_id;
86
+ unsigned int request_id_size;
87
+ grn_ctx *context;
88
+
89
+ rb_scan_args(argc, argv, "11", &rb_request_id, &rb_options);
90
+ rb_grn_scan_options(rb_options,
91
+ "context", &rb_context,
92
+ NULL);
93
+ context = rb_grn_context_ensure(&rb_context);
94
+
95
+ request_id = StringValuePtr(rb_request_id);
96
+ request_id_size = RSTRING_LEN(rb_request_id);
97
+ grn_request_canceler_unregister(context, request_id, request_id_size);
98
+
99
+ return Qnil;
100
+ }
101
+
102
+ /*
103
+ * Cancels the specified request.
104
+ *
105
+ * @example Cancels a request by ID
106
+ * request_id = "request-29"
107
+ * Groonga::RequestCanceler.cancel(request_id)
108
+ *
109
+ * @overload cancel(request_id)
110
+ * @param request_id [String] The ID of request to be canceled.
111
+ * @return [Boolean] `true` if the request is canceled, `false` otherwise.
112
+ *
113
+ * @since 6.0.2
114
+ */
115
+ static VALUE
116
+ rb_grn_request_canceler_s_cancel (VALUE module, VALUE rb_request_id)
117
+ {
118
+ const char *request_id;
119
+ unsigned int request_id_size;
120
+ grn_bool canceled;
121
+
122
+ request_id = StringValuePtr(rb_request_id);
123
+ request_id_size = RSTRING_LEN(rb_request_id);
124
+ canceled = grn_request_canceler_cancel(request_id, request_id_size);
125
+
126
+ return CBOOL2RVAL(canceled);
127
+ }
128
+
129
+ /*
130
+ * Cancels all running requests.
131
+ *
132
+ * @example Cancels all requests
133
+ * Groonga::RequestCanceler.cancel_all
134
+ *
135
+ * @overload cancel_all
136
+ * @return [Boolean] `true` if one or more requests are canceled,
137
+ * `false` otherwise.
138
+ *
139
+ * @since 6.0.2
140
+ */
141
+ static VALUE
142
+ rb_grn_request_canceler_s_cancel_all (VALUE module)
143
+ {
144
+ grn_bool canceled;
145
+
146
+ canceled = grn_request_canceler_cancel_all();
147
+
148
+ return CBOOL2RVAL(canceled);
149
+ }
150
+
151
+ void
152
+ rb_grn_init_request_canceler (VALUE mGrn)
153
+ {
154
+ rb_mGrnRequestCanceler = rb_define_module_under(mGrn, "RequestCanceler");
155
+
156
+ rb_define_singleton_method(rb_mGrnRequestCanceler, "register",
157
+ rb_grn_request_canceler_s_register, -1);
158
+ rb_define_singleton_method(rb_mGrnRequestCanceler, "unregister",
159
+ rb_grn_request_canceler_s_unregister, -1);
160
+ rb_define_singleton_method(rb_mGrnRequestCanceler, "cancel",
161
+ rb_grn_request_canceler_s_cancel, 1);
162
+ rb_define_singleton_method(rb_mGrnRequestCanceler, "cancel_all",
163
+ rb_grn_request_canceler_s_cancel_all, 0);
164
+ }