activegroonga 0.0.2 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. data/NEWS.ja.rdoc +4 -0
  2. data/NEWS.rdoc +4 -0
  3. data/README.ja.rdoc +1 -1
  4. data/README.rdoc +1 -1
  5. data/Rakefile +3 -4
  6. data/lib/active_groonga.rb +2 -0
  7. data/lib/active_groonga/base.rb +125 -99
  8. data/lib/active_groonga/column.rb +9 -0
  9. data/lib/active_groonga/dynamic_record_expression_builder.rb +40 -0
  10. data/lib/active_groonga/schema.rb +107 -204
  11. data/lib/active_groonga/schema_dumper.rb +40 -25
  12. data/lib/active_groonga/tasks/groonga.rake +2 -0
  13. data/lib/active_groonga/version.rb +1 -1
  14. data/rails_generators/index_table_groonga/USAGE +23 -0
  15. data/rails_generators/index_table_groonga/index_table_groonga_generator.rb +44 -0
  16. data/rails_generators/index_table_groonga/templates/migration.rb +12 -0
  17. data/rails_generators/migration_groonga/USAGE +29 -0
  18. data/rails_generators/migration_groonga/migration_groonga_generator.rb +19 -0
  19. data/rails_generators/migration_groonga/templates/migration.rb +11 -0
  20. data/test-unit/Rakefile +6 -1
  21. data/test-unit/lib/test/unit/autorunner.rb +26 -3
  22. data/test-unit/lib/test/unit/priority.rb +21 -1
  23. data/test-unit/lib/test/unit/testcase.rb +101 -36
  24. data/test-unit/lib/test/unit/ui/console/testrunner.rb +7 -4
  25. data/test-unit/test/{test_testcase.rb → test-testcase.rb} +30 -1
  26. data/test-unit/test/test_assertions.rb +1 -1
  27. data/test/active-groonga-test-utils.rb +25 -26
  28. data/test/test-base.rb +16 -6
  29. data/test/test-schema-dumper.rb +48 -0
  30. data/test/test-schema.rb +20 -4
  31. data/test/tmp/database/database.groonga +0 -0
  32. data/test/tmp/database/database.groonga.0000000 +0 -0
  33. data/test/tmp/database/database.groonga.0000100 +0 -0
  34. data/test/tmp/database/database.groonga.0000101 +0 -0
  35. metadata +19 -7
@@ -185,10 +185,13 @@ module Test
185
185
 
186
186
  def guess_color_availability
187
187
  return false unless @output.tty?
188
- term = ENV["TERM"]
189
- return true if term and (/term\z/ =~ term or term == "screen")
190
- return true if ENV["EMACS"] == "t"
191
- false
188
+ case ENV["TERM"]
189
+ when /term(?:-color)?\z/, "screen"
190
+ true
191
+ else
192
+ return true if ENV["EMACS"] == "t"
193
+ false
194
+ end
192
195
  end
193
196
 
194
197
  def guess_progress_row_max
@@ -6,7 +6,7 @@ require 'test/unit'
6
6
 
7
7
  module Test
8
8
  module Unit
9
- class TC_TestCase < TestCase
9
+ class TestTestCase < TestCase
10
10
  def test_creation
11
11
  tc = Class.new(TestCase) do
12
12
  def test_with_arguments(arg1, arg2)
@@ -468,11 +468,40 @@ module Test
468
468
  end
469
469
  end
470
470
 
471
+ def test_defined_order
472
+ keep_test_order do
473
+ test_case = Class.new(Test::Unit::TestCase) do
474
+ def test_z
475
+ end
476
+
477
+ def test_1
478
+ end
479
+
480
+ def test_a
481
+ end
482
+ end
483
+
484
+ assert_equal(["test_1", "test_a", "test_z"],
485
+ test_case.suite.tests.collect {|test| test.method_name})
486
+
487
+ test_case.test_order = :defined
488
+ assert_equal(["test_z", "test_1", "test_a"],
489
+ test_case.suite.tests.collect {|test| test.method_name})
490
+ end
491
+ end
492
+
471
493
  private
