groonga-client 0.2.2 → 0.2.3

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: 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