rbbt-util 5.8.7 → 5.8.8
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/misc.rb +26 -14
- data/lib/rbbt/workflow/usage.rb +26 -0
- data/share/rbbt_commands/tsv/unzip +1 -1
- data/share/rbbt_commands/workflow/task +5 -3
- data/test/rbbt/util/test_misc.rb +49 -45
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 79182b6a00b36773864861817a0994c8b89b466a
|
4
|
+
data.tar.gz: 64eda216950e3ea231a67d5ebf463ddfd6f99855
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77f978c48f2f87df1b39e200d02ddec6b2b9e99413281935c4e95d8c8320e8f1ad3b4ec30e43677af723b19386152f86b10a0faee2e466fdd6d745c65d1d2c83
|
7
|
+
data.tar.gz: 0144b36d0f85345835b9abba865aa866e7d98df42f73f3594c967b8d5dfb8cb07f19719fe11c1bea3f03b5871779fac3146966b19a6e6edf2f10f21e55d28521
|
data/lib/rbbt/util/misc.rb
CHANGED
@@ -32,19 +32,31 @@ Lockfile.refresh = false if ENV["RBBT_NO_LOCKFILE_REFRESH"] == "true"
|
|
32
32
|
module Misc
|
33
33
|
|
34
34
|
def self.format_paragraph(text, size = 80, indent = 0, offset = 0)
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
35
|
+
i = 0
|
36
|
+
re = /((?:\n\s*\n\s*)|(?:\n\s*(?=\*)))/
|
37
|
+
text.split(re).collect do |paragraph|
|
38
|
+
i += 1
|
39
|
+
str = if i % 2 == 1
|
40
|
+
words = paragraph.gsub(/\s+/, "\s").split(" ")
|
41
|
+
lines = []
|
42
|
+
line = " "*offset
|
43
|
+
word = words.shift
|
44
|
+
while word
|
45
|
+
word = word[0..size-indent-offset-4] + '...' if word.length >= size - indent - offset
|
46
|
+
while word and line.length + word.length <= size - indent
|
47
|
+
line << word << " "
|
48
|
+
word = words.shift
|
49
|
+
end
|
50
|
+
lines << ((" " * indent) << line[0..-2])
|
51
|
+
line = ""
|
52
|
+
end
|
53
|
+
(lines * "\n")
|
54
|
+
else
|
55
|
+
paragraph
|
56
|
+
end
|
57
|
+
offset = 0
|
58
|
+
str
|
59
|
+
end*""
|
48
60
|
end
|
49
61
|
|
50
62
|
def self.format_definition_list_item(dt, dd, size = 80, indent = 20, color = :yellow)
|
@@ -67,7 +79,7 @@ module Misc
|
|
67
79
|
def self.format_definition_list(defs, size = 80, indent = 20, color = :yellow)
|
68
80
|
entries = []
|
69
81
|
defs.each do |dt,dd|
|
70
|
-
text = format_definition_list_item(dt,dd,size,indent,
|
82
|
+
text = format_definition_list_item(dt,dd,size,indent,color)
|
71
83
|
entries << text
|
72
84
|
end
|
73
85
|
entries * "\n\n"
|
data/lib/rbbt/workflow/usage.rb
CHANGED
@@ -72,6 +72,32 @@ module Workflow
|
|
72
72
|
dependencies = self.rec_dependencies(task_name).collect{|dep_name| self.tasks[dep_name.to_sym]}
|
73
73
|
|
74
74
|
task.doc(dependencies)
|
75
|
+
|
76
|
+
if self.libdir.examples[task_name].exists?
|
77
|
+
self.libdir.examples[task_name].glob("*").each do |example_dir|
|
78
|
+
example = File.basename(example_dir)
|
79
|
+
|
80
|
+
puts Log.color(:magenta, "Example " << example) + " -- " + Log.color(:blue, example_dir)
|
81
|
+
|
82
|
+
inputs = {}
|
83
|
+
|
84
|
+
task.input_types.each do |input,type|
|
85
|
+
if example_dir[input].exists?
|
86
|
+
case type
|
87
|
+
when :tsv, :array, :text
|
88
|
+
head = example_dir[input].read.split("\n")[0..5].compact * "\n\n"
|
89
|
+
head = head[0..500]
|
90
|
+
puts Misc.format_definition_list_item(input, head).gsub("\n\n","\n")
|
91
|
+
else
|
92
|
+
puts Misc.format_definition_list_item(input, example_dir[input].read)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
puts
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
75
101
|
end
|
76
102
|
end
|
77
103
|
end
|
@@ -37,7 +37,7 @@ def usage(workflow = nil, task = nil, exception=nil)
|
|
37
37
|
puts SOPT.doc
|
38
38
|
puts
|
39
39
|
if workflow.nil?
|
40
|
-
puts "No workflow specified"
|
40
|
+
puts "No workflow specified. Use `rbbt workflow list` to list available workflows."
|
41
41
|
exit -1
|
42
42
|
end
|
43
43
|
|
@@ -118,9 +118,9 @@ def fix_options(workflow, task, job_options)
|
|
118
118
|
when TSV
|
119
119
|
value
|
120
120
|
when '-'
|
121
|
-
TSV.open(STDIN, :unnamed => true)
|
121
|
+
TSV.open(STDIN, :unnamed => true, :sep => $field_separator, :sep2 => $array_separator || "|")
|
122
122
|
else
|
123
|
-
TSV.open(value, :unnamed => true)
|
123
|
+
TSV.open(value, :unnamed => true, :sep => $field_separator, :sep2 => $array_separator || "|")
|
124
124
|
end
|
125
125
|
else
|
126
126
|
value
|
@@ -135,6 +135,7 @@ options = SOPT.get <<EOF
|
|
135
135
|
-h--help Show this help:
|
136
136
|
-wd--workdir* Change the working directory of the workflow:
|
137
137
|
-as--array_separator* Change the character that separates elements of Arrays, ',', '|', or '\\n' by default:
|
138
|
+
-fs--field_separator* Change the character that separates fields of TSV files '\\t' by default:
|
138
139
|
-jn--jobname* Job name to use. The name 'Default' is used by default:
|
139
140
|
-pn--printname Print the name of the job and exit without starting it:
|
140
141
|
-pf--printpath Print the path of the job result:
|
@@ -164,6 +165,7 @@ recursive_clean = !!options.delete(:recursive_clean)
|
|
164
165
|
out = options.include?(:output) ? File.open(options[:output], 'wb') : STDOUT
|
165
166
|
|
166
167
|
$array_separator = options.delete(:array_separator)
|
168
|
+
$field_separator = options.delete(:field_separator) || "\t"
|
167
169
|
|
168
170
|
# Get workflow
|
169
171
|
|
data/test/rbbt/util/test_misc.rb
CHANGED
@@ -6,20 +6,24 @@ require 'rbbt/entity'
|
|
6
6
|
|
7
7
|
class TestMisc < Test::Unit::TestCase
|
8
8
|
|
9
|
-
def
|
9
|
+
def test_format_paragraph
|
10
10
|
p = <<-EOF
|
11
|
-
|
12
11
|
Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
|
13
12
|
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis
|
14
13
|
nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
|
14
|
+
|
15
15
|
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
|
16
|
-
|
17
|
-
|
16
|
+
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
|
17
|
+
in culpa qui officia deserunt mollit anim id est laborum.
|
18
18
|
|
19
19
|
|
20
|
+
* one
|
21
|
+
* two
|
22
|
+
* three
|
23
|
+
|
20
24
|
EOF
|
21
25
|
|
22
|
-
|
26
|
+
assert Misc.format_paragraph(p, 70, 10, 5) =~ /\n\s*\* two/sm
|
23
27
|
end
|
24
28
|
|
25
29
|
def test_format_dl
|
@@ -38,27 +42,27 @@ Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium
|
|
38
42
|
doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore
|
39
43
|
veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim
|
40
44
|
ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia
|
41
|
-
consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
|
42
|
-
|
45
|
+
consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt.
|
46
|
+
|
47
|
+
Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur,
|
43
48
|
adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et
|
44
49
|
dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis
|
45
50
|
nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex
|
46
51
|
ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea
|
47
52
|
voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem
|
48
53
|
eum fugiat quo voluptas nulla pariatur?"
|
49
|
-
|
50
54
|
EOF
|
51
55
|
|
52
|
-
|
56
|
+
assert Misc.format_definition_list({:paragraph_first => p1, :paragraph_second => p2}) =~ / /
|
53
57
|
end
|
54
58
|
|
55
|
-
def
|
59
|
+
def test_parse_cmd_params
|
56
60
|
assert_equal ["workflow", "task", "Translation", "translate", "-f", "Associated Gene Name", "-l", "-"],
|
57
61
|
Misc.parse_cmd_params("workflow task Translation translate -f 'Associated Gene Name' -l -")
|
58
62
|
end
|
59
63
|
|
60
64
|
|
61
|
-
def
|
65
|
+
def test_fixutf8
|
62
66
|
string = "abc\xffdef"
|
63
67
|
string = string.force_encoding("UTF-8") if string.respond_to? :force_encoding
|
64
68
|
assert(! string.valid_encoding?) if string.respond_to? :valid_encoding?
|
@@ -67,37 +71,37 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
67
71
|
assert( Misc.fixutf8(string).valid_encoding) if string.respond_to? :valid_encoding
|
68
72
|
end
|
69
73
|
|
70
|
-
def
|
74
|
+
def test_colors_for
|
71
75
|
colors, used = Misc.colors_for([1,2,2,1,2,1,2,2,3,3,2,3,2])
|
72
76
|
assert_equal Misc::COLOR_LIST[1], used[2]
|
73
77
|
end
|
74
78
|
|
75
|
-
def
|
79
|
+
def test_total_length
|
76
80
|
ranges = [(0..100), (50..150), (120..160)]
|
77
81
|
ranges = [(0..100), (50..150), (120..160), (51..70)]
|
78
82
|
assert_equal 161, Misc.total_length(ranges)
|
79
83
|
end
|
80
84
|
|
81
|
-
def
|
85
|
+
def test_id_filename?
|
82
86
|
TmpFile.with_file("") do |file|
|
83
87
|
assert Misc.is_filename?(file)
|
84
88
|
assert ! Misc.is_filename?("TEST STRING")
|
85
89
|
end
|
86
90
|
end
|
87
91
|
|
88
|
-
def
|
92
|
+
def test_merge_sorted_arrays
|
89
93
|
assert_equal [1,2,3,4], Misc.merge_sorted_arrays([1,3], [2,4])
|
90
94
|
end
|
91
95
|
|
92
|
-
def
|
96
|
+
def test_intersect_sorted_arrays
|
93
97
|
assert_equal [2,4], Misc.intersect_sorted_arrays([1,2,3,4], [2,4])
|
94
98
|
end
|
95
99
|
|
96
|
-
def
|
100
|
+
def test_sorted_array_matches
|
97
101
|
assert_equal [1,3], Misc.sorted_array_hits(%w(a b c d e), %w(b d))
|
98
102
|
end
|
99
103
|
|
100
|
-
def
|
104
|
+
def test_binary_include?
|
101
105
|
a = %w(a b c d e).sort
|
102
106
|
assert Misc.binary_include?(a, "a")
|
103
107
|
assert(!Misc.binary_include?(a, "z"))
|
@@ -106,24 +110,24 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
106
110
|
assert(Misc.binary_include?(a, "d"))
|
107
111
|
end
|
108
112
|
|
109
|
-
def
|
113
|
+
def test_process_to_hash
|
110
114
|
list = [1,2,3,4]
|
111
115
|
assert_equal 4, Misc.process_to_hash(list){|l| l.collect{|e| e * 2}}[2]
|
112
116
|
end
|
113
117
|
|
114
|
-
# def
|
118
|
+
# def test_pdf2text_example
|
115
119
|
# assert PDF2Text.pdf2text(datafile_test('example.pdf')).read =~ /An Example Paper/i
|
116
120
|
# end
|
117
121
|
#
|
118
|
-
# def
|
122
|
+
# def test_pdf2text_EPAR
|
119
123
|
# assert PDF2Text.pdf2text("http://www.ema.europa.eu/docs/en_GB/document_library/EPAR_-_Scientific_Discussion/human/000402/WC500033103.pdf").read =~ /Tamiflu/i
|
120
124
|
# end
|
121
125
|
#
|
122
|
-
# def
|
126
|
+
# def test_pdf2text_wrong
|
123
127
|
# assert_raise CMD::CMDError do PDF2Text.pdf2text("http://www.ema.europa.eu/docs/en_GB#").read end
|
124
128
|
# end
|
125
129
|
|
126
|
-
def
|
130
|
+
def test_string2hash
|
127
131
|
assert(Misc.string2hash("--user-agent=firefox").include? "--user-agent")
|
128
132
|
assert_equal(true, Misc.string2hash(":true")[:true])
|
129
133
|
assert_equal(true, Misc.string2hash("true")["true"])
|
@@ -134,12 +138,12 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
134
138
|
assert_equal(:j, Misc.string2hash("a=b#c=d#:h=:j")[:h])
|
135
139
|
end
|
136
140
|
|
137
|
-
def
|
141
|
+
def test_named_array
|
138
142
|
a = NamedArray.setup([1,2,3,4], %w(a b c d))
|
139
143
|
assert_equal(1, a['a'])
|
140
144
|
end
|
141
145
|
|
142
|
-
def
|
146
|
+
def test_path_relative_to
|
143
147
|
assert_equal "test/foo", Misc.path_relative_to('/test', '/test/test/foo')
|
144
148
|
|
145
149
|
Misc.profile do
|
@@ -149,8 +153,8 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
149
153
|
end
|
150
154
|
end
|
151
155
|
|
152
|
-
# def
|
153
|
-
#
|
156
|
+
# def test_chunk
|
157
|
+
# test =<<-EOF
|
154
158
|
#This is an example file. Entries are separated by Entry
|
155
159
|
#-- Entry
|
156
160
|
#1
|
@@ -165,7 +169,7 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
165
169
|
# assert_equal "1\n2\n3", Misc.chunk(test, /^-- Entry/).first.strip
|
166
170
|
# end
|
167
171
|
|
168
|
-
def
|
172
|
+
def test_hash2string
|
169
173
|
hash = {}
|
170
174
|
assert_equal hash, Misc.string2hash(Misc.hash2string(hash))
|
171
175
|
|
@@ -183,14 +187,14 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
183
187
|
|
184
188
|
end
|
185
189
|
|
186
|
-
def
|
190
|
+
def test_merge
|
187
191
|
a = [[1],[2]]
|
188
192
|
a = NamedArray.setup a, %w(1 2)
|
189
193
|
a.merge [3,4]
|
190
194
|
assert_equal [1,3], a[0]
|
191
195
|
end
|
192
196
|
|
193
|
-
def
|
197
|
+
def test_indiferent_hash
|
194
198
|
a = {:a => 1, "b" => 2}
|
195
199
|
a.extend IndiferentHash
|
196
200
|
|
@@ -200,7 +204,7 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
200
204
|
assert_equal 2, a[:b]
|
201
205
|
end
|
202
206
|
|
203
|
-
def
|
207
|
+
def test_lockfile
|
204
208
|
|
205
209
|
TmpFile.with_file do |tmpfile|
|
206
210
|
pids = []
|
@@ -224,7 +228,7 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
224
228
|
end
|
225
229
|
end
|
226
230
|
|
227
|
-
def
|
231
|
+
def test_positions2hash
|
228
232
|
inputs = Misc.positional2hash([:one, :two, :three], 1, :two => 2, :four => 4)
|
229
233
|
assert_equal 1, inputs[:one]
|
230
234
|
assert_equal 2, inputs[:two]
|
@@ -232,18 +236,18 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
232
236
|
assert_equal nil, inputs[:four]
|
233
237
|
end
|
234
238
|
|
235
|
-
def
|
239
|
+
def test_mean
|
236
240
|
assert_equal 2, Misc.mean([1,2,3])
|
237
241
|
assert_equal 3, Misc.mean([1,2,3,4,5])
|
238
242
|
end
|
239
243
|
|
240
|
-
def
|
244
|
+
def test_zip_fields
|
241
245
|
current = [[:a,1], [:b,2]]
|
242
246
|
assert_equal [[:a, :b],[1,2]], Misc.zip_fields(current)
|
243
247
|
assert_equal current, Misc.zip_fields(Misc.zip_fields(current))
|
244
248
|
end
|
245
249
|
|
246
|
-
def
|
250
|
+
def test_add_zipped
|
247
251
|
current = [[:a,1], [:b,2]]
|
248
252
|
new = %w(A B)
|
249
253
|
Misc.append_zipped current, new
|
@@ -254,20 +258,20 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
254
258
|
assert_equal Math.sqrt(2), Misc.sd([1,3])
|
255
259
|
end
|
256
260
|
|
257
|
-
def
|
261
|
+
def test_divide
|
258
262
|
assert_equal 2, Misc.divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
259
263
|
end
|
260
264
|
|
261
|
-
def
|
265
|
+
def test_ordered_divide
|
262
266
|
assert_equal 5, Misc.ordered_divide(%w(1 2 3 4 5 6 7 8 9),2).length
|
263
267
|
end
|
264
268
|
|
265
|
-
def
|
269
|
+
def test_collapse_ranges
|
266
270
|
ranges = [(0..100), (50..150), (51..61),(200..250), (300..324),(320..350)]
|
267
271
|
assert_equal [(0..150),(200..250), (300..350)], Misc.collapse_ranges(ranges)
|
268
272
|
end
|
269
273
|
|
270
|
-
def
|
274
|
+
def test_humanize
|
271
275
|
str1 = "test_string"
|
272
276
|
str2 = "TEST_string"
|
273
277
|
str3 = "test"
|
@@ -279,22 +283,22 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
279
283
|
assert_equal "mutation_enrichment", Misc.snake_case("MutationEnrichment")
|
280
284
|
end
|
281
285
|
|
282
|
-
def
|
286
|
+
def test_snake_case
|
283
287
|
str1 = "ACRONIMTest"
|
284
288
|
str2 = "ACRONIM_test"
|
285
289
|
assert_equal "ACRONIM_test", Misc.snake_case(str1)
|
286
290
|
assert_equal "ACRONIM_test", Misc.snake_case(str2)
|
287
291
|
end
|
288
292
|
|
289
|
-
def
|
293
|
+
def test_correct_vcf_mutations
|
290
294
|
assert_equal [737407, ["-----", "-----G", "-----GTTAAT"]], Misc.correct_vcf_mutation(737406, "GTTAAT", "G,GG,GGTTAAT")
|
291
295
|
end
|
292
296
|
|
293
|
-
def
|
297
|
+
def test_fingerprint
|
294
298
|
assert_equal '{a=>1}', Misc.fingerprint({:a => 1})
|
295
299
|
end
|
296
300
|
|
297
|
-
def
|
301
|
+
def test_tarize
|
298
302
|
path = File.expand_path('/home/mvazquezg/git/rbbt-util/lib')
|
299
303
|
stream = Misc.tarize(path)
|
300
304
|
TmpFile.with_file do |res|
|
@@ -304,7 +308,7 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
304
308
|
end
|
305
309
|
end
|
306
310
|
|
307
|
-
def
|
311
|
+
def test_camel_case
|
308
312
|
assert_equal "DbSNP", Misc.camel_case("db_SNP")
|
309
313
|
assert_equal "D3Js", Misc.camel_case("D3Js")
|
310
314
|
assert_equal "Structure", Misc.camel_case("Structure")
|
@@ -312,7 +316,7 @@ eum fugiat quo voluptas nulla pariatur?"
|
|
312
316
|
assert_equal "COSMIC", Misc.camel_case("COSMIC")
|
313
317
|
end
|
314
318
|
|
315
|
-
def
|
319
|
+
def test_pipe
|
316
320
|
t = 5
|
317
321
|
stream = Misc.open_pipe do |sin|
|
318
322
|
t.times do |i|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Miguel Vazquez
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|