472
494
  def check(message, passed)
473
495
  add_assertion
474
496
  raise AssertionFailedError.new(message) unless passed
475
497
  end
498
+
499
+ def keep_test_order
500
+ order = TestCase.test_order
501
+ yield
502
+ ensure
503
+ TestCase.test_order = order
504
+ end
476
505
  end
477
506
  end
478
507
  end
@@ -428,7 +428,7 @@ EOM
428
428
 
429
429
  different_error_class = Class.new(StandardError)
430
430
  message = <<-EOM
431
- <\#<Class:0x[a-f\\d]+>\\("Error"\\)> exception expected but was
431
+ <\#<Class:[xa-f\\d]+>\\("Error"\\)> exception expected but was
432
432
  Class: <RuntimeError>
433
433
  Message: <"Error">
434
434
  EOM
@@ -78,37 +78,39 @@ module ActiveGroongaTestUtils
78
78
 
79
79
  def setup_users_table
80
80
  @users_path = @tables_dir + "users.groonga"
81
- @users = Groonga::Array.create(:name => "<table:users>",
82
- :path => @users_path.to_s)
81
+ @users = Groonga::Array.create(:name => "users",
82
+ :path => @users_path.to_s,
83
+ :sub_records => true)
83
84
 
84
85
  columns_dir = @tables_dir + "users" + "columns"
85
86
  columns_dir.mkpath
86
87
 
87
88
  @name_column_path = columns_dir + "name.groonga"
88
- @name_column = @users.define_column("name", "<shorttext>",
89
+ @name_column = @users.define_column("name", "ShortText",
89
90
  :path => @name_column_path.to_s)
90
91
  end
91
92
 
92
93
  def setup_bookmarks_table
93
94
  @bookmarks_path = @tables_dir + "bookmarks.groonga"
94
- @bookmarks = Groonga::Array.create(:name => "<table:bookmarks>",
95
- :path => @bookmarks_path.to_s)
95
+ @bookmarks = Groonga::Array.create(:name => "bookmarks",
96
+ :path => @bookmarks_path.to_s,
97
+ :sub_records => true)
96
98
 
97
99
  columns_dir = @tables_dir + "bookmarks" + "columns"
98
100
  columns_dir.mkpath
99
101
 
100
102
  @uri_column_path = columns_dir + "uri.groonga"
101
- @uri_column = @bookmarks.define_column("uri", "<shorttext>",
103
+ @uri_column = @bookmarks.define_column("uri", "ShortText",
102
104
  :path => @uri_column_path.to_s)
103
105
 
104
106
  @comment_column_path = columns_dir + "comment.groonga"
105
107
  @comment_column =
106
- @bookmarks.define_column("comment", "<text>",
108
+ @bookmarks.define_column("comment", "Text",
107
109
  :path => @comment_column_path.to_s)
108
110
 
109
111
  @content_column_path = columns_dir + "content.groonga"
110
112
  @content_column =
111
- @bookmarks.define_column("content", "<longtext>",
113
+ @bookmarks.define_column("content", "LongText",
112
114
  :path => @content_column_path.to_s)
113
115
 
114
116
  @user_column_path = columns_dir + "user.groonga"
@@ -121,51 +123,48 @@ module ActiveGroongaTestUtils
121
123
 
122
124
  def define_timestamp(table, columns_dir)
123
125
  created_at_column_path = columns_dir + "created_at.groonga"
124
- table.define_column("created_at", "<time>",
126
+ table.define_column("created_at", "Time",
125
127
  :path => created_at_column_path.to_s)
126
128
 
127
129
  updated_at_column_path = columns_dir + "updated_at.groonga"
128
- table.define_column("updated_at", "<time>",
130
+ table.define_column("updated_at", "Time",
129
131
  :path => updated_at_column_path.to_s)
130
132
  end
131
133
 
132
134
  def setup_bookmarks_index_tables
133
- @index = @context["<metadata:index>"]
134
-
135
- setup_bookmarks_content_index_table
136
- end
137
-
138
- def setup_bookmarks_content_index_table
139
- bookmarks_index_dir = @metadata_dir + "index" + "bookmarks"
135
+ @terms_path = @tables_dir + "terms.groonga"
136
+ @terms = Groonga::PatriciaTrie.create(:name => "terms",
137
+ :key_type => "ShortText",
138
+ :path => @terms_path.to_s,
139
+ :default_tokenizer => "TokenBigram")
140
+
141
+ columns_dir = @tables_dir + "terms" + "columns"
142
+ bookmarks_index_dir = columns_dir + "bookmarks"
140
143
  bookmarks_index_dir.mkpath
141
144
 
142
145
  @bookmarks_content_index_column_path =
143
146
  bookmarks_index_dir + "content.groonga"
144
147
  path = @bookmarks_content_index_column_path.to_s
145
148
  @bookmarks_content_index_column =
146
- @index.define_index_column("bookmarks/content", @bookmarks,
149
+ @terms.define_index_column("bookmarks/content", @bookmarks,
147
150
  :with_section => true,
148
151
  :with_weight => true,
149
152
  :with_position => true,
150
153
  :path => path)
151
154
  @bookmarks_content_index_column.source = @content_column
152
-
153
- record = ActiveGroonga::Schema.index_management_table.add
154
- record["table"] = @bookmarks.name
155
- record["column"] = "content"
156
- record["index"] = @index.name
157
155
  end
158
156
 
159
157
  def setup_tasks_table
160
158
  @tasks_path = @tables_dir + "tasks.groonga"
161
- @tasks = Groonga::Array.create(:name => "<table:tasks>",
162
- :path => @tasks_path.to_s)
159
+ @tasks = Groonga::Array.create(:name => "tasks",
160
+ :path => @tasks_path.to_s,
161
+ :sub_records => true)
163
162
 
164
163
  columns_dir = @tables_dir + "tasks" + "columns"
165
164
  columns_dir.mkpath
166
165
 
167
166
  @name_column_path = columns_dir + "name.groonga"
168
- @name_column = @tasks.define_column("name", "<shorttext>",
167
+ @name_column = @tasks.define_column("name", "ShortText",
169
168
  :path => @name_column_path.to_s)
170
169
  end
171
170
 
data/test/test-base.rb CHANGED
@@ -14,7 +14,7 @@
14
14
  # License along with this library; if not, write to the Free Software
15
15
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
16
 
17
- class BaseTest < Test::Unit::TestCase
17
+ class TestBase < Test::Unit::TestCase
18
18
  include ActiveGroongaTestUtils
19
19
 
20
20
  def test_find
@@ -128,16 +128,16 @@ class BaseTest < Test::Unit::TestCase
128
128
  }
129
129
  google.save!
130
130
 
131
- bookmarks = Bookmark.find_all_by_content("Google")
131
+ bookmarks = Bookmark.find(:all) {|record| record["content"] =~ "Google"}
132
132
  assert_equal([google], bookmarks)
133
133
 
134
134
  google.content = "<html><body>...Empty...</body></html>"
135
135
  google.save!
136
136
 
137
- bookmarks = Bookmark.find_all_by_content("Google")
137
+ bookmarks = Bookmark.find(:all) {|record| record["content"] =~ "Google"}
138
138
  assert_equal([], bookmarks)
139
139
 
140
- bookmarks = Bookmark.find_all_by_content("Empty")
140
+ bookmarks = Bookmark.find(:all) {|record| record["content"] =~ "Empty"}
141
141
  assert_equal([google], bookmarks)
142
142
  end
143
143
 
@@ -167,8 +167,8 @@ class BaseTest < Test::Unit::TestCase
167
167
  "comment" => "a search engine",
168
168
  "content" => "<html><body>...Google...</body></html>")
169
169
 
170
-
171
- assert_equal([google], Bookmark.find_all_by_content("Google"))
170
+ assert_equal([google],
171
+ Bookmark.find(:all) {|record| record["content"] =~ "Google"})
172
172
  end
173
173
 
174
174
  def test_find_by_model
@@ -191,4 +191,14 @@ class BaseTest < Test::Unit::TestCase
191
191
  groonga.reload
192
192
  assert_equal("fulltext search engine", groonga.comment)
193
193
  end
194
+
195
+ def test_find_column_access_by_method
196
+ google = Bookmark.create("uri" => "http://google.com/",
197
+ "comment" => "a search engine",
198
+ "content" => "<html><body>Google</body></html>")
199
+
200
+
201
+ assert_equal([google],
202
+ Bookmark.find(:all) {|record| record.content =~ "Google"})
203
+ end
194
204
  end
@@ -0,0 +1,48 @@
1
+ # Copyright (C) 2009 Kouhei Sutou <kou@clear-code.com>
2
+ #
3
+ # This library is free software; you can redistribute it and/or
4
+ # modify it under the terms of the GNU Lesser General Public
5
+ # License as published by the Free Software Foundation; either
6
+ # version 2.1 of the License.
7
+ #
8
+ # This library is distributed in the hope that it will be useful,
9
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
10
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
+ # Lesser General Public License for more details.
12
+ #
13
+ # You should have received a copy of the GNU Lesser General Public
14
+ # License along with this library; if not, write to the Free Software
15
+ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
+
17
+ class TestSchemaDumper < Test::Unit::TestCase
18
+ include ActiveGroongaTestUtils
19
+
20
+ def setup
21
+ @output = StringIO.new
22
+ end
23
+
24
+ def test_dump
25
+ ActiveGroonga::SchemaDumper.dump(@output)
26
+ assert_equal(<<-EOS, @output.string.gsub(/^\s*(?:#.*)?\n/, ''))
27
+ ActiveGroonga::Schema.define(:version => 0) do
28
+ create_table "bookmarks", :force => true do |t|
29
+ t.string "uri"
30
+ t.time "updated_at"
31
+ t.time "created_at"
32
+ t.text "content"
33
+ t.text "comment"
34
+ end
35
+ create_table "tasks", :force => true do |t|
36
+ t.string "name"
37
+ end
38
+ create_table "terms", :force => true, :type => :patricia_trie, :key_type => "ShortText", :default_tokenizer => "TokenBigram" do |t|
39
+ end
40
+ create_table "users", :force => true do |t|
41
+ t.string "name"
42
+ end
43
+ add_column "bookmarks", "user", "users"
44
+ add_index_column "terms", "bookmarks", "content", :name => "bookmarks/content"
45
+ end
46
+ EOS
47
+ end
48
+ end
data/test/test-schema.rb CHANGED
@@ -14,7 +14,7 @@
14
14
  # License along with this library; if not, write to the Free Software
15
15
  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16
16
 
17
- class SchemaTest < Test::Unit::TestCase
17
+ class TestSchema < Test::Unit::TestCase
18
18
  include ActiveGroongaTestUtils
19
19
 
20
20
  def test_create_table
@@ -34,14 +34,30 @@ class SchemaTest < Test::Unit::TestCase
34
34
  assert_predicate(column_file, :exist?)
35
35
  end
36
36
 
37
+ def test_reference_column
38
+ ActiveGroonga::Schema.create_table(:categories) do |table|
39
+ table.string :name
40
+ end
41
+
42
+ column_file = @tables_dir + "posts" + "columns" + "category.groonga"
43
+ assert_not_predicate(column_file, :exist?)
44
+ ActiveGroonga::Schema.create_table(:posts) do |table|
45
+ table.reference :category
46
+ end
47
+ assert_predicate(column_file, :exist?)
48
+ end
49
+
37
50
  def test_add_index
38
- base_dir = @metadata_dir + "index" + "posts"
39
- index_file = base_dir + "content.groonga"
51
+ columns_dir = @tables_dir + "words" + "columns" + "posts"
52
+ index_file = columns_dir + "posts_content.groonga"
40
53
  assert_not_predicate(index_file, :exist?)
41
54
 
42
55
  ActiveGroonga::Schema.create_table(:posts) do |table|
43
56
  table.string :content
44
- table.index :content
57
+ end
58
+
59
+ ActiveGroonga::Schema.create_table(:words) do |table|
60
+ table.index :posts, :content
45
61
  end
46
62
 
47
63
  assert_predicate(index_file, :exist?)
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: activegroonga
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kouhei Sutou
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-06-05 00:00:00 +09:00
12
+ date: 2009-08-01 00:00:00 +09:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -20,7 +20,7 @@ dependencies:
20
20
  requirements:
21
21
  - - "="
22
22
  - !ruby/object:Gem::Version
23
- version: 0.0.2
23
+ version: 0.0.6
24
24
  version:
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: activerecord
@@ -44,10 +44,10 @@ executables: []
44
44
  extensions: []
45
45
 
46
46
  extra_rdoc_files:
47
- - NEWS.ja.rdoc
48
- - NEWS.rdoc
49
47
  - README.rdoc
48
+ - NEWS.ja.rdoc
50
49
  - README.ja.rdoc
50
+ - NEWS.rdoc
51
51
  files:
52
52
  - AUTHORS
53
53
  - NEWS.ja.rdoc
@@ -63,6 +63,7 @@ files:
63
63
  - lib/active_groonga/base.rb
64
64
  - lib/active_groonga/column.rb
65
65
  - lib/active_groonga/dirty.rb
66
+ - lib/active_groonga/dynamic_record_expression_builder.rb
66
67
  - lib/active_groonga/fixtures.rb
67
68
  - lib/active_groonga/migration.rb
68
69
  - lib/active_groonga/rails_support.rb
@@ -79,6 +80,12 @@ files:
79
80
  - license/LGPL
80
81
  - rails/README
81
82
  - rails/init.rb
83
+ - rails_generators/index_table_groonga/USAGE
84
+ - rails_generators/index_table_groonga/index_table_groonga_generator.rb
85
+ - rails_generators/index_table_groonga/templates/migration.rb
86
+ - rails_generators/migration_groonga/USAGE
87
+ - rails_generators/migration_groonga/migration_groonga_generator.rb
88
+ - rails_generators/migration_groonga/templates/migration.rb
82
89
  - rails_generators/model_groonga/USAGE
83
90
  - rails_generators/model_groonga/model_groonga_generator.rb
84
91
  - rails_generators/model_groonga/templates/fixtures.yml
@@ -149,10 +156,10 @@ files:
149
156
  - test-unit/test/test-omission.rb
150
157
  - test-unit/test/test-pending.rb
151
158
  - test-unit/test/test-priority.rb
159
+ - test-unit/test/test-testcase.rb
152
160
  - test-unit/test/test_assertions.rb
153
161
  - test-unit/test/test_error.rb
154
162
  - test-unit/test/test_failure.rb
155
- - test-unit/test/test_testcase.rb
156
163
  - test-unit/test/test_testresult.rb
157
164
  - test-unit/test/test_testsuite.rb
158
165
  - test-unit/test/testunit-test-util.rb
@@ -168,7 +175,12 @@ files:
168
175
  - test/run-test.rb
169
176
  - test/test-associations.rb
170
177
  - test/test-base.rb
178
+ - test/test-schema-dumper.rb
171
179
  - test/test-schema.rb
180
+ - test/tmp/database/database.groonga
181
+ - test/tmp/database/database.groonga.0000000
182
+ - test/tmp/database/database.groonga.0000100
183
+ - test/tmp/database/database.groonga.0000101
172
184
  has_rdoc: true
173
185
  homepage: http://groonga.rubyforge.org/
174
186
  licenses: []
@@ -194,7 +206,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
194
206
  requirements: []
195
207
 
196
208
  rubyforge_project: groonga
197
- rubygems_version: 1.3.3
209
+ rubygems_version: 1.3.4
198
210
  signing_key:
199
211
  specification_version: 3
200
212
  summary: A library to use groonga with ActiveRecord like API.