groonga-command 1.0.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.
Files changed (40) hide show
  1. data/Gemfile +21 -0
  2. data/README.md +47 -0
  3. data/Rakefile +44 -0
  4. data/doc/text/lgpl-2.1.txt +502 -0
  5. data/doc/text/news.md +5 -0
  6. data/groonga-command.gemspec +64 -0
  7. data/lib/groonga/command.rb +20 -0
  8. data/lib/groonga/command/base.rb +138 -0
  9. data/lib/groonga/command/column-create.rb +39 -0
  10. data/lib/groonga/command/column-remove.rb +36 -0
  11. data/lib/groonga/command/column-rename.rb +37 -0
  12. data/lib/groonga/command/delete.rb +38 -0
  13. data/lib/groonga/command/error.rb +24 -0
  14. data/lib/groonga/command/get.rb +39 -0
  15. data/lib/groonga/command/load.rb +56 -0
  16. data/lib/groonga/command/parser.rb +424 -0
  17. data/lib/groonga/command/select.rb +69 -0
  18. data/lib/groonga/command/suggest.rb +47 -0
  19. data/lib/groonga/command/table-create.rb +39 -0
  20. data/lib/groonga/command/table-remove.rb +35 -0
  21. data/lib/groonga/command/table-rename.rb +36 -0
  22. data/lib/groonga/command/truncate.rb +35 -0
  23. data/lib/groonga/command/version.rb +23 -0
  24. data/test/command/test-base.rb +114 -0
  25. data/test/command/test-column-create.rb +47 -0
  26. data/test/command/test-column-remove.rb +41 -0
  27. data/test/command/test-column-rename.rb +43 -0
  28. data/test/command/test-delete.rb +45 -0
  29. data/test/command/test-get.rb +44 -0
  30. data/test/command/test-load.rb +49 -0
  31. data/test/command/test-select.rb +60 -0
  32. data/test/command/test-suggest.rb +68 -0
  33. data/test/command/test-table-create.rb +48 -0
  34. data/test/command/test-table-remove.rb +39 -0
  35. data/test/command/test-table-rename.rb +41 -0
  36. data/test/command/test-truncate.rb +39 -0
  37. data/test/groonga-command-test-utils.rb +102 -0
  38. data/test/run-test.rb +39 -0
  39. data/test/test-parser.rb +353 -0
  40. metadata +237 -0
@@ -0,0 +1,69 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ require "groonga/command/base"
20
+
21
+ module Groonga
22
+ module Command
23
+ class Select < Base
24
+ Command.register("select", self)
25
+
26
+ class << self
27
+ def parameter_names
28
+ # TODO: Fill me
29
+ [
30
+ :table
31
+ ]
32
+ end
33
+ end
34
+
35
+ def sortby
36
+ self[:sortby]
37
+ end
38
+
39
+ def scorer
40
+ self[:scorer]
41
+ end
42
+
43
+ def query
44
+ self[:query]
45
+ end
46
+
47
+ def filter
48
+ self[:filter]
49
+ end
50
+
51
+ def conditions
52
+ @conditions ||= filter.split(/(?:&&|&!|\|\|)/).collect do |condition|
53
+ condition = condition.strip
54
+ condition = condition.gsub(/\A[\s\(]*/, '')
55
+ condition = condition.gsub(/[\s\)]*\z/, '') unless /\(/ =~ condition
56
+ condition
57
+ end
58
+ end
59
+
60
+ def drilldowns
61
+ @drilldowns ||= (self[:drilldown] || "").split(/\s*,\s*/)
62
+ end
63
+
64
+ def output_columns
65
+ self[:output_columns]
66
+ end
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Haruka Yoshihara <yoshihara@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ require "groonga/command/base"
20
+
21
+ module Groonga
22
+ module Command
23
+ class Suggest < Base
24
+ Command.register("suggest", self)
25
+
26
+ class << self
27
+ def parameter_names
28
+ [
29
+ :types,
30
+ :table,
31
+ :column,
32
+ :query,
33
+ :sortby,
34
+ :output_columns,
35
+ :offset,
36
+ :limit,
37
+ :frequency_threshold,
38
+ :conditional_probability_threshold,
39
+ :prefix_search,
40
+ :similar_search
41
+ ]
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+
@@ -0,0 +1,39 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ require "groonga/command/base"
20
+
21
+ module Groonga
22
+ module Command
23
+ class TableCreate < Base
24
+ Command.register("table_create", self)
25
+
26
+ class << self
27
+ def parameter_names
28
+ [
29
+ :name,
30
+ :flags,
31
+ :key_type,
32
+ :value_type,
33
+ :default_tokenizer,
34
+ ]
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ require "groonga/command/base"
20
+
21
+ module Groonga
22
+ module Command
23
+ class TableRemove < Base
24
+ Command.register("table_remove", self)
25
+
26
+ class << self
27
+ def parameter_names
28
+ [
29
+ :name,
30
+ ]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,36 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ require "groonga/command/base"
20
+
21
+ module Groonga
22
+ module Command
23
+ class TableRename < Base
24
+ Command.register("table_rename", self)
25
+
26
+ class << self
27
+ def parameter_names
28
+ [
29
+ :name,
30
+ :new_name,
31
+ ]
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,35 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ require "groonga/command/base"
20
+
21
+ module Groonga
22
+ module Command
23
+ class Truncate < Base
24
+ Command.register("truncate", self)
25
+
26
+ class << self
27
+ def parameter_names
28
+ [
29
+ :table,
30
+ ]
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,23 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ module Groonga
20
+ module Command
21
+ VERSION = "1.0.0"
22
+ end
23
+ end
@@ -0,0 +1,114 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2011-2012 Kouhei Sutou <kou@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ class BaseCommandTest < Test::Unit::TestCase
20
+ class CovnertToURIFormatTest < self
21
+ def test_no_special_characters
22
+ select = Groonga::Command::Base.new("select",
23
+ :table => "Users",
24
+ :filter => "age<=30",
25
+ :output_type => "json")
26
+ assert_equal("/d/select.json?filter=age%3C%3D30&table=Users",
27
+ select.to_uri_format)
28
+ end
29
+
30
+ def test_double_quote
31
+ filter = 'geo_in_rectangle(location,' +
32
+ '"35.73360x139.7394","62614x139.7714") && ' +
33
+ '((type == "たいやき" || type == "和菓子")) && ' +
34
+ 'keyword @ "たいやき" &! keyword @ "白" &! keyword @ "養殖"'
35
+ select = Groonga::Command::Base.new("select",
36
+ :table => "Users",
37
+ :filter => filter,
38
+ :output_type => "json")
39
+ assert_equal("/d/select.json?filter=geo_in_rectangle%28location%2C" +
40
+ "%2235.73360x139.7394%22%2C%2262614x139.7714%22%29+" +
41
+ "%26%26+%28%28type+" +
42
+ "%3D%3D+%22%E3%81%9F%E3%81%84%E3%82%84%E3%81%8D%22+" +
43
+ "%7C%7C+type+%3D%3D+" +
44
+ "%22%E5%92%8C%E8%8F%93%E5%AD%90%22%29%29+" +
45
+ "%26%26+keyword+%40+" +
46
+ "%22%E3%81%9F%E3%81%84%E3%82%84%E3%81%8D%22+%26%21+" +
47
+ "keyword+%40+%22%E7%99%BD%22+%26%21+" +
48
+ "keyword+%40+%22%E9%A4%8A%E6%AE%96%22&table=Users",
49
+ select.to_uri_format)
50
+ end
51
+ end
52
+
53
+ class CovnertToCommandFormatTest < self
54
+ def test_no_special_characters
55
+ select = Groonga::Command::Base.new("select",
56
+ :table => "Users",
57
+ :filter => "age<=30",
58
+ :output_type => "json")
59
+ assert_equal("select --filter \"age<=30\" " +
60
+ "--output_type \"json\" --table \"Users\"",
61
+ select.to_command_format)
62
+ end
63
+
64
+ def test_double_quote
65
+ filter = 'geo_in_rectangle(location,' +
66
+ '"35.73360x139.7394","62614x139.7714") && ' +
67
+ '((type == "たいやき" || type == "和菓子")) && ' +
68
+ 'keyword @ "たいやき" &! keyword @ "白" &! keyword @ "養殖"'
69
+ select = Groonga::Command::Base.new("select",
70
+ :table => "Users",
71
+ :filter => filter,
72
+ :output_type => "json")
73
+ assert_equal("select " +
74
+ "--filter " +
75
+ "\"geo_in_rectangle(location," +
76
+ "\\\"35.73360x139.7394\\\",\\\"62614x139.7714\\\") && " +
77
+ "((type == \\\"たいやき\\\" || " +
78
+ "type == \\\"和菓子\\\")) && " +
79
+ "keyword @ \\\"たいやき\\\" &! keyword @ \\\"白\\\" &! " +
80
+ "keyword @ \\\"養殖\\\"\" " +
81
+ "--output_type \"json\" --table \"Users\"",
82
+ select.to_command_format)
83
+ end
84
+ end
85
+
86
+ sub_test_case("#[]") do
87
+ def setup
88
+ @table = "Users"
89
+ @select = Groonga::Command::Base.new("select", :table => @table)
90
+ end
91
+
92
+ def test_symbol
93
+ assert_equal(@table, @select[:table])
94
+ end
95
+
96
+ def test_string
97
+ assert_equal(@table, @select["table"])
98
+ end
99
+ end
100
+
101
+ sub_test_case("#has_key?") do
102
+ def setup
103
+ @select = Groonga::Command::Base.new("select", :table => "Users")
104
+ end
105
+
106
+ def test_symbol
107
+ assert_true(@select.has_key?(:table))
108
+ end
109
+
110
+ def test_string
111
+ assert_true(@select.has_key?("table"))
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,47 @@
1
+ # -*- coding: utf-8 -*-
2
+ #
3
+ # Copyright (C) 2012 Kouhei Sutou <kou@clear-code.com>
4
+ #
5
+ # This library is free software; you can redistribute it and/or
6
+ # modify it under the terms of the GNU Lesser General Public
7
+ # License as published by the Free Software Foundation; either
8
+ # version 2.1 of the License, or (at your option) any later version.
9
+ #
10
+ # This library is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13
+ # Lesser General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Lesser General Public
16
+ # License along with this library; if not, write to the Free Software
17
+ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18
+
19
+ class ColumnCreateCommandTest < Test::Unit::TestCase
20
+ class CommandLineTest < self
21
+ include GroongaCommandTestUtils::CommandLineCommandParser
22
+
23
+ def test_ordered_arguments
24
+ table = "Lexicon"
25
+ name = "content_index"
26
+ flags = "COLUMN_INDEX"
27
+ type = "Posts"
28
+ source = "content"
29
+
30
+ command = parse(table, name, flags, type, source)
31
+ assert_instance_of(Groonga::Command::ColumnCreate, command)
32
+ assert_equal({
33
+ :table => table,
34
+ :name => name,
35
+ :flags => flags,
36
+ :type => type,
37
+ :source => source,
38
+ },
39
+ command.arguments)
40
+ end
41
+
42
+ private
43
+ def parse(*arguments)
44
+ super("column_create", arguments, :output_type => false)
45
+ end
46
+ end
47
+ end