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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 525ea4e0715bed716fde7af9813a55e0d0b90fd6
4
- data.tar.gz: ff541cecc8a018112201af5af4fc978f32578f8d
3
+ metadata.gz: 13c9c1e871ac9bb792323a889b57eff795821300
4
+ data.tar.gz: 0437713eec1f8aae199978bda285fbc765958a81
5
5
  SHA512:
6
- metadata.gz: 1b6db2d64ce83681ddb33181c9289944f5c79d13b2df9127bdbc3280d584ad4b7cf6afdede3ad20b45d85d31c4af9604a80496a400f481cfc8b05fc58f2a5ff1
7
- data.tar.gz: c9e40baebc159097c8b3b0196f0964050d38e515cc7957a1f22f4d6f05f449e567d1d39656fb7822377873086505e4215e1c0fb3de9e54dd93c7ef2a4070f38d
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.2 - 2016-03-22
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 ||= HashValueConverter.convert(@body["tables"]) do |raw_table|
54
- table = Table.new(self)
55
- raw_table.each do |key, value|
56
- table[key] = value
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, properties)
167
+ def initialize(schema, raw_column)
94
168
  @schema = schema
95
169
  super()
96
- properties.each do |key, value|
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, coerce_tokenzer(value))
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
@@ -16,6 +16,6 @@
16
16
 
17
17
  module Groonga
18
18
  class Client
19
- VERSION = "0.2.2"
19
+ VERSION = "0.2.3"
20
20
  end
21
21
  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 TestTables < self
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.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-21 00:00:00.000000000 Z
13
+ date: 2016-03-22 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: gqtp