groonga-client 0.2.2 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/text/news.md +13 -1
- data/lib/groonga/client/response/schema.rb +122 -8
- data/lib/groonga/client/version.rb +1 -1
- data/test/response/test-schema.rb +151 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 13c9c1e871ac9bb792323a889b57eff795821300
|
4
|
+
data.tar.gz: 0437713eec1f8aae199978bda285fbc765958a81
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dad7cfa134e3e11c426ab8cc62c399c455a1fbd4859759107bdf93f150ca1a581b9f8e7ffa5c025f6b20c334c39f9ea0e3d1077a0c45d24c0cb9abedf484e035
|
7
|
+
data.tar.gz: f2c0a41b91e8dbbcbbb93adf21b1845c13817f0c28e9868e9c4ccfe640e3f139d8a09b7a0123fdc3b5126eb4557cec2c0bfde891793b79f7ba3ac8b3c3e78cbe
|
data/doc/text/news.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# NEWS
|
2
2
|
|
3
|
-
## 0.2.
|
3
|
+
## 0.2.3 - 2016-03-22
|
4
4
|
|
5
5
|
### Improvements
|
6
6
|
|
@@ -8,6 +8,18 @@
|
|
8
8
|
|
9
9
|
* response: Supported `schema` command partially.
|
10
10
|
|
11
|
+
## 0.2.2 - 2016-03-22
|
12
|
+
|
13
|
+
### Improvements
|
14
|
+
|
15
|
+
* response: `schema`: Supported index.
|
16
|
+
|
17
|
+
* response: `schema`: Supported normalizer.
|
18
|
+
|
19
|
+
* response: `schema`: Supported token filter.
|
20
|
+
|
21
|
+
* response: `schema`: Supported tokenizer.
|
22
|
+
|
11
23
|
### Fixes
|
12
24
|
|
13
25
|
* Fixed a bug that `Groonga::Command` isn't accepted.
|
@@ -45,18 +45,49 @@ module Groonga
|
|
45
45
|
end
|
46
46
|
end
|
47
47
|
|
48
|
+
# @return [Hash<String, Normalizer>] Key is normalizer name and
|
49
|
+
# value is the definition of the normalizer.
|
50
|
+
#
|
51
|
+
# @since 0.2.3
|
52
|
+
def normalizers
|
53
|
+
@normalizers ||= HashValueConverter.convert(@body["normalizers"]) do |normalizer|
|
54
|
+
Normalizer[normalizer]
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# @return [Hash<String, TokenFilter>] Key is token filter name and
|
59
|
+
# value is the definition of the token filter.
|
60
|
+
#
|
61
|
+
# @since 0.2.3
|
62
|
+
def token_filters
|
63
|
+
@token_filters ||= HashValueConverter.convert(@body["token_filters"]) do |token_filter|
|
64
|
+
TokenFilter[token_filter]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
48
68
|
# @return [Hash<String, Table>] Key is table name and value is the
|
49
69
|
# definition of the table.
|
50
70
|
#
|
51
71
|
# @since 0.2.2
|
52
72
|
def tables
|
53
|
-
@tables ||=
|
54
|
-
|
55
|
-
|
56
|
-
|
73
|
+
@tables ||= nil
|
74
|
+
return @tables if @tables
|
75
|
+
|
76
|
+
@tables = {}
|
77
|
+
@body["tables"].each do |key, _|
|
78
|
+
@tables[key] = Table.new(self)
|
79
|
+
end
|
80
|
+
@body["tables"].each do |key, raw_table|
|
81
|
+
table = @tables[key]
|
82
|
+
raw_table.each do |table_key, table_value|
|
83
|
+
table[table_key] = table_value
|
57
84
|
end
|
58
|
-
table
|
59
85
|
end
|
86
|
+
@tables
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
def coerce_tables
|
60
91
|
end
|
61
92
|
|
62
93
|
module HashValueConverter
|
@@ -79,6 +110,14 @@ module Groonga
|
|
79
110
|
include Hashie::Extensions::MethodAccess
|
80
111
|
end
|
81
112
|
|
113
|
+
class Normalizer < Hash
|
114
|
+
include Hashie::Extensions::MethodAccess
|
115
|
+
end
|
116
|
+
|
117
|
+
class TokenFilter < Hash
|
118
|
+
include Hashie::Extensions::MethodAccess
|
119
|
+
end
|
120
|
+
|
82
121
|
class KeyType < Hash
|
83
122
|
include Hashie::Extensions::MethodAccess
|
84
123
|
end
|
@@ -87,16 +126,67 @@ module Groonga
|
|
87
126
|
include Hashie::Extensions::MethodAccess
|
88
127
|
end
|
89
128
|
|
129
|
+
class Index < Hash
|
130
|
+
include Hashie::Extensions::MethodAccess
|
131
|
+
|
132
|
+
def initialize(schema, raw_index)
|
133
|
+
@schema = schema
|
134
|
+
super()
|
135
|
+
raw_index.each do |key, value|
|
136
|
+
self[key] = value
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
def []=(key, value)
|
141
|
+
case key.to_sym
|
142
|
+
when :table
|
143
|
+
super(key, coerce_table(value))
|
144
|
+
else
|
145
|
+
super
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
def column
|
150
|
+
column_name = name
|
151
|
+
if column_name.nil?
|
152
|
+
column_name
|
153
|
+
else
|
154
|
+
table.columns[column_name]
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
private
|
159
|
+
def coerce_table(table_name)
|
160
|
+
@schema.tables[table_name]
|
161
|
+
end
|
162
|
+
end
|
163
|
+
|
90
164
|
class Column < Hash
|
91
165
|
include Hashie::Extensions::MethodAccess
|
92
166
|
|
93
|
-
def initialize(schema,
|
167
|
+
def initialize(schema, raw_column)
|
94
168
|
@schema = schema
|
95
169
|
super()
|
96
|
-
|
170
|
+
raw_column.each do |key, value|
|
97
171
|
self[key] = value
|
98
172
|
end
|
99
173
|
end
|
174
|
+
|
175
|
+
def []=(key, value)
|
176
|
+
case key.to_sym
|
177
|
+
when :indexes
|
178
|
+
super(key, coerce_indexes(value))
|
179
|
+
else
|
180
|
+
super
|
181
|
+
end
|
182
|
+
end
|
183
|
+
|
184
|
+
private
|
185
|
+
def coerce_indexes(raw_indexes)
|
186
|
+
raw_indexes.collect do |raw_index|
|
187
|
+
Index.new(@schema, raw_index)
|
188
|
+
end
|
189
|
+
end
|
100
190
|
end
|
101
191
|
|
102
192
|
class Table < Hash
|
@@ -112,9 +202,13 @@ module Groonga
|
|
112
202
|
when :key_type
|
113
203
|
super(key, coerce_key_type(value))
|
114
204
|
when :tokenizer
|
115
|
-
super(key,
|
205
|
+
super(key, coerce_tokenizer(value))
|
206
|
+
when :normalizer
|
207
|
+
super(key, coerce_normalizer(value))
|
116
208
|
when :columns
|
117
209
|
super(key, coerce_columns(value))
|
210
|
+
when :indexes
|
211
|
+
super(key, coerce_indexes(value))
|
118
212
|
else
|
119
213
|
super
|
120
214
|
end
|
@@ -139,11 +233,31 @@ module Groonga
|
|
139
233
|
end
|
140
234
|
end
|
141
235
|
|
236
|
+
def coerce_normalizer(raw_normalizer)
|
237
|
+
if raw_normalizer.nil?
|
238
|
+
nil
|
239
|
+
else
|
240
|
+
@schema.normalizers[raw_normalizer["name"]]
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
def coerce_token_filters(raw_token_filters)
|
245
|
+
raw_token_filters.collect do |raw_token_filter|
|
246
|
+
TokenFilter[raw_token_filter]
|
247
|
+
end
|
248
|
+
end
|
249
|
+
|
142
250
|
def coerce_columns(raw_columns)
|
143
251
|
HashValueConverter.convert(raw_columns) do |raw_column|
|
144
252
|
Column.new(@schema, raw_column)
|
145
253
|
end
|
146
254
|
end
|
255
|
+
|
256
|
+
def coerce_indexes(raw_indexes)
|
257
|
+
raw_indexes.collect do |raw_index|
|
258
|
+
Index.new(@schema, raw_index)
|
259
|
+
end
|
260
|
+
end
|
147
261
|
end
|
148
262
|
end
|
149
263
|
end
|
@@ -40,7 +40,7 @@ class TestResponseSchema < Test::Unit::TestCase
|
|
40
40
|
Groonga::Client::Response::Schema.new(@command, header, body)
|
41
41
|
end
|
42
42
|
|
43
|
-
class
|
43
|
+
class TestTable < self
|
44
44
|
def test_key_type
|
45
45
|
body = {
|
46
46
|
"types" => {
|
@@ -62,6 +62,68 @@ class TestResponseSchema < Test::Unit::TestCase
|
|
62
62
|
response.tables["Users"].key_type.name)
|
63
63
|
end
|
64
64
|
|
65
|
+
def test_tokenizer
|
66
|
+
body = {
|
67
|
+
"tokenizers" => {
|
68
|
+
"TokenBigram" => {
|
69
|
+
"name" => "TokenBigram",
|
70
|
+
},
|
71
|
+
},
|
72
|
+
"tables" => {
|
73
|
+
"Terms" => {
|
74
|
+
"tokenizer" => {
|
75
|
+
"name" => "TokenBigram",
|
76
|
+
},
|
77
|
+
}
|
78
|
+
}
|
79
|
+
}
|
80
|
+
response = create_response(body)
|
81
|
+
assert_equal(response.tokenizers["TokenBigram"],
|
82
|
+
response.tables["Terms"].tokenizer)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_normalizer
|
86
|
+
body = {
|
87
|
+
"normalizers" => {
|
88
|
+
"NormalizerAuto" => {
|
89
|
+
"name" => "NormalizerAuto",
|
90
|
+
},
|
91
|
+
},
|
92
|
+
"tables" => {
|
93
|
+
"Users" => {
|
94
|
+
"normalizer" => {
|
95
|
+
"name" => "NormalizerAuto",
|
96
|
+
},
|
97
|
+
}
|
98
|
+
}
|
99
|
+
}
|
100
|
+
response = create_response(body)
|
101
|
+
assert_equal(response.normalizers["NormalizerAuto"],
|
102
|
+
response.tables["Users"].normalizer)
|
103
|
+
end
|
104
|
+
|
105
|
+
def test_token_filters
|
106
|
+
body = {
|
107
|
+
"token_filters" => {
|
108
|
+
"TokenFilterStopWord" => {
|
109
|
+
"name" => "TokenFilterStopWord",
|
110
|
+
},
|
111
|
+
},
|
112
|
+
"tables" => {
|
113
|
+
"Names" => {
|
114
|
+
"token_filters" => [
|
115
|
+
{
|
116
|
+
"name" => "TokenFilterStopWord",
|
117
|
+
},
|
118
|
+
]
|
119
|
+
}
|
120
|
+
}
|
121
|
+
}
|
122
|
+
response = create_response(body)
|
123
|
+
assert_equal([response.token_filters["TokenFilterStopWord"]],
|
124
|
+
response.tables["Names"].token_filters)
|
125
|
+
end
|
126
|
+
|
65
127
|
def test_columns
|
66
128
|
body = {
|
67
129
|
"tables" => {
|
@@ -78,6 +140,94 @@ class TestResponseSchema < Test::Unit::TestCase
|
|
78
140
|
assert_equal("age",
|
79
141
|
response.tables["Users"].columns["age"].name)
|
80
142
|
end
|
143
|
+
|
144
|
+
def test_indexes
|
145
|
+
body = {
|
146
|
+
"tables" => {
|
147
|
+
"Users" => {
|
148
|
+
"indexes" => [
|
149
|
+
{
|
150
|
+
"full_name" => "Names.users"
|
151
|
+
}
|
152
|
+
]
|
153
|
+
}
|
154
|
+
}
|
155
|
+
}
|
156
|
+
response = create_response(body)
|
157
|
+
assert_equal("Names.users",
|
158
|
+
response.tables["Users"].indexes[0].full_name)
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
class TestColumn < self
|
163
|
+
def test_indexes
|
164
|
+
body = {
|
165
|
+
"tables" => {
|
166
|
+
"Users" => {
|
167
|
+
"columns" => {
|
168
|
+
"age" => {
|
169
|
+
"indexes" => [
|
170
|
+
{
|
171
|
+
"full_name" => "Ages.users",
|
172
|
+
}
|
173
|
+
]
|
174
|
+
}
|
175
|
+
}
|
176
|
+
}
|
177
|
+
}
|
178
|
+
}
|
179
|
+
response = create_response(body)
|
180
|
+
assert_equal("Ages.users",
|
181
|
+
response.tables["Users"].columns["age"].indexes[0].full_name)
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
class TestIndex < self
|
186
|
+
def test_table
|
187
|
+
body = {
|
188
|
+
"tables" => {
|
189
|
+
"Names" => {
|
190
|
+
"name" => "Names",
|
191
|
+
},
|
192
|
+
"Users" => {
|
193
|
+
"indexes" => [
|
194
|
+
{
|
195
|
+
"table" => "Names"
|
196
|
+
}
|
197
|
+
]
|
198
|
+
}
|
199
|
+
}
|
200
|
+
}
|
201
|
+
response = create_response(body)
|
202
|
+
assert_equal(response.tables["Names"],
|
203
|
+
response.tables["Users"].indexes[0].table)
|
204
|
+
end
|
205
|
+
|
206
|
+
def test_column
|
207
|
+
body = {
|
208
|
+
"tables" => {
|
209
|
+
"Names" => {
|
210
|
+
"name" => "Names",
|
211
|
+
"columns" => {
|
212
|
+
"users_key" => {
|
213
|
+
"name" => "users_key",
|
214
|
+
},
|
215
|
+
},
|
216
|
+
},
|
217
|
+
"Users" => {
|
218
|
+
"indexes" => [
|
219
|
+
{
|
220
|
+
"table" => "Names",
|
221
|
+
"name" => "users_key",
|
222
|
+
}
|
223
|
+
]
|
224
|
+
}
|
225
|
+
}
|
226
|
+
}
|
227
|
+
response = create_response(body)
|
228
|
+
assert_equal(response.tables["Names"].columns["users_key"],
|
229
|
+
response.tables["Users"].indexes[0].column)
|
230
|
+
end
|
81
231
|
end
|
82
232
|
end
|
83
233
|
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.2.
|
4
|
+
version: 0.2.3
|
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-03-
|
13
|
+
date: 2016-03-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: gqtp
|