rbbt-util 3.2.1 → 4.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 (85) hide show
  1. data/README.rdoc +65 -0
  2. data/bin/run_workflow.rb +142 -69
  3. data/lib/rbbt-util.rb +3 -3
  4. data/lib/rbbt.rb +12 -3
  5. data/lib/rbbt/annotations.rb +215 -0
  6. data/lib/rbbt/{util/fix_width_table.rb → fix_width_table.rb} +17 -13
  7. data/lib/rbbt/persist.rb +164 -0
  8. data/lib/rbbt/persist/tsv.rb +135 -0
  9. data/lib/rbbt/resource.rb +100 -0
  10. data/lib/rbbt/resource/path.rb +180 -0
  11. data/lib/rbbt/resource/rake.rb +48 -0
  12. data/lib/rbbt/resource/util.rb +111 -0
  13. data/lib/rbbt/resource/with_key.rb +28 -0
  14. data/lib/rbbt/tsv.rb +134 -0
  15. data/lib/rbbt/tsv/accessor.rb +345 -0
  16. data/lib/rbbt/tsv/attach.rb +183 -0
  17. data/lib/rbbt/tsv/attach/util.rb +277 -0
  18. data/lib/rbbt/{util/tsv/filters.rb → tsv/filter.rb} +76 -37
  19. data/lib/rbbt/tsv/index.rb +453 -0
  20. data/lib/rbbt/tsv/manipulate.rb +361 -0
  21. data/lib/rbbt/tsv/parser.rb +231 -0
  22. data/lib/rbbt/tsv/serializers.rb +79 -0
  23. data/lib/rbbt/tsv/util.rb +67 -0
  24. data/lib/rbbt/util/R.rb +3 -3
  25. data/lib/rbbt/util/chain_methods.rb +64 -0
  26. data/lib/rbbt/util/cmd.rb +17 -13
  27. data/lib/rbbt/util/excel2tsv.rb +4 -3
  28. data/lib/rbbt/util/log.rb +1 -0
  29. data/lib/rbbt/util/misc.rb +296 -285
  30. data/lib/rbbt/util/open.rb +9 -2
  31. data/lib/rbbt/util/persistence.rb +1 -1
  32. data/lib/rbbt/util/task/job.rb +3 -1
  33. data/lib/rbbt/workflow.rb +193 -0
  34. data/lib/rbbt/workflow/accessor.rb +249 -0
  35. data/lib/rbbt/workflow/annotate.rb +60 -0
  36. data/lib/rbbt/workflow/soap.rb +100 -0
  37. data/lib/rbbt/workflow/step.rb +102 -0
  38. data/lib/rbbt/workflow/task.rb +76 -0
  39. data/test/rbbt/resource/test_path.rb +12 -0
  40. data/test/rbbt/test_annotations.rb +106 -0
  41. data/test/rbbt/{util/test_fix_width_table.rb → test_fix_width_table.rb} +8 -9
  42. data/test/rbbt/test_resource.rb +66 -0
  43. data/test/rbbt/test_tsv.rb +332 -0
  44. data/test/rbbt/test_workflow.rb +102 -0
  45. data/test/rbbt/tsv/test_accessor.rb +163 -0
  46. data/test/rbbt/{util/tsv → tsv}/test_attach.rb +86 -43
  47. data/test/rbbt/{util/tsv/test_filters.rb → tsv/test_filter.rb} +31 -13
  48. data/test/rbbt/tsv/test_index.rb +284 -0
  49. data/test/rbbt/{util/tsv → tsv}/test_manipulate.rb +35 -105
  50. data/test/rbbt/util/test_R.rb +1 -1
  51. data/test/rbbt/util/test_chain_methods.rb +22 -0
  52. data/test/rbbt/util/test_filecache.rb +0 -1
  53. data/test/rbbt/util/test_misc.rb +97 -79
  54. data/test/rbbt/util/test_open.rb +1 -0
  55. data/test/rbbt/util/test_tmpfile.rb +1 -1
  56. data/test/rbbt/workflow/test_soap.rb +103 -0
  57. data/test/rbbt/workflow/test_step.rb +142 -0
  58. data/test/rbbt/workflow/test_task.rb +84 -0
  59. data/test/test_helper.rb +7 -7
  60. metadata +80 -54
  61. data/lib/rbbt/util/rake.rb +0 -176
  62. data/lib/rbbt/util/resource.rb +0 -355
  63. data/lib/rbbt/util/task.rb +0 -183
  64. data/lib/rbbt/util/tc_hash.rb +0 -324
  65. data/lib/rbbt/util/tsv.rb +0 -236
  66. data/lib/rbbt/util/tsv/accessor.rb +0 -312
  67. data/lib/rbbt/util/tsv/attach.rb +0 -416
  68. data/lib/rbbt/util/tsv/index.rb +0 -419
  69. data/lib/rbbt/util/tsv/manipulate.rb +0 -300
  70. data/lib/rbbt/util/tsv/misc.rb +0 -41
  71. data/lib/rbbt/util/tsv/parse.rb +0 -324
  72. data/lib/rbbt/util/tsv/resource.rb +0 -88
  73. data/lib/rbbt/util/workflow.rb +0 -135
  74. data/lib/rbbt/util/workflow/soap.rb +0 -116
  75. data/test/rbbt/util/test_persistence.rb +0 -201
  76. data/test/rbbt/util/test_rake.rb +0 -54
  77. data/test/rbbt/util/test_resource.rb +0 -77
  78. data/test/rbbt/util/test_task.rb +0 -133
  79. data/test/rbbt/util/test_tc_hash.rb +0 -144
  80. data/test/rbbt/util/test_tsv.rb +0 -221
  81. data/test/rbbt/util/test_workflow.rb +0 -135
  82. data/test/rbbt/util/tsv/test_accessor.rb +0 -150
  83. data/test/rbbt/util/tsv/test_index.rb +0 -241
  84. data/test/rbbt/util/tsv/test_parse.rb +0 -87
  85. data/test/rbbt/util/tsv/test_resource.rb +0 -9
