rroonga 6.0.0 → 6.0.2
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 +4 -4
- data/doc/text/news.md +38 -1
- data/ext/groonga/extconf.rb +14 -1
- data/ext/groonga/rb-grn-array.c +1 -1
- data/ext/groonga/rb-grn-double-array-trie.c +1 -1
- data/ext/groonga/rb-grn-exception.c +18 -1
- data/ext/groonga/rb-grn-expression.c +0 -8
- data/ext/groonga/rb-grn-hash.c +15 -3
- data/ext/groonga/rb-grn-logger.c +22 -22
- data/ext/groonga/rb-grn-object.c +28 -6
- data/ext/groonga/rb-grn-patricia-trie.c +1 -1
- data/ext/groonga/rb-grn-request-canceler.c +164 -0
- data/ext/groonga/rb-grn-request-timer-id.c +64 -0
- data/ext/groonga/rb-grn-request-timer.c +155 -0
- data/ext/groonga/rb-grn-type.c +43 -1
- data/ext/groonga/rb-grn.h +17 -5
- data/ext/groonga/rb-groonga.c +3 -0
- data/lib/groonga/expression-builder.rb +4 -13
- data/rroonga-build.rb +3 -3
- data/rroonga.gemspec +1 -2
- data/test/run-test.rb +2 -2
- data/test/test-expression-builder.rb +13 -1
- data/test/test-hash.rb +22 -3
- data/test/test-request-canceler.rb +46 -0
- data/test/test-request-timer.rb +40 -0
- data/test/test-table.rb +43 -7
- data/test/test-type.rb +104 -2
- metadata +59 -66
@@ -0,0 +1,64 @@
|
|
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-class: Groonga::RequestTimerID
|
23
|
+
*
|
24
|
+
* This class represents request timer ID. It's used with request timer.
|
25
|
+
*/
|
26
|
+
|
27
|
+
VALUE rb_cGrnRequestTimerID;
|
28
|
+
|
29
|
+
static rb_data_type_t data_type = {
|
30
|
+
"Groonga::RequestTimeID",
|
31
|
+
{
|
32
|
+
NULL,
|
33
|
+
NULL,
|
34
|
+
NULL,
|
35
|
+
},
|
36
|
+
NULL,
|
37
|
+
NULL,
|
38
|
+
0
|
39
|
+
};
|
40
|
+
|
41
|
+
void *
|
42
|
+
rb_grn_request_timer_id_from_ruby_object (VALUE rb_id)
|
43
|
+
{
|
44
|
+
if (NIL_P(rb_id)) {
|
45
|
+
return NULL;
|
46
|
+
} else {
|
47
|
+
void *id;
|
48
|
+
TypedData_Get_Struct(rb_id, void *, &data_type, id);
|
49
|
+
return id;
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
VALUE
|
54
|
+
rb_grn_request_timer_id_to_ruby_object (void *id)
|
55
|
+
{
|
56
|
+
return TypedData_Wrap_Struct(rb_cGrnRequestTimerID, &data_type, id);
|
57
|
+
}
|
58
|
+
|
59
|
+
void
|
60
|
+
rb_grn_init_request_timer_id (VALUE mGrn)
|
61
|
+
{
|
62
|
+
rb_cGrnRequestTimerID =
|
63
|
+
rb_define_class_under(mGrn, "RequestTimerID", rb_cData);
|
64
|
+
}
|
@@ -0,0 +1,155 @@
|
|
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::RequestTimer
|
23
|
+
*
|
24
|
+
* This module provides API for canceling requests after the specified
|
25
|
+
* time.
|
26
|
+
*/
|
27
|
+
|
28
|
+
VALUE rb_mGrnRequestTimer;
|
29
|
+
|
30
|
+
/*
|
31
|
+
* Registers a request with timeout. If the request isn't finished
|
32
|
+
* after the specified timeout, the request is canceled.
|
33
|
+
*
|
34
|
+
* @example Register a request that will be timed out after 2.9 seconds
|
35
|
+
* request_id = "request-29"
|
36
|
+
* timeout_in_second = 2.9
|
37
|
+
* Groonga::RequestTimer.register(request_id, timeout_in_second)
|
38
|
+
*
|
39
|
+
* @overload register(request_id, timeout=nil)
|
40
|
+
* @param request_id [String] The ID of request to be registered.
|
41
|
+
* @param timeout (nil) [Float, nil] The timeout in second. If
|
42
|
+
* `timeout` is `nil`, {Groonga::RequestTimer.default_timeout} is
|
43
|
+
* used.
|
44
|
+
* @return [Groonga::RequestTimerID] The ID of the request timer.
|
45
|
+
*
|
46
|
+
* @since 6.0.2
|
47
|
+
*/
|
48
|
+
static VALUE
|
49
|
+
rb_grn_request_timer_s_register (int argc, VALUE *argv, VALUE module)
|
50
|
+
{
|
51
|
+
VALUE rb_request_id;
|
52
|
+
VALUE rb_timeout;
|
53
|
+
const char *request_id;
|
54
|
+
unsigned int request_id_size;
|
55
|
+
double timeout;
|
56
|
+
void *timer_id;
|
57
|
+
|
58
|
+
rb_scan_args(argc, argv, "11", &rb_request_id, &rb_timeout);
|
59
|
+
|
60
|
+
request_id = StringValuePtr(rb_request_id);
|
61
|
+
request_id_size = RSTRING_LEN(rb_request_id);
|
62
|
+
if (NIL_P(rb_timeout)) {
|
63
|
+
timeout = grn_get_default_request_timeout();
|
64
|
+
} else {
|
65
|
+
timeout = NUM2DBL(rb_timeout);
|
66
|
+
}
|
67
|
+
timer_id = grn_request_timer_register(request_id, request_id_size, timeout);
|
68
|
+
|
69
|
+
return GRN_REQUEST_TIMER_ID2RVAL(timer_id);
|
70
|
+
}
|
71
|
+
|
72
|
+
/*
|
73
|
+
* Unregisters the specified request timer.
|
74
|
+
*
|
75
|
+
* @example Unregister a request timer by ID
|
76
|
+
* timer_id = Groonga::RequestTimer.register("request-29", 2.9)
|
77
|
+
* Groonga::RequestTimer.unregister(timer_id)
|
78
|
+
*
|
79
|
+
* @overload unregister(timer_id)
|
80
|
+
* @param timer_id [Groonga::RequestTimerID] The ID of request timer
|
81
|
+
* to be unregistered.
|
82
|
+
* @return [void]
|
83
|
+
*
|
84
|
+
* @since 6.0.2
|
85
|
+
*/
|
86
|
+
static VALUE
|
87
|
+
rb_grn_request_timer_s_unregister (VALUE module, VALUE rb_timer_id)
|
88
|
+
{
|
89
|
+
void *timer_id;
|
90
|
+
|
91
|
+
timer_id = RVAL2GRN_REQUEST_TIMER_ID(rb_timer_id);
|
92
|
+
grn_request_timer_unregister(timer_id);
|
93
|
+
|
94
|
+
return Qnil;
|
95
|
+
}
|
96
|
+
|
97
|
+
/*
|
98
|
+
* Gets the default timeout used by request timer.
|
99
|
+
*
|
100
|
+
* @example Gets the default timeout
|
101
|
+
* Groonga::RequestTimer.default_timeout
|
102
|
+
*
|
103
|
+
* @overload default_timeout
|
104
|
+
* @return [Float] The default timeout used by request timer.
|
105
|
+
*
|
106
|
+
* @since 6.0.2
|
107
|
+
*/
|
108
|
+
static VALUE
|
109
|
+
rb_grn_request_timer_s_get_default_timeout (VALUE module)
|
110
|
+
{
|
111
|
+
double timeout;
|
112
|
+
|
113
|
+
timeout = grn_get_default_request_timeout();
|
114
|
+
|
115
|
+
return rb_float_new(timeout);
|
116
|
+
}
|
117
|
+
|
118
|
+
/*
|
119
|
+
* Sets the default timeout used by request timer.
|
120
|
+
*
|
121
|
+
* @example Sets the default timeout
|
122
|
+
* Groonga::RequestTimer.default_timeout = 2.9
|
123
|
+
*
|
124
|
+
* @overload default_timeout=(timeout)
|
125
|
+
* @return [Float] The default timeout used by request timer. If
|
126
|
+
* `timeout` is `0.0`, the default timeout is disabled.
|
127
|
+
* @return [void]
|
128
|
+
*
|
129
|
+
* @since 6.0.2
|
130
|
+
*/
|
131
|
+
static VALUE
|
132
|
+
rb_grn_request_timer_s_set_default_timeout (VALUE module, VALUE rb_timeout)
|
133
|
+
{
|
134
|
+
double timeout;
|
135
|
+
|
136
|
+
timeout = NUM2DBL(rb_timeout);
|
137
|
+
grn_set_default_request_timeout(timeout);
|
138
|
+
|
139
|
+
return Qnil;
|
140
|
+
}
|
141
|
+
|
142
|
+
void
|
143
|
+
rb_grn_init_request_timer (VALUE mGrn)
|
144
|
+
{
|
145
|
+
rb_mGrnRequestTimer = rb_define_module_under(mGrn, "RequestTimer");
|
146
|
+
|
147
|
+
rb_define_singleton_method(rb_mGrnRequestTimer, "register",
|
148
|
+
rb_grn_request_timer_s_register, -1);
|
149
|
+
rb_define_singleton_method(rb_mGrnRequestTimer, "unregister",
|
150
|
+
rb_grn_request_timer_s_unregister, 1);
|
151
|
+
rb_define_singleton_method(rb_mGrnRequestTimer, "default_timeout",
|
152
|
+
rb_grn_request_timer_s_get_default_timeout, 0);
|
153
|
+
rb_define_singleton_method(rb_mGrnRequestTimer, "default_timeout=",
|
154
|
+
rb_grn_request_timer_s_set_default_timeout, 1);
|
155
|
+
}
|
data/ext/groonga/rb-grn-type.c
CHANGED
@@ -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-
|
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
|
@@ -173,6 +173,18 @@ rb_grn_type_variable_size_p (VALUE self)
|
|
173
173
|
return CBOOL2RVAL(type->header.flags & GRN_OBJ_KEY_VAR_SIZE);
|
174
174
|
}
|
175
175
|
|
176
|
+
static VALUE
|
177
|
+
rb_grn_type_builtin_p (VALUE self)
|
178
|
+
{
|
179
|
+
grn_ctx *context = NULL;
|
180
|
+
grn_obj *type;
|
181
|
+
grn_id id;
|
182
|
+
|
183
|
+
type = RVAL2GRNOBJECT(self, &context);
|
184
|
+
id = grn_obj_id(context, type);
|
185
|
+
return CBOOL2RVAL(grn_type_id_is_builtin(context, id));
|
186
|
+
}
|
187
|
+
|
176
188
|
static VALUE
|
177
189
|
rb_grn_type_unsigned_integer_p (VALUE self)
|
178
190
|
{
|
@@ -217,6 +229,30 @@ rb_grn_type_geo_point_p (VALUE self)
|
|
217
229
|
return CBOOL2RVAL(key_type == GRN_OBJ_KEY_GEO_POINT);
|
218
230
|
}
|
219
231
|
|
232
|
+
static VALUE
|
233
|
+
rb_grn_type_text_family_p (VALUE self)
|
234
|
+
{
|
235
|
+
grn_ctx *context = NULL;
|
236
|
+
grn_obj *type;
|
237
|
+
grn_id id;
|
238
|
+
|
239
|
+
type = RVAL2GRNOBJECT(self, &context);
|
240
|
+
id = grn_obj_id(context, type);
|
241
|
+
return CBOOL2RVAL(grn_type_id_is_text_family(context, id));
|
242
|
+
}
|
243
|
+
|
244
|
+
static VALUE
|
245
|
+
rb_grn_type_number_family_p (VALUE self)
|
246
|
+
{
|
247
|
+
grn_ctx *context = NULL;
|
248
|
+
grn_obj *type;
|
249
|
+
grn_id id;
|
250
|
+
|
251
|
+
type = RVAL2GRNOBJECT(self, &context);
|
252
|
+
id = grn_obj_id(context, type);
|
253
|
+
return CBOOL2RVAL(grn_type_id_is_number_family(context, id));
|
254
|
+
}
|
255
|
+
|
220
256
|
void
|
221
257
|
rb_grn_init_type (VALUE mGrn)
|
222
258
|
{
|
@@ -229,6 +265,9 @@ rb_grn_init_type (VALUE mGrn)
|
|
229
265
|
rb_define_method(rb_cGrnType, "variable_size?",
|
230
266
|
rb_grn_type_variable_size_p, 0);
|
231
267
|
|
268
|
+
rb_define_method(rb_cGrnType, "builtin?",
|
269
|
+
rb_grn_type_builtin_p, 0);
|
270
|
+
|
232
271
|
rb_define_method(rb_cGrnType, "unsigned_integer?",
|
233
272
|
rb_grn_type_unsigned_integer_p, 0);
|
234
273
|
rb_define_alias(rb_cGrnType, "uint?", "unsigned_integer?");
|
@@ -238,6 +277,9 @@ rb_grn_init_type (VALUE mGrn)
|
|
238
277
|
|
239
278
|
rb_define_method(rb_cGrnType, "float?", rb_grn_type_float_p, 0);
|
240
279
|
rb_define_method(rb_cGrnType, "geo_point?", rb_grn_type_geo_point_p, 0);
|
280
|
+
rb_define_method(rb_cGrnType, "text_family?", rb_grn_type_text_family_p, 0);
|
281
|
+
rb_define_method(rb_cGrnType, "number_family?",
|
282
|
+
rb_grn_type_number_family_p, 0);
|
241
283
|
|
242
284
|
/* 任意のテーブルに属する全てのレコード(Object型はv1.2で
|
243
285
|
サポートされます)。 */
|
data/ext/groonga/rb-grn.h
CHANGED
@@ -99,11 +99,7 @@ RB_GRN_BEGIN_DECLS
|
|
99
99
|
|
100
100
|
#define RB_GRN_MAJOR_VERSION 6
|
101
101
|
#define RB_GRN_MINOR_VERSION 0
|
102
|
-
#define RB_GRN_MICRO_VERSION
|
103
|
-
|
104
|
-
#define RB_GRN_QUERY_DEFAULT_MAX_EXPRESSIONS 32
|
105
|
-
|
106
|
-
#include <stdint.h>
|
102
|
+
#define RB_GRN_MICRO_VERSION 2
|
107
103
|
|
108
104
|
#define RB_GRN_OBJECT(object) ((RbGrnObject *)(object))
|
109
105
|
#define RB_GRN_NAMED_OBJECT(object) ((RbGrnNamedObject *)(object))
|
@@ -300,6 +296,9 @@ RB_GRN_VAR VALUE rb_cGrnColumnExpressionBuilder;
|
|
300
296
|
RB_GRN_VAR VALUE rb_cGrnPlugin;
|
301
297
|
RB_GRN_VAR VALUE rb_cGrnNormalizer;
|
302
298
|
RB_GRN_VAR VALUE rb_cGrnIndex;
|
299
|
+
RB_GRN_VAR VALUE rb_mGrnRequestCanceler;
|
300
|
+
RB_GRN_VAR VALUE rb_mGrnRequestTimer;
|
301
|
+
RB_GRN_VAR VALUE rb_cGrnRequestTimerID;
|
303
302
|
|
304
303
|
void rb_grn_init_utils (VALUE mGrn);
|
305
304
|
void rb_grn_init_exception (VALUE mGrn);
|
@@ -355,6 +354,9 @@ void rb_grn_init_normalizer (VALUE mGrn);
|
|
355
354
|
void rb_grn_init_thread (VALUE mGrn);
|
356
355
|
void rb_grn_init_config (VALUE mGrn);
|
357
356
|
void rb_grn_init_index (VALUE mGrn);
|
357
|
+
void rb_grn_init_request_canceler (VALUE mGrn);
|
358
|
+
void rb_grn_init_request_timer (VALUE mGrn);
|
359
|
+
void rb_grn_init_request_timer_id (VALUE mGrn);
|
358
360
|
|
359
361
|
VALUE rb_grn_rc_to_exception (grn_rc rc);
|
360
362
|
const char *rb_grn_rc_to_message (grn_rc rc);
|
@@ -738,6 +740,11 @@ VALUE rb_grn_index_new (VALUE rb_index_column,
|
|
738
740
|
#define RVAL2GRNVARIABLE(object, context) \
|
739
741
|
(rb_grn_variable_from_ruby_object(object, context))
|
740
742
|
|
743
|
+
#define GRN_REQUEST_TIMER_ID2RVAL(id) \
|
744
|
+
(rb_grn_request_timer_id_to_ruby_object(id))
|
745
|
+
#define RVAL2GRN_REQUEST_TIMER_ID(rb_id) \
|
746
|
+
(rb_grn_request_timer_id_from_ruby_object(rb_id))
|
747
|
+
|
741
748
|
|
742
749
|
grn_encoding rb_grn_encoding_from_ruby_object (VALUE object,
|
743
750
|
grn_ctx *context);
|
@@ -882,6 +889,11 @@ VALUE rb_grn_obj_to_ruby_object (VALUE klass,
|
|
882
889
|
grn_obj *obj,
|
883
890
|
VALUE related_object);
|
884
891
|
|
892
|
+
void *rb_grn_request_timer_id_from_ruby_object
|
893
|
+
(VALUE rb_id);
|
894
|
+
VALUE rb_grn_request_timer_id_to_ruby_object
|
895
|
+
(void *id);
|
896
|
+
|
885
897
|
void rb_grn_snippet_bind (RbGrnSnippet *rb_grn_snippet,
|
886
898
|
grn_ctx *context,
|
887
899
|
grn_obj *snippet);
|
data/ext/groonga/rb-groonga.c
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#
|
3
1
|
# Copyright (C) 2015 Masafumi Yokoyama <yokoyama@clear-code.com>
|
4
2
|
# Copyright (C) 2009-2016 Kouhei Sutou <kou@clear-code.com>
|
5
3
|
#
|
@@ -77,23 +75,16 @@ module Groonga
|
|
77
75
|
builders << match(@query, default_parse_options) if @query
|
78
76
|
if block_given?
|
79
77
|
custom_builder = yield(self)
|
80
|
-
|
81
|
-
|
82
|
-
else
|
83
|
-
builders << custom_builder
|
84
|
-
end
|
78
|
+
builders << custom_builder
|
79
|
+
builders.flatten!
|
85
80
|
end
|
86
81
|
|
87
82
|
if builders.empty?
|
88
83
|
expression.append_object(@table.context["all_records"])
|
89
84
|
expression.append_operation(Operation::CALL, 0)
|
90
85
|
else
|
91
|
-
combined_builder = builders.inject
|
92
|
-
|
93
|
-
builder
|
94
|
-
else
|
95
|
-
previous & builder
|
96
|
-
end
|
86
|
+
combined_builder = builders.inject do |previous, builder|
|
87
|
+
previous & builder
|
97
88
|
end
|
98
89
|
combined_builder.build(expression, variable)
|
99
90
|
end
|
data/rroonga-build.rb
CHANGED
@@ -20,15 +20,15 @@ module RroongaBuild
|
|
20
20
|
module RequiredGroongaVersion
|
21
21
|
MAJOR = 6
|
22
22
|
MINOR = 0
|
23
|
-
MICRO =
|
23
|
+
MICRO = 2
|
24
24
|
VERSION = [MAJOR, MINOR, MICRO]
|
25
|
-
RELEASED_DATE = Time.utc(2016,
|
25
|
+
RELEASED_DATE = Time.utc(2016, 4, 29)
|
26
26
|
end
|
27
27
|
|
28
28
|
module LatestGroongaVersion
|
29
29
|
MAJOR = 6
|
30
30
|
MINOR = 0
|
31
|
-
MICRO =
|
31
|
+
MICRO = 2
|
32
32
|
VERSION = [MAJOR, MINOR, MICRO]
|
33
33
|
end
|
34
34
|
|
data/rroonga.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# -*- mode: ruby; coding: utf-8 -*-
|
2
2
|
#
|
3
|
-
# Copyright (C) 2012-
|
3
|
+
# Copyright (C) 2012-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
|
@@ -86,7 +86,6 @@ Gem::Specification.new do |s|
|
|
86
86
|
s.add_runtime_dependency("json")
|
87
87
|
s.add_runtime_dependency("archive-zip")
|
88
88
|
s.add_development_dependency("test-unit", [">= 3.0.0"])
|
89
|
-
s.add_development_dependency("test-unit-notify")
|
90
89
|
s.add_development_dependency("rake")
|
91
90
|
s.add_development_dependency("rake-compiler", [">= 0.9.5"])
|
92
91
|
s.add_development_dependency("rake-compiler-dock")
|
data/test/run-test.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
#
|
3
|
-
# Copyright (C) 2009-
|
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
|
@@ -37,7 +37,7 @@ if make
|
|
37
37
|
end
|
38
38
|
|
39
39
|
require "test-unit"
|
40
|
-
require "test/unit/
|
40
|
+
require "test/unit/priority"
|
41
41
|
|
42
42
|
Test::Unit::Priority.enable
|
43
43
|
|