Module: EnsemblREST

Defined in:
lib/ensemblrest/map.rb,
lib/ensemblrest/vep.rb,
lib/ensemblrest/info.rb,
lib/ensemblrest/xref.rb,
lib/ensemblrest/lookup.rb,
lib/ensemblrest/archive.rb,
lib/ensemblrest/connect.rb,
lib/ensemblrest/overlap.rb,
lib/ensemblrest/version.rb,
lib/ensemblrest/sequence.rb,
lib/ensemblrest/variation.rb,
lib/ensemblrest/regulation.rb,
lib/ensemblrest/ontoandtaxo.rb,
lib/ensemblrest/variationga4gh.rb,
lib/ensemblrest/comparativegenomics.rb

Overview

raise “Please, use ruby 1.9.0 or later.” if RUBY_VERSION < “1.9.0”

Defined Under Namespace

Modules: Archive, Comparative, GA4GH, Info, Lookup, Map, Ontology, Overlap, Regulation, Sequence, Taxonomy, VEP, Variation, Xref Classes: InvalidResponse, ServiceNotFound

Constant Summary collapse

SUPPOTEDFORMATS =
{
  'text' => 'text/plain',
  'fasta' => 'text/x-fasta',
  'gff3' => 'ext/x-gff3',
  'json' => 'application/json',
  'msgpack' => 'application/x-msgpack',
  'nh' => 'text/x-nh',
  'seqxml' => 'text/x-seqxml+xml', 
  'sereal' => 'application/x-sereal',
  'phyloxml' => 'text/x-phyloxml+xml',
  'xml' => 'text/xml',
  'yaml' => 'text/x-yaml'
}
VERSION =
"1.1.1"
@@url =
URI.parse('http://rest.ensembl.org')
@@http_connect =
Net::HTTP.new(@@url.host, @@url.port)

Class Method Summary collapse

Class Method Details

.connect(server) ⇒ Object

Connect to Ensembl REST Service

Parameters:

  • server (String)

    Base Ensembl REST Service URL



44
45
46
47
# File 'lib/ensemblrest/connect.rb', line 44

def connect(server)
  @@url = URI.parse(server)
  @@http_connect = Net::HTTP.new(@@url.host, @@url.port)
end

.get(get_path, options) ⇒ Object

Do a get request



119
120
121
122
123
# File 'lib/ensemblrest/connect.rb', line 119

def get(get_path, options)
  parsed_options = EnsemblREST::parse_options(options)
  request = Net::HTTP::Get.new("#{get_path}#{parsed_options[:opts].empty? ? '' : "?#{parsed_options[:opts].join(';')}"}", parsed_options[:format])
  return EnsemblREST::parse_response(@@http_connect.request(request), parsed_options[:format]['content-type'])
end

.parse_options(options) ⇒ Object

Parse options use in the Module only



72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
# File 'lib/ensemblrest/connect.rb', line 72

def parse_options(options)
  parsed_options = {opts: [], format: {}}
  options.each do |k, v|
    if k.to_s == 'format'
      parsed_options[:format] = {'content-type' => EnsemblREST::SUPPOTEDFORMATS.has_key?(v) ? EnsemblREST::SUPPOTEDFORMATS[v] : v}
    elsif k.to_s == 'content-type'
      parsed_options[:format] = {'content-type' => v}
    else
      if v.is_a?(TrueClass)
        parsed_options[:opts].push("#{k}=1")
      elsif v.is_a?(FalseClass)
        parsed_options[:opts].push("#{k}=0")
      elsif v.is_a?(Array)
        v.each {|member| parsed_options[:opts].push("#{k}=#{member}")}
      else
        parsed_options[:opts].push("#{k}=#{v}")
      end
    end
    
  end
  return parsed_options
end

.parse_response(response, type) ⇒ Object

Parse responses use in the Module only



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
# File 'lib/ensemblrest/connect.rb', line 96

def parse_response(response, type)
  case response.code
  when '200'
    case type
    when 'application/json'
      return JSON.parse(response.body)
    when 'ext/x-gff3'
      return Bio::GFF::GFF3.new(response.body)
    when 'text/x-fasta'
      return Bio::FastaFormat.new(response.body)
    when 'text/x-phyloxml+xml'
      return Bio::PhyloXML::Parser.new(response.body)
    else
      return response.body
    end
  when '404'
    raise EnsemblREST::ServiceNotFound, "Service not found"
  else
    raise EnsemblREST::InvalidResponse, "Invalid response: #{response.code}"
  end
end

.post(post_path, request_body, options) ⇒ Object

Do a post request



126
127
128
129
130
131
# File 'lib/ensemblrest/connect.rb', line 126

def post(post_path, request_body, options)
  parsed_options = EnsemblREST::parse_options(options)
  request = Net::HTTP::Post.new(post_path, parsed_options[:format].merge({'Accept' => 'application/json'}))
  request.body = request_body.to_json
  return EnsemblREST::parse_response(@@http_connect.request(request), parsed_options[:format]['content-type'])
end

.use37Object

Switch to use GRCh37 assembly version



56
57
58
# File 'lib/ensemblrest/connect.rb', line 56

def use37
  EnsemblREST::use_GRCh37
end

.use38Object

Switch to use GRCh38 assembly version



67
68
69
# File 'lib/ensemblrest/connect.rb', line 67

def use38
  EnsemblREST::use_GRCh38
end

.use_GRCh37Object

Switch to use GRCh37 assembly version



50
51
52
53
# File 'lib/ensemblrest/connect.rb', line 50

def use_GRCh37
  @@url = URI.parse('http://grch37.rest.ensembl.org/')
  @@http_connect = Net::HTTP.new(@@url.host, @@url.port)
end

.use_GRCh38Object

Switch to use GRCh38 assembly version



61
62
63
64
# File 'lib/ensemblrest/connect.rb', line 61

def use_GRCh38
  @@url = URI.parse('http://rest.ensembl.org/')
  @@http_connect = Net::HTTP.new(@@url.host, @@url.port)
end