genome-rb 0.1.4 → 0.2.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.
- checksums.yaml +5 -5
- data/.travis.yml +1 -1
- data/Gemfile.lock +22 -0
- data/exe/genome +0 -0
- data/lib/genome/errors.rb +7 -0
- data/lib/genome/reader.rb +90 -0
- data/lib/genome/version.rb +1 -1
- data/lib/genome.rb +6 -65
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 82e81a4278f56a5ac9272fcbf7e46bbf1975b4f24c6a03a2a5bf717edc19878f
|
4
|
+
data.tar.gz: 9f830a3008836bcc3841babb8436b5231df84fee50f1b9f14937cb97842d0c29
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a22e8b43f9ee00ca751a0a50902b9d9d44c53df3bfc49654d6efdf3ff4a5cb35c39c3abd6b44916acd454dae5bacdb1a63d0f69797c24ac48134678b0ac1e184
|
7
|
+
data.tar.gz: 7ecc2890129173cfcb083a89de5be221caeec2373c9ffb1b1cab533c54cc564821bbbab38265be222ed0f2dc0c7ac7fcfe4401592308f0e2d6a53e887c926060
|
data/.travis.yml
CHANGED
data/Gemfile.lock
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
genome-rb (0.2.0)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
minitest (5.11.3)
|
10
|
+
rake (10.5.0)
|
11
|
+
|
12
|
+
PLATFORMS
|
13
|
+
ruby
|
14
|
+
|
15
|
+
DEPENDENCIES
|
16
|
+
bundler (~> 2.0)
|
17
|
+
genome-rb!
|
18
|
+
minitest (~> 5.0)
|
19
|
+
rake (~> 10.0)
|
20
|
+
|
21
|
+
BUNDLED WITH
|
22
|
+
2.0.2
|
data/exe/genome
CHANGED
File without changes
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'open-uri'
|
4
|
+
|
5
|
+
class Reader
|
6
|
+
attr_reader :genome
|
7
|
+
|
8
|
+
def initialize(filename)
|
9
|
+
@filename = filename
|
10
|
+
@genome = GENOME::Genome.new @filename
|
11
|
+
end
|
12
|
+
|
13
|
+
def validate?(*)
|
14
|
+
raise NotImplementedError, 'Reader must define validate?.'
|
15
|
+
end
|
16
|
+
|
17
|
+
def parse(*)
|
18
|
+
raise NotImplementedError, 'Reader must parse validate?.'
|
19
|
+
end
|
20
|
+
|
21
|
+
def load
|
22
|
+
validate? @filename
|
23
|
+
open(@filename) do |f|
|
24
|
+
f.each_line do |line|
|
25
|
+
next if line.start_with?('#') || line.downcase.start_with?('rsid')
|
26
|
+
|
27
|
+
rsid, snp = parse line
|
28
|
+
@genome[rsid] = snp
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
module GENOME
|
35
|
+
class TwentyThreeAndMeReader < Reader
|
36
|
+
def validate?(filename)
|
37
|
+
magic_line = File.open(filename, &:readline)
|
38
|
+
unless magic_line.downcase.include? '23'.downcase
|
39
|
+
raise FileTypeError, 'format is not correct'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def parse(line)
|
44
|
+
rsid, chromosome, position, genotype = line.split
|
45
|
+
snp = SNP.new(chromosome = chromosome,
|
46
|
+
position = position,
|
47
|
+
genotype = Genotype.new(genotype))
|
48
|
+
[rsid, snp]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
module GENOME
|
54
|
+
class AncestryReader < Reader
|
55
|
+
def validate?(filename)
|
56
|
+
magic_line = File.open(filename, &:readline)
|
57
|
+
unless magic_line.downcase.include? 'ancestry'.downcase
|
58
|
+
raise FileTypeError, 'format is not correct'
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def parse(line)
|
63
|
+
rsid, chromosome, position, allele1, allele2 = line.split
|
64
|
+
genotype = allele1 + allele2
|
65
|
+
snp = SNP.new(chromosome = chromosome,
|
66
|
+
position = position,
|
67
|
+
genotype = Genotype.new(genotype))
|
68
|
+
[rsid, snp]
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
module GENOME
|
74
|
+
class MyHeritageReader < Reader
|
75
|
+
def validate?(filename)
|
76
|
+
magic_line = File.open(filename, &:readline)
|
77
|
+
unless magic_line.downcase.include? 'MyHeritage'.downcase
|
78
|
+
raise FileTypeError, 'format is not correct'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def parse(line)
|
83
|
+
rsid, chromosome, position, genotype = line.gsub(/"/, '').gsub("\n", '').split(',')
|
84
|
+
snp = SNP.new(chromosome = chromosome,
|
85
|
+
position = position,
|
86
|
+
genotype = Genotype.new(genotype))
|
87
|
+
[rsid, snp]
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
data/lib/genome/version.rb
CHANGED
data/lib/genome.rb
CHANGED
@@ -1,68 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require 'genome/version'
|
4
|
-
require 'open-uri'
|
5
|
-
|
6
|
-
class ProviderError < StandardError
|
7
|
-
def initialize(message = 'ProviderError')
|
8
|
-
super(message)
|
9
|
-
end
|
10
|
-
end
|
11
|
-
|
12
|
-
class FileTypeError < StandardError
|
13
|
-
def initialize(message = 'FileTypeError')
|
14
|
-
super(message)
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
3
|
module GENOME
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
rsid, chromosome, position, genotype = line.split
|
26
|
-
snp = SNP.new(chromosome = chromosome,
|
27
|
-
position = position,
|
28
|
-
genotype = Genotype.new(genotype))
|
29
|
-
[rsid, snp]
|
30
|
-
end
|
31
|
-
|
32
|
-
def self.ancestry_reader(line)
|
33
|
-
rsid, chromosome, position, allele1, allele2 = line.split
|
34
|
-
genotype = allele1 + allele2
|
35
|
-
snp = SNP.new(chromosome = chromosome,
|
36
|
-
position = position,
|
37
|
-
genotype = Genotype.new(genotype))
|
38
|
-
[rsid, snp]
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.validate?(_filename, _provider = '23andme')
|
42
|
-
raise ProviderError, "provider is not supported." unless %w[23andme ancestry].include? _provider
|
43
|
-
|
44
|
-
first_line = File.open(_filename, &:readline)
|
45
|
-
if _provider == '23andme'
|
46
|
-
raise FileTypeError, "format is not correct" unless first_line.downcase.include? '23'.downcase
|
47
|
-
elsif _provider == 'ancestry'
|
48
|
-
raise FileTypeError, "format is not correct" unless first_line.downcase.include? 'ancestry'.downcase
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
def self.load(_filename, _provider = '23andme')
|
53
|
-
genome = Genome.new(name = _filename)
|
54
|
-
reader = if _provider == '23andme'
|
55
|
-
:ttandme_reader
|
56
|
-
elsif _provider == 'ancestry'
|
57
|
-
:ancestry_reader
|
58
|
-
end
|
59
|
-
open(_filename) {|f|
|
60
|
-
f.each_line do |line|
|
61
|
-
next if line.start_with?('#') || line.start_with?('rsid')
|
62
|
-
rsid, snp = send reader, line
|
63
|
-
genome[rsid] = snp
|
64
|
-
end
|
65
|
-
}
|
66
|
-
genome
|
67
|
-
end
|
68
|
-
end
|
4
|
+
require 'genome/genome'
|
5
|
+
require 'genome/snp'
|
6
|
+
require 'genome/genotype'
|
7
|
+
require 'genome/errors'
|
8
|
+
require 'genome/reader'
|
9
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: genome-rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gary Lai
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -65,6 +65,7 @@ files:
|
|
65
65
|
- CHANGELOG.md
|
66
66
|
- CODE_OF_CONDUCT.md
|
67
67
|
- Gemfile
|
68
|
+
- Gemfile.lock
|
68
69
|
- LICENSE.txt
|
69
70
|
- README.md
|
70
71
|
- Rakefile
|
@@ -73,8 +74,10 @@ files:
|
|
73
74
|
- exe/genome
|
74
75
|
- genome-rb.gemspec
|
75
76
|
- lib/genome.rb
|
77
|
+
- lib/genome/errors.rb
|
76
78
|
- lib/genome/genome.rb
|
77
79
|
- lib/genome/genotype.rb
|
80
|
+
- lib/genome/reader.rb
|
78
81
|
- lib/genome/snp.rb
|
79
82
|
- lib/genome/version.rb
|
80
83
|
homepage: https://github.com/marigenhq/genome-rb
|
@@ -96,8 +99,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
99
|
- !ruby/object:Gem::Version
|
97
100
|
version: '0'
|
98
101
|
requirements: []
|
99
|
-
|
100
|
-
rubygems_version: 2.5.2.3
|
102
|
+
rubygems_version: 3.0.4
|
101
103
|
signing_key:
|
102
104
|
specification_version: 4
|
103
105
|
summary: ruby library to read genome data
|