tb 0.1 → 0.2

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 (81) hide show
  1. data/README +156 -5
  2. data/bin/tb +2 -1110
  3. data/lib/tb.rb +4 -2
  4. data/lib/tb/catreader.rb +131 -0
  5. data/lib/tb/cmd_cat.rb +65 -0
  6. data/lib/tb/cmd_consecutive.rb +79 -0
  7. data/lib/tb/cmd_crop.rb +105 -0
  8. data/lib/tb/cmd_cross.rb +119 -0
  9. data/lib/tb/cmd_csv.rb +42 -0
  10. data/lib/tb/cmd_cut.rb +77 -0
  11. data/lib/tb/cmd_grep.rb +76 -0
  12. data/lib/tb/cmd_group.rb +82 -0
  13. data/lib/tb/cmd_gsub.rb +77 -0
  14. data/lib/tb/cmd_help.rb +98 -0
  15. data/lib/tb/cmd_join.rb +81 -0
  16. data/lib/tb/cmd_json.rb +60 -0
  17. data/lib/tb/cmd_ls.rb +273 -0
  18. data/lib/tb/cmd_mheader.rb +77 -0
  19. data/lib/tb/cmd_newfield.rb +59 -0
  20. data/lib/tb/cmd_pnm.rb +43 -0
  21. data/lib/tb/cmd_pp.rb +70 -0
  22. data/lib/tb/cmd_rename.rb +58 -0
  23. data/lib/tb/cmd_shape.rb +67 -0
  24. data/lib/tb/cmd_sort.rb +58 -0
  25. data/lib/tb/cmd_svn_log.rb +158 -0
  26. data/lib/tb/cmd_tsv.rb +43 -0
  27. data/lib/tb/cmd_yaml.rb +47 -0
  28. data/lib/tb/cmdmain.rb +45 -0
  29. data/lib/tb/cmdtop.rb +58 -0
  30. data/lib/tb/cmdutil.rb +327 -0
  31. data/lib/tb/csv.rb +30 -6
  32. data/lib/tb/fieldset.rb +39 -41
  33. data/lib/tb/pager.rb +132 -0
  34. data/lib/tb/pnm.rb +357 -0
  35. data/lib/tb/reader.rb +18 -128
  36. data/lib/tb/record.rb +3 -3
  37. data/lib/tb/ropen.rb +70 -0
  38. data/lib/tb/{pathfinder.rb → search.rb} +69 -34
  39. data/lib/tb/tsv.rb +29 -1
  40. data/sample/colors.ppm +0 -0
  41. data/sample/gradation.pgm +0 -0
  42. data/sample/langs.csv +46 -0
  43. data/sample/tbplot +293 -0
  44. data/test-all-cov.rb +65 -0
  45. data/test-all.rb +5 -0
  46. data/test/test_basic.rb +99 -2
  47. data/test/test_catreader.rb +27 -0
  48. data/test/test_cmd_cat.rb +118 -0
  49. data/test/test_cmd_consecutive.rb +90 -0
  50. data/test/test_cmd_crop.rb +101 -0
  51. data/test/test_cmd_cross.rb +113 -0
  52. data/test/test_cmd_csv.rb +129 -0
  53. data/test/test_cmd_cut.rb +100 -0
  54. data/test/test_cmd_grep.rb +89 -0
  55. data/test/test_cmd_group.rb +181 -0
  56. data/test/test_cmd_gsub.rb +103 -0
  57. data/test/test_cmd_help.rb +190 -0
  58. data/test/test_cmd_join.rb +197 -0
  59. data/test/test_cmd_json.rb +75 -0
  60. data/test/test_cmd_ls.rb +203 -0
  61. data/test/test_cmd_mheader.rb +86 -0
  62. data/test/test_cmd_newfield.rb +63 -0
  63. data/test/test_cmd_pnm.rb +35 -0
  64. data/test/test_cmd_pp.rb +62 -0
  65. data/test/test_cmd_rename.rb +91 -0
  66. data/test/test_cmd_shape.rb +50 -0
  67. data/test/test_cmd_sort.rb +105 -0
  68. data/test/test_cmd_tsv.rb +67 -0
  69. data/test/test_cmd_yaml.rb +55 -0
  70. data/test/test_cmdtty.rb +154 -0
  71. data/test/test_cmdutil.rb +43 -0
  72. data/test/test_csv.rb +10 -0
  73. data/test/test_fieldset.rb +42 -0
  74. data/test/test_pager.rb +142 -0
  75. data/test/test_pnm.rb +374 -0
  76. data/test/test_reader.rb +147 -0
  77. data/test/test_record.rb +49 -0
  78. data/test/test_search.rb +575 -0
  79. data/test/test_tsv.rb +7 -0
  80. metadata +108 -5
  81. data/lib/tb/qtsv.rb +0 -93
@@ -38,4 +38,11 @@ class TestTbTSV < Test::Unit::TestCase
38
38
  tbl.generate_tsv(out="")
39
39
  assert_equal("a\tb\nfoo\tbar\n", out)
40
40
  end
