rbbt-util 5.28.9 → 5.28.10

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 (54) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/entity.rb +1 -1
  3. data/lib/rbbt/fix_width_table.rb +5 -4
  4. data/lib/rbbt/persist.rb +1 -1
  5. data/lib/rbbt/persist/tsv/adapter.rb +0 -1
  6. data/lib/rbbt/persist/tsv/fix_width_table.rb +5 -3
  7. data/lib/rbbt/tsv/dumper.rb +6 -2
  8. data/lib/rbbt/util/cmd.rb +1 -0
  9. data/lib/rbbt/util/misc/bgzf.rb +1 -1
  10. data/lib/rbbt/util/named_array.rb +1 -1
  11. data/lib/rbbt/util/open.rb +17 -16
  12. data/lib/rbbt/workflow/definition.rb +2 -1
  13. data/lib/rbbt/workflow/integration/ansible.rb +53 -0
  14. data/lib/rbbt/workflow/integration/ansible/workflow.rb +60 -0
  15. data/lib/rbbt/workflow/step.rb +5 -0
  16. data/lib/rbbt/workflow/step/accessor.rb +1 -1
  17. data/lib/rbbt/workflow/util/archive.rb +2 -0
  18. data/lib/rbbt/workflow/util/orchestrator.rb +22 -9
  19. data/share/rbbt_commands/ansible +55 -0
  20. data/share/rbbt_commands/purge_job +0 -1
  21. data/share/rbbt_commands/workflow/forget_deps +9 -0
  22. data/test/rbbt/association/test_index.rb +6 -6
  23. data/test/rbbt/knowledge_base/test_query.rb +3 -3
  24. data/test/rbbt/knowledge_base/test_registry.rb +1 -1
  25. data/test/rbbt/persist/tsv/test_cdb.rb +0 -7
  26. data/test/rbbt/persist/tsv/test_kyotocabinet.rb +2 -8
  27. data/test/rbbt/persist/tsv/test_leveldb.rb +0 -6
  28. data/test/rbbt/persist/tsv/test_lmdb.rb +0 -6
  29. data/test/rbbt/persist/tsv/test_tokyocabinet.rb +15 -14
  30. data/test/rbbt/test_entity.rb +0 -1
  31. data/test/rbbt/test_knowledge_base.rb +3 -4
  32. data/test/rbbt/test_persist.rb +10 -6
  33. data/test/rbbt/test_workflow.rb +17 -16
  34. data/test/rbbt/tsv/test_accessor.rb +11 -0
  35. data/test/rbbt/tsv/test_attach.rb +0 -2
  36. data/test/rbbt/tsv/test_index.rb +6 -7
  37. data/test/rbbt/tsv/test_manipulate.rb +2 -3
  38. data/test/rbbt/util/R/test_model.rb +2 -1
  39. data/test/rbbt/util/R/test_plot.rb +0 -2
  40. data/test/rbbt/util/concurrency/test_processes.rb +1 -1
  41. data/test/rbbt/util/misc/test_bgzf.rb +11 -7
  42. data/test/rbbt/util/misc/test_lock.rb +0 -1
  43. data/test/rbbt/util/misc/test_multipart_payload.rb +1 -1
  44. data/test/rbbt/util/misc/test_pipes.rb +0 -5
  45. data/test/rbbt/util/test_R.rb +1 -0
  46. data/test/rbbt/util/test_log.rb +4 -6
  47. data/test/rbbt/util/test_misc.rb +0 -2
  48. data/test/rbbt/util/test_open.rb +0 -1
  49. data/test/rbbt/util/test_python.rb +17 -1
  50. data/test/rbbt/workflow/test_remote_workflow.rb +1 -1
  51. data/test/rbbt/workflow/test_step.rb +8 -3
  52. data/test/rbbt/workflow/util/test_orchestrator.rb +50 -0
  53. metadata +5 -4
  54. data/test/rbbt/workflow/remote/test_client.rb +0 -56
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbbt-util'
4
+ require 'rbbt/util/simpleopt'
5
+
6
+ $0 = "rbbt #{$previous_commands*" "} #{ File.basename(__FILE__) }" if $previous_commands
7
+
8
+ options = SOPT.setup <<EOF
9
+
10
+ Run ansible
11
+
12
+ $ #{$0} [options] <rules.yml|->
13
+
14
+ Use - to read from STDIN
15
+
16
+ -h--help Print this help
17
+ -dr--dry_run Only print the playbook
18
+ -H--hosts* hosts to run it on
19
+ EOF
20
+ if options[:help]
21
+ if defined? rbbt_usage
22
+ rbbt_usage
23
+ else
24
+ puts SOPT.doc
25
+ end
26
+ exit 0
27
+ end
28
+
29
+ require 'rbbt/workflow/integration/ansible'
30
+
31
+ playbook, task = ARGV
32
+ playbook_file = Rbbt.share.ansible["test.yaml"].find if playbook.nil?
33
+
34
+ dry_run = options.delete :dry_run
35
+
36
+ if ! Misc.filename?(playbook_file)
37
+ playbook_file = Rbbt.share.ansible.glob(playbook + ".*").first
38
+ end
39
+
40
+ if ! Misc.filename?(playbook_file)
41
+ recipe = Rbbt.share.recipes.glob(playbook + ".*").first
42
+ playbook_file = Ansible.playbook recipe, task, options
43
+ end
44
+
45
+
46
+ if dry_run
47
+ if Hash === playbook_file
48
+ ppp playbook_file.to_yaml
49
+ else
50
+ ppp Log.color :magenta, playbook_file
51
+ ppp Open.read(playbook_file)
52
+ end
53
+ else
54
+ Ansible.play playbook_file
55
+ end
@@ -14,7 +14,6 @@ $ rbbt purge [options] <job_path>
14
14
 
15
15
  -h--help Print this help
16
16
  -r--recursive Remove recursively
17
-
18
17
  EOF
19
18
  if options[:help]
20
19
  if defined? rbbt_usage
@@ -13,6 +13,8 @@ Make a job forget all its dependencies and archive their meta-data
13
13
  $ #{$0} [options] <job_path>
14
14
 
15
15
  -h--help Print this help
16
+ -p--purge Purge dependencies
17
+ -r--recursive_purge Purge dependencies recursively
16
18
 
17
19
  EOF
18
20
  if options[:help]
@@ -31,4 +33,11 @@ step = Workflow.load_step path
31
33
 
32
34
  step.archive_deps
33
35
  step.copy_files_dir
36
+ dependencies = step.dependencies
34
37
  step.set_info :dependencies, []
38
+
39
+ if options[:purge]
40
+ dependencies.each do |dependency|
41
+ Step.purge(dependency.path, options[:recursive_purge])
42
+ end
43
+ end
@@ -73,21 +73,21 @@ TP53 NFKB1|GLI1 activation|activation true|true
73
73
 
74
74
  def test_index_flat
75
75
  require 'rbbt/sources/tfacts'
76
- file = TFacts.regulators
76
+ file = TFactS.regulators
77
77
  tsv = Association.index(file, :type => :flat, :source => "Transcription Factor Associated Gene Name=~Associated Gene Name", :merge => true)
78
78
  assert tsv.match("TP53").length > 10
79
79
  end
80
80
 
81
81
  def test_index_flat_to_matrix
82
82
  require 'rbbt/sources/tfacts'
83
- file = TFacts.regulators
83
+ file = TFactS.regulators
84
84
  tsv = Association.index(file, :type => :flat, :source => "Transcription Factor Associated Gene Name=~Associated Gene Name", :merge => true)
85
85
  assert(tsv.to_matrix(false))
86
86
  end
87
87
 
88
88
  def test_filter_no_block
89
89
  require 'rbbt/sources/tfacts'
90
- file = TFacts.regulators
90
+ file = TFactS.regulators
91
91
  tsv = Association.index(EFFECT, EFFECT_OPTIONS.merge(:undirected => false, :source => "SG=~Associated Gene Name", :target => "TG=~Associated Gene Name"), :persist => true)
92
92
  tsv.unnamed = false
93
93
  matches = tsv.filter :directed?
@@ -96,7 +96,7 @@ TP53 NFKB1|GLI1 activation|activation true|true
96
96
 
97
97
  def test_filter_no_block_value
98
98
  require 'rbbt/sources/tfacts'
99
- file = TFacts.regulators
99
+ file = TFactS.regulators
100
100
  tsv = Association.index(EFFECT, EFFECT_OPTIONS.merge(:undirected => false, :source => "SG=~Associated Gene Name", :target => "TG=~Associated Gene Name"), :persist => true)
101
101
  tsv.unnamed = false
102
102
  matches = tsv.filter :Effect, "inhibition"
@@ -105,7 +105,7 @@ TP53 NFKB1|GLI1 activation|activation true|true
105
105
 
106
106
  def test_filter_block_value_field
107
107
  require 'rbbt/sources/tfacts'
108
- file = TFacts.regulators
108
+ file = TFactS.regulators
109
109
  tsv = Association.index(EFFECT, EFFECT_OPTIONS.merge(:undirected => false, :source => "SG=~Associated Gene Name", :target => "TG=~Associated Gene Name"), :persist => true)
110
110
  tsv.unnamed = false
111
111
  matches = tsv.filter :Effect do |value|
@@ -116,7 +116,7 @@ TP53 NFKB1|GLI1 activation|activation true|true
116
116
 
117
117
  def test_filter_block_no_value_field
118
118
  require 'rbbt/sources/tfacts'
119
- file = TFacts.regulators
119
+ file = TFactS.regulators
120
120
  tsv = Association.index(EFFECT, EFFECT_OPTIONS.merge(:undirected => false, :source => "SG=~Associated Gene Name", :target => "TG=~Associated Gene Name"), :persist => true)
121
121
  tsv.unnamed = false
122
122
  matches = tsv.filter do |key,values|
@@ -22,7 +22,7 @@ TP53 NFKB1|GLI1 activation|activation true|true
22
22
  :namespace => "Hsa"
23
23
  }
24
24
 
25
- EFFECT_TSV = TSV.open EFFECT, EFFECT_OPTIONS.dup
25
+ EFFECT_TSV = TSV.open EFFECT, EFFECT_OPTIONS.dup
26
26
 
27
27
  KNOWLEDGE_BASE = KnowledgeBase.new Rbbt.tmp.test.kb_foo2, "Hsa"
28
28
  KNOWLEDGE_BASE.format = {"Gene" => "Ensembl Gene ID"}
@@ -34,11 +34,11 @@ TP53 NFKB1|GLI1 activation|activation true|true
34
34
  assert_equal 6, KNOWLEDGE_BASE.subset(:effects, :all).length
35
35
 
36
36
  assert_equal 4, KNOWLEDGE_BASE.subset(:effects, :all).target_entity.uniq.length
37
- assert_equal %w(Effect), KNOWLEDGE_BASE.subset(:effects, :all).info.first.keys
37
+ assert_equal %w(Effect), KNOWLEDGE_BASE.subset(:effects, :all).info.first.keys
38
38
  end
39
39
  end
40
40
 
41
- def test_subset_all_persist_format
41
+ def _test_subset_all_persist_format
42
42
  assert KNOWLEDGE_BASE.subset(:effects, :all).target_entity.reject{|e| e =~ /^ENS/}.empty?
43
43
  end
44
44
 
@@ -45,7 +45,7 @@ TP53 NFKB1|GLI1 activation|activation true|true
45
45
 
46
46
  def test_index_flat
47
47
  require 'rbbt/sources/tfacts'
48
- file = TFacts.regulators
48
+ file = TFactS.regulators
49
49
  KNOWLEDGE_BASE.register :tfacts, file, :type => :flat, :source => "Transcription Factor Associated Gene Name=~Associated Gene Name", :merge => true
50
50
  assert KNOWLEDGE_BASE.subset(:tfacts, :source => ["TP53"], :target => :all).length > 10
51
51
  end
@@ -4,19 +4,12 @@ require 'rbbt/annotations'
4
4
  require 'rbbt/util/tmpfile'
5
5
  require 'test/unit'
6
6
 
7
- module TestAnnotation
8
- extend Annotation
9
-
10
- self.annotation :test_annotation
11
- end
12
-
13
7
  class TestPersistTSVCDB < Test::Unit::TestCase
14
8
 
15
9
  if Persist.respond_to? :open_cbd
16
10
  def test_organism
17
11
  require 'rbbt/sources/organism'
18
12
  TmpFile.with_file nil do |tmp_file|
19
- file = CMD.cmd("head -n 1000000", :in => Organism.identifiers("Hsa").open, :pipe => true)
20
13
  tsv = Organism.identifiers("Hsa").tsv(:key_field => "Associated Gene Name", :fields => ["Ensembl Gene ID"], :type => :single, :persist => true, :persist_engine => "CDB", :persist_dir => tmp_file)
21
14
  assert_equal "ENSG00000141510", tsv["TP53"]
22
15
  end
@@ -5,15 +5,9 @@ require 'rbbt/annotations'
5
5
  require 'rbbt/util/tmpfile'
6
6
  require 'test/unit'
7
7
 
8
- module TestAnnotation
9
- extend Annotation
10
-
11
- self.annotation :test_annotation
12
- end
13
-
14
8
  class TestPersistTSVKC < Test::Unit::TestCase
15
9
  if Persist.respond_to? :open_kyotocabinet
16
- def _test_organism_kch
10
+ def test_organism_kch
17
11
  require 'rbbt/sources/organism'
18
12
  TmpFile.with_file do |tmp_file|
19
13
  tsv = Organism.identifiers("Hsa").tsv :key_field => "Associated Gene Name", :fields => ["Ensembl Gene ID"], :type => :single, :persist => true, :persist_engine => "kch", :persist_dir => tmp_file
@@ -22,7 +16,7 @@ class TestPersistTSVKC < Test::Unit::TestCase
22
16
  end
23
17
 
24
18
 
25
- def _test_organism_kct
19
+ def test_organism_kct
26
20
  require 'rbbt/sources/organism'
27
21
  TmpFile.with_file do |tmp_file|
28
22
  tsv = Organism.identifiers("Hsa").tsv :key_field => "Associated Gene Name", :fields => ["Ensembl Gene ID"], :type => :single, :persist => true, :persist_engine => "kct", :persist_dir => tmp_file
@@ -4,12 +4,6 @@ require 'rbbt/annotations'
4
4
  require 'rbbt/util/tmpfile'
5
5
  require 'test/unit'
6
6
 
7
- module TestAnnotation
8
- extend Annotation
9
-
10
- self.annotation :test_annotation
11
- end
12
-
13
7
  class TestPersistTSVLevelDB < Test::Unit::TestCase
14
8
 
15
9
  if Persist.respond_to? :open_leveldb
@@ -4,12 +4,6 @@ require 'rbbt/annotations'
4
4
  require 'rbbt/util/tmpfile'
5
5
  require 'test/unit'
6
6
 
7
- module TestAnnotation
8
- extend Annotation
9
-
10
- self.annotation :test_annotation
11
- end
12
-
13
7
  class TestPersistTSVLMDB < Test::Unit::TestCase
14
8
 
15
9
  def test_organism
@@ -4,7 +4,8 @@ require 'rbbt/annotations'
4
4
  require 'rbbt/util/tmpfile'
5
5
  require 'test/unit'
6
6
 
7
- module TestAnnotation
7
+
8
+ module TestAnnotationModule
8
9
  extend Annotation
9
10
 
10
11
  self.annotation :test_annotation
@@ -25,8 +26,8 @@ class TestPersistTSVTC < Test::Unit::TestCase
25
26
  entity1 = "Entity 1"
26
27
  entity2 = "Entity 2"
27
28
 
28
- TestAnnotation.setup(entity1, :test_annotation => "1")
29
- TestAnnotation.setup(entity2, :test_annotation => "2")
29
+ TestAnnotationModule.setup(entity1, :test_annotation => "1")
30
+ TestAnnotationModule.setup(entity2, :test_annotation => "2")
30
31
 
31
32
  annotations = [entity1, entity2]
32
33
 
@@ -56,9 +57,9 @@ class TestPersistTSVTC < Test::Unit::TestCase
56
57
  entity2 = "Entity 2"
57
58
  entity2bis = "Entity 2"
58
59
 
59
- TestAnnotation.setup(entity1, :test_annotation => "1")
60
- TestAnnotation.setup(entity2, :test_annotation => "2")
61
- TestAnnotation.setup(entity2bis, :test_annotation => "2")
60
+ TestAnnotationModule.setup(entity1, :test_annotation => "1")
61
+ TestAnnotationModule.setup(entity2, :test_annotation => "2")
62
+ TestAnnotationModule.setup(entity2bis, :test_annotation => "2")
62
63
 
63
64
  annotations = [entity1, entity2, entity2bis]
64
65
 
@@ -105,8 +106,8 @@ class TestPersistTSVTC < Test::Unit::TestCase
105
106
  entity1 = "Entity 1"
106
107
  entity2 = "Entity 2"
107
108
 
108
- TestAnnotation.setup(entity1, :test_annotation => "1")
109
- TestAnnotation.setup(entity2, :test_annotation => "2")
109
+ TestAnnotationModule.setup(entity1, :test_annotation => "1")
110
+ TestAnnotationModule.setup(entity2, :test_annotation => "2")
110
111
 
111
112
  annotations = [entity1, entity2]
112
113
 
@@ -138,7 +139,7 @@ class TestPersistTSVTC < Test::Unit::TestCase
138
139
  entity2 = "Entity 2"
139
140
 
140
141
  annotations = [entity1, entity2]
141
- TestAnnotation.setup(annotations, :test_annotation => "1")
142
+ TestAnnotationModule.setup(annotations, :test_annotation => "1")
142
143
  annotations.extend AnnotatedArray
143
144
 
144
145
  persisted_annotations = Persist.persist("Test", :annotations, :annotation_repo => repo) do
@@ -171,11 +172,11 @@ class TestPersistTSVTC < Test::Unit::TestCase
171
172
  entity2 = "Entity 2"
172
173
 
173
174
  annotations = [entity1, entity2]
174
- TestAnnotation.setup(annotations, :test_annotation => "1")
175
+ TestAnnotationModule.setup(annotations, :test_annotation => "1")
175
176
  annotations.extend AnnotatedArray
176
177
 
177
178
  annotations_ary = [annotations]
178
- TestAnnotation.setup(annotations_ary, :test_annotation => "1")
179
+ TestAnnotationModule.setup(annotations_ary, :test_annotation => "1")
179
180
  annotations_ary.extend AnnotatedArray
180
181
 
181
182
  persisted_annotations = Persist.persist("Test", :annotations, :annotation_repo => repo) do
@@ -210,9 +211,9 @@ class TestPersistTSVTC < Test::Unit::TestCase
210
211
  entity2 = "Entity 2"
211
212
  entity2bis = "Entity 2"
212
213
 
213
- TestAnnotation.setup(entity1, :test_annotation => "1")
214
- TestAnnotation.setup(entity2, :test_annotation => "2")
215
- TestAnnotation.setup(entity2bis, :test_annotation => "2")
214
+ TestAnnotationModule.setup(entity1, :test_annotation => "1")
215
+ TestAnnotationModule.setup(entity2, :test_annotation => "2")
216
+ TestAnnotationModule.setup(entity2bis, :test_annotation => "2")
216
217
 
217
218
  annotations = [entity1, entity2, entity2bis]
218
219
 
@@ -199,7 +199,6 @@ class TestEntity < Test::Unit::TestCase
199
199
 
200
200
 
201
201
  $processed_multiple = []
202
- Log.severity = 0
203
202
 
204
203
  array = ReversableString.setup([string1, string2])
205
204
  assert_equal [string1, string2].collect{|s| s.chars}, array.multiple_annotation_list
@@ -62,7 +62,7 @@ class TestKnowledgeBase < Test::Unit::TestCase
62
62
  kb = KnowledgeBase.new tmpdir, Organism.default_code("Hsa")
63
63
  kb.format = {"Gene" => "Ensembl Gene ID"}
64
64
 
65
- kb.register :tfacts, TFacts.regulators, :source =>"=~Associated Gene Name"
65
+ kb.register :tfacts, TFactS.regulators, :source =>"=~Associated Gene Name"
66
66
 
67
67
  kb.get_index(:tfacts).reverse
68
68
  end
@@ -74,7 +74,7 @@ class TestKnowledgeBase < Test::Unit::TestCase
74
74
  kb = KnowledgeBase.new tmpdir, Organism.default_code("Hsa")
75
75
  kb.format = {"Gene" => "Ensembl Gene ID"}
76
76
 
77
- kb.register :tfacts, TFacts.regulators, :source =>"=~Associated Gene Name"
77
+ kb.register :tfacts, TFactS.regulators, :source =>"=~Associated Gene Name"
78
78
 
79
79
  assert_equal "Ensembl Gene ID", kb.get_database(:tfacts).key_field
80
80
 
@@ -113,10 +113,9 @@ class TestKnowledgeBase < Test::Unit::TestCase
113
113
 
114
114
  def test_knowledge_base_reuse
115
115
  organism = Organism.default_code("Hsa")
116
- Log.severity = 0
117
116
  TmpFile.with_file do |tmpdir|
118
117
  Path.setup(tmpdir)
119
- Association.index(TFacts.regulators, :persist_file => tmpdir.tfacts, :format => {"Gene" => "Ensembl Gene ID"}, :namespace => Organism.default_code("Hsa"))
118
+ Association.index(TFactS.regulators, :persist_file => tmpdir.tfacts, :format => {"Gene" => "Ensembl Gene ID"}, :namespace => Organism.default_code("Hsa"))
120
119
 
121
120
  kb = KnowledgeBase.load(tmpdir)
122
121
  assert kb.identify_source('tfacts', "TP53") =~ /ENSG/
@@ -4,12 +4,6 @@ require 'rbbt/annotations'
4
4
  require 'rbbt/util/tmpfile'
5
5
  require 'test/unit'
6
6
 
7
- module TestAnnotation
8
- extend Annotation
9
-
10
- self.annotation :test_annotation
11
- end
12
-
13
7
  class TestPersist < Test::Unit::TestCase
14
8
 
15
9
  def test_array_persist
@@ -78,4 +72,14 @@ class TestPersist < Test::Unit::TestCase
78
72
  stream.join
79
73
  end
80
74
  end
75
+
76
+ def test_newer
77
+ TmpFile.with_file("Test1") do |tmp1|
78
+ sleep 1
79
+ TmpFile.with_file("Test1") do |tmp2|
80
+ assert Persist.newer?(tmp1, tmp2)
81
+ assert ! Persist.newer?(tmp2, tmp1)
82
+ end
83
+ end
84
+ end
81
85
  end
@@ -204,7 +204,6 @@ class TestWorkflow < Test::Unit::TestCase
204
204
 
205
205
  def test_update_on_input_dependency_update
206
206
  Open.repository_dirs << File.join(ENV["HOME"],".rbbt/tmp/test/workflow")
207
- Log.severity = 0
208
207
  Misc.with_env "RBBT_UPDATE", "true" do
209
208
  send_input_dep_to_reverse_job = TestWF.job(:send_input_dep_to_reverse, nil, :name => "Miguel")
210
209
  send_input_dep_to_reverse_job.clean
@@ -376,21 +375,23 @@ class TestWorkflow < Test::Unit::TestCase
376
375
  def test_delete_dep
377
376
  job = TestWF.job(:t3).recursive_clean
378
377
  job.run
379
- assert job.checks.select{|d| d.task_name.to_s == "t1" }.any?
380
- job = TestWF.job(:t3)
381
- job.step(:t1).clean
382
- assert job.checks.select{|d| d.task_name.to_s == "t1" }.empty?
383
- job = TestWF.job(:t3).recursive_clean
384
- job.run
385
- assert job.checks.select{|d| d.task_name.to_s == "t1" }.any?
386
- job = TestWF.job(:t3)
387
- sleep 1
388
- Open.touch job.step(:t1).path
389
- Misc.with_env "RBBT_UPDATE", "false" do
390
- assert job.updated?
391
- end
392
- Misc.with_env "RBBT_UPDATE", "true" do
393
- assert ! job.updated?
378
+ Misc.with_env "RBBT_UPDATE", 'true' do
379
+ assert job.checks.select{|d| d.task_name.to_s == "t1" }.any?
380
+ job = TestWF.job(:t3)
381
+ job.step(:t1).clean
382
+ assert job.checks.select{|d| d.task_name.to_s == "t1" }.empty?
383
+ job = TestWF.job(:t3).recursive_clean
384
+ job.run
385
+ assert job.checks.select{|d| d.task_name.to_s == "t1" }.any?
386
+ job = TestWF.job(:t3)
387
+ sleep 1
388
+ Open.touch job.step(:t1).path
389
+ Misc.with_env "RBBT_UPDATE", "false" do
390
+ assert job.updated?
391
+ end
392
+ Misc.with_env "RBBT_UPDATE", "true" do
393
+ assert ! job.updated?
394
+ end
394
395
  end
395
396
  end
396
397
 
@@ -222,6 +222,17 @@ row2 aa|aa|AA|AA b1|b2|B1|B2 Id1|Id1|Id2|Id2
222
222
  end
223
223
  end
224
224
 
225
+ def test_to_s_no_fields
226
+ file1 =<<-EOF
227
+ row6 dd dd ee
228
+ row1 a b c
229
+ row2 A B C
230
+ row3 1 2 3
231
+ EOF
232
+ tsv1 = TSV.open StringIO.new(file1), :sep => " "
233
+ assert tsv1.to_s(:sort, true).include?('dd')
234
+ end
235
+
225
236
  def test_to_s_unmerge_expand
226
237
  content =<<-EOF
227
238
  #Id ValueA ValueB OtherID