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