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.
- data/README.rdoc +65 -0
- data/bin/run_workflow.rb +142 -69
- data/lib/rbbt-util.rb +3 -3
- data/lib/rbbt.rb +12 -3
- data/lib/rbbt/annotations.rb +215 -0
- data/lib/rbbt/{util/fix_width_table.rb → fix_width_table.rb} +17 -13
- data/lib/rbbt/persist.rb +164 -0
- data/lib/rbbt/persist/tsv.rb +135 -0
- data/lib/rbbt/resource.rb +100 -0
- data/lib/rbbt/resource/path.rb +180 -0
- data/lib/rbbt/resource/rake.rb +48 -0
- data/lib/rbbt/resource/util.rb +111 -0
- data/lib/rbbt/resource/with_key.rb +28 -0
- data/lib/rbbt/tsv.rb +134 -0
- data/lib/rbbt/tsv/accessor.rb +345 -0
- data/lib/rbbt/tsv/attach.rb +183 -0
- data/lib/rbbt/tsv/attach/util.rb +277 -0
- data/lib/rbbt/{util/tsv/filters.rb → tsv/filter.rb} +76 -37
- data/lib/rbbt/tsv/index.rb +453 -0
- data/lib/rbbt/tsv/manipulate.rb +361 -0
- data/lib/rbbt/tsv/parser.rb +231 -0
- data/lib/rbbt/tsv/serializers.rb +79 -0
- data/lib/rbbt/tsv/util.rb +67 -0
- data/lib/rbbt/util/R.rb +3 -3
- data/lib/rbbt/util/chain_methods.rb +64 -0
- data/lib/rbbt/util/cmd.rb +17 -13
- data/lib/rbbt/util/excel2tsv.rb +4 -3
- data/lib/rbbt/util/log.rb +1 -0
- data/lib/rbbt/util/misc.rb +296 -285
- data/lib/rbbt/util/open.rb +9 -2
- data/lib/rbbt/util/persistence.rb +1 -1
- data/lib/rbbt/util/task/job.rb +3 -1
- data/lib/rbbt/workflow.rb +193 -0
- data/lib/rbbt/workflow/accessor.rb +249 -0
- data/lib/rbbt/workflow/annotate.rb +60 -0
- data/lib/rbbt/workflow/soap.rb +100 -0
- data/lib/rbbt/workflow/step.rb +102 -0
- data/lib/rbbt/workflow/task.rb +76 -0
- data/test/rbbt/resource/test_path.rb +12 -0
- data/test/rbbt/test_annotations.rb +106 -0
- data/test/rbbt/{util/test_fix_width_table.rb → test_fix_width_table.rb} +8 -9
- data/test/rbbt/test_resource.rb +66 -0
- data/test/rbbt/test_tsv.rb +332 -0
- data/test/rbbt/test_workflow.rb +102 -0
- data/test/rbbt/tsv/test_accessor.rb +163 -0
- data/test/rbbt/{util/tsv → tsv}/test_attach.rb +86 -43
- data/test/rbbt/{util/tsv/test_filters.rb → tsv/test_filter.rb} +31 -13
- data/test/rbbt/tsv/test_index.rb +284 -0
- data/test/rbbt/{util/tsv → tsv}/test_manipulate.rb +35 -105
- data/test/rbbt/util/test_R.rb +1 -1
- data/test/rbbt/util/test_chain_methods.rb +22 -0
- data/test/rbbt/util/test_filecache.rb +0 -1
- data/test/rbbt/util/test_misc.rb +97 -79
- data/test/rbbt/util/test_open.rb +1 -0
- data/test/rbbt/util/test_tmpfile.rb +1 -1
- data/test/rbbt/workflow/test_soap.rb +103 -0
- data/test/rbbt/workflow/test_step.rb +142 -0
- data/test/rbbt/workflow/test_task.rb +84 -0
- data/test/test_helper.rb +7 -7
- metadata +80 -54
- data/lib/rbbt/util/rake.rb +0 -176
- data/lib/rbbt/util/resource.rb +0 -355
- data/lib/rbbt/util/task.rb +0 -183
- data/lib/rbbt/util/tc_hash.rb +0 -324
- data/lib/rbbt/util/tsv.rb +0 -236
- data/lib/rbbt/util/tsv/accessor.rb +0 -312
- data/lib/rbbt/util/tsv/attach.rb +0 -416
- data/lib/rbbt/util/tsv/index.rb +0 -419
- data/lib/rbbt/util/tsv/manipulate.rb +0 -300
- data/lib/rbbt/util/tsv/misc.rb +0 -41
- data/lib/rbbt/util/tsv/parse.rb +0 -324
- data/lib/rbbt/util/tsv/resource.rb +0 -88
- data/lib/rbbt/util/workflow.rb +0 -135
- data/lib/rbbt/util/workflow/soap.rb +0 -116
- data/test/rbbt/util/test_persistence.rb +0 -201
- data/test/rbbt/util/test_rake.rb +0 -54
- data/test/rbbt/util/test_resource.rb +0 -77
- data/test/rbbt/util/test_task.rb +0 -133
- data/test/rbbt/util/test_tc_hash.rb +0 -144
- data/test/rbbt/util/test_tsv.rb +0 -221
- data/test/rbbt/util/test_workflow.rb +0 -135
- data/test/rbbt/util/tsv/test_accessor.rb +0 -150
- data/test/rbbt/util/tsv/test_index.rb +0 -241
- data/test/rbbt/util/tsv/test_parse.rb +0 -87
- data/test/rbbt/util/tsv/test_resource.rb +0 -9
data/lib/rbbt/util/workflow.rb
DELETED
@@ -1,135 +0,0 @@
|
|
1
|
-
require 'rbbt/util/resource'
|
2
|
-
require 'rbbt/util/task'
|
3
|
-
require 'rbbt/util/persistence'
|
4
|
-
require 'rbbt/util/misc'
|
5
|
-
|
6
|
-
module WorkFlow
|
7
|
-
|
8
|
-
def self.require_workflow(wf_name, wf_dir = nil)
|
9
|
-
|
10
|
-
if File.exists? wf_name
|
11
|
-
require "./workflow.rb"
|
12
|
-
return
|
13
|
-
end
|
14
|
-
|
15
|
-
wf_dir ||= case
|
16
|
-
when File.exists?(File.join(File.dirname(Resource.caller_lib_dir), wf_name))
|
17
|
-
File.join(File.dirname(Resource.caller_lib_dir), wf_name)
|
18
|
-
when defined? Rbbt
|
19
|
-
if Rbbt.pkg.etc.workflow_dir.exists?
|
20
|
-
File.join(pkg.etc.workflow_dir.read.strip, wf_name)
|
21
|
-
else
|
22
|
-
Rbbt.workflows[wf_name]
|
23
|
-
end
|
24
|
-
else
|
25
|
-
File.join(ENV["HOME"], '.workflows')
|
26
|
-
end
|
27
|
-
|
28
|
-
wf_dir = Resource::Path.path(wf_dir)
|
29
|
-
$LOAD_PATH.unshift(File.join(File.dirname(wf_dir["workflow.rb"].find), 'lib'))
|
30
|
-
require wf_dir["workflow.rb"].find
|
31
|
-
end
|
32
|
-
|
33
|
-
def self.extended(base)
|
34
|
-
class << base
|
35
|
-
attr_accessor :tasks, :jobdir, :dangling_options, :dangling_option_descriptions,
|
36
|
-
:dangling_option_types, :dangling_option_defaults, :dangling_dependencies, :last_task
|
37
|
-
end
|
38
|
-
|
39
|
-
base.extend Resource
|
40
|
-
base.lib_dir = Resource.caller_base_dir if base.class == Object
|
41
|
-
base.tasks = {}
|
42
|
-
base.tasks.extend IndiferentHash
|
43
|
-
base.jobdir = (File.exists?(base.var.find(:lib)) ? base.var.find(:lib) : base.var.find)
|
44
|
-
base.clear_dangling
|
45
|
-
end
|
46
|
-
|
47
|
-
def tasks=(tasks)
|
48
|
-
tasks.extend IndiferentHash
|
49
|
-
@tasks = tasks
|
50
|
-
end
|
51
|
-
|
52
|
-
def local_persist(*args, &block)
|
53
|
-
argsv = *args
|
54
|
-
options = argsv.pop
|
55
|
-
if Hash === options
|
56
|
-
options.merge!(:persistence_dir => cache.find(:lib))
|
57
|
-
argsv.push options
|
58
|
-
else
|
59
|
-
argsv.push options
|
60
|
-
argsv.push({:persistence_dir => cache.find(:lib)})
|
61
|
-
end
|
62
|
-
Persistence.persist(*argsv, &block)
|
63
|
-
end
|
64
|
-
|
65
|
-
def clear_dangling
|
66
|
-
@dangling_options = []
|
67
|
-
@dangling_option_descriptions = {}
|
68
|
-
@dangling_option_types = {}
|
69
|
-
@dangling_option_defaults = {}
|
70
|
-
@dangling_dependencies = nil
|
71
|
-
@dangling_description = nil
|
72
|
-
end
|
73
|
-
|
74
|
-
def task_option(*args)
|
75
|
-
name, description, type, default = *args
|
76
|
-
@dangling_options << name if name
|
77
|
-
@dangling_option_descriptions[name] = description if description
|
78
|
-
@dangling_option_types[name] = type if type
|
79
|
-
@dangling_option_defaults[name] = default if default
|
80
|
-
end
|
81
|
-
|
82
|
-
def task_dependencies(*dependencies)
|
83
|
-
dependencies = dependencies.flatten
|
84
|
-
@dangling_dependencies = dependencies.collect{|dep| Symbol === dep ? tasks[dep] : dep }
|
85
|
-
end
|
86
|
-
|
87
|
-
def task_description(description)
|
88
|
-
@dangling_description = description
|
89
|
-
end
|
90
|
-
|
91
|
-
def process_dangling
|
92
|
-
res = [
|
93
|
-
@dangling_options,
|
94
|
-
Misc.merge2hash(@dangling_options, @dangling_option_descriptions.values_at(*@dangling_options)),
|
95
|
-
Misc.merge2hash(@dangling_options, @dangling_option_types.values_at(*@dangling_options)),
|
96
|
-
Misc.merge2hash(@dangling_options, @dangling_option_defaults.values_at(*@dangling_options)),
|
97
|
-
(@dangling_dependencies || [@last_task]).compact,
|
98
|
-
@dangling_description,
|
99
|
-
]
|
100
|
-
|
101
|
-
clear_dangling
|
102
|
-
res
|
103
|
-
end
|
104
|
-
|
105
|
-
def task(name, &block)
|
106
|
-
if Hash === name
|
107
|
-
persistence = name.values.first
|
108
|
-
name = name.keys.first
|
109
|
-
else
|
110
|
-
persistence = :marshal
|
111
|
-
end
|
112
|
-
|
113
|
-
options, option_descriptions, option_types, option_defaults, dependencies, description = process_dangling
|
114
|
-
option_descriptions.delete_if do |k,v| v.nil? end
|
115
|
-
option_types.delete_if do |k,v| v.nil? end
|
116
|
-
option_defaults.delete_if do |k,v| v.nil? end
|
117
|
-
task = Task.new name, persistence, options, option_descriptions, option_types, option_defaults, self, dependencies, self, description, &block
|
118
|
-
tasks[name] = task
|
119
|
-
@last_task = task
|
120
|
-
end
|
121
|
-
|
122
|
-
def job(task, jobname = "Default", *args)
|
123
|
-
raise "Task '#{ task }' unkown" if tasks[task].nil?
|
124
|
-
tasks[task].job(jobname, *args)
|
125
|
-
end
|
126
|
-
|
127
|
-
def run(*args)
|
128
|
-
job(*args).run
|
129
|
-
end
|
130
|
-
|
131
|
-
def load_job(taskname, job_id)
|
132
|
-
tasks[taskname].load(job_id)
|
133
|
-
end
|
134
|
-
|
135
|
-
end
|
@@ -1,116 +0,0 @@
|
|
1
|
-
require 'simplews'
|
2
|
-
require 'rbbt/util/workflow'
|
3
|
-
require 'base64'
|
4
|
-
|
5
|
-
class WorkFlowWS < SimpleWS
|
6
|
-
|
7
|
-
def self.klass=(klass)
|
8
|
-
@klass = klass
|
9
|
-
end
|
10
|
-
|
11
|
-
def self.klass
|
12
|
-
@klass || self
|
13
|
-
end
|
14
|
-
|
15
|
-
def task(name)
|
16
|
-
self.class.klass.tasks[name]
|
17
|
-
end
|
18
|
-
|
19
|
-
def export(name)
|
20
|
-
task = self.class.klass.tasks[name]
|
21
|
-
|
22
|
-
options, optional_options = task.option_summary
|
23
|
-
|
24
|
-
desc task.description
|
25
|
-
options.each do |option|
|
26
|
-
param_desc option[:name] => option[:description] if option[:description]
|
27
|
-
end
|
28
|
-
param_desc :return => "Job Identifier"
|
29
|
-
option_names = [:name] + options.collect{|option| option[:name]}
|
30
|
-
option_types = Hash[*option_names.zip([ :string] + options.collect{|option| option[:type] || :string}).flatten]
|
31
|
-
serve name, option_names, option_types do |*args|
|
32
|
-
task(name).job(*args).fork.id
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
param_desc :task => "Task name"
|
37
|
-
param_desc :id => "Job id"
|
38
|
-
serve :abort, %w(task id), {:return => false, :task => :string, :id => :string} do |task, id|
|
39
|
-
task(task).load(id).abort
|
40
|
-
nil
|
41
|
-
end
|
42
|
-
|
43
|
-
param_desc :task => "Task name"
|
44
|
-
param_desc :id => "Job id"
|
45
|
-
param_desc :return => "Info hash in yaml"
|
46
|
-
serve :info, %w(task id), {:task => :string, :id => :string} do |task, id|
|
47
|
-
Open.read(task(task).load(id).info_file)
|
48
|
-
end
|
49
|
-
|
50
|
-
param_desc :task => "Task name"
|
51
|
-
param_desc :id => "Job id"
|
52
|
-
param_desc :return => "Step"
|
53
|
-
serve :step, %w(task id), {:task => :string, :id => :string} do |task, id|
|
54
|
-
task(task).load(id).step.to_s
|
55
|
-
end
|
56
|
-
|
57
|
-
param_desc :task => "Task name"
|
58
|
-
param_desc :id => "Job id"
|
59
|
-
param_desc :return => "True if job is done (error or not)"
|
60
|
-
serve :done, %w(task id), {:return => :boolean, :task => :string, :id => :string} do |task, id|
|
61
|
-
task(task).load(id).done?
|
62
|
-
end
|
63
|
-
|
64
|
-
param_desc :task => "Task name"
|
65
|
-
param_desc :id => "Job id"
|
66
|
-
param_desc :return => "True if job finished with error. Error message is the last of the messages (see 'messages' method)."
|
67
|
-
serve :error, %w(task id), {:return => :boolean, :task => :string, :id => :string} do |task, id|
|
68
|
-
task(task).load(id).error?
|
69
|
-
end
|
70
|
-
|
71
|
-
param_desc :task => "Task name"
|
72
|
-
param_desc :id => "Job id"
|
73
|
-
param_desc :return => "Messages"
|
74
|
-
serve :messages, %w(task id), {:return => :array, :task => :string, :id => :string} do |task, id|
|
75
|
-
task(task).load(id).messages
|
76
|
-
end
|
77
|
-
|
78
|
-
param_desc :task => "Task name"
|
79
|
-
param_desc :id => "Job id"
|
80
|
-
param_desc :return => "Job result in Base64"
|
81
|
-
serve :load, %w(task id), {:return => :binary, :task => :string, :id => :string} do |task, id|
|
82
|
-
Base64.encode64(task(task).load(id).read)
|
83
|
-
end
|
84
|
-
|
85
|
-
param_desc :task => "Task name"
|
86
|
-
param_desc :id => "Job id"
|
87
|
-
param_desc :return => "File names"
|
88
|
-
serve :files, %w(task id), {:return => :array, :task => :string, :id => :string} do |task, id|
|
89
|
-
task(task).load(id).files
|
90
|
-
end
|
91
|
-
|
92
|
-
param_desc :task => "Task name"
|
93
|
-
param_desc :id => "Job id"
|
94
|
-
param_desc :file => "File name"
|
95
|
-
param_desc :return => "File contents in Base64"
|
96
|
-
serve :file, %w(task id file), {:return => :array, :task => :string, :id => :string, :file => :string} do |task, id|
|
97
|
-
Base64.encode64(task(task).load(id).files(file).read)
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
|
102
|
-
if __FILE__ == $0
|
103
|
-
|
104
|
-
require 'rbbt/sources/organism/sequence'
|
105
|
-
class SequenceWF < WorkFlowWS
|
106
|
-
self.klass = Organism
|
107
|
-
end
|
108
|
-
|
109
|
-
wf = SequenceWF.new
|
110
|
-
wf.export :genomic_mutations_to_genes
|
111
|
-
Open.write('/tmp/foo.wsdl', wf.wsdl)
|
112
|
-
wf.start
|
113
|
-
end
|
114
|
-
|
115
|
-
|
116
|
-
|
@@ -1,201 +0,0 @@
|
|
1
|
-
require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
2
|
-
require 'rbbt/util/persistence'
|
3
|
-
|
4
|
-
class TestPersistence < Test::Unit::TestCase
|
5
|
-
|
6
|
-
def test_string
|
7
|
-
string = "test string"
|
8
|
-
TmpFile.with_file do |f|
|
9
|
-
Persistence.persist("token_file", :Test, :string, :persistence_file => f) do string end
|
10
|
-
assert File.exists? f
|
11
|
-
assert_equal string, Open.read(f)
|
12
|
-
|
13
|
-
FileUtils.rm f
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
def test_yaml
|
18
|
-
object = [1,2,2]
|
19
|
-
TmpFile.with_file do |f|
|
20
|
-
Persistence.persist("token_file", :Test, :yaml, :persistence_file => f) do object end
|
21
|
-
assert File.exists? f
|
22
|
-
assert_equal object, YAML.load(File.open(f))
|
23
|
-
assert_equal YAML.dump(object), Open.read(f)
|
24
|
-
|
25
|
-
FileUtils.rm f
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
def test_marshal
|
30
|
-
object = [1,2,2]
|
31
|
-
TmpFile.with_file do |f|
|
32
|
-
Persistence.persist("token_file", :Test, :marshal, :persistence_file => f) do object end
|
33
|
-
assert File.exists? f
|
34
|
-
assert_equal object, Marshal.load(File.open(f))
|
35
|
-
assert_equal Marshal.dump(object), Open.read(f)
|
36
|
-
|
37
|
-
FileUtils.rm f
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_tsv
|
42
|
-
object = {:a => 1, :b => 2}
|
43
|
-
TmpFile.with_file do |f|
|
44
|
-
Persistence.persist("token_file", :Test, :tsv_extra, :persistence_file => f) do
|
45
|
-
[object, {:fields => ["Number"], :key_field => "Letter", :type => :single, :cast => :to_i, :filename => "foo"}]
|
46
|
-
end
|
47
|
-
|
48
|
-
assert File.exists? f
|
49
|
-
new, extra = Persistence.persist("token_file", :Test, :tsv_extra, :persistence_file => f)
|
50
|
-
|
51
|
-
assert_equal 1, new["a"]
|
52
|
-
assert_equal "Letter", new.key_field
|
53
|
-
|
54
|
-
FileUtils.rm f
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_tsv2
|
59
|
-
content =<<-EOF
|
60
|
-
#Id ValueA ValueB OtherID
|
61
|
-
row1 a|aa|aaa b Id1|Id2
|
62
|
-
row2 A B Id3
|
63
|
-
EOF
|
64
|
-
|
65
|
-
TmpFile.with_file(content) do |filename|
|
66
|
-
tsv = TSV.new(filename, :sep => /\s+/, :key => "OtherID")
|
67
|
-
tsv2 = Persistence.persist_tsv_string(tsv, 'Test', {}) do tsv end
|
68
|
-
tsv2 = Persistence.persist_tsv_string(tsv, 'Test', {}) do tsv end
|
69
|
-
|
70
|
-
(Object::TSV::EXTRA_ACCESSORS + [:fields, :key_field]).each do |key|
|
71
|
-
assert_equal tsv.send(key), tsv2.send(key)
|
72
|
-
end
|
73
|
-
tsv.each do |key,values|
|
74
|
-
assert_equal values, tsv2[key]
|
75
|
-
end
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
def test_tsv3
|
80
|
-
content =<<-EOF
|
81
|
-
#Id ValueA ValueB OtherID
|
82
|
-
row1 a|aa|aaa b Id1|Id2
|
83
|
-
row2 A B Id3
|
84
|
-
EOF
|
85
|
-
|
86
|
-
TmpFile.with_file(content) do |filename|
|
87
|
-
tsv = TSV.new(filename, :sep => /\s+/, :key => "OtherID")
|
88
|
-
tsv2 = Persistence.persist_tsv(tsv, 'Test', {}) do tsv end
|
89
|
-
tsv2 = Persistence.persist_tsv(tsv, 'Test', {}) do tsv end
|
90
|
-
|
91
|
-
(Object::TSV::EXTRA_ACCESSORS + [:fields, :key_field]).each do |key|
|
92
|
-
assert_equal tsv.send(key), tsv2.send(key)
|
93
|
-
end
|
94
|
-
tsv.each do |key,values|
|
95
|
-
assert_equal values, tsv2[key]
|
96
|
-
end
|
97
|
-
end
|
98
|
-
end
|
99
|
-
|
100
|
-
def test_tsv4
|
101
|
-
content =<<-EOF
|
102
|
-
#Id ValueA ValueB OtherID
|
103
|
-
row1 a|aa|aaa b Id1|Id2
|
104
|
-
row2 A B Id3
|
105
|
-
EOF
|
106
|
-
|
107
|
-
TmpFile.with_file(content) do |filename|
|
108
|
-
tsv = Persistence.persist_tsv(filename, 'Test', {}) do TSV.new(filename, :sep => /\s+/, :key => "OtherID") end
|
109
|
-
tsv2 = Persistence.persist_tsv(filename, 'Test', {}) do tsv end
|
110
|
-
|
111
|
-
(Object::TSV::EXTRA_ACCESSORS + [:fields, :key_field]).each do |key|
|
112
|
-
assert_equal tsv.send(key), tsv2.send(key)
|
113
|
-
end
|
114
|
-
tsv.each do |key,values|
|
115
|
-
assert_equal values, tsv2[key]
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def test_integer
|
121
|
-
content =<<-EOF
|
122
|
-
#Id ValueA
|
123
|
-
row1 1
|
124
|
-
row2 2
|
125
|
-
EOF
|
126
|
-
|
127
|
-
TmpFile.with_file(content) do |filename|
|
128
|
-
tsv = TSV.new(filename, :single, :sep => /\s+/, :cast => :to_i, :persistence => true)
|
129
|
-
assert_equal 1, tsv["row1"]
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_integer
|
134
|
-
content =<<-EOF
|
135
|
-
row1 1 2 3 4 5
|
136
|
-
row2 2 4 6 8
|
137
|
-
EOF
|
138
|
-
|
139
|
-
TmpFile.with_file(content) do |filename|
|
140
|
-
tsv = TSV.new(filename, :flat, :sep => /\s+/, :cast => :to_i, :persistence => true)
|
141
|
-
assert_equal [1,2,3,4,5], tsv["row1"]
|
142
|
-
end
|
143
|
-
end
|
144
|
-
|
145
|
-
def test_persist_dir
|
146
|
-
string = Persistence.persist("Test", :Test, :string, :persistence_dir => Rbbt.tmp.test.persistence) do
|
147
|
-
"Test"
|
148
|
-
end
|
149
|
-
|
150
|
-
assert Dir.glob(Rbbt.tmp.test.persistence.find + '*').length == 1
|
151
|
-
|
152
|
-
assert_equal "Test", string
|
153
|
-
end
|
154
|
-
|
155
|
-
def test_non_blocking
|
156
|
-
$a = TSV.new datafile_test('test.tsv'), :persistence => true, :persistence_dir => Rbbt.tmp.test.persistence
|
157
|
-
$a.data.read
|
158
|
-
|
159
|
-
pid = Process.fork do
|
160
|
-
$b = TSV.new datafile_test('test.tsv'), :persistence => true, :persistence_dir => Rbbt.tmp.test.persistence
|
161
|
-
$b.data.close
|
162
|
-
end
|
163
|
-
|
164
|
-
Process.wait pid
|
165
|
-
end
|
166
|
-
|
167
|
-
def test_persist_fwt
|
168
|
-
content =<<-EOF
|
169
|
-
#: :sep=/\\s+/
|
170
|
-
#Id Start End
|
171
|
-
row1 1 10
|
172
|
-
row2 20 30
|
173
|
-
EOF
|
174
|
-
|
175
|
-
TmpFile.with_file(content) do |filename|
|
176
|
-
fwt = Persistence.persist(filename, :Range, :fwt, :persistence_dir => Rbbt.tmp.test.persistence) do
|
177
|
-
fwt = TSV.new(filename).range_index("Start", "End", :persistence => false)
|
178
|
-
assert fwt[15].empty?
|
179
|
-
assert fwt[25].include? "row2"
|
180
|
-
fwt
|
181
|
-
end
|
182
|
-
|
183
|
-
assert fwt[5].include? "row1"
|
184
|
-
assert fwt[(5..25)].include? "row1"
|
185
|
-
assert fwt[(5..25)].include? "row2"
|
186
|
-
|
187
|
-
fwt = Persistence.persist(filename, :Range, :fwt, :persistence_dir => Rbbt.tmp.test.persistence) do
|
188
|
-
assert false
|
189
|
-
end
|
190
|
-
|
191
|
-
assert fwt[5].include? "row1"
|
192
|
-
assert fwt[(5..25)].include? "row1"
|
193
|
-
assert fwt[(5..25)].include? "row2"
|
194
|
-
|
195
|
-
end
|
196
|
-
|
197
|
-
end
|
198
|
-
|
199
|
-
|
200
|
-
end
|
201
|
-
|