kor-input-ltsv 0.0.2 → 0.1.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: c5ee7e82e979bfad7c0d4ea68bd375295cd8b2d9
4
- data.tar.gz: 6233224fe379142344d51e6a3535f2bae1c1029a
3
+ metadata.gz: b6212739aa66563f7e318f2cef919c8f83ac58a2
4
+ data.tar.gz: 45c50fc227d75b80483978e13d624d2feab185ce
5
5
  SHA512:
6
- metadata.gz: cc805dc7e20c889a11bffbf063dbf9816b8d88e128357e6641514d1456a1a30561ada18313bfd5ff3f4687ba8cbc90b83f2dd6148d02ac0c5bf66ba80755a121
7
- data.tar.gz: d4f56feab73a50527113854c595378b5fa8c75fc2215dbd3c004aa6b7681b3f547ac9e4d47421a881f0fbab80c76e8ac8f329cbc94f097beb49beeec80b656c4
6
+ metadata.gz: f9faba9eb923cbd5ab08252457aa36e0464ed31be67a9a362481279453caa6f05dd15e6c9695ea145aae115bd03f10c4bc4e0b9bc409962edef21c8581399e1c
7
+ data.tar.gz: 36ea2d4db59ee0339616c03cb796523727a6f41af7c62005ae539ca611f6bbb2f11569f3bb9b7173967cd04548b872519bbcafb4b44160bffe5ee3a7b0b2afad
@@ -18,6 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_runtime_dependency "kor"
21
+ spec.add_runtime_dependency "ltsv"
21
22
  spec.add_development_dependency "bundler", "~> 1.10"
22
23
  spec.add_development_dependency "rake", "~> 10.0"
23
24
  spec.add_development_dependency "rgot"
@@ -1,22 +1,19 @@
1
1
  require 'kor'
2
+ require 'ltsv'
2
3
 
3
4
  module Kor
4
5
  module Input
5
6
  class Ltsv
6
- class LTSV < Hash
7
- DELIM = "\t".freeze
8
- SPLIT = ":".freeze
9
-
10
- def self.parse(line)
11
- LTSV[line.split(DELIM).map{ |i| i.split(SPLIT, 2) }]
12
- end
13
- end
7
+ DEFAULT_GUESS_TIME = 5
14
8
 
15
9
  def initialize(io)
16
10
  @io = io
17
11
  @keys = []
18
12
  @prekeys = nil
19
13
  @ltsvs = []
14
+ @guess = true
15
+ @guess_time = DEFAULT_GUESS_TIME
16
+ @count = 0
20
17
  @fiber = Fiber.new do
21
18
  @ltsvs.each do |ltsv|
22
19
  Fiber.yield @keys.map{ |k| ltsv[k] }
@@ -30,6 +27,9 @@ module Kor
30
27
  opt.on("--key=KEY", "define keys preset (e.g. foo,bar,baz) (default auto)") do |arg|
31
28
  @prekeys = arg
32
29
  end
30
+ opt.on("--guess-time=NUM", "load lines this time for guess. no guess if under 0 (default #{DEFAULT_GUESS_TIME})") do |arg|
31
+ @guess_time = arg.to_i
32
+ end
33
33
  end
34
34
 
35
35
  def head
@@ -38,7 +38,10 @@ module Kor
38
38
  else
39
39
  while line = @io.gets
40
40
  line.strip!
41
- @ltsvs << LTSV.parse(line)
41
+ @ltsvs << parse_line(line)
42
+ if 0 < @guess_time && @guess_time <= @ltsvs.length
43
+ break
44
+ end
42
45
  end
43
46
  @keys = @ltsvs.map { |ltsv| ltsv.keys }
44
47
  @keys.flatten!.uniq!
@@ -50,19 +53,35 @@ module Kor
50
53
  if @prekeys
51
54
  if line = @io.gets
52
55
  line.strip!
53
- ltsv = LTSV.parse(line)
56
+ ltsv = parse_line(line)
54
57
  @keys.map { |k| ltsv[k] }
55
58
  else
56
59
  nil
57
60
  end
58
- else
59
- begin
60
- @fiber.resume
61
- rescue FiberError
62
- nil
61
+ elsif 0 < @guess_time
62
+ if @count < @guess_time
63
+ @count += 1
64
+ return resume
63
65
  end
66
+ if line = @io.gets
67
+ line.strip!
68
+ ltsv = parse_line(line)
69
+ @keys.map { |k| ltsv[k] }
70
+ end
71
+ else
72
+ resume
64
73
  end
65
74
  end
75
+
76
+ def parse_line(line)
77
+ LTSV.parse(line, symbolize_keys: false).first
78
+ end
79
+
80
+ def resume
81
+ @fiber.resume
82
+ rescue FiberError
83
+ nil
84
+ end
66
85
  end
67
86
 
68
87
  require "kor/input/ltsv/version"
@@ -1,7 +1,7 @@
1
1
  module Kor
2
2
  module Input
3
3
  class Ltsv
4
- VERSION = "0.0.2"
4
+ VERSION = "0.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -5,6 +5,10 @@ module KorInputLtsvTest
5
5
  ltsv = <<-LTSV
6
6
  foo:100\tbar:200\tbaz:qux:300
7
7
  \tbar:500\tfoo:600
8
+ foo:110\tbar:120\tbaz:130
9
+ foo:140\tbar:150\tbaz:160
10
+ foo:170\tbar:180\tbaz:190
11
+ foo:200\tbar:210\tbaz:220
8
12
  LTSV
9
13
 
10
14
  actual = `echo '#{ltsv.chomp}' | kor ltsv csv`
@@ -12,16 +16,34 @@ LTSV
12
16
  foo,bar,baz
13
17
  100,200,qux:300
14
18
  600,500,
19
+ 110,120,130
20
+ 140,150,160
21
+ 170,180,190
22
+ 200,210,220
15
23
  CSV
16
24
  if actual != expect
17
25
  t.error("expect #{expect} got #{actual}")
18
26
  end
19
27
 
20
- actual = `echo '#{ltsv.chomp}' | kor ltsv --key=bar,foo csv`
28
+ actual = `echo '#{ltsv.chomp}' | kor ltsv --guess-time=100 csv`
29
+ if actual != expect
30
+ t.error("expect #{expect} got #{actual}")
31
+ end
32
+
33
+ actual = `echo '#{ltsv.chomp}' | kor ltsv --guess-time=0 csv`
34
+ if actual != expect
35
+ t.error("expect #{expect} got #{actual}")
36
+ end
37
+
38
+ actual = `echo '#{ltsv.chomp}' | kor ltsv --key=bar,foo,non csv`
21
39
  expect = <<-CSV
22
- bar,foo
23
- 200,100
24
- 500,600
40
+ bar,foo,non
41
+ 200,100,
42
+ 500,600,
43
+ 120,110,
44
+ 150,140,
45
+ 180,170,
46
+ 210,200,
25
47
  CSV
26
48
  if actual != expect
27
49
  t.error("expect #{expect} got #{actual}")
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kor-input-ltsv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
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-09 00:00:00.000000000 Z
11
+ date: 2015-10-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: kor
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: ltsv
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement