grn_mini 0.4.0 → 0.5.0
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|