solvebio 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. data/.gitignore +7 -0
  2. data/.travis.yml +13 -0
  3. data/Gemfile +4 -0
  4. data/Gemspec +3 -0
  5. data/LICENSE +21 -0
  6. data/Makefile +17 -0
  7. data/README.md +64 -0
  8. data/Rakefile +59 -0
  9. data/bin/solvebio.rb +36 -0
  10. data/demo/README.md +14 -0
  11. data/demo/dataset/facets.rb +13 -0
  12. data/demo/dataset/field.rb +13 -0
  13. data/demo/depository/README.md +24 -0
  14. data/demo/depository/all.rb +13 -0
  15. data/demo/depository/retrieve.rb +13 -0
  16. data/demo/depository/versions-all.rb +13 -0
  17. data/demo/query/query-filter.rb +30 -0
  18. data/demo/query/query.rb +13 -0
  19. data/demo/query/range-filter.rb +18 -0
  20. data/demo/test-api.rb +98 -0
  21. data/lib/apiresource.rb +130 -0
  22. data/lib/cli/auth.rb +122 -0
  23. data/lib/cli/help.rb +13 -0
  24. data/lib/cli/irb.rb +58 -0
  25. data/lib/cli/irbrc.rb +53 -0
  26. data/lib/cli/options.rb +75 -0
  27. data/lib/client.rb +152 -0
  28. data/lib/credentials.rb +67 -0
  29. data/lib/errors.rb +81 -0
  30. data/lib/filter.rb +312 -0
  31. data/lib/help.rb +46 -0
  32. data/lib/locale.rb +47 -0
  33. data/lib/main.rb +37 -0
  34. data/lib/query.rb +415 -0
  35. data/lib/resource.rb +414 -0
  36. data/lib/solvebio.rb +14 -0
  37. data/lib/solveobject.rb +101 -0
  38. data/lib/tabulate.rb +706 -0
  39. data/solvebio.gemspec +75 -0
  40. data/test/data/netrc-save +6 -0
  41. data/test/helper.rb +3 -0
  42. data/test/test-auth.rb +54 -0
  43. data/test/test-client.rb +27 -0
  44. data/test/test-error.rb +36 -0
  45. data/test/test-filter.rb +70 -0
  46. data/test/test-netrc.rb +42 -0
  47. data/test/test-query-batch.rb +60 -0
  48. data/test/test-query-init.rb +29 -0
  49. data/test/test-query-paging.rb +123 -0
  50. data/test/test-query.rb +88 -0
  51. data/test/test-resource.rb +47 -0
  52. data/test/test-solveobject.rb +27 -0
  53. data/test/test-tabulate.rb +127 -0
  54. metadata +158 -0
