rbbt-util 5.8.4 → 5.8.6
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 +4 -4
- data/lib/rbbt/util/log.rb +4 -0
- data/lib/rbbt/util/misc.rb +42 -0
- data/lib/rbbt/util/simpleopt/doc.rb +13 -11
- data/lib/rbbt/workflow.rb +1 -10
- data/lib/rbbt/workflow/doc.rb +58 -0
- data/lib/rbbt/workflow/usage.rb +28 -6
- data/share/rbbt_commands/workflow/task +3 -2
- data/test/rbbt/util/test_misc.rb +84 -37
- data/test/rbbt/workflow/test_doc.rb +29 -0
- metadata +4 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: aea518df37bf55a5cb14bb009dc3c3125807563d
|
4
|
+
data.tar.gz: 3d532e26ea01b630418ab2e004c3d6a516c97643
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1959de32e8e47f670369dfc897986b4c0dd47f2be68239e23c9d09e35beb71cf68cf578ffd9bc47c3ad1f81f040097a1d333108c6ad32404cc045df8128cfca7
|
7
|
+
data.tar.gz: faedb2e24d5dc400f57802a1fb2c377f421d1b8e42c820bc8e117e5e7d361787ac0e5a5948f086ac1654ff42c55e782d4d766c2779cd1e50a7105850f4000505
|
data/lib/rbbt/util/log.rb
CHANGED
@@ -27,6 +27,10 @@ module Log
|
|
27
27
|
SEVERITY_COLOR = [reset, cyan, green, magenta, blue, yellow, red] #.collect{|e| "\033[#{e}"}
|
28
28
|
HIGHLIGHT = "\033[1m"
|
29
29
|
|
30
|
+
def self.uncolor(str)
|
31
|
+
Term::ANSIColor.uncolor(str)
|
32
|
+
end
|
33
|
+
|
30
34
|
def self.color(severity, str = nil)
|
31
35
|
return str || "" if nocolor
|
32
36
|
color = SEVERITY_COLOR[severity] if Fixnum === severity
|
data/lib/rbbt/util/misc.rb
CHANGED
@@ -31,6 +31,48 @@ end
|
|
31
31
|
Lockfile.refresh = false if ENV["RBBT_NO_LOCKFILE_REFRESH"] == "true"
|
32
32
|
module Misc
|
33
33
|
|
34
|
+
def self.format_paragraph(text, size = 80, indent = 0, offset = 0)
|
35
|
+
words = text.gsub(/\s+/, "\s").split(" ")
|
36
|
+
lines = []
|
37
|
+
line = " "*offset
|
38
|
+
word = words.shift
|
39
|
+
while word
|
40
|
+
while word and line.length + word.length < size
|
41
|
+
line << word << " "
|
42
|
+
word = words.shift
|
43
|
+
end
|
44
|
+
lines << ((" " * indent) << line[0..-2])
|
45
|
+
line = ""
|
46
|
+
end
|
47
|
+
(lines * "\n")
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.format_definition_list_item(dt, dd, size = 80, indent = 20, color = :yellow)
|
51
|
+
dt = dt.to_s + ":" unless dd.empty?
|
52
|
+
dt = Log.color color, dt if color
|
53
|
+
len = Log.uncolor(dt).length
|
54
|
+
|
55
|
+
if indent < 0
|
56
|
+
text = format_paragraph(dd, size, indent.abs+1, 0)
|
57
|
+
text = dt << "\n" << text
|
58
|
+
else
|
59
|
+
offset = len - indent
|
60
|
+
offset = 0 if offset < 0
|
61
|
+
text = format_paragraph(dd, size, indent.abs+1, offset)
|
62
|
+
text[0..len-1] = dt
|
63
|
+
end
|
64
|
+
text
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.format_definition_list(defs, size = 80, indent = 20, color = :yellow)
|
68
|
+
entries = []
|
69
|
+
defs.each do |dt,dd|
|
70
|
+
text = format_definition_list_item(dt,dd,size,indent, color)
|
71
|
+
entries << text
|
72
|
+
end
|
73
|
+
entries * "\n\n"
|
74
|
+
end
|
75
|
+
|
34
76
|
def self.read_stream(stream, size)
|
35
77
|
str = nil
|
36
78
|
while not str = stream.read(size)
|
@@ -26,20 +26,22 @@ module SOPT
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def self.input_format(name, type = nil, default = nil, short = nil)
|
29
|
-
input_str = (short.nil? or short.empty?) ?
|
29
|
+
input_str = (short.nil? or short.empty?) ? "--#{name}" : "-#{short},--#{name}"
|
30
30
|
input_str = Log.color(:blue, input_str)
|
31
|
-
|
31
|
+
extra = case type
|
32
32
|
when nil
|
33
|
-
"
|
33
|
+
""
|
34
34
|
when :boolean
|
35
|
-
"[=false]
|
35
|
+
"[=false]"
|
36
36
|
when :tsv, :text
|
37
|
-
"=<
|
37
|
+
"=<file|->"
|
38
38
|
when :array
|
39
|
-
"=<
|
39
|
+
"=<list|file|->"
|
40
40
|
else
|
41
|
-
"=<#{ type }
|
41
|
+
"=<#{ type }>"
|
42
42
|
end
|
43
|
+
extra << " (default '#{default}')" if default != nil
|
44
|
+
input_str << Log.color(:green, extra)
|
43
45
|
end
|
44
46
|
|
45
47
|
def self.input_doc(inputs, input_types = nil, input_descriptions = nil, input_defaults = nil, input_shortcuts = nil)
|
@@ -65,9 +67,9 @@ module SOPT
|
|
65
67
|
type = :string if type.nil?
|
66
68
|
register(shortcut, name, type, description) unless self.inputs.include? name
|
67
69
|
|
68
|
-
|
69
|
-
|
70
|
-
|
70
|
+
name = SOPT.input_format(name, type.to_sym, default, shortcut)
|
71
|
+
description
|
72
|
+
Misc.format_definition_list_item(name, description, 80, 31, nil)
|
71
73
|
end * "\n"
|
72
74
|
end
|
73
75
|
|
@@ -82,7 +84,7 @@ module SOPT
|
|
82
84
|
|
83
85
|
#{ Log.color :magenta, "## DESCRIPTION"}
|
84
86
|
|
85
|
-
#{description}
|
87
|
+
#{Misc.format_paragraph description}
|
86
88
|
|
87
89
|
#{ Log.color :magenta, "## OPTIONS"}
|
88
90
|
|
data/lib/rbbt/workflow.rb
CHANGED
@@ -2,6 +2,7 @@ require 'rbbt/workflow/definition'
|
|
2
2
|
require 'rbbt/workflow/task'
|
3
3
|
require 'rbbt/workflow/step'
|
4
4
|
require 'rbbt/workflow/accessor'
|
5
|
+
require 'rbbt/workflow/doc'
|
5
6
|
|
6
7
|
module Workflow
|
7
8
|
|
@@ -149,16 +150,6 @@ module Workflow
|
|
149
150
|
@libdir
|
150
151
|
end
|
151
152
|
|
152
|
-
def workflow_description
|
153
|
-
@workflow_description ||= begin
|
154
|
-
file = @libdir['workflow.md']
|
155
|
-
if file.exists?
|
156
|
-
file.read
|
157
|
-
else
|
158
|
-
""
|
159
|
-
end
|
160
|
-
end
|
161
|
-
end
|
162
153
|
|
163
154
|
def helpers
|
164
155
|
@helpers ||= {}
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module Workflow
|
2
|
+
|
3
|
+
def self.doc_parse_first_line(str)
|
4
|
+
if str.match(/^([^\n]*)\n\n(.*)/sm)
|
5
|
+
str.replace $2
|
6
|
+
$1
|
7
|
+
else
|
8
|
+
""
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.doc_parse_up_to(str, pattern, keep = false)
|
13
|
+
pre, _pat, _post = str.partition pattern
|
14
|
+
if _pat
|
15
|
+
[pre, (keep ? _pat << _post : _post)]
|
16
|
+
else
|
17
|
+
_post
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.doc_parse_chunks(str, pattern)
|
22
|
+
parts = str.split(pattern)
|
23
|
+
return {} if parts.length < 2
|
24
|
+
tasks = Hash[*parts[1..-1].collect{|v| v.strip}]
|
25
|
+
tasks.delete_if{|t,d| d.empty?}
|
26
|
+
tasks
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.parse_workflow_doc(doc)
|
30
|
+
title = doc_parse_first_line doc
|
31
|
+
description, task_info = doc_parse_up_to doc, /^# Tasks/i
|
32
|
+
task_description, tasks = doc_parse_up_to task_info, /^##/, true
|
33
|
+
tasks = doc_parse_chunks tasks, /## (.*)/
|
34
|
+
{:title => title.strip, :description => description.strip, :task_description => task_description.strip, :tasks => tasks}
|
35
|
+
end
|
36
|
+
|
37
|
+
def documentation_markdown
|
38
|
+
file = @libdir['workflow.md'].find
|
39
|
+
if file.exists?
|
40
|
+
file.read
|
41
|
+
else
|
42
|
+
""
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def load_documentation
|
47
|
+
@documentation = Workflow.parse_workflow_doc documentation_markdown
|
48
|
+
@documentation[:tasks].each do |task, description|
|
49
|
+
tasks[task.to_sym].description = description
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
attr_accessor :documentation
|
54
|
+
def documentation
|
55
|
+
load_documentation if @documentation.nil?
|
56
|
+
@documentation
|
57
|
+
end
|
58
|
+
end
|
data/lib/rbbt/workflow/usage.rb
CHANGED
@@ -4,10 +4,26 @@ module Task
|
|
4
4
|
def doc(deps = nil)
|
5
5
|
puts Log.color :magenta, "## #{ name }:"
|
6
6
|
puts "\n" << description << "\n" if description and not description.empty?
|
7
|
-
puts
|
7
|
+
puts
|
8
|
+
|
9
|
+
case
|
10
|
+
when (input_types.values & [:array]).any?
|
11
|
+
puts Log.color(:green, Misc.format_paragraph("Lists are specified as arguments using ',' or '|'. When specified as files the '\\n'
|
12
|
+
also works in addition to the others. You may use the '--array_separator' option
|
13
|
+
the change this default. Whenever a file is specified it may also accept STDIN using
|
14
|
+
the '-' character."))
|
15
|
+
puts
|
16
|
+
|
17
|
+
when (input_types.values & [:text, :tsv]).any?
|
18
|
+
puts Log.color(:green, Misc.format_paragraph("Whenever a file is specified it may also accept STDIN using the '-' character."))
|
19
|
+
puts
|
20
|
+
end
|
21
|
+
|
8
22
|
puts SOPT.input_doc(inputs, input_types, input_descriptions, input_defaults, true)
|
9
23
|
puts
|
10
24
|
|
25
|
+
puts "Returns: " << Log.color(:blue, result_type.to_s) << "\n"
|
26
|
+
puts
|
11
27
|
|
12
28
|
if deps and deps.any?
|
13
29
|
puts "From dependencies:"
|
@@ -28,17 +44,23 @@ module Workflow
|
|
28
44
|
if task.nil?
|
29
45
|
puts Log.color :magenta, self.to_s
|
30
46
|
puts Log.color :magenta, "=" * self.to_s.length
|
31
|
-
|
32
|
-
|
47
|
+
if self.documentation[:description] and not self.documentation[:description].empty?
|
48
|
+
puts
|
49
|
+
puts Misc.format_paragraph self.documentation[:description]
|
50
|
+
end
|
33
51
|
puts
|
34
52
|
|
35
53
|
puts Log.color :magenta, "## TASKS"
|
54
|
+
if self.documentation[:task_description] and not self.documentation[:task_description].empty?
|
55
|
+
puts
|
56
|
+
puts Misc.format_paragraph self.documentation[:task_description]
|
57
|
+
end
|
36
58
|
puts
|
59
|
+
|
37
60
|
tasks.each do |name,task|
|
38
|
-
puts
|
39
|
-
puts " " << task.description.split(/\n\s*\n/).first if task.description and not task.description.empty?
|
40
|
-
puts
|
61
|
+
puts Misc.format_definition_list_item(name.to_s, task.description || "", 80, 30, :yellow)
|
41
62
|
end
|
63
|
+
|
42
64
|
else
|
43
65
|
|
44
66
|
if Task === task
|
@@ -35,7 +35,6 @@ end
|
|
35
35
|
|
36
36
|
def usage(workflow = nil, task = nil, exception=nil)
|
37
37
|
puts SOPT.doc
|
38
|
-
puts Log.color :magenta, "## WORKFLOW"
|
39
38
|
puts
|
40
39
|
if workflow.nil?
|
41
40
|
puts "No workflow specified"
|
@@ -45,11 +44,13 @@ def usage(workflow = nil, task = nil, exception=nil)
|
|
45
44
|
if task.nil?
|
46
45
|
workflow.load_tasks if workflow.respond_to? :load_tasks
|
47
46
|
workflow.doc
|
47
|
+
puts
|
48
|
+
puts "E.g. rbbt workflow task #{workflow.to_s} #{workflow.tasks.keys.first.to_s} -h"
|
48
49
|
else
|
49
50
|
puts Log.color :magenta, workflow.to_s
|
50
51
|
puts Log.color :magenta, "=" * workflow.to_s.length
|
51
52
|
puts
|
52
|
-
puts workflow.
|
53
|
+
puts workflow.documentation[:description]
|
53
54
|
puts
|
54
55
|
workflow.doc(task)
|
55
56
|
end
|
data/test/rbbt/util/test_misc.rb
CHANGED
@@ -6,12 +6,59 @@ require 'rbbt/entity'
|
|
6
6
|
|
7
7
|
class TestMisc < Test::Unit::TestCase
|
8
8
|
|
9
|
-
def
|
10
|
-
|
9
|
+
def _test_format_paragraph
|
10
|
+
p = <<-EOF
|
11
|
+
|
12
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
|
13
|
+
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
|
14
|
+
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
15
|
+
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
16
|
+
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
|
17
|
+
in culpa qui officia deserunt mollit anim id est laborum.
|
18
|
+
|
19
|
+
|
20
|
+
EOF
|
21
|
+
|
22
|
+
puts Misc.format_paragraph p, 70, 10, 5
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_format_dl
|
26
|
+
p1 = <<-EOF
|
27
|
+
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
|
28
|
+
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
|
29
|
+
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
30
|
+
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
31
|
+
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
|
32
|
+
in culpa qui officia deserunt mollit anim id est laborum.
|
33
|
+
EOF
|
34
|
+
|
35
|
+
p2 = <<-EOF
|
36
|
+
|
37
|
+
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
|
38
|
+
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore
|
39
|
+
veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim
|
40
|
+
ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia
|
41
|
+
consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque
|
42
|
+
porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,
|
43
|
+
adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et
|
44
|
+
dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis
|
45
|
+
nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex
|
46
|
+
ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea
|
47
|
+
voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem
|
48
|
+
eum fugiat quo voluptas nulla pariatur?"
|
49
|
+
|
50
|
+
EOF
|
51
|
+
|
52
|
+
puts Misc.format_definition_list({:paragraph_first => p1, :paragraph_second => p2})
|
53
|
+
end
|
54
|
+
|
55
|
+
def _test_parse_cmd_params
|
56
|
+
assert_equal ["workflow", "task", "Translation", "translate", "-f", "Associated Gene Name", "-l", "-"],
|
57
|
+
Misc.parse_cmd_params("workflow task Translation translate -f 'Associated Gene Name' -l -")
|
11
58
|
end
|
12
59
|
|
13
60
|
|
14
|
-
def
|
61
|
+
def _test_fixutf8
|
15
62
|
string = "abc\xffdef"
|
16
63
|
string = string.force_encoding("UTF-8") if string.respond_to? :force_encoding
|
17
64
|
assert(! string.valid_encoding?) if string.respond_to? :valid_encoding?
|
@@ -20,37 +67,37 @@ class TestMisc < Test::Unit::TestCase
|
|
20
67
|
assert( Misc.fixutf8(string).valid_encoding) if string.respond_to? :valid_encoding
|
21
68
|
end
|
22
69
|
|
23
|
-
def
|
70
|
+
def _test_colors_for
|
24
71
|
colors, used = Misc.colors_for([1,2,2,1,2,1,2,2,3,3,2,3,2])
|
25
72
|
assert_equal Misc::COLOR_LIST[1], used[2]
|
26
73
|
end
|
27
74
|
|
28
|
-
def
|
75
|
+
def _test_total_length
|
29
76
|
ranges = [(0..100), (50..150), (120..160)]
|
30
77
|
ranges = [(0..100), (50..150), (120..160), (51..70)]
|
31
78
|
assert_equal 161, Misc.total_length(ranges)
|
32
79
|
end
|
33
80
|
|
34
|
-
def
|
81
|
+
def _test_id_filename?
|
35
82
|
TmpFile.with_file("") do |file|
|
36
83
|
assert Misc.is_filename?(file)
|
37
84
|
assert ! Misc.is_filename?("TEST STRING")
|
38
85
|
end
|
39
86
|
end
|
40
87
|
|
41
|
-
def
|
88
|
+
def _test_merge_sorted_arrays
|
42
89
|
assert_equal [1,2,3,4], Misc.merge_sorted_arrays([1,3], [2,4])
|
43
90
|
end
|
44
91
|
|
45
|
-
def
|
92
|
+
def _test_intersect_sorted_arrays
|
46
93
|
assert_equal [2,4], Misc.intersect_sorted_arrays([1,2,3,4], [2,4])
|
47
94
|
end
|
48
95
|
|
49
|
-
def
|
96
|
+
def _test_sorted_array_matches
|
50
97
|
assert_equal [1,3], Misc.sorted_array_hits(%w(a b c d e), %w(b d))
|
51
98
|
end
|
52
99
|
|
53
|
-
def
|
100
|
+
def _test_binary_include?
|
54
101
|
a = %w(a b c d e).sort
|
55
102
|
assert Misc.binary_include?(a, "a")
|
56
103
|
assert(!Misc.binary_include?(a, "z"))
|
@@ -59,24 +106,24 @@ class TestMisc < Test::Unit::TestCase
|
|
59
106
|
assert(Misc.binary_include?(a, "d"))
|
60
107
|
end
|
61
108
|
|
62
|
-
def
|
109
|
+
def _test_process_to_hash
|
63
110
|
list = [1,2,3,4]
|
64
111
|
assert_equal 4, Misc.process_to_hash(list){|l| l.collect{|e| e * 2}}[2]
|
65
112
|
end
|
66
113
|
|
67
|
-
# def
|
114
|
+
# def _test_pdf2text_example
|
68
115
|
# assert PDF2Text.pdf2text(datafile_test('example.pdf')).read =~ /An Example Paper/i
|
69
116
|
# end
|
70
117
|
#
|
71
|
-
# def
|
118
|
+
# def _test_pdf2text_EPAR
|
72
119
|
# assert PDF2Text.pdf2text("http://www.ema.europa.eu/docs/en_GB/document_library/EPAR_-_Scientific_Discussion/human/000402/WC500033103.pdf").read =~ /Tamiflu/i
|
73
120
|
# end
|
74
121
|
#
|
75
|
-
# def
|
122
|
+
# def _test_pdf2text_wrong
|
76
123
|
# assert_raise CMD::CMDError do PDF2Text.pdf2text("http://www.ema.europa.eu/docs/en_GB#").read end
|
77
124
|
# end
|
78
125
|
|
79
|
-
def
|
126
|
+
def _test_string2hash
|
80
127
|
assert(Misc.string2hash("--user-agent=firefox").include? "--user-agent")
|
81
128
|
assert_equal(true, Misc.string2hash(":true")[:true])
|
82
129
|
assert_equal(true, Misc.string2hash("true")["true"])
|
@@ -87,12 +134,12 @@ class TestMisc < Test::Unit::TestCase
|
|
87
134
|
assert_equal(:j, Misc.string2hash("a=b#c=d#:h=:j")[:h])
|
88
135
|
end
|
89
136
|
|
90
|
-
def
|
137
|
+
def _test_named_array
|
91
138
|
a = NamedArray.setup([1,2,3,4], %w(a b c d))
|
92
139
|
assert_equal(1, a['a'])
|
93
140
|
end
|
94
141
|
|
95
|
-
def
|
142
|
+
def _test_path_relative_to
|
96
143
|
assert_equal "test/foo", Misc.path_relative_to('/test', '/test/test/foo')
|
97
144
|
|
98
145
|
Misc.profile do
|
@@ -102,8 +149,8 @@ class TestMisc < Test::Unit::TestCase
|
|
102
149
|
end
|
103
150
|
end
|
104
151
|
|
105
|
-
# def
|
106
|
-
#
|
152
|
+
# def _test_chunk
|
153
|
+
# _test =<<-EOF
|
107
154
|
#This is an example file. Entries are separated by Entry
|
108
155
|
#-- Entry
|
109
156
|
#1
|
@@ -118,7 +165,7 @@ class TestMisc < Test::Unit::TestCase
|
|
118
165
|
# assert_equal "1\n2\n3", Misc.chunk(test, /^-- Entry/).first.strip
|
119
166
|
# end
|
120
167
|
|
121
|
-
def
|
168
|
+
def _test_hash2string
|
122
169
|
hash = {}
|
123
170
|
assert_equal hash, Misc.string2hash(Misc.hash2string(hash))
|
124
171
|
|
@@ -136,14 +183,14 @@ class TestMisc < Test::Unit::TestCase
|
|
136
183
|
|
137
184
|
end
|
138
185
|
|
139
|
-
def
|
186
|
+
def _test_merge
|
140
187
|
a = [[1],[2]]
|
141
188
|
a = NamedArray.setup a, %w(1 2)
|
142
189
|
a.merge [3,4]
|
143
190
|
assert_equal [1,3], a[0]
|
144
191
|
end
|
145
192
|
|
146
|
-
def
|
193
|
+
def _test_indiferent_hash
|
147
194
|
a = {:a => 1, "b" => 2}
|
148
195
|
a.extend IndiferentHash
|
149
196
|
|
@@ -153,7 +200,7 @@ class TestMisc < Test::Unit::TestCase
|
|
153
200
|
assert_equal 2, a[:b]
|
154
201
|
end
|
155
202
|
|
156
|
-
def
|
203
|
+
def _test_lockfile
|
157
204
|
|
158
205
|
TmpFile.with_file do |tmpfile|
|
159
206
|
pids = []
|
@@ -177,7 +224,7 @@ class TestMisc < Test::Unit::TestCase
|
|
177
224
|
end
|
178
225
|
end
|
179
226
|
|
180
|
-
def
|
227
|
+
def _test_positions2hash
|
181
228
|
inputs = Misc.positional2hash([:one, :two, :three], 1, :two => 2, :four => 4)
|
182
229
|
assert_equal 1, inputs[:one]
|
183
230
|
assert_equal 2, inputs[:two]
|
@@ -185,18 +232,18 @@ class TestMisc < Test::Unit::TestCase
|
|
185
232
|
assert_equal nil, inputs[:four]
|
186
233
|
end
|
187
234
|
|
188
|
-
def
|
235
|
+
def _test_mean
|
189
236
|
assert_equal 2, Misc.mean([1,2,3])
|
190
237
|
assert_equal 3, Misc.mean([1,2,3,4,5])
|
191
238
|
end
|
192
239
|
|
193
|
-
def
|
240
|
+
def _test_zip_fields
|
194
241
|
current = [[:a,1], [:b,2]]
|
195
242
|
assert_equal [[:a, :b],[1,2]], Misc.zip_fields(current)
|
196
243
|
assert_equal current, Misc.zip_fields(Misc.zip_fields(current))
|
197
244
|
end
|
198
245
|
|
199
|
-
def
|
246
|
+
def _test_add_zipped
|
200
247
|
current = [[:a,1], [:b,2]]
|
201
248
|
new = %w(A B)
|
202
249
|
Misc.append_zipped current, new
|
@@ -207,20 +254,20 @@ class TestMisc < Test::Unit::TestCase
|
|
207
254
|
assert_equal Math.sqrt(2), Misc.sd([1,3])
|
208
255
|
end
|
209
256
|
|
210
|
-
def
|
257
|
+
def _test_divide
|
211
258
|
assert_equal 2, Misc.divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
212
259
|
end
|
213
260
|
|
214
|
-
def
|
261
|
+
def _test_ordered_divide
|
215
262
|
assert_equal 5, Misc.ordered_divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
216
263
|
end
|
217
264
|
|
218
|
-
def
|
265
|
+
def _test_collapse_ranges
|
219
266
|
ranges = [(0..100), (50..150), (51..61),(200..250), (300..324),(320..350)]
|
220
267
|
assert_equal [(0..150),(200..250), (300..350)], Misc.collapse_ranges(ranges)
|
221
268
|
end
|
222
269
|
|
223
|
-
def
|
270
|
+
def _test_humanize
|
224
271
|
str1 = "test_string"
|
225
272
|
str2 = "TEST_string"
|
226
273
|
str3 = "test"
|
@@ -232,22 +279,22 @@ class TestMisc < Test::Unit::TestCase
|
|
232
279
|
assert_equal "mutation_enrichment", Misc.snake_case("MutationEnrichment")
|
233
280
|
end
|
234
281
|
|
235
|
-
def
|
282
|
+
def _test_snake_case
|
236
283
|
str1 = "ACRONIMTest"
|
237
284
|
str2 = "ACRONIM_test"
|
238
285
|
assert_equal "ACRONIM_test", Misc.snake_case(str1)
|
239
286
|
assert_equal "ACRONIM_test", Misc.snake_case(str2)
|
240
287
|
end
|
241
288
|
|
242
|
-
def
|
289
|
+
def _test_correct_vcf_mutations
|
243
290
|
assert_equal [737407, ["-----", "-----G", "-----GTTAAT"]], Misc.correct_vcf_mutation(737406, "GTTAAT", "G,GG,GGTTAAT")
|
244
291
|
end
|
245
292
|
|
246
|
-
def
|
293
|
+
def _test_fingerprint
|
247
294
|
assert_equal '{a=>1}', Misc.fingerprint({:a => 1})
|
248
295
|
end
|
249
296
|
|
250
|
-
def
|
297
|
+
def _test_tarize
|
251
298
|
path = File.expand_path('/home/mvazquezg/git/rbbt-util/lib')
|
252
299
|
stream = Misc.tarize(path)
|
253
300
|
TmpFile.with_file do |res|
|
@@ -257,7 +304,7 @@ class TestMisc < Test::Unit::TestCase
|
|
257
304
|
end
|
258
305
|
end
|
259
306
|
|
260
|
-
def
|
307
|
+
def _test_camel_case
|
261
308
|
assert_equal "DbSNP", Misc.camel_case("db_SNP")
|
262
309
|
assert_equal "D3Js", Misc.camel_case("D3Js")
|
263
310
|
assert_equal "Structure", Misc.camel_case("Structure")
|
@@ -265,7 +312,7 @@ class TestMisc < Test::Unit::TestCase
|
|
265
312
|
assert_equal "COSMIC", Misc.camel_case("COSMIC")
|
266
313
|
end
|
267
314
|
|
268
|
-
def
|
315
|
+
def _test_pipe
|
269
316
|
t = 5
|
270
317
|
stream = Misc.open_pipe do |sin|
|
271
318
|
t.times do |i|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.join(File.expand_path(File.dirname(__FILE__)), '../..', 'test_helper.rb')
|
2
|
+
require 'rbbt/workflow'
|
3
|
+
|
4
|
+
class TestWorkflowDoc < Test::Unit::TestCase
|
5
|
+
TEMPLATE=<<-EOF
|
6
|
+
Title of the template
|
7
|
+
|
8
|
+
Paragraph1
|
9
|
+
|
10
|
+
Paragraph2
|
11
|
+
|
12
|
+
# Tasks
|
13
|
+
|
14
|
+
Paragraph3
|
15
|
+
|
16
|
+
## task1
|
17
|
+
|
18
|
+
Task 1
|
19
|
+
|
20
|
+
## task2
|
21
|
+
|
22
|
+
Task 2
|
23
|
+
|
24
|
+
EOF
|
25
|
+
def test_parse
|
26
|
+
ddd Workflow.parse_workflow_doc(TEMPLATE)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rbbt-util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.8.
|
4
|
+
version: 5.8.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
@@ -188,6 +188,7 @@ files:
|
|
188
188
|
- lib/rbbt/workflow/accessor.rb
|
189
189
|
- lib/rbbt/workflow/annotate.rb
|
190
190
|
- lib/rbbt/workflow/definition.rb
|
191
|
+
- lib/rbbt/workflow/doc.rb
|
191
192
|
- lib/rbbt/workflow/soap.rb
|
192
193
|
- lib/rbbt/workflow/step.rb
|
193
194
|
- lib/rbbt/workflow/task.rb
|
@@ -289,6 +290,7 @@ files:
|
|
289
290
|
- test/rbbt/util/test_simpleDSL.rb
|
290
291
|
- test/rbbt/util/test_simpleopt.rb
|
291
292
|
- test/rbbt/util/test_tmpfile.rb
|
293
|
+
- test/rbbt/workflow/test_doc.rb
|
292
294
|
- test/rbbt/workflow/test_step.rb
|
293
295
|
- test/rbbt/workflow/test_task.rb
|
294
296
|
- test/test_helper.rb
|
@@ -349,6 +351,7 @@ test_files:
|
|
349
351
|
- test/rbbt/test_tsv.rb
|
350
352
|
- test/rbbt/workflow/test_task.rb
|
351
353
|
- test/rbbt/workflow/test_step.rb
|
354
|
+
- test/rbbt/workflow/test_doc.rb
|
352
355
|
- test/rbbt/test_persist.rb
|
353
356
|
- test/rbbt/test_annotations.rb
|
354
357
|
- test/rbbt/persist/test_tsv.rb
|