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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a3573d54bbab536ecc6429349a5326bce7f07e6b
4
- data.tar.gz: e8d6c8f86a4b732aea1d84f6aee06ab8521fda97
3
+ metadata.gz: ae45c1488c3a7184b8fd2c10bba81c2eed07d494
4
+ data.tar.gz: de61b4abb5bc91414e59fa604172c6c77d12a4fb
5
5
  SHA512:
6
- metadata.gz: a7471f3cf1a8e784d1aad28d94d84f174aa19fb31a570d4a9b6e2dfd339a15e33341e39c43e0b14134db64deafb05fdc2cca51feded94a679df8179f01bc60bc
7
- data.tar.gz: b0ecedae697ebc81e318c815488188db3744b87bac42fc91970b46b41c7158bf3cac1194784d058f8d8b3794eb1d9cf3bbd86d742535c33eaeaee3fea3eb26f7
6
+ metadata.gz: ce4e8c4e078767403beb126bd8db0b9e1fe423088cb2e16297798cee3089af4d06a1e145cfb7bdbd98567e45bd65f3b6c0d3497345195d0a7e58235fda137c89
7
+ data.tar.gz: 1b79f00b43b762205ab8b6415b637886d7a305b7dbb62acdea87cefee24ff20b3829bb8511e6cf858d37dd6e1e9e05319f3238d4396a5758ee593655fdc99f91
data/HISTORY.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # HISTORY - grn_mini
2
2
 
3
+ ## 0.5 - 2014/02/11
4
+
5
+ - Use Groonga::Schema
6
+ - Can use setup_columns when table column defined already.
7
+
3
8
  ## 0.4 - 2014/02/01
4
9
 
5
10
  - GrnMini
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: "", favorites: [articles])
484
- articles.setup_columns(author: users, text: "")
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"}
@@ -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) unless @setup_columns_once
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) unless @setup_columns_once
12
+ setup_columns(values) if need_setup_columns?
12
13
  @grn.add(key, values)
13
14
  end
14
15
 
@@ -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
- hash.each do |key, value|
20
- column = key.to_s
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
- if value.is_a?(String)
23
- @grn.define_column(column, value_type(value))
24
- @terms.define_index_column("#{@name}_#{column}", @grn, source: "#{@name}.#{column}", with_position: true)
25
- elsif value.is_a?(::Array)
26
- @grn.define_column(column, value_type(value), type: :vector)
40
+ if value.is_a?(String)
41
+ table.index("#{@name}.#{column}", with_position: true)
42
+ end
43
+ end
44
+ end
27
45
 
28
- elem = value.first
46
+ hash.each do |key, value|
47
+ column = key.to_s
29
48
 
30
- if elem.is_a?(GrnMini::Table)
31
- elem.grn.define_index_column("index_#{column}", @grn, source: "#{@grn.name}.#{column}")
32
- elsif elem.is_a?(Groonga::Table)
33
- elem.define_index_column("index_#{column}", @grn, source: "#{@grn.name}.#{column}")
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
 
@@ -1,3 +1,3 @@
1
1
  module GrnMini
2
- VERSION = "0.4.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -1,6 +1,6 @@
1
1
  require 'minitest_helper'
2
2
 
3
- class TestGrnMiniArray < MiniTest::Unit::TestCase
3
+ class TestArray < MiniTest::Test
4
4
  def test_initialize
5
5
  GrnMini::tmpdb do
6
6
  array = GrnMini::Array.new
@@ -1,6 +1,6 @@
1
1
  require 'minitest_helper'
2
2
 
3
- class TestGrnMini < MiniTest::Unit::TestCase
3
+ class TestGrnMini < MiniTest::Test
4
4
  def test_that_it_has_a_version_number
5
5
  refute_nil ::GrnMini::VERSION
6
6
  end
@@ -1,7 +1,7 @@
1
1
  # -*- coding: utf-8 -*-
2
2
  require 'minitest_helper'
3
3
 
4
- class TestGrnMiniHash < MiniTest::Unit::TestCase
4
+ class TestHash < MiniTest::Test
5
5
  def test_initialize
6
6
  GrnMini::tmpdb do
7
7
  hash = GrnMini::Hash.new
@@ -1,6 +1,6 @@
1
1
  require 'minitest_helper'
2
2
 
3
- class TestMicroBlog < MiniTest::Unit::TestCase
3
+ class TestMicroBlog < MiniTest::Test
4
4
  def test_micro_blog
5
5
  GrnMini::tmpdb do
6
6
  engine = MicroBlog.new
@@ -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.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-01-31 00:00:00.000000000 Z
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/test_grn_mini_array.rb
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/test_grn_mini_array.rb
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: