grnline 0.0.1
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.
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +37 -0
- data/Rakefile +30 -0
- data/TODO +2 -0
- data/bin/grnline +8 -0
- data/doc/text/news.md +5 -0
- data/grnline.gemspec +47 -0
- data/lib/grnline/options-parser.rb +92 -0
- data/lib/grnline/version.rb +5 -0
- data/lib/grnline/wrapper.rb +159 -0
- data/lib/grnline.rb +5 -0
- data/test/run-test.rb +24 -0
- data/test/test-options-parser.rb +59 -0
- data/test/test-wrapper.rb +60 -0
- metadata +190 -0
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Haruka Yoshihara
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# Grnline
|
2
|
+
|
3
|
+
## Description
|
4
|
+
|
5
|
+
GrnLine is the wrapper for the interactive mode of [groonga](http://groonga.org/).
|
6
|
+
|
7
|
+
GrnLine is created by Ruby.
|
8
|
+
This uses [grnwrap](https://github.com/michisu/grnwrap) as a
|
9
|
+
reference. grnwrap is created by Python.
|
10
|
+
|
11
|
+
## Installation
|
12
|
+
|
13
|
+
```
|
14
|
+
$ gem install grnline
|
15
|
+
```
|
16
|
+
|
17
|
+
## Usage
|
18
|
+
|
19
|
+
You can use the options of groonga as ones for grnline. For example,
|
20
|
+
you execute groonga with a new database:
|
21
|
+
|
22
|
+
$ grnline -n <groonga-db>
|
23
|
+
|
24
|
+
Then, grnline has the own options. Please see ```grnline -- -h```.
|
25
|
+
When you want to know groonga's options, please type ```grnline -h```.
|
26
|
+
|
27
|
+
## Author
|
28
|
+
|
29
|
+
Haruka Yoshihara (yshr04hrk at gmail.com)
|
30
|
+
|
31
|
+
## Contributing
|
32
|
+
|
33
|
+
1. Fork it
|
34
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
35
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
36
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
37
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "packnga"
|
4
|
+
|
5
|
+
base_dir = File.join(File.dirname(__FILE__))
|
6
|
+
lib_dir = File.join(base_dir, "lib")
|
7
|
+
$LOAD_PATH.unshift(lib_dir)
|
8
|
+
require "grnline/version"
|
9
|
+
|
10
|
+
helper = Bundler::GemHelper.new(base_dir)
|
11
|
+
helper.install
|
12
|
+
def helper.version_tag
|
13
|
+
version
|
14
|
+
end
|
15
|
+
|
16
|
+
spec = helper.gemspec
|
17
|
+
|
18
|
+
Packnga::DocumentTask.new(spec) do
|
19
|
+
end
|
20
|
+
|
21
|
+
Packnga::ReleaseTask.new(spec) do
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "Run tests."
|
25
|
+
task :test do
|
26
|
+
ruby("test/run-test.rb")
|
27
|
+
end
|
28
|
+
|
29
|
+
task :default => :test
|
30
|
+
|
data/TODO
ADDED
data/bin/grnline
ADDED
data/doc/text/news.md
ADDED
data/grnline.gemspec
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
# -*- coding: utf-8; mode: ruby -*-
|
2
|
+
|
3
|
+
base_dir = File.dirname(__FILE__)
|
4
|
+
$LOAD_PATH.unshift(File.expand_path("lib", base_dir))
|
5
|
+
|
6
|
+
require "grnline/version"
|
7
|
+
version = GrnLine::VERSION.dup
|
8
|
+
|
9
|
+
readme_path = File.join(base_dir, "README.md")
|
10
|
+
entries = File.read(readme_path).split(/^##\s(.*)$/)
|
11
|
+
entry = lambda do |entry_title|
|
12
|
+
entries[entries.index(entry_title) + 1]
|
13
|
+
end
|
14
|
+
clean_white_space = lambda do |entry|
|
15
|
+
entry.gsub(/(\A\n+|\n+\z)/, '') + "\n"
|
16
|
+
end
|
17
|
+
|
18
|
+
description = clean_white_space.call(entry.call("Description"))
|
19
|
+
summary, description = description.split(/\n\n+/, 2)
|
20
|
+
|
21
|
+
Gem::Specification.new do |spec|
|
22
|
+
spec.name = "grnline"
|
23
|
+
spec.version = version
|
24
|
+
spec.authors = ["Haruka Yoshihara"]
|
25
|
+
spec.email = ["yshr04hrk@gmail.com"]
|
26
|
+
spec.summary = summary
|
27
|
+
spec.description = description
|
28
|
+
spec.license = "MIT"
|
29
|
+
|
30
|
+
spec.files = ["README.md", "LICENSE.txt", "TODO"]
|
31
|
+
spec.files += ["Rakefile", "Gemfile", "grnline.gemspec"]
|
32
|
+
spec.files += Dir.glob("lib/**/*.rb")
|
33
|
+
spec.files += Dir.glob("doc/text/*.*")
|
34
|
+
spec.test_files = Dir.glob("test/**/*.rb")
|
35
|
+
Dir.chdir("bin") do
|
36
|
+
spec.executables = Dir.glob("*")
|
37
|
+
end
|
38
|
+
spec.require_paths = ["lib"]
|
39
|
+
|
40
|
+
spec.add_runtime_dependency("json")
|
41
|
+
spec.add_development_dependency("packnga")
|
42
|
+
spec.add_development_dependency("bundler")
|
43
|
+
spec.add_development_dependency("rake")
|
44
|
+
spec.add_development_dependency("test-unit")
|
45
|
+
spec.add_development_dependency("test-unit-notify")
|
46
|
+
spec.add_development_dependency("redcarpet")
|
47
|
+
end
|
@@ -0,0 +1,92 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "ostruct"
|
4
|
+
require "optparse"
|
5
|
+
|
6
|
+
module GrnLine
|
7
|
+
class OptionsParser
|
8
|
+
|
9
|
+
SEPARATOR = "--"
|
10
|
+
|
11
|
+
def initialize
|
12
|
+
@options = OpenStruct.new
|
13
|
+
@options.groonga = "groonga"
|
14
|
+
@options.pager = "less"
|
15
|
+
@options.groonga_arguments = []
|
16
|
+
@options.output = $stdout
|
17
|
+
@options.pretty_print = true
|
18
|
+
end
|
19
|
+
|
20
|
+
def parse(argv)
|
21
|
+
parser = generate_parser
|
22
|
+
|
23
|
+
if not argv.include?(SEPARATOR)
|
24
|
+
@options.groonga_arguments = argv
|
25
|
+
else
|
26
|
+
grnline_arguments, groonga_arguments = split_arguments(argv)
|
27
|
+
|
28
|
+
parser.parse!(grnline_arguments)
|
29
|
+
@options.groonga_arguments = groonga_arguments
|
30
|
+
end
|
31
|
+
@options
|
32
|
+
end
|
33
|
+
|
34
|
+
def split_arguments(argv)
|
35
|
+
grnline_arguments = []
|
36
|
+
groonga_arguments = []
|
37
|
+
separator_index = argv.index(SEPARATOR)
|
38
|
+
|
39
|
+
unless separator_index.zero?
|
40
|
+
groonga_arguments = argv[0 .. (separator_index - 1)]
|
41
|
+
end
|
42
|
+
grnline_arguments = argv[(separator_index + 1) .. -1]
|
43
|
+
|
44
|
+
[grnline_arguments, groonga_arguments]
|
45
|
+
end
|
46
|
+
|
47
|
+
def generate_parser
|
48
|
+
parser = OptionParser.new
|
49
|
+
banner = "Usage: #{$0} [groonga_options] -- [grnline_options]\n" +
|
50
|
+
" 'groonga_options' is options for groonga. " +
|
51
|
+
"Please type `groonga --help` for the details of them.\n" +
|
52
|
+
" grnline_options :"
|
53
|
+
parser.banner = banner
|
54
|
+
|
55
|
+
parser.on("-g", "--groonga=GROONGA",
|
56
|
+
"your groonga.",
|
57
|
+
"(#{@options.groonga})") do |groonga|
|
58
|
+
@options.groonga = groonga
|
59
|
+
end
|
60
|
+
|
61
|
+
parser.on("-p", "--[no-]pretty-print",
|
62
|
+
"Pretty print responses from groonga.",
|
63
|
+
"(#{@options.pretty_print})") do |pretty_print|
|
64
|
+
@options.pretty_print = pretty_print
|
65
|
+
end
|
66
|
+
|
67
|
+
# TODO: supports pager for displaying results from groonga
|
68
|
+
# parser.on("-p", "--pager=PAGER",
|
69
|
+
# "your pager using to display results.") do |pager|
|
70
|
+
# @options.pager = pager
|
71
|
+
# end
|
72
|
+
|
73
|
+
parser.on("--output=OUTPUT",
|
74
|
+
"Destination to output responses from groonga.",
|
75
|
+
"(STDOUT)") do |output|
|
76
|
+
@options.output = output
|
77
|
+
end
|
78
|
+
|
79
|
+
parser.on("-v", "--version", "Show version and exit.") do
|
80
|
+
puts(GrnLine::VERSION)
|
81
|
+
exit(true)
|
82
|
+
end
|
83
|
+
|
84
|
+
parser.on_tail("-h", "--help", "Show this message and exit.") do
|
85
|
+
puts(parser.help)
|
86
|
+
exit(true)
|
87
|
+
end
|
88
|
+
|
89
|
+
parser
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
@@ -0,0 +1,159 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "readline"
|
4
|
+
require "json"
|
5
|
+
require "open3"
|
6
|
+
require "grnline/options-parser"
|
7
|
+
|
8
|
+
module GrnLine
|
9
|
+
class Wrapper
|
10
|
+
attr_accessor :options
|
11
|
+
|
12
|
+
GROONGA_COMMANDS = [
|
13
|
+
"cache_limit", "check", "clearlock", "column_create", "column_list",
|
14
|
+
"column_remove", "column_rename", "define_selector", "defrag",
|
15
|
+
"delete", "dump", "load", "log_level", "log_put", "log_reopen",
|
16
|
+
"quit", "register", "select", "shutdown", "status", "table_create",
|
17
|
+
"table_list", "table_remove", "table_rename", "truncate"
|
18
|
+
]
|
19
|
+
GROONGA_SHUTDOWN_COMMANDS = ["quit", "shutdown"]
|
20
|
+
|
21
|
+
class << self
|
22
|
+
def run(argv)
|
23
|
+
new.run(argv)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def initialize
|
28
|
+
@options = nil
|
29
|
+
setup_input_completion
|
30
|
+
end
|
31
|
+
|
32
|
+
def run(argv)
|
33
|
+
@options = parse_commandline_options(argv)
|
34
|
+
groonga_commandline = generate_groonga_commandline
|
35
|
+
|
36
|
+
Open3.popen3(*groonga_commandline) do |input, output, error, _|
|
37
|
+
@input, @output, @error = input, output, error
|
38
|
+
|
39
|
+
return true unless ensure_groonga_running
|
40
|
+
return false unless ensure_groonga_ready
|
41
|
+
|
42
|
+
setup_interrupt_shutdown
|
43
|
+
|
44
|
+
while(command = Readline.readline("groonga> ", true)) do
|
45
|
+
process_command(command)
|
46
|
+
exit(true) if GROONGA_SHUTDOWN_COMMANDS.include?(command)
|
47
|
+
end
|
48
|
+
|
49
|
+
shutdown_groonga
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def parse_commandline_options(argv)
|
56
|
+
options_parser = GrnLine::OptionsParser.new
|
57
|
+
options_parser.parse(argv)
|
58
|
+
end
|
59
|
+
|
60
|
+
def generate_groonga_commandline
|
61
|
+
[@options.groonga, *@options.groonga_arguments]
|
62
|
+
end
|
63
|
+
|
64
|
+
def process_command(command)
|
65
|
+
raw_response = nil
|
66
|
+
begin
|
67
|
+
raw_response = read_groonga_response(command)
|
68
|
+
rescue => e
|
69
|
+
raise("Failed to access the groonga database: #{e.message}")
|
70
|
+
end
|
71
|
+
|
72
|
+
if raw_response and not raw_response.empty?
|
73
|
+
# TODO: support pretty print for formats except JSON
|
74
|
+
output_response(raw_response)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def read_groonga_response(command)
|
79
|
+
return nil if command.empty?
|
80
|
+
response = ""
|
81
|
+
|
82
|
+
@input.puts(command)
|
83
|
+
@input.flush
|
84
|
+
|
85
|
+
timeout = 1
|
86
|
+
while IO.select([@output], [], [], timeout)
|
87
|
+
break if @output.eof?
|
88
|
+
read_content = @output.readpartial(1024)
|
89
|
+
response << read_content
|
90
|
+
timeout = 0 if read_content.bytesize < 1024
|
91
|
+
end
|
92
|
+
|
93
|
+
response
|
94
|
+
end
|
95
|
+
|
96
|
+
def output_response(raw_response)
|
97
|
+
# TODO: support pretty print for formats except JSON
|
98
|
+
response = raw_response
|
99
|
+
if @options.pretty_print
|
100
|
+
begin
|
101
|
+
response = JSON.pretty_generate(JSON.parse(response))
|
102
|
+
rescue
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
if @options.output.instance_of?(String)
|
107
|
+
File.open(@options.output, "w") do |file|
|
108
|
+
file.puts(response)
|
109
|
+
end
|
110
|
+
else
|
111
|
+
@options.output.puts(response)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
def execute(command)
|
116
|
+
@input.puts(command)
|
117
|
+
@input.flush
|
118
|
+
@output.gets
|
119
|
+
end
|
120
|
+
|
121
|
+
def shutdown_groonga
|
122
|
+
execute("shutdown")
|
123
|
+
@input.close
|
124
|
+
end
|
125
|
+
|
126
|
+
def setup_interrupt_shutdown
|
127
|
+
trap("INT") do
|
128
|
+
shutdown_groonga
|
129
|
+
exit(true)
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
def setup_input_completion
|
134
|
+
Readline.completion_proc = lambda do |word|
|
135
|
+
GROONGA_COMMANDS.grep(/\A#{Regexp.escape(word)}/)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def ensure_groonga_running
|
140
|
+
if IO.select([@output], nil, nil, 1) and not @output.eof?
|
141
|
+
puts(@output.read)
|
142
|
+
return false
|
143
|
+
end
|
144
|
+
return true
|
145
|
+
end
|
146
|
+
|
147
|
+
def ensure_groonga_ready
|
148
|
+
begin
|
149
|
+
execute("status")
|
150
|
+
rescue
|
151
|
+
if IO.select([@error], [], [], 0)
|
152
|
+
$stderr.puts(@error.read)
|
153
|
+
return false
|
154
|
+
end
|
155
|
+
end
|
156
|
+
return true
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
data/lib/grnline.rb
ADDED
data/test/run-test.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# -*- coding: utf-8 -*-
|
3
|
+
|
4
|
+
$VERBOSE = true
|
5
|
+
|
6
|
+
base_dir = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
7
|
+
lib_dir = File.join(base_dir, "lib")
|
8
|
+
test_dir = File.join(base_dir, "test")
|
9
|
+
|
10
|
+
require "test-unit"
|
11
|
+
require "test/unit/notify"
|
12
|
+
|
13
|
+
$LOAD_PATH.unshift(lib_dir)
|
14
|
+
$LOAD_PATH.unshift(base_dir)
|
15
|
+
|
16
|
+
$LOAD_PATH.unshift(test_dir)
|
17
|
+
|
18
|
+
Dir.glob("#{base_dir}/test/**/test{_,-}*.rb") do |file|
|
19
|
+
require file.gsub(/\.rb$/, "")
|
20
|
+
end
|
21
|
+
|
22
|
+
ENV["TEST_UNIT_MAX_DIFF_TARGET_STRING_SIZE"] ||= "5000"
|
23
|
+
|
24
|
+
exit(Test::Unit::AutoRunner.run)
|
@@ -0,0 +1,59 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "grnline/options-parser"
|
4
|
+
|
5
|
+
class OptionsParserTest < Test::Unit::TestCase
|
6
|
+
def setup
|
7
|
+
@parser = GrnLine::OptionsParser.new
|
8
|
+
@separator = [GrnLine::OptionsParser::SEPARATOR]
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_pretty_print
|
12
|
+
argv = @separator + ["--no-pretty-print"]
|
13
|
+
options = @parser.parse(argv)
|
14
|
+
|
15
|
+
assert_options(options, :pretty_print => false)
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_separator_in_both_arguments
|
19
|
+
groonga_arguments = ["-n", "db/db"]
|
20
|
+
argv = groonga_arguments + @separator + ["--output", "output_path"]
|
21
|
+
options = @parser.parse(argv)
|
22
|
+
|
23
|
+
assert_options(options,
|
24
|
+
:output => "output_path",
|
25
|
+
:groonga_arguments => groonga_arguments)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_separator_with_grnline_arguments_only
|
29
|
+
argv = @separator + ["--output", "output_path"]
|
30
|
+
options = @parser.parse(argv)
|
31
|
+
|
32
|
+
assert_options(options, :output => "output_path")
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_separator_with_groonga_arguments_only
|
36
|
+
argv = ["-n", "db/db"]
|
37
|
+
options = @parser.parse(argv)
|
38
|
+
assert_options(options, :groonga_arguments => argv)
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_no_arguments
|
42
|
+
argv = []
|
43
|
+
options = @parser.parse(argv)
|
44
|
+
assert_options(options, {})
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def assert_options(options, expected_options)
|
50
|
+
output = expected_options[:output] || $stdout
|
51
|
+
groonga_arguments = expected_options[:groonga_arguments] || []
|
52
|
+
pretty_print = expected_options[:pretty_print]
|
53
|
+
pretty_print = true if pretty_print.nil?
|
54
|
+
|
55
|
+
assert_equal(output, options.output)
|
56
|
+
assert_equal(groonga_arguments, options.groonga_arguments)
|
57
|
+
assert_equal(pretty_print, options.pretty_print)
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "grnline/wrapper"
|
4
|
+
require "stringio"
|
5
|
+
require "ostruct"
|
6
|
+
|
7
|
+
class TestWrapper < Test::Unit::TestCase
|
8
|
+
def setup
|
9
|
+
@grnline = GrnLine::Wrapper.new
|
10
|
+
@grnline.options = OpenStruct.new
|
11
|
+
@output = StringIO.new
|
12
|
+
end
|
13
|
+
|
14
|
+
class OutputResponseTest < self
|
15
|
+
def test_prerry_print
|
16
|
+
@grnline.options.pretty_print = true
|
17
|
+
@grnline.options.output = @output
|
18
|
+
|
19
|
+
@grnline.send(:output_response, raw_response)
|
20
|
+
assert_equal(pretty_response, @output.string)
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_no_prerry_print
|
24
|
+
@grnline.options.pretty_print = false
|
25
|
+
@grnline.options.output = @output
|
26
|
+
|
27
|
+
@grnline.send(:output_response, raw_response)
|
28
|
+
assert_equal(raw_response, @output.string)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def raw_response
|
33
|
+
<<-RESPONSE
|
34
|
+
[[0,1369743525.62977,9.20295715332031e-05],{"alloc_count":129,"starttime":1369743522,"uptime":3,"version":"3.0.1","n_queries":0,"cache_hit_rate":0.0,"command_version":1,"default_command_version":1,"max_command_version":2}]
|
35
|
+
RESPONSE
|
36
|
+
end
|
37
|
+
|
38
|
+
def pretty_response
|
39
|
+
<<-RESPONSE
|
40
|
+
[
|
41
|
+
[
|
42
|
+
0,
|
43
|
+
1369743525.62977,
|
44
|
+
9.20295715332031e-05
|
45
|
+
],
|
46
|
+
{
|
47
|
+
"alloc_count": 129,
|
48
|
+
"starttime": 1369743522,
|
49
|
+
"uptime": 3,
|
50
|
+
"version": "3.0.1",
|
51
|
+
"n_queries": 0,
|
52
|
+
"cache_hit_rate": 0.0,
|
53
|
+
"command_version": 1,
|
54
|
+
"default_command_version": 1,
|
55
|
+
"max_command_version": 2
|
56
|
+
}
|
57
|
+
]
|
58
|
+
RESPONSE
|
59
|
+
end
|
60
|
+
end
|
metadata
ADDED
@@ -0,0 +1,190 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: grnline
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Haruka Yoshihara
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-05-31 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: json
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: packnga
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bundler
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rake
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
- !ruby/object:Gem::Dependency
|
79
|
+
name: test-unit
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
81
|
+
none: false
|
82
|
+
requirements:
|
83
|
+
- - ! '>='
|
84
|
+
- !ruby/object:Gem::Version
|
85
|
+
version: '0'
|
86
|
+
type: :development
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: test-unit-notify
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: '0'
|
102
|
+
type: :development
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: redcarpet
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
description: ! 'GrnLine is created by Ruby.
|
127
|
+
|
128
|
+
This uses [grnwrap](https://github.com/michisu/grnwrap) as a
|
129
|
+
|
130
|
+
reference. grnwrap is created by Python.
|
131
|
+
|
132
|
+
'
|
133
|
+
email:
|
134
|
+
- yshr04hrk@gmail.com
|
135
|
+
executables:
|
136
|
+
- grnline
|
137
|
+
extensions: []
|
138
|
+
extra_rdoc_files: []
|
139
|
+
files:
|
140
|
+
- README.md
|
141
|
+
- LICENSE.txt
|
142
|
+
- TODO
|
143
|
+
- Rakefile
|
144
|
+
- Gemfile
|
145
|
+
- grnline.gemspec
|
146
|
+
- lib/grnline/options-parser.rb
|
147
|
+
- lib/grnline/version.rb
|
148
|
+
- lib/grnline/wrapper.rb
|
149
|
+
- lib/grnline.rb
|
150
|
+
- doc/text/news.md
|
151
|
+
- test/run-test.rb
|
152
|
+
- test/test-options-parser.rb
|
153
|
+
- test/test-wrapper.rb
|
154
|
+
- bin/grnline
|
155
|
+
homepage:
|
156
|
+
licenses:
|
157
|
+
- MIT
|
158
|
+
post_install_message:
|
159
|
+
rdoc_options: []
|
160
|
+
require_paths:
|
161
|
+
- lib
|
162
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
163
|
+
none: false
|
164
|
+
requirements:
|
165
|
+
- - ! '>='
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
segments:
|
169
|
+
- 0
|
170
|
+
hash: 1192488674147790038
|
171
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
|
+
none: false
|
173
|
+
requirements:
|
174
|
+
- - ! '>='
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
segments:
|
178
|
+
- 0
|
179
|
+
hash: 1192488674147790038
|
180
|
+
requirements: []
|
181
|
+
rubyforge_project:
|
182
|
+
rubygems_version: 1.8.23
|
183
|
+
signing_key:
|
184
|
+
specification_version: 3
|
185
|
+
summary: GrnLine is the wrapper for the interactive mode of [groonga](http://groonga.org/).
|
186
|
+
test_files:
|
187
|
+
- test/run-test.rb
|
188
|
+
- test/test-options-parser.rb
|
189
|
+
- test/test-wrapper.rb
|
190
|
+
has_rdoc:
|