kor 0.0.4 → 0.0.5
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 +4 -4
- data/README.md +2 -2
- data/lib/kor.rb +7 -2
- data/lib/kor/cli.rb +49 -29
- data/lib/kor/input/markdown.rb +23 -3
- data/lib/kor/input/markdown_test.rb +39 -1
- data/lib/kor/output/markdown.rb +17 -2
- data/lib/kor/output/markdown_test.rb +52 -4
- data/lib/kor/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f945e02d461ae630c93756a59d37a1adbc2c3783
|
4
|
+
data.tar.gz: 6eb078d973ea6ea8e185461501518639951949f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bccf7c8361ee7937e60d8740b98b906e2ae10444298fb386a231f12a3280614ba99b166923ce92c21bdcfc5bc6d1c9d81420a1c75cd2fc30048a3f152fa7cd1c
|
7
|
+
data.tar.gz: fffda929139840318ea989547d663675124bd5022c42cb14cea70be5a8f42f5c76a599702167f1b2e7c51b717b28f8faccc978213c05e98bbebb5f915d66c425
|
data/README.md
CHANGED
@@ -42,9 +42,9 @@ Input from stdin and output to stdout.
|
|
42
42
|
|
43
43
|
```
|
44
44
|
$ kor
|
45
|
-
kor [input-plugin] [input-option] [output-plugin] [output-option]
|
45
|
+
kor [option] [input-plugin] [input-option] [output-plugin] [output-option]
|
46
46
|
example:
|
47
|
-
$ kor csv markdown
|
47
|
+
$ kor --sync csv markdown --strip
|
48
48
|
```
|
49
49
|
|
50
50
|
### input-plugin
|
data/lib/kor.rb
CHANGED
data/lib/kor/cli.rb
CHANGED
@@ -1,52 +1,55 @@
|
|
1
1
|
require 'optparse'
|
2
|
-
require 'thread'
|
3
2
|
require "kor/input/base"
|
4
3
|
require "kor/output/base"
|
5
4
|
|
6
5
|
module Kor
|
7
6
|
class Cli
|
7
|
+
USAGE = <<-USAGE
|
8
|
+
kor [option] [input-plugin] [input-option] [output-plugin] [output-option]
|
9
|
+
example:
|
10
|
+
$ kor --sync csv markdown --strip
|
11
|
+
USAGE
|
12
|
+
|
8
13
|
def initialize(argv = ARGV, input_io = $stdin, output_io = $stdout)
|
9
14
|
@argv = argv
|
10
15
|
@input_io = input_io
|
11
16
|
@output_io = output_io
|
17
|
+
end
|
12
18
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
19
|
+
def run
|
20
|
+
cli_args = shift
|
21
|
+
cli_opt = OptionParser.new
|
22
|
+
cli_opt.on("--sync", "I/O sync mode") do |arg|
|
23
|
+
@input_io.sync = true
|
24
|
+
@output_io.sync = true
|
17
25
|
end
|
26
|
+
cli_opt.parse(cli_args)
|
18
27
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
@
|
28
|
+
input_plugin = @argv.shift
|
29
|
+
input_args = shift
|
30
|
+
unless input_plugin
|
31
|
+
@output_io.puts Cli::USAGE
|
32
|
+
exit 0
|
23
33
|
end
|
24
|
-
|
34
|
+
require_plugin "kor/input/#{input_plugin}"
|
35
|
+
in_class = Kor::Input.const_get(input_plugin.capitalize)
|
36
|
+
in_obj = in_class.new(@input_io)
|
37
|
+
in_opt = OptionParser.new
|
38
|
+
in_obj.parse(in_opt)
|
39
|
+
in_opt.parse(input_args)
|
25
40
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
example:
|
31
|
-
$ kor csv markdown
|
32
|
-
USAGE
|
41
|
+
output_plugin = @argv.shift
|
42
|
+
output_args = shift
|
43
|
+
unless output_plugin
|
44
|
+
@output_io.puts Cli::USAGE
|
33
45
|
exit 0
|
34
46
|
end
|
35
|
-
|
36
|
-
|
37
|
-
require "kor/output/#{@output_plugin}"
|
38
|
-
|
39
|
-
in_class = Kor::Input.const_get(@input_plugin.capitalize)
|
40
|
-
out_class = Kor::Output.const_get(@output_plugin.capitalize)
|
41
|
-
in_obj = in_class.new(@input_io)
|
47
|
+
require_plugin "kor/output/#{output_plugin}"
|
48
|
+
out_class = Kor::Output.const_get(output_plugin.capitalize)
|
42
49
|
out_obj = out_class.new(@output_io)
|
43
|
-
|
44
|
-
in_opt = OptionParser.new
|
45
50
|
out_opt = OptionParser.new
|
46
|
-
in_obj.parse(in_opt)
|
47
51
|
out_obj.parse(out_opt)
|
48
|
-
|
49
|
-
out_opt.parse(@output_args)
|
52
|
+
out_opt.parse(output_args)
|
50
53
|
|
51
54
|
out_obj.head(in_obj.head)
|
52
55
|
while body = in_obj.gets
|
@@ -54,5 +57,22 @@ USAGE
|
|
54
57
|
end
|
55
58
|
out_obj.finish
|
56
59
|
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def shift
|
64
|
+
args = []
|
65
|
+
while @argv.first && @argv.first[0] == "-"
|
66
|
+
args << @argv.shift
|
67
|
+
end
|
68
|
+
args
|
69
|
+
end
|
70
|
+
|
71
|
+
def require_plugin(name)
|
72
|
+
require name
|
73
|
+
rescue LoadError
|
74
|
+
warn "LoadError: `#{name}' plugin not found"
|
75
|
+
exit 1
|
76
|
+
end
|
57
77
|
end
|
58
78
|
end
|
data/lib/kor/input/markdown.rb
CHANGED
@@ -1,19 +1,39 @@
|
|
1
1
|
module Kor
|
2
2
|
module Input
|
3
3
|
class Markdown < Base
|
4
|
+
def parse(opt)
|
5
|
+
opt.on("--key=KEY", "filter key set (e.g. foo,bar,baz)") do |arg|
|
6
|
+
@filter_key = arg
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
4
10
|
def head
|
5
11
|
line = io.gets.strip
|
6
12
|
first_index = line[0] == '|' ? 1 : 0
|
7
|
-
|
13
|
+
keys = line.split('|')[first_index..-1].map(&:strip)
|
8
14
|
# skip separate line
|
9
15
|
io.gets
|
10
|
-
|
16
|
+
if @filter_key
|
17
|
+
@filter_key = @filter_key.split(",").map do |key|
|
18
|
+
if index = keys.index(key)
|
19
|
+
index
|
20
|
+
else
|
21
|
+
raise NotKeyError, "`#{key}' is a not key of this table"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
keys = @filter_key.map{ |index| keys[index] }
|
25
|
+
end
|
26
|
+
keys
|
11
27
|
end
|
12
28
|
|
13
29
|
def gets
|
14
30
|
if line = io.gets
|
15
31
|
first_index = line[0] == '|' ? 1 : 0
|
16
|
-
line.strip.split('|')[first_index..-1].map(&:strip)
|
32
|
+
body = line.strip.split('|')[first_index..-1].map(&:strip)
|
33
|
+
if @filter_key
|
34
|
+
return @filter_key.map{ |index| body[index] }
|
35
|
+
end
|
36
|
+
body
|
17
37
|
else
|
18
38
|
nil
|
19
39
|
end
|
@@ -13,7 +13,7 @@ MARKDOWN
|
|
13
13
|
foo | bar | baz |
|
14
14
|
--- | --- | ---
|
15
15
|
| 1 | 2 | 3
|
16
|
-
a | b | c |
|
16
|
+
a | b | c |
|
17
17
|
MARKDOWN
|
18
18
|
exit m.run
|
19
19
|
end
|
@@ -34,6 +34,38 @@ MARKDOWN
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
def test_with_key(t)
|
38
|
+
@io.rewind
|
39
|
+
md = Kor::Input::Markdown.new(@io)
|
40
|
+
opt = OptionParser.new
|
41
|
+
md.parse(opt)
|
42
|
+
|
43
|
+
opt.parse ["--key=bar,nothing"]
|
44
|
+
_, err = go { md.head }
|
45
|
+
unless Kor::NotKeyError === err
|
46
|
+
t.error("expect raise an error Kor::NotKeyError got #{err.class}:#{err}")
|
47
|
+
end
|
48
|
+
|
49
|
+
@io.rewind
|
50
|
+
opt.parse ["--key=bar,foo"]
|
51
|
+
actual = md.head
|
52
|
+
expect = %w(bar foo)
|
53
|
+
if actual != expect
|
54
|
+
t.error("expect #{expect} got #{actual}")
|
55
|
+
end
|
56
|
+
|
57
|
+
expects = [
|
58
|
+
%w(2 1),
|
59
|
+
%w(b a),
|
60
|
+
nil, nil, nil, nil, nil
|
61
|
+
].each do |expect|
|
62
|
+
actual = md.gets
|
63
|
+
if actual != expect
|
64
|
+
t.error("expect #{expect} got #{actual}")
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
37
69
|
def test_gets(t)
|
38
70
|
@io.rewind
|
39
71
|
md = Kor::Input::Markdown.new(@io)
|
@@ -73,4 +105,10 @@ MARKDOWN
|
|
73
105
|
end
|
74
106
|
end
|
75
107
|
end
|
108
|
+
|
109
|
+
def go
|
110
|
+
[yield, nil]
|
111
|
+
rescue Exception => err
|
112
|
+
[nil, err]
|
113
|
+
end
|
76
114
|
end
|
data/lib/kor/output/markdown.rb
CHANGED
@@ -6,17 +6,32 @@ module Kor
|
|
6
6
|
opt.on("--strip", "strip space") do |arg|
|
7
7
|
@space = ""
|
8
8
|
end
|
9
|
+
opt.on("--key=KEY", "select output keys (like foo,bar,baz)") do |arg|
|
10
|
+
@select_key = arg
|
11
|
+
end
|
9
12
|
end
|
10
13
|
|
11
14
|
def head(keys)
|
15
|
+
if @select_key
|
16
|
+
select_keys = @select_key.split(",")
|
17
|
+
@select_key = select_keys.map do |key|
|
18
|
+
keys.index(key) or raise NotKeyError, "`#{key}' is not a key of this table"
|
19
|
+
end
|
20
|
+
keys = select_keys
|
21
|
+
end
|
12
22
|
s = @space || " "
|
13
23
|
io.puts "|#{s}#{keys.join("#{s}|#{s}")}#{s}|"
|
14
24
|
io.puts "|#{s}#{(["---"] * keys.length).join("#{s}|#{s}")}#{s}|"
|
15
25
|
end
|
16
26
|
|
17
27
|
def puts(values)
|
18
|
-
|
19
|
-
|
28
|
+
if @select_key
|
29
|
+
s = @space || " "
|
30
|
+
io.puts "|#{s}#{@select_key.map{ |index| values[index] }.join("#{s}|#{s}")}#{s}|"
|
31
|
+
else
|
32
|
+
s = @space || " "
|
33
|
+
io.puts "|#{s}#{values.join("#{s}|#{s}")}#{s}|"
|
34
|
+
end
|
20
35
|
end
|
21
36
|
end
|
22
37
|
end
|
@@ -4,19 +4,67 @@ require 'kor/output/markdown'
|
|
4
4
|
module KorOutputMarkdownTest
|
5
5
|
def test_head(t)
|
6
6
|
io = StringIO.new
|
7
|
-
|
8
|
-
|
7
|
+
md = Kor::Output::Markdown.new(io)
|
8
|
+
md.head(%w(foo bar baz))
|
9
9
|
if io.string != "| foo | bar | baz |\n| --- | --- | --- |\n"
|
10
10
|
t.error("expect output '| foo | bar | baz |\\n| --- | --- | --- |\\n' got #{io.string.inspect}")
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
+
def test_head_with_key(t)
|
15
|
+
io = StringIO.new
|
16
|
+
md = Kor::Output::Markdown.new(io)
|
17
|
+
opt = OptionParser.new
|
18
|
+
md.parse(opt)
|
19
|
+
opt.parse ["--key=foo,nothing"]
|
20
|
+
_, err = go { md.head(["foo", "bar", "baz"]) }
|
21
|
+
unless Kor::NotKeyError === err
|
22
|
+
t.error("expect raise Kor::Output::Markdown::NotKeyError got #{err.class}:#{err}")
|
23
|
+
end
|
24
|
+
|
25
|
+
opt.parse ["--key=bar,foo"]
|
26
|
+
_, err = go { md.head(["foo", "bar", "baz"]) }
|
27
|
+
t.error("expect not raise got #{err.class}:#{err}") if err
|
28
|
+
if io.string != "| bar | foo |\n| --- | --- |\n"
|
29
|
+
t.error("expect bar,foo header got #{head}")
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
14
33
|
def test_puts(t)
|
15
34
|
io = StringIO.new
|
16
|
-
|
17
|
-
|
35
|
+
md = Kor::Output::Markdown.new(io)
|
36
|
+
md.puts(%w(aaa bbb ccc))
|
18
37
|
if io.string != "| aaa | bbb | ccc |\n"
|
19
38
|
t.error("expect output '| aaa | bbb | ccc |\\n' got #{io.string.inspect}")
|
20
39
|
end
|
21
40
|
end
|
41
|
+
|
42
|
+
def test_puts_with_key(t)
|
43
|
+
io = StringIO.new
|
44
|
+
md = Kor::Output::Markdown.new(io)
|
45
|
+
opt = OptionParser.new
|
46
|
+
md.parse(opt)
|
47
|
+
opt.parse ["--key=bar,foo"]
|
48
|
+
md.head %w(foo bar baz)
|
49
|
+
md.puts %w(aaa bbb ccc)
|
50
|
+
md.puts %w(100 200 300)
|
51
|
+
io.rewind
|
52
|
+
io.gets
|
53
|
+
io.gets
|
54
|
+
actual = io.gets
|
55
|
+
if actual != "| bbb | aaa |\n"
|
56
|
+
t.error("expect output '| bbb | aaa |\\n' got #{actual}")
|
57
|
+
end
|
58
|
+
|
59
|
+
actual = io.gets
|
60
|
+
if actual != "| 200 | 100 |\n"
|
61
|
+
t.error("expect output '| 200 | 100 |\\n' got #{actual}")
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def go
|
66
|
+
[yield, nil]
|
67
|
+
rescue Exception => err
|
68
|
+
[nil, err]
|
69
|
+
end
|
22
70
|
end
|
data/lib/kor/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ksss
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-10-
|
11
|
+
date: 2015-10-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|