grn_mini 0.4.0 → 0.5.0
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/HISTORY.md +5 -0
- data/README.md +9 -2
- data/lib/grn_mini/array.rb +3 -2
- data/lib/grn_mini/hash.rb +3 -2
- data/lib/grn_mini/table.rb +39 -14
- data/lib/grn_mini/version.rb +1 -1
- data/test/{test_grn_mini_array.rb → test_array.rb} +1 -1
- data/test/test_grn_mini.rb +1 -1
- data/test/{test_grn_mini_hash.rb → test_hash.rb} +1 -1
- data/test/test_micro_blog.rb +1 -1
- data/test/test_setup_columns.rb +129 -0
- metadata +9 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae45c1488c3a7184b8fd2c10bba81c2eed07d494
|
4
|
+
data.tar.gz: de61b4abb5bc91414e59fa604172c6c77d12a4fb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ce4e8c4e078767403beb126bd8db0b9e1fe423088cb2e16297798cee3089af4d06a1e145cfb7bdbd98567e45bd65f3b6c0d3497345195d0a7e58235fda137c89
|
7
|
+
data.tar.gz: 1b79f00b43b762205ab8b6415b637886d7a305b7dbb62acdea87cefee24ff20b3829bb8511e6cf858d37dd6e1e9e05319f3238d4396a5758ee593655fdc99f91
|
data/HISTORY.md
CHANGED
data/README.md
CHANGED
@@ -16,6 +16,8 @@ Groonga(Rroonga) wrapper for using easily.
|
|
16
16
|
|
17
17
|
$ gem install grn_mini
|
18
18
|
|
19
|
+
When you faild to install Rroonga, Please refer -> [File: install — rroonga - Ranguba](http://ranguba.org/rroonga/en/file.install.html)
|
20
|
+
|
19
21
|
## Basic Usage
|
20
22
|
|
21
23
|
### Create a database with the name "test.db".
|
@@ -480,8 +482,13 @@ GrnMini::tmpdb do
|
|
480
482
|
users = GrnMini::Hash.new("Users")
|
481
483
|
articles = GrnMini::Hash.new("Articles")
|
482
484
|
|
483
|
-
users.setup_columns(name: "",
|
484
|
-
|
485
|
+
users.setup_columns(name: "",
|
486
|
+
favorites: [articles]
|
487
|
+
)
|
488
|
+
|
489
|
+
articles.setup_columns(author: users,
|
490
|
+
text: ""
|
491
|
+
)
|
485
492
|
|
486
493
|
users["aaa"] = {name: "Mr.A"}
|
487
494
|
users["bbb"] = {name: "Mr.B"}
|
data/lib/grn_mini/array.rb
CHANGED
@@ -6,11 +6,12 @@ module GrnMini
|
|
6
6
|
class Array < Table
|
7
7
|
def initialize(name = "Array")
|
8
8
|
super(name,
|
9
|
-
Groonga[name] || Groonga::Array.create(name: name, persistent: true)
|
9
|
+
Groonga[name] || Groonga::Array.create(name: name, persistent: true),
|
10
|
+
)
|
10
11
|
end
|
11
12
|
|
12
13
|
def add(hash)
|
13
|
-
setup_columns(hash)
|
14
|
+
setup_columns(hash) if need_setup_columns?
|
14
15
|
@grn.add(hash)
|
15
16
|
end
|
16
17
|
|
data/lib/grn_mini/hash.rb
CHANGED
@@ -4,11 +4,12 @@ module GrnMini
|
|
4
4
|
class Hash < Table
|
5
5
|
def initialize(name = "Hash")
|
6
6
|
super(name,
|
7
|
-
Groonga[name] || Groonga::Hash.create(name: name, persistent: true)
|
7
|
+
Groonga[name] || Groonga::Hash.create(name: name, persistent: true),
|
8
|
+
)
|
8
9
|
end
|
9
10
|
|
10
11
|
def add(key, values)
|
11
|
-
setup_columns(values)
|
12
|
+
setup_columns(values) if need_setup_columns?
|
12
13
|
@grn.add(key, values)
|
13
14
|
end
|
14
15
|
|
data/lib/grn_mini/table.rb
CHANGED
@@ -15,25 +15,50 @@ module GrnMini
|
|
15
15
|
@setup_columns_once = false
|
16
16
|
end
|
17
17
|
|
18
|
+
def need_setup_columns?
|
19
|
+
!@setup_columns_once && empty?
|
20
|
+
end
|
21
|
+
|
18
22
|
def setup_columns(hash)
|
19
|
-
|
20
|
-
|
23
|
+
Groonga::Schema.define do |schema|
|
24
|
+
schema.change_table(@name) do |table|
|
25
|
+
hash.each do |key, value|
|
26
|
+
column = key.to_s
|
27
|
+
|
28
|
+
if value.is_a?(::Array)
|
29
|
+
table.column(column, value_type(value), type: :vector)
|
30
|
+
else
|
31
|
+
table.column(column, value_type(value))
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
schema.change_table("Terms") do |table|
|
37
|
+
hash.each do |key, value|
|
38
|
+
column = key.to_s
|
21
39
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
40
|
+
if value.is_a?(String)
|
41
|
+
table.index("#{@name}.#{column}", with_position: true)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
27
45
|
|
28
|
-
|
46
|
+
hash.each do |key, value|
|
47
|
+
column = key.to_s
|
29
48
|
|
30
|
-
if
|
31
|
-
elem
|
32
|
-
|
33
|
-
elem.
|
49
|
+
if value.is_a?(::Array)
|
50
|
+
elem = value.first
|
51
|
+
|
52
|
+
if elem.is_a?(GrnMini::Table)
|
53
|
+
schema.change_table(elem.grn.name) do |table|
|
54
|
+
table.index("#{@grn.name}.#{column}")
|
55
|
+
end
|
56
|
+
elsif elem.is_a?(Groonga::Table)
|
57
|
+
schema.change_table(elem.name) do |table|
|
58
|
+
table.index("#{@grn.name}.#{column}")
|
59
|
+
end
|
60
|
+
end
|
34
61
|
end
|
35
|
-
else
|
36
|
-
@grn.define_column(column, value_type(value))
|
37
62
|
end
|
38
63
|
end
|
39
64
|
|
data/lib/grn_mini/version.rb
CHANGED
data/test/test_grn_mini.rb
CHANGED
data/test/test_micro_blog.rb
CHANGED
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'minitest_helper'
|
2
|
+
|
3
|
+
class TestSetupColumns < MiniTest::Test
|
4
|
+
def test_repeat_setup_columns
|
5
|
+
GrnMini::tmpdb do
|
6
|
+
hash = GrnMini::Hash.new
|
7
|
+
|
8
|
+
hash.setup_columns(name: "")
|
9
|
+
hash.setup_columns(name: "")
|
10
|
+
|
11
|
+
hash["a"] = {name: "aaa"}
|
12
|
+
hash["b"] = {name: "bbb"}
|
13
|
+
hash["c"] = {name: "aaa bbb ccc"}
|
14
|
+
|
15
|
+
assert_equal 1, hash.select("name:@ccc").size
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_array
|
20
|
+
GrnMini::tmpdb do
|
21
|
+
array = GrnMini::Array.new
|
22
|
+
|
23
|
+
array << {text:"aaa"}
|
24
|
+
array << {text:"bbb"}
|
25
|
+
array << {text:"ccc"}
|
26
|
+
|
27
|
+
results = array.select("text:@bb")
|
28
|
+
|
29
|
+
assert_equal 1, results.size
|
30
|
+
assert_equal "bbb", results.first.text
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_number
|
35
|
+
GrnMini::tmpdb do
|
36
|
+
array = GrnMini::Array.new
|
37
|
+
|
38
|
+
array << {text:"aaa", number: 1, float: 1.5, time: Time.at(1) }
|
39
|
+
array << {text:"bbb", number: 2}
|
40
|
+
array << {text:"ccc", number: 3}
|
41
|
+
|
42
|
+
results = array.select("text:@bb")
|
43
|
+
|
44
|
+
assert_equal 1, results.size
|
45
|
+
assert_equal "bbb", results.first.text
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_table
|
50
|
+
GrnMini::tmpdb do
|
51
|
+
array = GrnMini::Array.new
|
52
|
+
array2 = GrnMini::Array.new("A2")
|
53
|
+
|
54
|
+
array.setup_columns(n: 0)
|
55
|
+
array2.setup_columns(parent: array)
|
56
|
+
|
57
|
+
array << {n: 1}
|
58
|
+
array << {n: 2}
|
59
|
+
array << {n: 3}
|
60
|
+
array << {n: 4}
|
61
|
+
|
62
|
+
array2 << {parent: array[1]}
|
63
|
+
array2 << {parent: array[2]}
|
64
|
+
array2 << {parent: array[3]}
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_vector
|
70
|
+
GrnMini::tmpdb do
|
71
|
+
array = GrnMini::Array.new
|
72
|
+
array.setup_columns(vec: [""])
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def column_array(table)
|
77
|
+
table.columns.map{ |c| c.local_name }
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_columns
|
81
|
+
GrnMini::tmpdb do
|
82
|
+
array = GrnMini::Array.new
|
83
|
+
array.setup_columns(str: "")
|
84
|
+
|
85
|
+
assert_equal ["str"], column_array(Groonga["Array"])
|
86
|
+
assert_equal ["Array_str"], column_array(Groonga["Terms"])
|
87
|
+
|
88
|
+
array2 = GrnMini::Array.new("Array2")
|
89
|
+
array2.setup_columns(str: "", number: 1, float: 0.1, time: Time.at(0))
|
90
|
+
|
91
|
+
assert_equal ["float", "number", "str", "time"], column_array(Groonga["Array2"])
|
92
|
+
assert_equal ["Array2_str", "Array_str"], column_array(Groonga["Terms"])
|
93
|
+
|
94
|
+
# Change array schema
|
95
|
+
array.setup_columns(str: "", str2: "", number: 1)
|
96
|
+
assert_equal ["number", "str", "str2"], column_array(Groonga["Array"])
|
97
|
+
assert_equal ["Array2_str", "Array_str", "Array_str2"], column_array(Groonga["Terms"])
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_multi_table_columns
|
102
|
+
GrnMini::tmpdb do
|
103
|
+
users = GrnMini::Hash.new("Users")
|
104
|
+
articles = GrnMini::Hash.new("Articles")
|
105
|
+
|
106
|
+
users.setup_columns(name: "", favorites: [articles])
|
107
|
+
articles.setup_columns(author: users, text: "")
|
108
|
+
|
109
|
+
users["aaa"] = {name: "Mr.A"}
|
110
|
+
users["bbb"] = {name: "Mr.B"}
|
111
|
+
users["ccc"] = {name: "Mr.C"}
|
112
|
+
|
113
|
+
articles["aaa:1"] = {author: "aaa", text: "111"}
|
114
|
+
articles["aaa:2"] = {author: "aaa", text: "222"}
|
115
|
+
articles["aaa:3"] = {author: "aaa", text: "333"}
|
116
|
+
articles["bbb:1"] = {author: "bbb", text: "111"}
|
117
|
+
articles["bbb:2"] = {author: "bbb", text: "222"}
|
118
|
+
articles["ccc:1"] = {author: "ccc", text: "111"}
|
119
|
+
|
120
|
+
users["aaa"].favorites = ["aaa:1", "bbb:2"]
|
121
|
+
users["bbb"].favorites = ["aaa:2"]
|
122
|
+
users["ccc"].favorites = ["aaa:1", "bbb:1", "ccc:1"]
|
123
|
+
|
124
|
+
assert_equal ["favorites", "name"], column_array(Groonga["Users"])
|
125
|
+
assert_equal ["Users_favorites", "author", "text"], column_array(Groonga["Articles"])
|
126
|
+
assert_equal ["Articles_text", "Users_name"], column_array(Groonga["Terms"])
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grn_mini
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ongaeshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -91,10 +91,11 @@ files:
|
|
91
91
|
- lib/grn_mini/util.rb
|
92
92
|
- lib/grn_mini/version.rb
|
93
93
|
- test/minitest_helper.rb
|
94
|
+
- test/test_array.rb
|
94
95
|
- test/test_grn_mini.rb
|
95
|
-
- test/
|
96
|
-
- test/test_grn_mini_hash.rb
|
96
|
+
- test/test_hash.rb
|
97
97
|
- test/test_micro_blog.rb
|
98
|
+
- test/test_setup_columns.rb
|
98
99
|
homepage: ''
|
99
100
|
licenses:
|
100
101
|
- MIT
|
@@ -121,7 +122,9 @@ specification_version: 4
|
|
121
122
|
summary: Groonga(Rroonga) wrapper for use as the KVS.
|
122
123
|
test_files:
|
123
124
|
- test/minitest_helper.rb
|
125
|
+
- test/test_array.rb
|
124
126
|
- test/test_grn_mini.rb
|
125
|
-
- test/
|
126
|
-
- test/test_grn_mini_hash.rb
|
127
|
+
- test/test_hash.rb
|
127
128
|
- test/test_micro_blog.rb
|
129
|
+
- test/test_setup_columns.rb
|
130
|
+
has_rdoc:
|