solvebio 1.6.1 → 1.7.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/.bumpversion.cfg +6 -0
- data/.gitignore +5 -4
- data/.travis.yml +1 -1
- data/Gemfile +3 -0
- data/README.md +34 -34
- data/Rakefile +1 -18
- data/bin/solvebio.rb +14 -16
- data/installer +64 -0
- data/lib/solvebio.rb +50 -11
- data/lib/solvebio/acccount.rb +4 -0
- data/lib/solvebio/annotation.rb +11 -0
- data/lib/solvebio/api_operations.rb +147 -0
- data/lib/solvebio/api_resource.rb +32 -0
- data/lib/solvebio/cli.rb +75 -0
- data/lib/solvebio/cli/auth.rb +106 -0
- data/lib/solvebio/cli/credentials.rb +54 -0
- data/lib/{cli → solvebio/cli}/irb.rb +0 -23
- data/lib/solvebio/cli/irbrc.rb +48 -0
- data/lib/solvebio/cli/tutorial.rb +12 -0
- data/lib/solvebio/client.rb +149 -0
- data/lib/solvebio/dataset.rb +60 -0
- data/lib/solvebio/dataset_field.rb +12 -0
- data/lib/solvebio/depository.rb +38 -0
- data/lib/solvebio/depository_version.rb +40 -0
- data/lib/solvebio/errors.rb +64 -0
- data/lib/solvebio/filter.rb +315 -0
- data/lib/solvebio/list_object.rb +73 -0
- data/lib/solvebio/locale.rb +43 -0
- data/lib/solvebio/query.rb +341 -0
- data/lib/solvebio/sample.rb +54 -0
- data/lib/solvebio/singleton_api_resource.rb +25 -0
- data/lib/solvebio/solve_object.rb +164 -0
- data/lib/solvebio/tabulate.rb +589 -0
- data/lib/solvebio/user.rb +4 -0
- data/lib/solvebio/util.rb +59 -0
- data/lib/solvebio/version.rb +3 -0
- data/solvebio.gemspec +10 -18
- data/test/helper.rb +6 -2
- data/test/solvebio/data/.gitignore +1 -0
- data/test/solvebio/data/.netrc +6 -0
- data/test/{data → solvebio/data}/netrc-save +0 -0
- data/test/solvebio/data/sample.vcf.gz +0 -0
- data/test/solvebio/data/test_creds +3 -0
- data/test/solvebio/test_annotation.rb +45 -0
- data/test/solvebio/test_client.rb +29 -0
- data/test/solvebio/test_conversion.rb +14 -0
- data/test/solvebio/test_credentials.rb +67 -0
- data/test/solvebio/test_dataset.rb +52 -0
- data/test/solvebio/test_depository.rb +24 -0
- data/test/solvebio/test_depositoryversion.rb +22 -0
- data/test/solvebio/test_error.rb +31 -0
- data/test/solvebio/test_filter.rb +86 -0
- data/test/solvebio/test_query.rb +282 -0
- data/test/solvebio/test_query_batch.rb +38 -0
- data/test/solvebio/test_query_init.rb +30 -0
- data/test/solvebio/test_query_tabulate.rb +73 -0
- data/test/solvebio/test_ratelimit.rb +31 -0
- data/test/solvebio/test_resource.rb +29 -0
- data/test/solvebio/test_sample_access.rb +60 -0
- data/test/solvebio/test_sample_download.rb +20 -0
- data/test/solvebio/test_tabulate.rb +129 -0
- data/test/solvebio/test_util.rb +39 -0
- metadata +100 -85
- data/Makefile +0 -17
- data/demo/README.md +0 -14
- data/demo/cheatsheet.rb +0 -31
- data/demo/dataset/facets.rb +0 -13
- data/demo/dataset/field.rb +0 -13
- data/demo/depository/README.md +0 -24
- data/demo/depository/all.rb +0 -13
- data/demo/depository/retrieve.rb +0 -13
- data/demo/depository/versions-all.rb +0 -13
- data/demo/query/query-filter.rb +0 -30
- data/demo/query/query.rb +0 -13
- data/demo/query/range-filter.rb +0 -18
- data/demo/test-api.rb +0 -98
- data/lib/cli/auth.rb +0 -122
- data/lib/cli/help.rb +0 -13
- data/lib/cli/irbrc.rb +0 -54
- data/lib/cli/options.rb +0 -75
- data/lib/client.rb +0 -154
- data/lib/credentials.rb +0 -67
- data/lib/errors.rb +0 -81
- data/lib/filter.rb +0 -312
- data/lib/locale.rb +0 -47
- data/lib/main.rb +0 -46
- data/lib/query.rb +0 -414
- data/lib/resource/annotation.rb +0 -23
- data/lib/resource/apiresource.rb +0 -241
- data/lib/resource/dataset.rb +0 -91
- data/lib/resource/datasetfield.rb +0 -37
- data/lib/resource/depository.rb +0 -50
- data/lib/resource/depositoryversion.rb +0 -69
- data/lib/resource/main.rb +0 -123
- data/lib/resource/sample.rb +0 -75
- data/lib/resource/solveobject.rb +0 -122
- data/lib/resource/user.rb +0 -5
- data/lib/tabulate.rb +0 -706
- data/lib/util.rb +0 -29
- data/test/Makefile +0 -9
- data/test/data/sample.vcf.gz +0 -0
- data/test/test-annotation.rb +0 -46
- data/test/test-auth.rb +0 -58
- data/test/test-client.rb +0 -27
- data/test/test-conversion.rb +0 -13
- data/test/test-dataset.rb +0 -42
- data/test/test-depository.rb +0 -35
- data/test/test-error.rb +0 -36
- data/test/test-filter.rb +0 -70
- data/test/test-netrc.rb +0 -52
- data/test/test-query-batch.rb +0 -40
- data/test/test-query-init.rb +0 -29
- data/test/test-query-paging.rb +0 -102
- data/test/test-query.rb +0 -71
- data/test/test-resource.rb +0 -40
- data/test/test-sample-access.rb +0 -59
- data/test/test-sample-download.rb +0 -20
- data/test/test-tabulate.rb +0 -131
- data/test/test-util.rb +0 -42
data/test/test-query-init.rb
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
$VERBOSE = true
|
|
2
|
-
require 'test/unit'
|
|
3
|
-
require_relative '../lib/query'
|
|
4
|
-
|
|
5
|
-
class TestQuery < Test::Unit::TestCase
|
|
6
|
-
|
|
7
|
-
def test_query_initialize
|
|
8
|
-
[SolveBio::PagingQuery, SolveBio::Query].each do |klass|
|
|
9
|
-
assert klass.new(5)
|
|
10
|
-
assert klass.new('5')
|
|
11
|
-
assert_raises TypeError do
|
|
12
|
-
# dataset id should be an Fixnum
|
|
13
|
-
klass.new(:limit => 10)
|
|
14
|
-
end
|
|
15
|
-
assert klass.new(5, :limit => 10)
|
|
16
|
-
assert klass.new(5.0, :limit => 10.0)
|
|
17
|
-
assert_raises RangeError do
|
|
18
|
-
# limit should be > 0
|
|
19
|
-
assert klass.new(5, :limit => -1)
|
|
20
|
-
end
|
|
21
|
-
assert_raises TypeError do
|
|
22
|
-
# limit should be a Fixnum
|
|
23
|
-
assert klass.new(5, :limit => 'a')
|
|
24
|
-
end
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
end
|
data/test/test-query-paging.rb
DELETED
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
$VERBOSE = true
|
|
3
|
-
require 'socket'
|
|
4
|
-
require_relative 'helper'
|
|
5
|
-
require_relative '../lib/resource/main'
|
|
6
|
-
|
|
7
|
-
class TestQueryPaging < Test::Unit::TestCase
|
|
8
|
-
|
|
9
|
-
def setup
|
|
10
|
-
@dataset = SolveBio::Dataset.retrieve(TEST_DATASET_NAME)
|
|
11
|
-
end
|
|
12
|
-
|
|
13
|
-
def test_query
|
|
14
|
-
results = @dataset.query(:paging=>true, :limit => 10)
|
|
15
|
-
# When paging is on, results.size should return the number
|
|
16
|
-
# of total number of results.
|
|
17
|
-
assert_equal(results.size, results.total,
|
|
18
|
-
'results.size == results.total, paging=true')
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
# In paging queries, results.size should return the total number of
|
|
22
|
-
# results that exist. Yes, this is the same as test_query, but
|
|
23
|
-
# we reverse the order of access, to make sure "warmup" is called.
|
|
24
|
-
def test_limit
|
|
25
|
-
limit = 10
|
|
26
|
-
results = @dataset.query(:paging=>true, :limit => limit)
|
|
27
|
-
assert_equal(results.total, results.length,
|
|
28
|
-
'results.total == results.length, paging = true')
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def test_paging
|
|
32
|
-
limit = 100
|
|
33
|
-
total = 4
|
|
34
|
-
results = @dataset.query(:paging => true, :limit => limit).
|
|
35
|
-
filter(:hgnc_id__in => [2396, 2404, 2409, 2411])
|
|
36
|
-
|
|
37
|
-
assert_equal(total, results.total)
|
|
38
|
-
|
|
39
|
-
# Make sure we can iterate over the entire result set
|
|
40
|
-
i = 0
|
|
41
|
-
results.each_with_index do |val, j|
|
|
42
|
-
assert val, "Can retrieve filter item #{i}"
|
|
43
|
-
i = j
|
|
44
|
-
end
|
|
45
|
-
assert_equal(i, total-1)
|
|
46
|
-
end
|
|
47
|
-
|
|
48
|
-
def test_range
|
|
49
|
-
limit = 30
|
|
50
|
-
results = @dataset.query(:paging => true, :limit => limit).
|
|
51
|
-
filter(:hgnc_id__range => [10, 6000])[2..5]
|
|
52
|
-
assert_equal(3, results.size)
|
|
53
|
-
|
|
54
|
-
results = @dataset.query(:paging => true, :limit => limit).
|
|
55
|
-
filter(:hgnc_id__range => [10, 6000])[0..7]
|
|
56
|
-
assert_equal(7, results.size)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def test_paging_and_slice_equivalence
|
|
60
|
-
idx0 = 3
|
|
61
|
-
idx1 = 5
|
|
62
|
-
|
|
63
|
-
query = proc{
|
|
64
|
-
@dataset.query( :paging => true, :limit => 10).
|
|
65
|
-
filter(:hgnc_id__range => [1000, 5000])[2..10]
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
results_slice = query.call()[idx0...idx1]
|
|
69
|
-
results_paging = []
|
|
70
|
-
query.call.each_with_index do |r, i|
|
|
71
|
-
break if i == idx1
|
|
72
|
-
results_paging << r if i >= idx0
|
|
73
|
-
end
|
|
74
|
-
|
|
75
|
-
assert_equal(results_slice.size, results_paging.size)
|
|
76
|
-
|
|
77
|
-
results_paging.size.times do |i|
|
|
78
|
-
id_a = results_paging[i][:hgnic_id]
|
|
79
|
-
id_b = results_slice[i][:hgnc_id]
|
|
80
|
-
assert_equal(id_a, id_b)
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
|
|
84
|
-
def test_caching
|
|
85
|
-
idx0 = 60
|
|
86
|
-
idx1 = 81
|
|
87
|
-
|
|
88
|
-
q = @dataset.query(:paging => true, :limit => 100)
|
|
89
|
-
# q = self.dataset.query(paging=True, limit=100) \
|
|
90
|
-
# .filter(omim_id__in=range(100000, 120000))
|
|
91
|
-
results_slice = q[idx0..idx1]
|
|
92
|
-
results_cached = q[idx0..idx1]
|
|
93
|
-
|
|
94
|
-
assert_equal(results_slice.size, results_cached.size)
|
|
95
|
-
results_slice.size-1.times do |i|
|
|
96
|
-
id_a = results_slice[i]['reference_allele']
|
|
97
|
-
id_b = results_cached[i]['reference_allele']
|
|
98
|
-
assert_equal(id_b, id_a)
|
|
99
|
-
end
|
|
100
|
-
end
|
|
101
|
-
|
|
102
|
-
end
|
data/test/test-query.rb
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
$VERBOSE = true
|
|
2
|
-
require 'socket'
|
|
3
|
-
require_relative 'helper'
|
|
4
|
-
require_relative '../lib/resource/main'
|
|
5
|
-
|
|
6
|
-
class TestQuery < Test::Unit::TestCase
|
|
7
|
-
def setup
|
|
8
|
-
@dataset = SolveBio::Dataset.retrieve(TEST_DATASET_NAME)
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
# When paging is off, results.length should return the number of
|
|
12
|
-
# results retrieved.
|
|
13
|
-
def test_limit
|
|
14
|
-
@dataset = SolveBio::Dataset.retrieve(TEST_DATASET_NAME)
|
|
15
|
-
limit = 10
|
|
16
|
-
results = @dataset.query :paging=>false, :limit => limit
|
|
17
|
-
assert_equal(limit, results.length,
|
|
18
|
-
'limit == results.size, paging = false')
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
results.each_with_index do |val, i|
|
|
22
|
-
assert results[i], "retrieving value at #{i}"
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
assert_raise IndexError do
|
|
26
|
-
puts results[limit]
|
|
27
|
-
end
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
# test Query when limit is specified and is GREATER THAN total available
|
|
31
|
-
# results
|
|
32
|
-
def test_limit_empty
|
|
33
|
-
limit = 100
|
|
34
|
-
results = @dataset.query(:paging=>false, :limit => limit).
|
|
35
|
-
filter({:omim_ids => 999999})
|
|
36
|
-
assert_equal(0, results.size)
|
|
37
|
-
|
|
38
|
-
assert_raise IndexError do
|
|
39
|
-
puts results[0]
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
results = @dataset.query(:paging=>false, :limit => limit).
|
|
43
|
-
filter :omim_ids => 123631
|
|
44
|
-
assert_equal(1, results.size)
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
# test Filtered Query in which limit is specified but is GREATER THAN
|
|
48
|
-
# the number of total available results
|
|
49
|
-
def test_limit_filter
|
|
50
|
-
limit = 10
|
|
51
|
-
num_filters = 2
|
|
52
|
-
|
|
53
|
-
filters =
|
|
54
|
-
SolveBio::Filter.new(:omim_ids => 123631) |
|
|
55
|
-
SolveBio::Filter.new(:omim_ids => 123670)
|
|
56
|
-
|
|
57
|
-
results = @dataset.query(:paging=>false, :limit => limit,
|
|
58
|
-
:filters => filters)
|
|
59
|
-
|
|
60
|
-
num_filters.times do |i|
|
|
61
|
-
assert results[i]
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
assert_equal(num_filters, results.size)
|
|
65
|
-
|
|
66
|
-
assert_raise IndexError do
|
|
67
|
-
puts results[num_filters]
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
end
|
data/test/test-resource.rb
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
$VERBOSE = true
|
|
3
|
-
require_relative './helper'
|
|
4
|
-
require_relative '../lib/resource/main'
|
|
5
|
-
|
|
6
|
-
class TestResource < Test::Unit::TestCase
|
|
7
|
-
|
|
8
|
-
# Do the class FULL_NAME_REGEX contants match what the think they
|
|
9
|
-
# should?
|
|
10
|
-
def test_full_name_regexp
|
|
11
|
-
assert('HGNC/1.0.0-1/HGNC' =~
|
|
12
|
-
SolveBio::Dataset::FULL_NAME_REGEX,
|
|
13
|
-
'Dataset regexp')
|
|
14
|
-
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
def test_SolveObject_inspect
|
|
18
|
-
str = SolveBio::SolveObject.new.inspect
|
|
19
|
-
assert(str =~ /^<SolveBio::SolveObject:[[:xdigit:]]+> JSON: {}/,
|
|
20
|
-
'empty SolveObject inspect')
|
|
21
|
-
str = SolveBio::SolveObject.new(62).inspect
|
|
22
|
-
assert(str =~ /^<SolveBio::SolveObject id=62:[[:xdigit:]]+> JSON: {"id":62}/,
|
|
23
|
-
"SolveObject inspect with id #{str}")
|
|
24
|
-
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
def test_Dataset_from_response
|
|
28
|
-
resp = {
|
|
29
|
-
'class_name' => 'Dataset',
|
|
30
|
-
'depository' => 'HGNC',
|
|
31
|
-
'depository_version' => 'HGNC/1.0.0-1',
|
|
32
|
-
'full_name' => 'HGNC/1.0.0-1/HGNC',
|
|
33
|
-
'name' => 'HGNC',
|
|
34
|
-
'title' => 'HGNC'
|
|
35
|
-
}
|
|
36
|
-
so = resp.to_solvebio
|
|
37
|
-
assert_equal SolveBio::Dataset, so.class, 'Hash -> SolveObject'
|
|
38
|
-
resp.keys.each {|k| assert_equal resp[k], so[k]}
|
|
39
|
-
end
|
|
40
|
-
end
|
data/test/test-sample-access.rb
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
require_relative './helper'
|
|
2
|
-
|
|
3
|
-
class TestSampleAccess < Test::Unit::TestCase
|
|
4
|
-
|
|
5
|
-
def check_response(response, expect, msg)
|
|
6
|
-
expect.each do |key, val|
|
|
7
|
-
assert_equal(val, response[key], msg)
|
|
8
|
-
end
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
def test_insert_delete
|
|
12
|
-
if SolveBio::API_HOST == 'https://api.solvebio.com'
|
|
13
|
-
skip "Testing only on local/dev environments"
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
all = SolveBio::Sample.all
|
|
17
|
-
total = all.total
|
|
18
|
-
vcf_url = 'http://downloads.solvebio.com/vcf/small_sample.vcf.gz'
|
|
19
|
-
expect = {
|
|
20
|
-
'class_name' => 'Sample',
|
|
21
|
-
'annotations_count' => 0,
|
|
22
|
-
'description' => '',
|
|
23
|
-
'genome_build' => 'GRCh37',
|
|
24
|
-
'vcf_md5' => 'a03e39e96671a01208cffd234812556d',
|
|
25
|
-
'vcf_size' => 12124
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
response = SolveBio::Sample.create('GRCh37', :vcf_url => vcf_url)
|
|
29
|
-
check_response(response, expect,
|
|
30
|
-
'create sample.vcf.gz from url')
|
|
31
|
-
all = SolveBio::Sample.all
|
|
32
|
-
assert_equal(all.total, total + 1, "After uploading an url")
|
|
33
|
-
total = total + 1
|
|
34
|
-
|
|
35
|
-
vcf_file = File.join(File.dirname(__FILE__), 'data/sample.vcf.gz')
|
|
36
|
-
response = SolveBio::Sample.create('GRCh37', {:vcf_file => vcf_file})
|
|
37
|
-
expect = {
|
|
38
|
-
'class_name' => 'Sample',
|
|
39
|
-
'annotations_count' => 0,
|
|
40
|
-
'description' => '',
|
|
41
|
-
'genome_build' => 'GRCh37',
|
|
42
|
-
'vcf_md5' => '83acd96171c72ab2bb35e9c52961afd9',
|
|
43
|
-
'vcf_size' => 592
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
check_response(response, expect,
|
|
47
|
-
'create sample.vcf.gz from a file')
|
|
48
|
-
|
|
49
|
-
# assert_equal(all.total, total, "After uploading a file")
|
|
50
|
-
|
|
51
|
-
# sample = SolveBio::Sample.retrieve(response.id)
|
|
52
|
-
# delete_response = sample.delete
|
|
53
|
-
# assert_equal(delete_response.deleted, true,
|
|
54
|
-
# 'response.deleted should be true')
|
|
55
|
-
|
|
56
|
-
# all = SolveBio::Sample.all
|
|
57
|
-
# assert_equal(all.total, total, "After deleting a file")
|
|
58
|
-
end
|
|
59
|
-
end
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
require 'fileutils'
|
|
2
|
-
require_relative './helper'
|
|
3
|
-
|
|
4
|
-
class TestSampleDownload < Test::Unit::TestCase
|
|
5
|
-
|
|
6
|
-
def test_sample_download
|
|
7
|
-
if SolveBio::API_HOST == 'https://api.solvebio.com'
|
|
8
|
-
skip "Testing only on local/dev environments"
|
|
9
|
-
end
|
|
10
|
-
|
|
11
|
-
vcf_file = File.join(File.dirname(__FILE__), 'data/sample.vcf.gz')
|
|
12
|
-
sample = SolveBio::Sample.create('GRCh37', {:vcf_file => vcf_file})
|
|
13
|
-
response = sample.download()
|
|
14
|
-
assert_equal(response['code'], 200,
|
|
15
|
-
"Download sample file status ok")
|
|
16
|
-
assert(File.exist?(response['filename']),
|
|
17
|
-
"Download sample file on filesystem")
|
|
18
|
-
FileUtils.rm response['filename']
|
|
19
|
-
end
|
|
20
|
-
end
|
data/test/test-tabulate.rb
DELETED
|
@@ -1,131 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# -*- coding: utf-8 -*-
|
|
3
|
-
require_relative '../lib/tabulate'
|
|
4
|
-
$VERBOSE = true
|
|
5
|
-
require 'test/unit'
|
|
6
|
-
|
|
7
|
-
class TestTabulate < Test::Unit::TestCase
|
|
8
|
-
|
|
9
|
-
include SolveBio::Tabulate
|
|
10
|
-
|
|
11
|
-
def test_classify
|
|
12
|
-
|
|
13
|
-
assert_equal true, '123.45'.number?
|
|
14
|
-
assert_equal true, '123'.number?
|
|
15
|
-
assert_equal false, 'spam'.number?
|
|
16
|
-
assert_equal true, '123'.int?
|
|
17
|
-
assert_equal false, '123.45'.int?
|
|
18
|
-
|
|
19
|
-
assert_equal NilClass, _type(nil)
|
|
20
|
-
assert_equal String, _type('foo')
|
|
21
|
-
assert_equal Fixnum, _type('1')
|
|
22
|
-
assert_equal Fixnum, _type(1)
|
|
23
|
-
assert_equal Fixnum, _type('\x1b[31m42\x1b[0m')
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
def test_align
|
|
27
|
-
assert_equal( 2, '123.45'.afterpoint)
|
|
28
|
-
assert_equal(-1, '1001'.afterpoint)
|
|
29
|
-
assert_equal(-1, 'eggs'.afterpoint)
|
|
30
|
-
assert_equal( 2, '123e45'.afterpoint)
|
|
31
|
-
|
|
32
|
-
assert_equal(" \u044f\u0439\u0446\u0430",
|
|
33
|
-
"\u044f\u0439\u0446\u0430".padleft(6))
|
|
34
|
-
assert_equal("\u044f\u0439\u0446\u0430 ",
|
|
35
|
-
"\u044f\u0439\u0446\u0430".padright(6))
|
|
36
|
-
|
|
37
|
-
assert_equal(" \u044f\u0439\u0446\u0430 ",
|
|
38
|
-
"\u044f\u0439\u0446\u0430".padboth(6))
|
|
39
|
-
|
|
40
|
-
assert_equal(" \u044f\u0439\u0446\u0430 ",
|
|
41
|
-
"\u044f\u0439\u0446\u0430".padboth(7))
|
|
42
|
-
|
|
43
|
-
assert_equal('abc', 'abc'.padright(2))
|
|
44
|
-
assert_equal('abc', 'abc'.padleft(2))
|
|
45
|
-
assert_equal('abc', 'abc'.padboth(2))
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
assert_equal([' 12.345 ', '-1234.5 ', ' 1.23 ',
|
|
49
|
-
' 1234.5 ', ' 1e+234 ', ' 1.0e234'],
|
|
50
|
-
align_column(
|
|
51
|
-
["12.345", "-1234.5", "1.23", "1234.5",
|
|
52
|
-
"1e+234", "1.0e234"], "decimal"))
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def test_column_type
|
|
56
|
-
assert_equal(Fixnum, column_type(["1", "2"]))
|
|
57
|
-
assert_equal(Float, column_type(["1", "2.3"]))
|
|
58
|
-
assert_equal(String, column_type(["1", "2.3", "four"]))
|
|
59
|
-
assert_equal(String,
|
|
60
|
-
column_type(["four", '\u043f\u044f\u0442\u044c']))
|
|
61
|
-
assert_equal(String, column_type([nil, "brux"]))
|
|
62
|
-
assert_equal(Fixnum, column_type([1, 2, nil]))
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def test_tabulate
|
|
66
|
-
old_verbose = $VERBOSE
|
|
67
|
-
$VERBOSE=nil
|
|
68
|
-
SolveBio::Tabulate.const_set(:TTY_COLS, 80)
|
|
69
|
-
$VERBOSE=old_verbose
|
|
70
|
-
tsv = simple_separated_format("\t")
|
|
71
|
-
expected = <<-EOS
|
|
72
|
-
foo 1
|
|
73
|
-
spam 23
|
|
74
|
-
EOS
|
|
75
|
-
assert_equal(expected.chomp, tabulate([["foo", 1], ["spam", 23]], [], tsv),
|
|
76
|
-
'simple separated format table')
|
|
77
|
-
####################################################################
|
|
78
|
-
expected = <<-EOS
|
|
79
|
-
| буква | цифра |
|
|
80
|
-
|---------+---------|
|
|
81
|
-
| аз | 2 |
|
|
82
|
-
| буки | 4 |
|
|
83
|
-
EOS
|
|
84
|
-
hrow = ["\u0431\u0443\u043a\u0432\u0430", "\u0446\u0438\u0444\u0440\u0430"]
|
|
85
|
-
tbl = [["\u0430\u0437", 2], ["\u0431\u0443\u043a\u0438", 4]]
|
|
86
|
-
assert_equal(expected.chomp, SolveBio::Tabulate.tabulate(tbl, hrow),
|
|
87
|
-
'org mode with header and unicode')
|
|
88
|
-
|
|
89
|
-
###################################################################
|
|
90
|
-
expected = <<-EOS
|
|
91
|
-
| Fields | Data |
|
|
92
|
-
|-----------------------+-----------------------------|
|
|
93
|
-
| alternate_alleles | T |
|
|
94
|
-
| clinical_origin | somatic |
|
|
95
|
-
| clinical_significance | other |
|
|
96
|
-
| gene_symbols | CPB1 |
|
|
97
|
-
| hg18_chromosome | 3 |
|
|
98
|
-
| hg19_chromosome | 3 |
|
|
99
|
-
| hg19_start | 148562304 |
|
|
100
|
-
| hg38_start | 148844517 |
|
|
101
|
-
| hgvs | NC_000003.12:g.148844517C>T |
|
|
102
|
-
| rcvaccession | RCV000060731 |
|
|
103
|
-
| rcvaccession_version | 2 |
|
|
104
|
-
| reference_allele | C |
|
|
105
|
-
| rsid | rs150241322 |
|
|
106
|
-
| type | SNV |
|
|
107
|
-
EOS
|
|
108
|
-
|
|
109
|
-
hash = {
|
|
110
|
-
"alternate_alleles" => ["T"],
|
|
111
|
-
"clinical_origin" => ["somatic"],
|
|
112
|
-
"clinical_significance"=> "other",
|
|
113
|
-
"gene_symbols" => ["CPB1"],
|
|
114
|
-
"hg18_chromosome" => "3",
|
|
115
|
-
"hg19_chromosome" => "3",
|
|
116
|
-
"hg19_start" => 148562304,
|
|
117
|
-
"hg38_start" => 148844517,
|
|
118
|
-
"hgvs" => ["NC_000003.12:g.148844517C>T"],
|
|
119
|
-
"rcvaccession" => "RCV000060731",
|
|
120
|
-
"rcvaccession_version" => 2,
|
|
121
|
-
"reference_allele" => "C",
|
|
122
|
-
"rsid" => "rs150241322",
|
|
123
|
-
"type" => "SNV"
|
|
124
|
-
}
|
|
125
|
-
assert_equal(expected.chomp, tabulate(hash.to_a,
|
|
126
|
-
['Fields', 'Data'],
|
|
127
|
-
['right', 'left']),
|
|
128
|
-
'mixed data with arrays; close to actual query output')
|
|
129
|
-
end
|
|
130
|
-
|
|
131
|
-
end
|