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
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
module SolveBio
|
|
4
|
+
class TestFilter < Test::Unit::TestCase
|
|
5
|
+
def test_filter_errors
|
|
6
|
+
assert_raises TypeError do
|
|
7
|
+
SolveBio::Filter.new(:style__gtt => 5)
|
|
8
|
+
end
|
|
9
|
+
assert_raises TypeError do
|
|
10
|
+
SolveBio::Filter.new(:style__range => 'a')
|
|
11
|
+
end
|
|
12
|
+
assert_raises TypeError do
|
|
13
|
+
SolveBio::Filter.new(:style__range => [5,10,15])
|
|
14
|
+
end
|
|
15
|
+
assert_raises IndexError do
|
|
16
|
+
SolveBio::Filter.new(:style__range => [10,5])
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def test_filter
|
|
21
|
+
f = SolveBio::Filter.new
|
|
22
|
+
assert_equal('<SolveBio::Filter []>', f.inspect, 'empty filter')
|
|
23
|
+
assert_equal('<SolveBio::Filter []>',
|
|
24
|
+
(~f).inspect, '"not" of empty filter')
|
|
25
|
+
f2 = SolveBio::Filter.new({:style => 'Mexican', :price => 'Free'})
|
|
26
|
+
assert_equal('<SolveBio::Filter [{:and=>[[:price, "Free"], [:style, "Mexican"]]}]>',
|
|
27
|
+
f2.inspect, 'Hash to tuple sorting'
|
|
28
|
+
)
|
|
29
|
+
assert_equal('<SolveBio::Filter [{:not=>{:and=>[[:price, "Free"], [:style, "Mexican"]]}}]>',
|
|
30
|
+
(~f2).inspect, '~ of a non-nil filter')
|
|
31
|
+
assert_equal('<SolveBio::Filter [{:and=>[[:price, "Free"], [:style, "Mexican"]]}]>',
|
|
32
|
+
(~~f2).inspect, '~~ has no effect')
|
|
33
|
+
|
|
34
|
+
filters3 =
|
|
35
|
+
SolveBio::Filter.new(:omim_id => 144650) |
|
|
36
|
+
SolveBio::Filter.new(:omim_id => 144600) |
|
|
37
|
+
SolveBio::Filter.new(:omim_id => 145300)
|
|
38
|
+
|
|
39
|
+
assert_equal('<SolveBio::Filter [{:or=>[[:omim_id, 144650], [:omim_id, 144600], [:omim_id, 145300]]}]>',
|
|
40
|
+
filters3.inspect,
|
|
41
|
+
'combining more than one of a connector (|)')
|
|
42
|
+
|
|
43
|
+
assert_equal('<SolveBio::Filter [[:style__range, [5, 10]]]>',
|
|
44
|
+
SolveBio::Filter.new(:style__range => (5...11)).inspect)
|
|
45
|
+
assert_equal('<SolveBio::Filter [[:style__range, [5, 10]]]>',
|
|
46
|
+
SolveBio::Filter.new(:style__range => (5..10)).inspect)
|
|
47
|
+
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_genomic_filter
|
|
51
|
+
assert_equal(
|
|
52
|
+
'<GenomicFilter [{:and=>[["genomic_coordinates.start", 13], ["genomic_coordinates.stop", 32200000], ["chromosome", "hg38"]]}]>',
|
|
53
|
+
SolveBio::GenomicFilter.
|
|
54
|
+
new("hg38", "13", 32200000, 32500000).inspect)
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
def test_process_filters
|
|
58
|
+
# FIXME: add more and put in a loop.
|
|
59
|
+
filters = [[:omid_id, nil]]
|
|
60
|
+
expect = filters
|
|
61
|
+
assert_equal(expect.inspect,
|
|
62
|
+
SolveBio::Filter.process_filters(filters).inspect)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def test_genomic_single_position
|
|
66
|
+
f = SolveBio::GenomicFilter.new('chr1', 100)
|
|
67
|
+
assert_equal(
|
|
68
|
+
'<GenomicFilter [{:and=>[["genomic_coordinates.start__gte", 100.0], ["genomic_coordinates.start__lte", 100.0], ["chromosome", "1"]]}]>',
|
|
69
|
+
f.inspect)
|
|
70
|
+
|
|
71
|
+
f = SolveBio::GenomicFilter.new('chr1', 100, 100, true)
|
|
72
|
+
assert_equal(
|
|
73
|
+
'<GenomicFilter [{:and=>[["genomic_coordinates.start", 100], ["genomic_coordinates.stop", 100], ["chromosome", "1"]]}]>',
|
|
74
|
+
f.inspect)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def test_range
|
|
78
|
+
f = SolveBio::GenomicFilter.new('chr1', 100, 200)
|
|
79
|
+
assert_equal('<GenomicFilter [{:and=>[{:or=>[{:and=>[["genomic_coordinates.start__gte", 200.0], ["genomic_coordinates.start__lte", 100.0]]}, ["genomic_coordinates.start__range", [100, 201]], ["genomic_coordinates.stop__range", [100, 201]]]}, ["chromosome", "1"]]}]>',
|
|
80
|
+
f.inspect)
|
|
81
|
+
f = SolveBio::GenomicFilter.new('chr1', 100, 200, true)
|
|
82
|
+
assert_equal('<GenomicFilter [{:and=>[["genomic_coordinates.start", 100], ["genomic_coordinates.stop", 200], ["chromosome", "1"]]}]>',
|
|
83
|
+
f.inspect)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
module SolveBio
|
|
4
|
+
class TestQuery < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@dataset = SolveBio::Dataset.retrieve(TEST_DATASET_NAME)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_basic
|
|
10
|
+
results = @dataset.query.filter(:omim_ids__in => [123631, 123670, 123690, 306250])
|
|
11
|
+
assert_equal(results.total, results.size)
|
|
12
|
+
assert_equal(results.total, results.length)
|
|
13
|
+
|
|
14
|
+
_results = []
|
|
15
|
+
results.each_with_index.each do |r, i|
|
|
16
|
+
_results << r
|
|
17
|
+
end
|
|
18
|
+
assert_equal(_results.length, results.length)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# results.size should return the number of
|
|
22
|
+
# results retrieved.
|
|
23
|
+
def test_basic_with_limit
|
|
24
|
+
limit = 10
|
|
25
|
+
results = @dataset.query(:limit => limit)
|
|
26
|
+
assert_equal(results.size, limit)
|
|
27
|
+
assert_equal(results[results.total + 1], nil)
|
|
28
|
+
|
|
29
|
+
_results = []
|
|
30
|
+
results.each_with_index.each do |r, i|
|
|
31
|
+
_results << r
|
|
32
|
+
end
|
|
33
|
+
assert_equal(_results.length, limit)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def test_count
|
|
37
|
+
q = @dataset.query
|
|
38
|
+
total = q.count
|
|
39
|
+
assert_operator total, :>, 0
|
|
40
|
+
|
|
41
|
+
# with a filter
|
|
42
|
+
q = @dataset.query.filter(:omim_ids => 123631)
|
|
43
|
+
assert_equal(1, q.count)
|
|
44
|
+
|
|
45
|
+
# with a bogus filter
|
|
46
|
+
q = @dataset.query.filter(:omim_ids => 999999)
|
|
47
|
+
assert_equal(0, q.count)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def test_count_with_limit
|
|
51
|
+
q = @dataset.query
|
|
52
|
+
total = q.count
|
|
53
|
+
assert_operator total, :>, 0
|
|
54
|
+
|
|
55
|
+
[0, 10, 1000].each do |limit|
|
|
56
|
+
# with a filter
|
|
57
|
+
q = @dataset.query(:limit => limit).filter(:omim_ids => 123631)
|
|
58
|
+
assert_equal(1, q.count)
|
|
59
|
+
|
|
60
|
+
# with a bogus filter
|
|
61
|
+
q = @dataset.query(:limit => limit).filter(:omim_ids => 999999)
|
|
62
|
+
assert_equal(0, q.count)
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
def test_len
|
|
67
|
+
q = @dataset.query
|
|
68
|
+
total = q.count
|
|
69
|
+
assert_operator total, :>, 0
|
|
70
|
+
assert_equal total, q.size
|
|
71
|
+
|
|
72
|
+
# with a filter
|
|
73
|
+
q = @dataset.query.filter(:omim_ids => 123631)
|
|
74
|
+
assert_equal 1, q.size
|
|
75
|
+
|
|
76
|
+
# with a bogus filter
|
|
77
|
+
q = @dataset.query.filter(:omim_ids => 999999)
|
|
78
|
+
assert_equal 0, q.size
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
def test_len_with_limit
|
|
82
|
+
q = @dataset.query
|
|
83
|
+
total = q.count
|
|
84
|
+
assert_operator(total, :>, 0)
|
|
85
|
+
assert_equal(total, q.size)
|
|
86
|
+
|
|
87
|
+
[0, 10, 1000].each do |limit|
|
|
88
|
+
# with a filter
|
|
89
|
+
q = @dataset.query(:limit => limit).filter(:omim_ids => 123631)
|
|
90
|
+
assert_equal(limit > 0 ? 1 : 0, q.size)
|
|
91
|
+
|
|
92
|
+
# with a bogus filter
|
|
93
|
+
q = @dataset.query(:limit => limit).filter(:omim_ids => 999999)
|
|
94
|
+
assert_equal 0, q.size
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
# test Query when limit is specified and is GREATER THAN total available
|
|
99
|
+
# results.
|
|
100
|
+
def test_empty
|
|
101
|
+
# bogus filter
|
|
102
|
+
results = @dataset.query.filter(:omim_ids => 999999)
|
|
103
|
+
assert_equal(0, results.size)
|
|
104
|
+
assert_equal(results[0...results.size].to_a, [])
|
|
105
|
+
assert_equal(results[0], nil)
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
# test Query when limit is specified and is GREATER THAN total available
|
|
109
|
+
# results.
|
|
110
|
+
def test_empty_with_limit
|
|
111
|
+
limit = 100
|
|
112
|
+
# bogus filter
|
|
113
|
+
results = @dataset.query(:limit => limit)
|
|
114
|
+
.filter(:omim_ids => 999999)
|
|
115
|
+
assert_equal(0, results.size)
|
|
116
|
+
assert_equal(results[0...results.size].to_a, [])
|
|
117
|
+
assert_equal(results[0], nil)
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# test Filtered Query in which limit is specified but is GREATER THAN
|
|
121
|
+
# the number of total available results
|
|
122
|
+
def test_filter
|
|
123
|
+
num_filters = 4
|
|
124
|
+
filters =
|
|
125
|
+
SolveBio::Filter.new(:omim_ids => 123631) |
|
|
126
|
+
SolveBio::Filter.new(:omim_ids => 123670) |
|
|
127
|
+
SolveBio::Filter.new(:omim_ids => 123690) |
|
|
128
|
+
SolveBio::Filter.new(:omim_ids => 306250)
|
|
129
|
+
results = @dataset.query(:filters => filters)
|
|
130
|
+
assert_equal(num_filters, results.size)
|
|
131
|
+
assert_equal(results[num_filters], nil)
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
# test SolveBio::Filtered Query in which limit is specified but is GREATER THAN
|
|
135
|
+
# the number of total available results
|
|
136
|
+
def test_filter_with_limit
|
|
137
|
+
limit = 10
|
|
138
|
+
num_filters = 4
|
|
139
|
+
filters =
|
|
140
|
+
SolveBio::Filter.new(:omim_ids => 123631) |
|
|
141
|
+
SolveBio::Filter.new(:omim_ids => 123670) |
|
|
142
|
+
SolveBio::Filter.new(:omim_ids => 123690) |
|
|
143
|
+
SolveBio::Filter.new(:omim_ids => 306250)
|
|
144
|
+
results = @dataset.query :limit => limit, :filters => filters
|
|
145
|
+
assert_equal(num_filters, results.size)
|
|
146
|
+
assert_equal(results[num_filters], nil)
|
|
147
|
+
end
|
|
148
|
+
|
|
149
|
+
def test_paging
|
|
150
|
+
page_size = 10
|
|
151
|
+
num_pages = 3
|
|
152
|
+
results = @dataset.query :page_size => page_size
|
|
153
|
+
|
|
154
|
+
_results = []
|
|
155
|
+
results.each_with_index.each do |r, i|
|
|
156
|
+
# break after fetching num_pages
|
|
157
|
+
break if i / page_size == num_pages
|
|
158
|
+
_results << r
|
|
159
|
+
end
|
|
160
|
+
|
|
161
|
+
assert_equal _results.size, num_pages * page_size
|
|
162
|
+
assert_equal num_pages * page_size, _results.map{|i| i}.size
|
|
163
|
+
end
|
|
164
|
+
|
|
165
|
+
def test_paging_with_limit
|
|
166
|
+
page_size = 10
|
|
167
|
+
num_pages = 3
|
|
168
|
+
limit = num_pages * page_size - 1
|
|
169
|
+
results = @dataset.query(:limit => limit, :page_size => page_size)
|
|
170
|
+
|
|
171
|
+
_results = []
|
|
172
|
+
results.each_with_index.each do |r, i|
|
|
173
|
+
_results << r
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
assert_equal limit, _results.size
|
|
177
|
+
assert_equal limit, _results.map{|i| i}.size
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def test_slice_ranges
|
|
181
|
+
limit = 50
|
|
182
|
+
|
|
183
|
+
results = @dataset.query(:limit => limit)
|
|
184
|
+
assert_equal limit, results[0..limit].size
|
|
185
|
+
assert_equal 0, results[limit..limit].size
|
|
186
|
+
assert_equal 0, results[limit..-1].size
|
|
187
|
+
|
|
188
|
+
r0 = @dataset.query(:limit => limit)[0..limit][limit-1]
|
|
189
|
+
r1 = @dataset.query(:limit => limit)[limit-1..limit][0]
|
|
190
|
+
assert_equal(r0[:hgnc_id], r1[:hgnc_id])
|
|
191
|
+
end
|
|
192
|
+
|
|
193
|
+
def test_slice_ranges_with_paging
|
|
194
|
+
limit = 5
|
|
195
|
+
page_size = 2
|
|
196
|
+
|
|
197
|
+
results = @dataset.query(:limit => limit, :page_size => page_size)[0..limit]
|
|
198
|
+
assert_equal results.length, limit
|
|
199
|
+
|
|
200
|
+
results = @dataset.query(:limit => limit, :page_size => page_size)[limit..limit-1]
|
|
201
|
+
assert_equal 0, results.length, 0
|
|
202
|
+
|
|
203
|
+
r0 = @dataset.query(:limit => limit)[0..limit][limit-1]
|
|
204
|
+
r1 = @dataset.query(:limit => limit)[limit-1..limit][0]
|
|
205
|
+
assert_equal(r0[:hgnc_id], r1[:hgnc_id])
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def test_slice_ranges_with_small_limit
|
|
209
|
+
# Test slices larger than 'limit'
|
|
210
|
+
limit = 1
|
|
211
|
+
results = @dataset.query(:limit => limit)
|
|
212
|
+
.filter(:hgnc_id__range => [1000, 2000])[0..4]
|
|
213
|
+
assert_equal limit, results.size
|
|
214
|
+
end
|
|
215
|
+
|
|
216
|
+
def hgnc_id_range_query
|
|
217
|
+
@dataset.query(:limit => 10)
|
|
218
|
+
.filter(:hgnc_id__range => [1000, 5000])
|
|
219
|
+
end
|
|
220
|
+
|
|
221
|
+
def test_paging_and_slice_equivalence
|
|
222
|
+
idx0 = 3
|
|
223
|
+
idx1 = 5
|
|
224
|
+
|
|
225
|
+
results_slice = hgnc_id_range_query()[idx0...idx1]
|
|
226
|
+
results_paging = []
|
|
227
|
+
|
|
228
|
+
hgnc_id_range_query.each_with_index do |r,i|
|
|
229
|
+
if i == idx1
|
|
230
|
+
break
|
|
231
|
+
elsif i >= idx0
|
|
232
|
+
results_paging << r
|
|
233
|
+
end
|
|
234
|
+
end
|
|
235
|
+
|
|
236
|
+
assert_equal results_paging.size, results_slice.size
|
|
237
|
+
|
|
238
|
+
0.upto(results_slice.size-1).each do |i|
|
|
239
|
+
id_a = results_paging[i]['hgnc_id']
|
|
240
|
+
id_b = results_slice[i]['hgnc_id']
|
|
241
|
+
assert_equal(id_a, id_b)
|
|
242
|
+
end
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
def test_caching
|
|
246
|
+
idx0 = 60
|
|
247
|
+
idx1 = 81
|
|
248
|
+
|
|
249
|
+
q = @dataset.query(:limit => 100)
|
|
250
|
+
results_slice = q[idx0...idx1]
|
|
251
|
+
results_cached = q[idx0...idx1]
|
|
252
|
+
assert_equal results_cached.size, results_slice.size
|
|
253
|
+
0.upto(results_slice.size-1).each do |i|
|
|
254
|
+
id_a = results_slice[i]['chromosome']
|
|
255
|
+
id_b = results_cached[i]['chromosome']
|
|
256
|
+
assert_equal(id_a, id_b)
|
|
257
|
+
end
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def test_get_by_index
|
|
261
|
+
limit = 100
|
|
262
|
+
page_size = 10
|
|
263
|
+
idxs = [0, 1, 10, 20, 50, 99]
|
|
264
|
+
q = @dataset.query(:limit => limit, :page_size => page_size)
|
|
265
|
+
cached = []
|
|
266
|
+
idxs.each do |idx|
|
|
267
|
+
cached << q[idx]
|
|
268
|
+
end
|
|
269
|
+
|
|
270
|
+
# forwards
|
|
271
|
+
idxs.each_with_index do |idx, i|
|
|
272
|
+
assert_equal(cached[i], q[idx])
|
|
273
|
+
end
|
|
274
|
+
|
|
275
|
+
i = cached.size - 1
|
|
276
|
+
idxs.reverse.each do |idx|
|
|
277
|
+
assert_equal(cached[i], q[idx])
|
|
278
|
+
i -= 1
|
|
279
|
+
end
|
|
280
|
+
end
|
|
281
|
+
end
|
|
282
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
module SolveBio
|
|
4
|
+
class TestQueryBatch < Test::Unit::TestCase
|
|
5
|
+
def setup
|
|
6
|
+
@dataset = SolveBio::Dataset.retrieve(TEST_DATASET_NAME)
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def test_invalid_batch_query
|
|
10
|
+
assert_raise SolveBio::SolveError do
|
|
11
|
+
SolveBio::BatchQuery
|
|
12
|
+
.new([
|
|
13
|
+
@dataset.query(:limit => 1, :fields => [:bogus_field]),
|
|
14
|
+
@dataset.query(:limit => 10).filter(:bogus_id__gt => 100000)
|
|
15
|
+
]).execute
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
results = SolveBio::BatchQuery
|
|
19
|
+
.new([
|
|
20
|
+
@dataset.query(:limit => 10).filter(:hgnc_id__lt => 100),
|
|
21
|
+
@dataset.query(:limit => 10).filter(:hgnc_id__gt => 100)
|
|
22
|
+
]).execute
|
|
23
|
+
assert_equal(2, results.length)
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test_batch_query
|
|
28
|
+
queries = [
|
|
29
|
+
@dataset.query(:limit => 1),
|
|
30
|
+
@dataset.query(:limit => 10).filter(:hgnc_id__gt => 100)
|
|
31
|
+
]
|
|
32
|
+
results = SolveBio::BatchQuery.new(queries).execute
|
|
33
|
+
assert_equal(2, results.size)
|
|
34
|
+
assert_equal(1, results[0][:results].length)
|
|
35
|
+
assert_equal(10, results[1][:results].size)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
module SolveBio
|
|
4
|
+
class TestQuery < Test::Unit::TestCase
|
|
5
|
+
def test_query_initialize
|
|
6
|
+
[SolveBio::Query].each do |klass|
|
|
7
|
+
assert klass.new(5)
|
|
8
|
+
assert klass.new('clinvar/1.0.0/clinvar')
|
|
9
|
+
|
|
10
|
+
assert_raises TypeError do
|
|
11
|
+
klass.new(:limit => 10)
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
assert_raises TypeError do
|
|
15
|
+
klass.new(5.0, :limit => 10.0)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
assert klass.new(5, :limit => 10)
|
|
19
|
+
assert_raises TypeError do
|
|
20
|
+
# limit should be > 0
|
|
21
|
+
assert klass.new(5, :limit => -1)
|
|
22
|
+
end
|
|
23
|
+
assert_raises TypeError do
|
|
24
|
+
# limit should be a Fixnum
|
|
25
|
+
assert klass.new(5, :limit => 'a')
|
|
26
|
+
end
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
require File.expand_path('../../helper', __FILE__)
|
|
2
|
+
|
|
3
|
+
module SolveBio
|
|
4
|
+
class TestQueryTabulate < Test::Unit::TestCase
|
|
5
|
+
def check_result_fields(expect, got)
|
|
6
|
+
expect_array = expect.split("\n")
|
|
7
|
+
got_array = got.split("\n")
|
|
8
|
+
assert_equal(expect_array[0..2], got_array[0..2], "Header lines")
|
|
9
|
+
assert_equal(expect_array.size, got_array.size, 'Sizes of results')
|
|
10
|
+
got_array[3...-1].each_with_index do |line, i|
|
|
11
|
+
assert_equal(expect_array[i+3][0..33], line[0..33], "line #{i+3}")
|
|
12
|
+
end
|
|
13
|
+
assert_match(/^[.]{3} [0-9,]+ more results./, got_array[-1])
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def test_query_tabulate
|
|
17
|
+
old_verbose = $VERBOSE
|
|
18
|
+
$VERBOSE=nil
|
|
19
|
+
SolveBio::Tabulate.const_set(:TTY_COLS, 66)
|
|
20
|
+
$VERBOSE=old_verbose
|
|
21
|
+
dataset = SolveBio::Dataset.retrieve(TEST_DATASET_NAME)
|
|
22
|
+
results = dataset.query().filter(:hgnc_id => 2396)
|
|
23
|
+
expected = <<-EOF
|
|
24
|
+
|
|
25
|
+
| Fields | Data |
|
|
26
|
+
|------------------------------+---------------------------------|
|
|
27
|
+
| accession_numbers | |
|
|
28
|
+
| approved_name | crystallin, beta A4 |
|
|
29
|
+
| approved_symbol | CRYBA4 |
|
|
30
|
+
| ccds_ids | ["CCDS13841.1"] |
|
|
31
|
+
| chromosome | 22 |
|
|
32
|
+
| date_approved | 1991-07-25 |
|
|
33
|
+
| date_modified | 2008-06-10 |
|
|
34
|
+
| date_name_changed | |
|
|
35
|
+
| date_symbol_changed | |
|
|
36
|
+
| ensembl_gene_id | ENSG00000196431 |
|
|
37
|
+
| ensembl_id_ensembl | ENSG00000196431 |
|
|
38
|
+
| entrez_gene_id | 1413 |
|
|
39
|
+
| entrez_gene_id_ncbi | 1413 |
|
|
40
|
+
| enzyme_ids | |
|
|
41
|
+
| gene_family_description | |
|
|
42
|
+
| gene_family_tag | |
|
|
43
|
+
| hgnc_id | 2396 |
|
|
44
|
+
| locus | 22q12.1 |
|
|
45
|
+
| locus_group | protein-coding gene |
|
|
46
|
+
| locus_specific_databases | ["LOVD - Leiden Open Variat ... |
|
|
47
|
+
| locus_type | gene with protein product |
|
|
48
|
+
| mouse_genome_database_id | [102716] |
|
|
49
|
+
| mouse_genome_database_id_mgi | [102716] |
|
|
50
|
+
| name_synonyms | |
|
|
51
|
+
| omim_id_ncbi | 123631 |
|
|
52
|
+
| omim_ids | [123631] |
|
|
53
|
+
| previous_names | |
|
|
54
|
+
| previous_symbols | |
|
|
55
|
+
| primary_ids | |
|
|
56
|
+
| pubmed_ids | ["8999933", "960806"] |
|
|
57
|
+
| rat_genome_database_id_rgd | 61962 |
|
|
58
|
+
| record_type | Standard |
|
|
59
|
+
| refseq_id_ncbi | NM_001886 |
|
|
60
|
+
| refseq_ids | ["NM_001886"] |
|
|
61
|
+
| secondary_ids | |
|
|
62
|
+
| status | Approved |
|
|
63
|
+
| synonyms | |
|
|
64
|
+
| ucsc_id_ucsc | uc003acz.4 |
|
|
65
|
+
| uniprot_id_uniprot | P53673 |
|
|
66
|
+
| vega_ids | ["OTTHUMG00000150983"] |
|
|
67
|
+
|
|
68
|
+
... No more results.
|
|
69
|
+
EOF
|
|
70
|
+
check_result_fields(expected, results.to_s)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|