41
+
42
+ def test_generate_tsv_with_block
43
+ tbl = Tb.new %w[a b], %w[foo bar], %w[q w]
44
+ tbl.generate_tsv(out="") {|recids| recids.reverse }
45
+ assert_equal("a\tb\nq\tw\nfoo\tbar\n", out)
46
+ end
47
+
41
48
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tb
3
3
  version: !ruby/object:Gem::Version
4
- version: '0.1'
4
+ version: '0.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,9 +9,18 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-12-01 00:00:00.000000000 Z
12
+ date: 2011-12-29 00:00:00.000000000 Z
13
13
  dependencies: []
14
- description: ! 'manipulation tool for table: CSV, TSV, etc.
14
+ description: ! 'tb is a manipulation tool for table: CSV, TSV, etc.
15
+
16
+
17
+ tb provides a command and a library for manipulating tables:
18
+
19
+ Unix filter like operations (grep, sort, cat, cut, ls, etc.),
20
+
21
+ SQL like operations (join, group, etc.),
22
+
23
+ and more.
15
24
 
16
25
  '
17
26
  email: akr@fsij.org
@@ -24,22 +33,86 @@ files:
24
33
  - bin/tb
25
34
  - lib/tb.rb
26
35
  - lib/tb/basic.rb
36
+ - lib/tb/catreader.rb
37
+ - lib/tb/cmd_cat.rb
38
+ - lib/tb/cmd_consecutive.rb
39
+ - lib/tb/cmd_crop.rb
40
+ - lib/tb/cmd_cross.rb
41
+ - lib/tb/cmd_csv.rb
42
+ - lib/tb/cmd_cut.rb
43
+ - lib/tb/cmd_grep.rb
44
+ - lib/tb/cmd_group.rb
45
+ - lib/tb/cmd_gsub.rb
46
+ - lib/tb/cmd_help.rb
47
+ - lib/tb/cmd_join.rb
48
+ - lib/tb/cmd_json.rb
49
+ - lib/tb/cmd_ls.rb
50
+ - lib/tb/cmd_mheader.rb
51
+ - lib/tb/cmd_newfield.rb
52
+ - lib/tb/cmd_pnm.rb
53
+ - lib/tb/cmd_pp.rb
54
+ - lib/tb/cmd_rename.rb
55
+ - lib/tb/cmd_shape.rb
56
+ - lib/tb/cmd_sort.rb
57
+ - lib/tb/cmd_svn_log.rb
58
+ - lib/tb/cmd_tsv.rb
59
+ - lib/tb/cmd_yaml.rb
60
+ - lib/tb/cmdmain.rb
61
+ - lib/tb/cmdtop.rb
62
+ - lib/tb/cmdutil.rb
27
63
  - lib/tb/csv.rb
28
64
  - lib/tb/enumerable.rb
29
65
  - lib/tb/fieldset.rb
30
- - lib/tb/pathfinder.rb
31
- - lib/tb/qtsv.rb
66
+ - lib/tb/pager.rb
67
+ - lib/tb/pnm.rb
32
68
  - lib/tb/reader.rb
33
69
  - lib/tb/record.rb
70
+ - lib/tb/ropen.rb
71
+ - lib/tb/search.rb
34
72
  - lib/tb/tsv.rb
73
+ - sample/colors.ppm
35
74
  - sample/excel2csv
75
+ - sample/gradation.pgm
76
+ - sample/langs.csv
36
77
  - sample/poi-xls2csv.rb
37
78
  - sample/poi-xls2csv.sh
79
+ - sample/tbplot
80
+ - test-all-cov.rb
38
81
  - test-all.rb
39
82
  - test/test_basic.rb
83
+ - test/test_catreader.rb
84
+ - test/test_cmd_cat.rb
85
+ - test/test_cmd_consecutive.rb
86
+ - test/test_cmd_crop.rb
87
+ - test/test_cmd_cross.rb
88
+ - test/test_cmd_csv.rb
89
+ - test/test_cmd_cut.rb
90
+ - test/test_cmd_grep.rb
91
+ - test/test_cmd_group.rb
92
+ - test/test_cmd_gsub.rb
93
+ - test/test_cmd_help.rb
94
+ - test/test_cmd_join.rb
95
+ - test/test_cmd_json.rb
96
+ - test/test_cmd_ls.rb
97
+ - test/test_cmd_mheader.rb
98
+ - test/test_cmd_newfield.rb
99
+ - test/test_cmd_pnm.rb
100
+ - test/test_cmd_pp.rb
101
+ - test/test_cmd_rename.rb
102
+ - test/test_cmd_shape.rb
103
+ - test/test_cmd_sort.rb
104
+ - test/test_cmd_tsv.rb
105
+ - test/test_cmd_yaml.rb
106
+ - test/test_cmdtty.rb
107
+ - test/test_cmdutil.rb
40
108
  - test/test_csv.rb
41
109
  - test/test_enumerable.rb
110
+ - test/test_fieldset.rb
111
+ - test/test_pager.rb
112
+ - test/test_pnm.rb
113
+ - test/test_reader.rb
42
114
  - test/test_record.rb
115
+ - test/test_search.rb
43
116
  - test/test_tsv.rb