@@ -1,54 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
2
- require 'rbbt/util/rake'
3
-
4
- class TestRake < Test::Unit::TestCase
5
- def test_run
6
- rakefile=<<-EOF
7
- require 'rbbt/util/rake'
8
-
9
- file "foo" do |t|
10
- Open.write(t.name, 'bar')
11
- end
12
- EOF
13
-
14
- TmpFile.with_file(rakefile) do |f|
15
- RakeHelper.run f, :foo
16
-
17
- assert File.exists? "foo"
18
- FileUtils.rm "foo"
19
- end
20
- end
21
-
22
- def test_run_default
23
- rakefile=<<-EOF
24
- require 'rbbt/util/rake'
25
-
26
- file "foo" do |t|
27
- Open.write(t.name, 'bar')
28
- end
29
- EOF
30
-
31
- TmpFile.with_file(rakefile) do |f|
32
- RakeHelper.run f
33
-
34
- assert File.exists? "foo"
35
- FileUtils.rm "foo"
36
- end
37
- end
38
-
39
-
40
- def test_files
41
- rakefile=<<-EOF
42
- require 'rbbt/util/rake'
43
-
44
- file "foo" do |t|
45
- Open.write(t.name, 'bar')
46
- end
47
- EOF
48
-
49
- TmpFile.with_file(rakefile) do |f|
50
- assert RakeHelper.files(f).include? "foo"
51
- end
52
- end
53
- end
54
-
@@ -1,77 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
2
- require 'rbbt/util/resource'
3
-
4
-
5
- module Rbbt
6
- extend Resource
7
-
8
- tmp.test_string.define_as_string "Test String"
9
- tmp.url.define_as_url "http://www.ruby-lang.org/es/"
10
- tmp.Rakefile.define_as_string <<-EOF
11
- file 'foo' do |t|
12
- Open.write(t.name, "Test String")
13
- end
14
- EOF
15
-
16
- end
17
-
18
- Open.cachedir = Rbbt.tmp.cache.find :user
19
-
20
- module Phgx
21
- extend Resource
22
- end
23
-
24
-
25
- class TestResource < Test::Unit::TestCase
26
- def test_methods
27
- assert Resource.methods.collect{|m| m.to_s}.include?("resources")
28
- assert ! Resource.methods.collect{|m| m.to_s}.include?("pkgdir")
29
- assert ! Phgx.methods.collect{|m| m.to_s}.include?("resources")
30
- assert Phgx.methods.collect{|m| m.to_s}.include?("pkgdir")
31
-
32
- end
33
- def test_resolve
34
- assert_equal File.join(ENV['HOME'], '.rbbt/etc/foo'), Resource.resolve('etc/foo', '', :user)
35
- assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Resource.resolve('etc/foo', 'phgx', :user)
36
-
37
- assert_equal File.join('/', 'etc/foo'), Resource.resolve('etc/foo', '', :global)
38
- assert_equal File.join('/', 'etc/phgx/foo'), Resource.resolve('etc/foo', 'phgx', :global)
39
-
40
- assert_equal File.join('/usr/local', 'etc/foo'), Resource.resolve('etc/foo', '', :local)
41
- assert_equal File.join('/usr/local', 'etc/phgx/foo'), Resource.resolve('etc/foo', 'phgx', :local)
42
-
43
- assert_equal File.expand_path(File.join(File.dirname(File.expand_path(__FILE__)), '../../../', 'etc/foo')), Resource.resolve('etc/foo', '', :lib)
44
- assert_equal File.expand_path(File.join(File.dirname(File.expand_path(__FILE__)), '../../../', 'etc/foo')), Resource.resolve('etc/foo', 'phgx', :lib)
45
-
46
- assert_equal File.join(ENV['HOME'], '.rbbt/etc/foo'), Resource.resolve('etc/foo', '')
47
- assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Resource.resolve('etc/foo', 'phgx')
48
- end
49
-
50
- def test_base
51
- assert_equal Rbbt, Rbbt.base
52
- end
53
-
54
- def test_path
55
- assert_equal File.join(ENV['HOME'], '.rbbt/etc/foo'), Rbbt.etc.foo.find
56
- assert_equal File.join(ENV['HOME'], '.rbbt/etc/foo'), Rbbt.etc.foo.find(:user)
57
- assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Phgx.etc.foo.find
58
- assert_equal File.join(ENV['HOME'], '.phgx/etc/foo'), Phgx.etc.foo.find(:user)
59
- end
60
-
61
- def test_libdir
62
- assert File.exists? Rbbt.share.lib.R["util.R"].find :lib
63
- assert File.exists? Rbbt.share.lib.R["util.R"].find
64
- end
65
-
66
- def test_define
67
- begin
68
- assert_equal "Test String", Rbbt.tmp.test_string.read
69
- assert_equal "Test String", Rbbt.tmp.work.foo.read
70
- rescue
71
- ensure
72
- FileUtils.rm Rbbt.tmp.test_string.find if File.exists? Rbbt.tmp.test_string.find
73
- FileUtils.rm Rbbt.tmp.url.find if File.exists? Rbbt.tmp.url.find
74
- end
75
- end
76
- end
77
-
@@ -1,133 +0,0 @@
1
- require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
2
- require 'rbbt/util/task'
3
-
4
- Task.basedir = Rbbt.tmp.test.taskjobs.find :user
5
-
6
- class TestTask < Test::Unit::TestCase
7
- def test_task
8
- $true
9
- task = Task.new(:test_task) do $true = true end
10
- job = task.job(:job1)
11
- job.start
12
-
13
- assert $true
14
- end
15
-
16
- def test_task_fork
17
- TmpFile.with_file do |f|
18
- task = Task.new(:test_task) do Open.write(f, "Test") end
19
- job = task.job(:job1)
20
- job.fork
21
- job.join
22
-
23
- assert File.exists? f
24
- end
25
- end
26
-
27
- def test_task_options
28
- TmpFile.with_file do |f|
29
- task = Task.new(:test_task, nil, :name) do |name| Open.write(f, name) end
30
- job = task.job(:job1, "TestName")
31
- assert_equal "job1" << "_" << Misc.hash2md5(:name => "TestName"), job.id
32
- job.fork
33
- job.join
34
-
35
- assert File.exists? f
36
- assert_equal "TestName", File.open(f).read
37
- end
38
- end
39
-
40
- def test_task_options_from_hash
41
- TmpFile.with_file do |f|
42
- task = Task.new(:test_task, nil, :name) do |name| Open.write(f, name) end
43
- job = task.job(:job1, :name => "TestName")
44
- assert_equal "job1" << "_" << Misc.hash2md5(:name => "TestName"), job.id
45
- job.fork
46
- job.join
47
-
48
- assert File.exists? f
49
- assert_equal "TestName", File.open(f).read
50
- end
51
- end
52
-
53
-
54
- def test_task_result
55
- task = Task.new(:test_task, nil, :name) do |name| name end
56
- job = task.job(:job1, "TestName")
57
- assert_equal "TestName", job.fork.join.load
58
- end
59
-
60
- def test_task_info
61
- task = Task.new(:test_task, nil, :name) do |name| name end
62
- job = task.job(:job1, "TestName")
63
- assert_equal "TestName", job.fork.join.info[:options][:name]
64
- end
65
-
66
- def test_task_status
67
- task = Task.new(:test_task, nil, :name) do |name|
68
- step :one
69
- name
70
- end
71
- job = task.job(:job1, "TestName")
72
- assert_equal "TestName", job.fork.join.info[:options][:name]
73
- end
74
-
75
- def test_task_reopen
76
- task = Task.new(:test_task, nil, :name) do |name| name end
77
- job = task.job(:job1, "TestName")
78
- assert_equal "TestName", job.fork.join.info[:options][:name]
79
- job = task.job(:job1, "TestName")
80
- assert_equal "TestName", job.join.info[:options][:name]
81
- end
82
-
83
- def test_marshal_persistence
84
- task = Task.new(:test_task, :marshal) do
85
- {:a => :b}
86
- end
87
- job = task.job(:job1).fork.join
88
- assert Hash === job.load
89
- assert_equal :b, job.load[:a]
90
- end
91
-
92
- def test_yaml_persistence
93
- task = Task.new(:test_task, :yaml) do
94
- {:a => :b}
95
- end
96
- job = task.job(:job1).fork.join
97
- assert Hash === job.load
98
- assert_equal :b, job.load[:a]
99
- assert_equal :b, YAML.load(job.open)[:a]
100
- end
101
-
102
- def test_tsv_persistence
103
- task = Task.new(:test_task, :tsv) do
104
- tsv = TSV.new({})
105
- tsv.key_field = "A"
106
- tsv.fields = ["B"]
107
- tsv.type = :list
108
- tsv["a"] = ["b"]
109
- tsv
110
- end
111
- job = task.job(:job1).fork.join
112
- assert TSV === job.load
113
- assert_equal "b", job.load["a"]["B"]
114
- end
115
-
116
- def test_clean
117
- task = Task.new(:test_task, :tsv) do
118
- tsv = TSV.new({})
119
- tsv.key_field = "A"
120
- tsv.fields = ["B"]
121
- tsv.type = :list
122
- tsv["a"] = ["b"]
123
- tsv
124
- end
125
- job = task.job(:job1).fork.join
126
-
127
- assert File.exists?(job.path)
128
- job.clean
129
- assert (not File.exists?(job.path))
130
- end
131
-
132
- end
133
-
@@ -1,144 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
- require 'rbbt/util/tmpfile'
3
- require 'rbbt/util/tc_hash'
4
-
5
- class TestTCHash < Test::Unit::TestCase
6
- def test_each
7
- TmpFile.with_file do |f|
8
- t = TCHash.new f
9
- t["1"] = 2
10
- t["2"] = 3
11
-
12
- t.collect do |k,v|
13
- ["1", "2"].include? k
14
- end
15
- end
16
- end
17
-
18
- def test_serializer
19
- TmpFile.with_file do |f|
20
- t = TCHash.new f, TCHash::StringSerializer
21
- t["1"] = 2
22
- t["2"] = 3
23
- t.read
24
-
25
- t.collect do |k,v|
26
- ["1", "2"].include? k
27
- end
28
- end
29
- end
30
-
31
- def test_stringArraySerializer
32
- TmpFile.with_file do |f|
33
- t = TCHash.get f, true, TCHash::StringArraySerializer
34
- t["1"] = [1,2]
35
- t["2"] = [3,4]
36
-
37
- t = TCHash.get f
38
- t.collect do |k,v|
39
- assert_equal ["1", "2"], t["1"]
40
- end
41
- end
42
- end
43
-
44
- def test_stringDoubleArraySerializer
45
- TmpFile.with_file do |f|
46
- t = TCHash.get f, true, TCHash::StringDoubleArraySerializer
47
- t["1"] = [[1],[2]]
48
- t["2"] = [[3],[4,5]]
49
-
50
- t = TCHash.get f
51
- t.collect do |k,v|
52
- assert_equal [["3"],["4","5"]], t["2"]
53
- end
54
- end
55
- end
56
-
57
- def test_stringDoubleArraySerializer
58
- TmpFile.with_file do |f|
59
- t = TCHash.get f, true, TCHash::TSVSerializer
60
- tsv = TSV.new({})
61
- tsv["1"] = [[1],[2]]
62
- tsv["2"] = [[3],[4,5]]
63
- t["TSV"] = tsv
64
-
65
- t = TCHash.get f
66
- t.collect do |k,v|
67
- assert_equal [["3"],["4","5"]], t["TSV"]["2"]
68
- end
69
- end
70
- end
71
-
72
-
73
- def test_serializer_alias
74
- TmpFile.with_file do |f|
75
- t = TCHash.get f, true, :double
76
- t["1"] = [[1],[2]]
77
- t["2"] = [[3],[4,5]]
78
-
79
- t = TCHash.get f
80
- assert_equal [["3"],["4","5"]], t["2"]
81
- end
82
- end
83
-
84
- def test_non_blocking
85
- TmpFile.with_file do |f|
86
- t = TCHash.get f, true, :double
87
- t["1"] = [[1],[2]]
88
- t["2"] = [[3],[4,5]]
89
- t.close
90
-
91
- pid = Process.fork do
92
- t2 = TCHash.get f, false, :double
93
- assert_equal [["3"],["4","5"]], t2["2"]
94
- t2.read
95
- exit
96
- end
97
-
98
- t2 = TCHash.get f, false, :double
99
- assert_equal [["3"],["4","5"]], t2["2"]
100
- t2.read
101
-
102
- Process.wait pid
103
- end
104
- end
105
-
106
- def test_serializer_alias
107
- TmpFile.with_file do |f|
108
- t = TCHash.get f, true, :double
109
- t["1"] = [[1],[2]]
110
- t["2"] = [[3],[4,5]]
111
-
112
- t = TCHash.get f
113
- assert_equal [["3"],["4","5"]], t["2"]
114
-
115
- t.close
116
- TCHash::CONNECTIONS.clear
117
-
118
- t = TCHash.get f
119
- assert_equal [["3"],["4","5"]], t["2"]
120
- end
121
- end
122
-
123
- def test_serializer_reload
124
- TmpFile.with_file do |f|
125
- t = TCHash.get f, true, :double
126
- t["1"] = [[1],[2]]
127
- t["2"] = [[3],[4,5]]
128
-
129
- t = TCHash.get f
130
- assert_equal TCHash::StringDoubleArraySerializer, t.serializer
131
- assert_equal [["3"],["4","5"]], t["2"]
132
-
133
- t.close
134
- TCHash::CONNECTIONS.clear
135
-
136
- t = TCHash.get f
137
- assert_equal [["3"],["4","5"]], t["2"]
138
- end
139
- end
140
-
141
-
142
-
143
- end
144
-
@@ -1,221 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + '/../../test_helper')
2
- require 'rbbt/util/tsv'
3
- require 'rbbt/util/tmpfile'
4
-
5
- class TestTSV < Test::Unit::TestCase
6
-
7
- def test_tsv
8
- content =<<-EOF
9
- #Id ValueA ValueB OtherID
10
- row1 a|aa|aaa b Id1|Id2
11
- row2 A B Id3
12
- EOF
13
-
14
- TmpFile.with_file(content) do |filename|
15
- tsv = TSV.new(File.open(filename), :double, :sep => /\s+/, :key => "OtherID")
16
- assert_equal :double, tsv.type
17
- assert_equal "OtherID", tsv.key_field
18
- assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
19
- assert_equal ["a", "aa", "aaa"], tsv["Id1"][1]
20
- assert_equal ["a", "aa", "aaa"], tsv["Id2"][1]
21
- end
22
- end
23
-
24
- def test_grep
25
- content =<<-EOF
26
- #Id ValueA ValueB OtherID
27
- row1 a|aa|aaa b Id1|Id2
28
- row2 A B Id3
29
- EOF
30
-
31
- TmpFile.with_file(content) do |filename|
32
- tsv = TSV.new(File.open(filename), :sep => /\s+/, :grep => %w(row1))
33
- assert tsv.keys.include? "row1"
34
- assert( ! tsv.keys.include?("row2"))
35
- end
36
- end
37
-
38
- def test_open_stringoptions
39
- content =<<-EOF
40
- #Id ValueA ValueB OtherID
41
- row1 a|aa|aaa b Id1|Id2
42
- row2 A B Id3
43
- row3 a C Id4
44
- EOF
45
-
46
- TmpFile.with_file(content) do |filename|
47
- tsv = TSV.new(filename + '#:sep=/\s+/')
48
- assert_equal ["A"], tsv["row2"]["ValueA"]
49
- end
50
- end
51
-
52
- def test_headers
53
- content =<<-EOF
54
- #ID ValueA ValueB Comment
55
- row1 a b c
56
- row2 A B C
57
- EOF
58
-
59
- TmpFile.with_file(content) do |filename|
60
- assert_equal ['ID', 'ValueA', 'ValueB', 'Comment'], TSV.headers(filename, :sep => ' ')
61
- assert_equal nil, TSV.headers(filename, :sep => ' ', :header_hash => "##")
62
- end
63
- end
64
-
65
- def test_headerless
66
- content =<<-EOF
67
- row1 a b c
68
- row2 A B C
69
- EOF
70
-
71
- TmpFile.with_file(content) do |filename|
72
- assert_equal 3, TSV.new(filename, :sep => ' ')['row1'].length
73
- end
74
- end
75
-
76
- def test_extra
77
- content =<<-EOF
78
- #Id ValueA ValueB OtherID
79
- row1 a|aa|aaa b Id1|Id2
80
- row2 A B Id3
81
- EOF
82
-
83
- TmpFile.with_file(content) do |filename|
84
- tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :fields => 2)
85
- assert_equal ["b"], tsv["Id2"][0]
86
- tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :fields => 'ValueB')
87
- assert_equal ["b"], tsv["Id2"][0]
88
- end
89
- end
90
-
91
- def test_case
92
- content =<<-EOF
93
- #Id ValueA ValueB OtherID
94
- row1 a|aa|aaa b Id1|Id2
95
- row2 A B Id3
96
- EOF
97
-
98
- TmpFile.with_file(content) do |filename|
99
- tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :case_insensitive => true)
100
- assert_equal "OtherID", tsv.key_field
101
- assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
102
- assert_equal ["a", "aa", "aaa"], tsv["id1"][1]
103
- assert_equal ["a", "aa", "aaa"], tsv["Id2"][1]
104
-
105
- tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :case_insensitive => false)
106
- assert_equal "OtherID", tsv.key_field
107
- assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
108
- assert_nil tsv["id1"]
109
- end
110
- end
111
-
112
- def test_persistence
113
- content =<<-EOF
114
- #Id ValueA ValueB OtherID
115
- row1 a|aa|aaa b Id1|Id2
116
- row2 A B Id3
117
- EOF
118
-
119
- TmpFile.with_file(content) do |filename|
120
- tsv = TSV.new(filename, :sep => /\s+/, :key => "OtherID", :persistence => true)
121
- assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
122
-
123
- tsv.write
124
- tsv['Id4'] = [["row3"],["aA"],["bB","bbBB"]]
125
- assert_equal ["aA"], tsv["Id4"][1]
126
- tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :persistence => true)
127
- assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
128
-
129
- assert_equal ["aA"], tsv["Id4"][1]
130
- assert_equal [["b"],["B"]], tsv.values_at("Id1", "Id3").collect{|values| values[2]}
131
- tsv = TSV.new(File.open(filename), :flat, :sep => /\s+/, :key => "OtherID", :persistence => false)
132
- assert(tsv["Id3"].include? "A")
133
- end
134
- end
135
-
136
- def test_named_array
137
- content =<<-EOF
138
- #Id ValueA ValueB OtherID
139
- row1 a|aa|aaa b Id1|Id2
140
- row2 A B Id3
141
- EOF
142
-
143
- TmpFile.with_file(content) do |filename|
144
- tsv = TSV.new(File.open(filename), :sep => /\s+/, :key => "OtherID", :case_insensitive => true)
145
- assert_equal "OtherID", tsv.key_field
146
- assert_equal ["Id", "ValueA", "ValueB"], tsv.fields
147
- assert_equal ["a", "aa", "aaa"], tsv["id1"][1]
148
- assert_equal ["a", "aa", "aaa"], tsv["Id2"]["ValueA"]
149
- end
150
- end
151
-
152
- def test_one_col
153
- content =<<-EOF
154
- #Id
155
- row1
156
- row2
157
- EOF
158
-
159
- TmpFile.with_file(content) do |filename|
160
- tsv = TSV.new(File.open(filename), :sep => /\s+/)
161
- assert_equal "Id", tsv.key_field
162
- assert_equal [], tsv.fields
163
- end
164
- end
165
-
166
-
167
- def test_case_insensitive
168
- content1 =<<-EOF
169
- #: :sep=/\\s+/#:case_insensitive=false
170
- #Id ValueA ValueB
171
- row1 a|aa|aaa b
172
- row2 A B
173
- EOF
174
-
175
- tsv1 = tsv2 = identifiers = nil
176
- TmpFile.with_file(content1) do |filename|
177
- tsv1 = TSV.new(File.open(filename), :key => "ValueA")
178
- assert !tsv1.case_insensitive
179
- assert tsv1.include? "A"
180
- end
181
- end
182
-
183
- def test_create_array
184
- tsv = TSV.new(%w(a b c))
185
- assert_equal %w(a b c).sort, tsv.keys.sort
186
- assert_equal [[]] * tsv.keys.length, tsv.values
187
- end
188
-
189
- def test_persistence_data
190
- content1 =<<-EOF
191
- #: :sep=/\\s+/#:case_insensitive=false
192
- #Id ValueA ValueB
193
- row1 a|aa|aaa b
194
- row2 A B
195
- EOF
196
-
197
- tsv1 = tsv2 = identifiers = nil
198
- TmpFile.with_file(content1) do |filename|
199
- TmpFile.with_file do |tchashfile|
200
- tchash = TCHash.get(tchashfile, true)
201
- tsv1 = TSV.new(File.open(filename), :key => "ValueA", :persistence_data => tchash)
202
- assert TCHash === tsv1.data
203
- assert !tsv1.case_insensitive
204
- assert tsv1.include? "A"
205
- ddd tsv1.filename
206
-
207
- tsv1 = TSV.new(tchash, :key => "ValueA")
208
- assert TCHash === tsv1.data
209
- assert !tsv1.case_insensitive
210
- assert tsv1.include? "A"
211
- ddd tsv1.filename
212
- end
213
- end
214
-
215
- end
216
-
217
- def test_with_hash
218
- assert TSV === TSV.new {}, :list
219
- end
220
- end
221
-