@@ -0,0 +1,88 @@
1
+ $VERBOSE = true
2
+ require_relative 'helper'
3
+
4
+ class TestQuery < Test::Unit::TestCase
5
+
6
+ TEST_DATASET_NAME = 'ClinVar/2.0.0-1/Variants'
7
+
8
+ if SolveBio::api_key
9
+
10
+ def setup
11
+ begin
12
+ @dataset = SolveBio::Dataset.retrieve(TEST_DATASET_NAME)
13
+ rescue SocketError
14
+ @dataset = nil
15
+ end
16
+ end
17
+
18
+ # When paging is off, results.length should return the number of
19
+ # results retrieved.
20
+ def test_limit
21
+ skip('Are you connected to the Internet?') unless @dataset
22
+ @dataset = SolveBio::Dataset.retrieve(TEST_DATASET_NAME)
23
+ limit = 10
24
+ results = @dataset.query :paging=>false, :limit => limit
25
+ assert_equal(limit, results.length,
26
+ 'limit == results.size, paging = false')
27
+
28
+
29
+ results.each_with_index do |val, i|
30
+ assert results[i], "retrieving value at #{i}"
31
+ end
32
+
33
+ assert_raise IndexError do
34
+ puts results[limit]
35
+ end
36
+ end
37
+
38
+ # test Query when limit is specified and is GREATER THAN total available
39
+ # results
40
+ def test_limit_empty
41
+ skip('Are you connected to the Internet?') unless @dataset
42
+ limit = 100
43
+ results = @dataset.query(:paging=>false, :limit => limit).
44
+ filter({:hg19_start => 1234})
45
+ assert_equal(0, results.size)
46
+
47
+ assert_raise IndexError do
48
+ puts results[0]
49
+ end
50
+
51
+ results = @dataset.query(:paging=>false, :limit => limit).
52
+ filter :hg19_start => 148459988
53
+ assert_equal(1, results.size)
54
+ end
55
+
56
+ # test Filtered Query in which limit is specified but is GREATER THAN
57
+ # the number of total available results
58
+ def test_limit_filter
59
+ skip('Are you connected to the Internet?') unless @dataset
60
+ limit = 10
61
+ num_filters = 3
62
+
63
+ filters3 =
64
+ SolveBio::Filter.new(:hg19_start => 148459988) |
65
+ SolveBio::Filter.new(:hg19_start => 148562304) |
66
+ SolveBio::Filter.new(:hg19_start => 148891521)
67
+
68
+ results = @dataset.query(:paging=>false, :limit => limit,
69
+ :filters => filters3)
70
+
71
+ num_filters.times do |i|
72
+ assert results[i]
73
+ end
74
+
75
+ assert_equal(num_filters, results.size)
76
+
77
+ assert_raise IndexError do
78
+ puts results[num_filters]
79
+ end
80
+ end
81
+
82
+ else
83
+ def test_skip
84
+ skip 'Please set SolveBio::api_key'
85
+ end
86
+ end
87
+
88
+ end
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env ruby
2
+ $VERBOSE = true
3
+ require 'test/unit'
4
+ require_relative '../lib/resource'
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('Clinvar/2.0.0-1/Variants' =~
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
+ 'data_url' => 'https://api.solvebio.com/v1/datasets/25/data',
31
+ 'depository' => 'ClinVar',
32
+ 'depository_id' => 223,
33
+ 'depository_version' => 'ClinVar/2.0.0-1',
34
+ 'depository_version_id' => 15,
35
+ 'description' => '',
36
+ 'fields_url' => 'https://api.solvebio.com/v1/datasets/25/fields',
37
+ 'full_name' => 'ClinVar/2.0.0-1/Variants',
38
+ 'id' => 25,
39
+ 'name' => 'Variants',
40
+ 'title' => 'Variants',
41
+ 'url' => 'https://api.solvebio.com/v1/datasets/25'
42
+ }
43
+ so = resp.to_solvebio
44
+ assert_equal SolveBio::Dataset, so.class, 'Hash -> SolveObject'
45
+ resp.keys.each {|k| assert_equal resp[k], so[k]}
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+ $VERBOSE = true
3
+ require 'test/unit'
4
+ require_relative '../lib/solveobject'
5
+
6
+ class TestSolveObject < Test::Unit::TestCase
7
+
8
+ # Does our kind of camelCasing works?
9
+ def test_camelcase
10
+
11
+ data =
12
+ [
13
+ ['abc', 'abc', 'no camelcase'],
14
+ ['aBcDef', 'a_bc_def', 'letters only'],
15
+ ['abc01Def', 'abc01_def', 'letters and numbers'],
16
+ ['aBcDef', 'a_bc_def', 'multiple letter match'],
17
+ ['a1B2C3', 'a1_b2_c3', 'multi letters and numbers'],
18
+ ['?Foo', '?_foo', 'weird symbols, part 1'],
19
+ ['Dataset', 'dataset', 'no camelcase with caps'],
20
+ ]
21
+ data.each do |triple|
22
+ assert_equal(triple[1],
23
+ camelcase_to_underscore(triple[0]),
24
+ triple[2])
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,127 @@
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
+ tsv = simple_separated_format("\t")
67
+ expected = <<-EOS
68
+ foo 1
69
+ spam 23
70
+ EOS
71
+ assert_equal(expected.chomp, tabulate([["foo", 1], ["spam", 23]], [], tsv),
72
+ 'simple separated format table')
73
+ ####################################################################
74
+ expected = <<-EOS
75
+ | буква | цифра |
76
+ |---------+---------|
77
+ | аз | 2 |
78
+ | буки | 4 |
79
+ EOS
80
+ hrow = ["\u0431\u0443\u043a\u0432\u0430", "\u0446\u0438\u0444\u0440\u0430"]
81
+ tbl = [["\u0430\u0437", 2], ["\u0431\u0443\u043a\u0438", 4]]
82
+ assert_equal(expected.chomp, SolveBio::Tabulate.tabulate(tbl, hrow),
83
+ 'org mode with header and unicode')
84
+
85
+ ###################################################################
86
+ expected = <<-EOS
87
+ | Fields | Data |
88
+ |-----------------------+-----------------------------|
89
+ | rcvaccession_version | 2 |
90
+ | hg18_chromosome | 3 |
91
+ | hg19_start | 148562304 |
92
+ | rcvaccession | RCV000060731 |
93
+ | hg38_start | 148844517 |
94
+ | reference_allele | C |
95
+ | gene_symbols | CPB1 |
96
+ | rsid | rs150241322 |
97
+ | hg19_chromosome | 3 |
98
+ | hgvs | NC_000003.12:g.148844517C>T |
99
+ | clinical_significance | other |
100
+ | alternate_alleles | T |
101
+ | clinical_origin | somatic |
102
+ | type | SNV |
103
+ EOS
104
+
105
+ hash = {
106
+ "rcvaccession_version"=>2,
107
+ "hg18_chromosome"=>"3",
108
+ "hg19_start"=>148562304,
109
+ "rcvaccession"=>"RCV000060731",
110
+ "hg38_start"=>148844517,
111
+ "reference_allele"=>"C",
112
+ "gene_symbols"=>["CPB1"],
113
+ "rsid"=>"rs150241322",
114
+ "hg19_chromosome"=>"3",
115
+ "hgvs"=>["NC_000003.12:g.148844517C>T"],
116
+ "clinical_significance"=>"other",
117
+ "alternate_alleles"=>["T"],
118
+ "clinical_origin"=>["somatic"],
119
+ "type"=>"SNV"
120
+ }
121
+ assert_equal(expected.chomp, tabulate(hash.to_a,
122
+ ['Fields', 'Data'],
123
+ ['right', 'left']),
124
+ 'mixed data with arrays; close to actual query output')
125
+ end
126
+
127
+ end
metadata ADDED
@@ -0,0 +1,158 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: solvebio
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.5.0
6
+ platform: ruby
7
+ authors:
8
+ - solvebio.com
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2014-08-16 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: netrc
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 0.7.7
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ type: :development
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: rdoc
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: "0"
46
+ type: :development
47
+ version_requirements: *id003
48
+ description: |
49
+ SolveBio is a platform for biomedical datasets. With SolveBio you can
50
+ forget about parsing complex flat files and sifting through cryptic
51
+ datasets. Just use the Ruby Client and API to explore massive
52
+ datasets and automate just about any bioinformatics workflow.
53
+
54
+ See https://www.solvebio.com/docs/api/ for more information.
55
+
56
+ email: contact@solvebio.com
57
+ executables:
58
+ - solvebio.rb
59
+ extensions: []
60
+
61
+ extra_rdoc_files:
62
+ - LICENSE
63
+ files:
64
+ - .gitignore
65
+ - .travis.yml
66
+ - Gemfile
67
+ - Gemspec
68
+ - LICENSE
69
+ - Makefile
70
+ - README.md
71
+ - Rakefile
72
+ - bin/solvebio.rb
73
+ - demo/README.md
74
+ - demo/dataset/facets.rb
75
+ - demo/dataset/field.rb
76
+ - demo/depository/README.md
77
+ - demo/depository/all.rb
78
+ - demo/depository/retrieve.rb
79
+ - demo/depository/versions-all.rb
80
+ - demo/query/query-filter.rb
81
+ - demo/query/query.rb
82
+ - demo/query/range-filter.rb
83
+ - demo/test-api.rb
84
+ - lib/apiresource.rb
85
+ - lib/cli/auth.rb
86
+ - lib/cli/help.rb
87
+ - lib/cli/irb.rb
88
+ - lib/cli/irbrc.rb
89
+ - lib/cli/options.rb
90
+ - lib/client.rb
91
+ - lib/credentials.rb
92
+ - lib/errors.rb
93
+ - lib/filter.rb
94
+ - lib/help.rb
95
+ - lib/locale.rb
96
+ - lib/main.rb
97
+ - lib/query.rb
98
+ - lib/resource.rb
99
+ - lib/solvebio.rb
100
+ - lib/solveobject.rb
101
+ - lib/tabulate.rb
102
+ - solvebio.gemspec
103
+ - test/data/netrc-save
104
+ - test/helper.rb
105
+ - test/test-auth.rb
106
+ - test/test-client.rb
107
+ - test/test-error.rb
108
+ - test/test-filter.rb
109
+ - test/test-netrc.rb
110
+ - test/test-query-batch.rb
111
+ - test/test-query-init.rb
112
+ - test/test-query-paging.rb
113
+ - test/test-query.rb
114
+ - test/test-resource.rb
115
+ - test/test-solveobject.rb
116
+ - test/test-tabulate.rb
117
+ homepage: https://www.solvebio.com
118
+ licenses: []
119
+
120
+ post_install_message:
121
+ rdoc_options:
122
+ - --charset=UTF-8
123
+ require_paths:
124
+ - lib
125
+ required_ruby_version: !ruby/object:Gem::Requirement
126
+ none: false
127
+ requirements:
128
+ - - ">="
129
+ - !ruby/object:Gem::Version
130
+ version: 1.9.0
131
+ required_rubygems_version: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ">="
135
+ - !ruby/object:Gem::Version
136
+ version: "0"
137
+ requirements: []
138
+
139
+ rubyforge_project:
140
+ rubygems_version: 1.8.23
141
+ signing_key:
142
+ specification_version: 2
143
+ summary: SolveBio Ruby bindings.
144
+ test_files:
145
+ - test/data/netrc-save
146
+ - test/helper.rb
147
+ - test/test-auth.rb
148
+ - test/test-client.rb
149
+ - test/test-error.rb
150
+ - test/test-filter.rb
151
+ - test/test-netrc.rb
152
+ - test/test-query-batch.rb
153
+ - test/test-query-init.rb
154
+ - test/test-query-paging.rb
155
+ - test/test-query.rb
156
+ - test/test-resource.rb
157
+ - test/test-solveobject.rb
158
+ - test/test-tabulate.rb