44
117
  homepage: https://github.com/akr/tb
45
118
  licenses: []
@@ -67,7 +140,37 @@ specification_version: 3
67
140
  summary: ! 'manipulation tool for table: CSV, TSV, etc.'
68
141
  test_files:
69
142
  - test/test_basic.rb
143
+ - test/test_catreader.rb
144
+ - test/test_cmd_cat.rb
145
+ - test/test_cmd_consecutive.rb
146
+ - test/test_cmd_crop.rb
147
+ - test/test_cmd_cross.rb
148
+ - test/test_cmd_csv.rb
149
+ - test/test_cmd_cut.rb
150
+ - test/test_cmd_grep.rb
151
+ - test/test_cmd_group.rb
152
+ - test/test_cmd_gsub.rb
153
+ - test/test_cmd_help.rb
154
+ - test/test_cmd_join.rb
155
+ - test/test_cmd_json.rb
156
+ - test/test_cmd_ls.rb
157
+ - test/test_cmd_mheader.rb
158
+ - test/test_cmd_newfield.rb
159
+ - test/test_cmd_pnm.rb
160
+ - test/test_cmd_pp.rb
161
+ - test/test_cmd_rename.rb
162
+ - test/test_cmd_shape.rb
163
+ - test/test_cmd_sort.rb
164
+ - test/test_cmd_tsv.rb
165
+ - test/test_cmd_yaml.rb
166
+ - test/test_cmdtty.rb
167
+ - test/test_cmdutil.rb
70
168
  - test/test_csv.rb
71
169
  - test/test_enumerable.rb
170
+ - test/test_fieldset.rb
171
+ - test/test_pager.rb
172
+ - test/test_pnm.rb
173
+ - test/test_reader.rb
72
174
  - test/test_record.rb
175
+ - test/test_search.rb
73
176
  - test/test_tsv.rb
@@ -1,93 +0,0 @@
1
- # lib/tb/qtsv.rb - quoted TSV related fetures for table library
2
- #
3
- # Copyright (C) 2010 Tanaka Akira <akr@fsij.org>
4
- #
5
- # Redistribution and use in source and binary forms, with or without
6
- # modification, are permitted provided that the following conditions are met:
7
- #
8
- # 1. Redistributions of source code must retain the above copyright notice, this
9
- # list of conditions and the following disclaimer.
10
- # 2. Redistributions in binary form must reproduce the above copyright notice,
11
- # this list of conditions and the following disclaimer in the documentation
12
- # and/or other materials provided with the distribution.
13
- # 3. The name of the author may not be used to endorse or promote products
14
- # derived from this software without specific prior written permission.
15
- #
16
- # THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
17
- # WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
18
- # MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
19
- # EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20
- # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
21
- # OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22
- # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23
- # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
24
- # IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
25
- # OF SUCH DAMAGE.
26
-
27
- class Tb
28
-
29
- # quoted TSV is a variant of TSV (tab separated value)
30
- #
31
- # All non-empty values are quoted by double-quotes.
32
-
33
- def Tb.load_qtsv(filename, *header_fields, &block)
34
- Tb.parse_qtsv(File.read(filename), *header_fields, &block)
35
- end
36
-
37
- def Tb.qtsv_stream_input(qtsv)
38
- qtsv = qtsv.read unless String === qtsv
39
- qtsv = qtsv.dup
40
- cells = []
41
- verify = ''
42
- qtsv.scan(/\G("(.*?)"|)(\t|\n|\r\n|\z)/m) {
43
- verify << $&
44
- cell = $2
45
- sep = $3
46
- break if cell.nil? && sep.empty?
47
- cells << cell
48
- if sep != "\t"
49
- yield cells
50
- cells = []
51
- end
52
- }
53
- if verify != qtsv
54
- if qtsv.start_with?(verify)
55
- raise "unexpected scan ('verify' is a prefix of 'qtsv')"
56
- end
57
- if verify.length != qtsv.length
58
- raise "unexpected scan (length differ: orig:#{qtsv.length} verify:#{verify.length})"
59
- end
60
- raise "unexpected scan"
61
- end
62
- nil
63
- end
64
-
65
- def Tb.parse_qtsv(qtsv, *header_fields)
66
- aa = []
67
- qtsv_stream_input(qtsv) {|ary|
68
- aa << ary
69
- }
70
- aa = yield aa if block_given?
71
- if header_fields.empty?
72
- aa.shift while aa.first.all? {|elt| elt.nil? || elt == '' }
73
- header_fields = aa.shift
74
- h = Hash.new(0)
75
- header_fields.each_with_index {|f, i|
76
- if h.include? f
77
- raise ArgumentError, "ambiguous header field: #{f.inspect} (#{h[f]}th and #{i}th)"
78
- end
79
- h[f] = i
80
- }
81
- end
82
- t = Tb.new(header_fields)
83
- aa.each {|ary|
84
- h = {}
85
- header_fields.each_with_index {|f, i|
86
- h[f] = ary[i]
87
- }
88
- t.insert(h)
89
- }
90
- t
91
- end
92
-
93
- end