ruby-ensembl-api 0.9.6 → 1.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.
Files changed (62) hide show
  1. data/TUTORIAL.rdoc +1 -1
  2. data/bin/variation_effect_predictor +106 -0
  3. data/lib/ensembl.rb +2 -2
  4. data/lib/ensembl/core/activerecord.rb +119 -225
  5. data/lib/ensembl/core/collection.rb +14 -10
  6. data/lib/ensembl/core/project.rb +6 -8
  7. data/lib/ensembl/core/slice.rb +87 -123
  8. data/lib/ensembl/core/transcript.rb +49 -65
  9. data/lib/ensembl/core/transform.rb +6 -8
  10. data/lib/ensembl/db_connection.rb +56 -72
  11. data/lib/ensembl/variation/activerecord.rb +138 -8
  12. data/lib/ensembl/variation/variation.rb +284 -46
  13. data/samples/ensembl_genomes_example.rb +60 -0
  14. data/samples/examples_perl_tutorial.rb +125 -0
  15. data/samples/small_example_ruby_api.rb +34 -0
  16. data/samples/variation_example.rb +67 -0
  17. data/test/unit/{release_56 → release_60}/core/test_gene.rb +6 -6
  18. data/test/unit/release_60/core/test_project_human.rb +38 -0
  19. data/test/unit/{release_56 → release_60}/core/test_slice.rb +1 -8
  20. data/test/unit/release_60/core/test_transcript.rb +126 -0
  21. data/test/unit/{release_53 → release_60}/core/test_transform.rb +21 -21
  22. data/test/unit/release_60/variation/test_activerecord.rb +213 -0
  23. data/test/unit/release_60/variation/test_consequence.rb +158 -0
  24. data/test/unit/{release_56 → release_60}/variation/test_variation.rb +18 -17
  25. data/test/unit/test_connection.rb +2 -2
  26. data/test/unit/test_releases.rb +8 -8
  27. metadata +27 -43
  28. data/test/unit/data/seq_c6qbl.fa +0 -10
  29. data/test/unit/data/seq_cso19_coding.fa +0 -16
  30. data/test/unit/data/seq_cso19_transcript.fa +0 -28
  31. data/test/unit/data/seq_drd3_gene.fa +0 -838
  32. data/test/unit/data/seq_drd3_transcript.fa +0 -22
  33. data/test/unit/data/seq_drd4_transcript.fa +0 -24
  34. data/test/unit/data/seq_forward_composite.fa +0 -1669
  35. data/test/unit/data/seq_par_boundary.fa +0 -169
  36. data/test/unit/data/seq_rnd3_transcript.fa +0 -47
  37. data/test/unit/data/seq_ub2r1_coding.fa +0 -13
  38. data/test/unit/data/seq_ub2r1_gene.fa +0 -174
  39. data/test/unit/data/seq_ub2r1_transcript.fa +0 -26
  40. data/test/unit/data/seq_y.fa +0 -2
  41. data/test/unit/ensembl_genomes/test_collection.rb +0 -51
  42. data/test/unit/ensembl_genomes/test_gene.rb +0 -52
  43. data/test/unit/ensembl_genomes/test_slice.rb +0 -71
  44. data/test/unit/ensembl_genomes/test_variation.rb +0 -17
  45. data/test/unit/release_50/core/test_project.rb +0 -215
  46. data/test/unit/release_50/core/test_project_human.rb +0 -58
  47. data/test/unit/release_50/core/test_relationships.rb +0 -66
  48. data/test/unit/release_50/core/test_sequence.rb +0 -175
  49. data/test/unit/release_50/core/test_slice.rb +0 -121
  50. data/test/unit/release_50/core/test_transcript.rb +0 -108
  51. data/test/unit/release_50/core/test_transform.rb +0 -223
  52. data/test/unit/release_50/variation/test_activerecord.rb +0 -143
  53. data/test/unit/release_50/variation/test_variation.rb +0 -84
  54. data/test/unit/release_53/core/test_gene.rb +0 -66
  55. data/test/unit/release_53/core/test_project.rb +0 -96
  56. data/test/unit/release_53/core/test_project_human.rb +0 -65
  57. data/test/unit/release_53/core/test_slice.rb +0 -47
  58. data/test/unit/release_53/variation/test_activerecord.rb +0 -145
  59. data/test/unit/release_53/variation/test_variation.rb +0 -71
  60. data/test/unit/release_56/core/test_project.rb +0 -96
  61. data/test/unit/release_56/core/test_transform.rb +0 -63
  62. data/test/unit/release_56/variation/test_activerecord.rb +0 -142
@@ -4,11 +4,11 @@
4
4
  # Copyright:: Copyright (C) 2007 Jan Aerts <http://jandot.myopenid.com>
5
5
  # License:: The Ruby License
6
6
  #
7
+ # @author Jan Aerts
7
8
  nil
8
9
  module Ensembl
9
10
  nil
10
11
  module Core
11
- # = DESCRIPTION
12
12
  # The Intron class describes an intron.
13
13
  #
14
14
  # This class does _not_ use ActiveRecord and is only defined within the API.
@@ -18,7 +18,7 @@ module Ensembl
18
18
  # to a SeqRegion object and a Slice can be created for objects o this
19
19
  # class. See Sliceable and Slice for more information.
20
20
  #
21
- # = USAGE
21
+ # @example
22
22
  # exon1 = Ensembl::Core::Exon.find(292811)
23
23
  # exon2 = Ensembl::Core::Exon.find(292894)
24
24
  # intron = Ensembl::Core::Intron.new(exon1,exon2)
@@ -55,7 +55,6 @@ module Ensembl
55
55
 
56
56
  end
57
57
 
58
- # = DESCRIPTION
59
58
  # The Transcript class provides an interface to the transcript
60
59
  # table. This table contains mappings of transcripts for a Gene to a
61
60
  # SeqRegion.
@@ -68,7 +67,7 @@ module Ensembl
68
67
  # to a SeqRegion object and a Slice can be created for objects of this
69
68
  # class. See Sliceable and Slice for more information.
70
69
  #
71
- # = USAGE
70
+ # @example
72
71
  # #TODO
73
72
  class Transcript < DBConnection
74
73
  include Sliceable
@@ -97,9 +96,8 @@ module Ensembl
97
96
 
98
97
  # The Transcript#exons method returns the exons for this transcript in
99
98
  # the order of their ranks in the exon_transcript table.
100
- # ---
101
- # *Arguments*:: none
102
- # *Returns*:: sorted array of Exon objects
99
+ #
100
+ # @return [Array<Exon>] Sorted array of Exon objects
103
101
  def exons
104
102
  if @exons.nil?
105
103
  @exons = self.exon_transcripts(:include => [:exons]).sort_by{|et| et.rank.to_i}.collect{|et| et.exon}
@@ -108,9 +106,8 @@ module Ensembl
108
106
  end
109
107
 
110
108
  # The Transcript#introns methods returns the introns for this transcript
111
- # ---
112
- # *Arguments*:: none
113
- # *Returns*:: sorted array of Intron objects
109
+ #
110
+ # @return [Array<Intron>] Sorted array of Intron objects
114
111
  def introns
115
112
  if @introns.nil?
116
113
  @introns = Array.new
@@ -125,14 +122,12 @@ module Ensembl
125
122
  end
126
123
 
127
124
  # The Transcript#stable_id method returns the stable ID of the transcript.
128
- # ---
129
- # *Arguments*:: none
130
- # *Returns*:: String
125
+ #
126
+ # @return [String] Ensembl stable ID of the transcript.
131
127
  def stable_id
132
128
  return self.transcript_stable_id.stable_id
133
129
  end
134
130
 
135
- # = DESCRIPTION
136
131
  # The Transcript#display_label method returns the default name of the transcript.
137
132
  def display_label
138
133
  return Xref.find(self.display_xref_id).display_label
@@ -141,7 +136,6 @@ module Ensembl
141
136
  alias :label :display_label
142
137
  alias :name :display_label
143
138
 
144
- # = DESCRIPTION
145
139
  # The Transcript#find_all_by_stable_id class method returns an array of
146
140
  # transcripts with the given stable_id. If none were found, an empty
147
141
  # array is returned.
@@ -155,7 +149,6 @@ module Ensembl
155
149
  return answer
156
150
  end
157
151
 
158
- # = DESCRIPTION
159
152
  # The Transcript#find_all_by_stable_id class method returns a
160
153
  # transcripts with the given stable_id. If none was found, nil is returned.
161
154
  def self.find_by_stable_id(stable_id)
@@ -167,7 +160,6 @@ module Ensembl
167
160
  end
168
161
  end
169
162
 
170
- # = DESCRIPTION
171
163
  # The Transcript#find_by_stable_id class method fetches a Transcript object based on
172
164
  # its stable ID (i.e. the "ENST" accession number). If the name is
173
165
  # not found, it returns nil.
@@ -180,7 +172,6 @@ module Ensembl
180
172
  end
181
173
  end
182
174
 
183
- # = DESCRIPTION
184
175
  # The Transcript#seq method returns the full sequence of all concatenated
185
176
  # exons.
186
177
  def seq
@@ -193,7 +184,6 @@ module Ensembl
193
184
  return @seq
194
185
  end
195
186
 
196
- # = DESCRIPTION
197
187
  # The Transcript#cds_seq method returns the coding sequence of the transcript,
198
188
  # i.e. the concatenated sequence of all exons minus the UTRs.
199
189
  def cds_seq
@@ -202,21 +192,18 @@ module Ensembl
202
192
  return self.seq[(self.coding_region_cdna_start - 1), cds_length]
203
193
  end
204
194
 
205
- # = DESCRIPTION
206
195
  # The Transcript#five_prime_utr_seq method returns the sequence of the
207
196
  # 5'UTR of the transcript.
208
197
  def five_prime_utr_seq
209
198
  return self.seq[0, self.coding_region_cdna_start - 1]
210
199
  end
211
200
 
212
- # = DESCRIPTION
213
201
  # The Transcript#three_prime_utr_seq method returns the sequence of the
214
202
  # 3'UTR of the transcript.
215
203
  def three_prime_utr_seq
216
204
  return self.seq[self.coding_region_cdna_end..-1]
217
205
  end
218
206
 
219
- # = DESCRIPTION
220
207
  # The Transcript#protein_seq method returns the sequence of the
221
208
  # protein of the transcript.
222
209
  def protein_seq
@@ -224,7 +211,6 @@ module Ensembl
224
211
  end
225
212
 
226
213
 
227
- # = DESCRIPTION
228
214
  # The Transcript#coding_region_genomic_start returns the start position
229
215
  # of the CDS in genomic coordinates. Note that, in contrast to
230
216
  # Transcript#coding_region_cdna_start, the CDS start position is _always_
@@ -240,7 +226,6 @@ module Ensembl
240
226
  end
241
227
  end
242
228
 
243
- # = DESCRIPTION
244
229
  # The Transcript#coding_region_genomic_end returns the stop position
245
230
  # of the CDS in genomic coordinates. Note that, in contrast to
246
231
  # Transcript#coding_region_cdna_end, the CDS stop position is _always_
@@ -256,7 +241,6 @@ module Ensembl
256
241
  end
257
242
  end
258
243
 
259
- # = DESCRIPTION
260
244
  # The Transcript#coding_region_cdna_start returns the start position
261
245
  # of the CDS in cDNA coordinates. Note that, in contrast to the
262
246
  # Transcript#coding_region_genomic_start, the CDS start position is
@@ -277,7 +261,6 @@ module Ensembl
277
261
 
278
262
  end
279
263
 
280
- # = DESCRIPTION
281
264
  # The Transcript#coding_region_cdna_end returns the stop position
282
265
  # of the CDS in cDNA coordinates. Note that, in contrast to the
283
266
  # Transcript#coding_region_genomic_end, the CDS start position is
@@ -298,11 +281,10 @@ module Ensembl
298
281
  end
299
282
 
300
283
 
301
- # = DESCRIPTION
302
284
  # The Transcript#exon_for_position identifies the exon that covers a given
303
285
  # genomic position. Returns the exon object, or nil if in intron.
304
286
  def exon_for_genomic_position(pos)
305
- if pos < coding_region_genomic_start or pos > coding_region_genomic_end
287
+ if pos < self.seq_region_start or pos > self.seq_region_end
306
288
  raise RuntimeError, "Position has to be within transcript"
307
289
  end
308
290
  self.exons.each do |exon|
@@ -313,7 +295,6 @@ module Ensembl
313
295
  return nil
314
296
  end
315
297
 
316
- # = DESCRIPTION
317
298
  # The Transcript#exon_for_position identifies the exon that covers a given
318
299
  # position of the cDNA.
319
300
  def exon_for_cdna_position(pos)
@@ -329,90 +310,93 @@ module Ensembl
329
310
  raise RuntimeError, "Position outside of cDNA scope"
330
311
  end
331
312
 
332
- # = DESCRIPTION
333
313
  # The Transcript#cdna2genomic method converts cDNA coordinates to
334
314
  # genomic coordinates for this transcript.
335
- # ---
336
- # *Arguments*:
337
- # * position:: position on the cDNA (required)
338
- # *Returns*:: integer
315
+ #
316
+ # @param [Integer] pos Position on the cDNA
317
+ # @return [Integer] Position on the genomic DNA
339
318
  def cdna2genomic(pos)
340
319
  #FIXME: Still have to check for when pos is outside of scope of cDNA.
341
320
  # Identify the exon we're looking at.
342
321
  exon_with_target = self.exon_for_cdna_position(pos)
343
322
 
344
323
  accumulated_position = 0
345
- self.exons.each do |exon|
324
+ ex = self.exons.sort_by {|e| e.seq_region_start}
325
+ ex.reverse! if self.strand == -1
326
+ ex.each do |exon|
346
327
  if exon == exon_with_target
347
- answer = exon.start + ( pos - accumulated_position )
348
- return answer
328
+ length_to_be_taken_from_exon = pos - (accumulated_position + 1)
329
+ if self.strand == -1
330
+ return exon.seq_region_end - length_to_be_taken_from_exon
331
+ else
332
+ return exon.seq_region_start + length_to_be_taken_from_exon
333
+ end
349
334
  else
350
- accumulated_position += exon.length
335
+ accumulated_position += exon.length
351
336
  end
352
337
  end
353
338
  end
354
339
 
355
- # = DESCRIPTION
356
340
  # The Transcript#cds2genomic method converts CDS coordinates to
357
341
  # genomic coordinates for this transcript.
358
- # ---
359
- # *Arguments*:
360
- # * pos:: position on the CDS (required)
361
- # *Returns*::
342
+ #
343
+ # @param [Integer] pos Position on the CDS
344
+ # @return [Integer] Position on the genomic DNA
362
345
  def cds2genomic(pos)
363
346
  return self.cdna2genomic(pos + self.coding_region_cdna_start)
364
347
  end
365
348
 
366
- # = DESCRIPTION
367
349
  # The Transcript#pep2genomic method converts peptide coordinates to
368
350
  # genomic coordinates for this transcript.
369
- # ---
370
- # *Arguments*:
371
- # * pos:: position on the peptide (required)
372
- # *Returns*::
351
+ #
352
+ # @param [Integer] pos Aminoacid position on the protein
353
+ # @return [Integer] Position on the genomic DNA
373
354
  def pep2genomic(pos)
374
355
  raise NotImplementedError
375
356
  end
376
357
 
377
- # = DESCRIPTION
378
358
  # The Transcript#genomic2cdna method converts genomic coordinates to
379
359
  # cDNA coordinates for this transcript.
380
- # ---
381
- # *Arguments*:
382
- # * pos:: position on the chromosome (required)
383
- # *Returns*::
360
+ #
361
+ # @param [Integer] pos Position on the genomic DNA
362
+ # @return [Integer] Position on the cDNA
384
363
  def genomic2cdna(pos)
385
364
  #FIXME: Still have to check for when pos is outside of scope of cDNA.
386
365
  # Identify the exon we're looking at.
387
366
  exon_with_target = self.exon_for_genomic_position(pos)
388
367
 
389
368
  accumulated_position = 0
390
- self.exons.each do |exon|
391
- if exon == exon_with_target
392
- accumulated_position += ( pos - exon.start )
369
+ ex = self.exons.sort_by {|e| e.seq_region_start}
370
+ ex.reverse! if self.strand == -1
371
+ ex.each do |exon|
372
+ if exon.stable_id == exon_with_target.stable_id
373
+ if self.strand == 1
374
+ accumulated_position += ( pos - exon.start) +1
375
+ else
376
+ accumulated_position += ( exon.stop - pos ) +1
377
+ end
393
378
  return accumulated_position
394
379
  else
395
- accumulated_position += exon.length
380
+ accumulated_position += exon.length
396
381
  end
397
382
  end
398
383
  return RuntimeError, "Position outside of cDNA scope"
399
384
  end
400
385
 
401
- # = DESCRIPTION
402
386
  # The Transcript#genomic2cds method converts genomic coordinates to
403
387
  # CDS coordinates for this transcript.
404
- # ---
405
- # *Arguments*:
406
- # * pos:: position on the chromosome (required)
407
- # *Returns*::
388
+ #
389
+ # @param [Integer] pos Position on the genomic DNA
390
+ # @return [Integer] Position on the CDS
408
391
  def genomic2cds(pos)
409
392
  return self.genomic2cdna(pos) - self.coding_region_cdna_start
410
393
  end
411
394
 
412
- # = DESCRIPTION
413
395
  # The Transcript#genomic2pep method converts genomic coordinates to
414
396
  # peptide coordinates for this transcript.
415
- # ---
397
+ #
398
+ # @param [Integer] pos Base position on the genomic DNA
399
+ # @return [Integer] Aminoacid position in the protein
416
400
  # *Arguments*:
417
401
  # * pos:: position on the chromosome (required)
418
402
  # *Returns*::
@@ -422,4 +406,4 @@ module Ensembl
422
406
 
423
407
  end
424
408
  end
425
- end
409
+ end
@@ -4,13 +4,13 @@
4
4
  # Copyright:: Copyright (C) 2007 Jan Aerts <http://jandot.myopenid.com>
5
5
  # License:: The Ruby License
6
6
  #
7
+ # @author Jan Aerts
7
8
  nil
8
9
  module Ensembl
9
10
  nil
10
11
  module Core
11
12
  nil
12
13
  module Sliceable
13
- # = DESCRIPTION
14
14
  # The #transform method is used to transfer coordinates for a feature
15
15
  # from one coordinate system to another. It basically creates a clone of
16
16
  # the original feature and changes the seq_region, start position, stop
@@ -42,8 +42,7 @@ module Ensembl
42
42
  # At the moment, transformations can only be done if the two coordinate
43
43
  # systems are linked directly in the 'assembly' table.
44
44
  #
45
- # = USAGE
46
- #
45
+ # @example
47
46
  # # Get a gene in cow and transform to scaffold level
48
47
  # # (i.e. going from a high rank coord system to a lower rank coord
49
48
  # # system)
@@ -60,11 +59,10 @@ module Ensembl
60
59
  # puts target_gene.seq_region_end #--> 1982868
61
60
  # puts target_gene.seq_region_strand #--> 1
62
61
  #
63
- # ---
64
- # *Arguments*:
65
- # * coord_system_name:: name of coordinate system to transform to
66
- # coordinates to
67
- # *Returns*:: nil or an object of the same class as self
62
+ # @param [String] coord_system_name Name of the coordinate system to
63
+ # transform the coordinates to
64
+ # @return Nil or an object of the same class
65
+ # as self
68
66
  def transform(coord_system_name)
69
67
  #-
70
68
  # There are two things I can do:
@@ -9,7 +9,7 @@
9
9
 
10
10
 
11
11
  require 'rubygems'
12
- require 'activerecord'
12
+ require 'active_record'
13
13
 
14
14
  module Ensembl
15
15
  DB_ADAPTER = 'mysql'
@@ -39,43 +39,43 @@ module Ensembl
39
39
 
40
40
  module DBRegistry
41
41
  # = DESCRIPTION
42
- # The Ensembl::Registry::Base is a generic super class providing general methods
42
+ # The Ensembl::Registry::Base is a super class providing general methods
43
43
  # to get database and connection info.
44
- #
45
44
  class Base < ActiveRecord::Base
45
+
46
46
  self.abstract_class = true
47
47
  self.pluralize_table_names = false
48
48
  def self.get_info
49
49
  host,user,password,db_name,port = self.retrieve_connection.instance_values["connection_options"]
50
+ db_name =~/(\w+_\w+)_(core|variation|funcgen|compara)_(\d+)_\S+/
51
+ species,release = $1,$3 # just works for standard Ensembl database names
52
+ if species.nil? and release.nil? then
53
+ raise NameError, "Can't get database name from #{db_name}. Are you using non conventional names?"
54
+ else
55
+ return host,user,password,db_name,port,species,release.to_i
56
+ end
50
57
  end
51
58
  # = DESCRIPTION
52
- # Class method to retrieve the name of a database, using species, release and connection parameters
53
- # passed by the user.
54
- #
55
- def self.get_name_from_db(match,species,release,args)
59
+ # Method to retrieve the name of a database, using species, release and connection parameters
60
+ # passed by the user.
61
+ def self.get_name_from_db(db_type,species,release,args)
56
62
  species = species.underscore # Always in lowercase. This keeps things simple when dealing with complex species names like in Ensembl Genomes database
57
- dummy_db = DummyDBConnection.connect(args)
63
+ dummy_db = DummyDBConnection.connect(args)
58
64
  dummy_connection = dummy_db.connection
59
-
60
65
  # check if a database exists with exactly the species name passed (regular way)
61
- db_name = dummy_connection.select_values("SHOW DATABASES LIKE '%#{species}_#{match}_#{release.to_s}%'")[0]
62
-
66
+ db_name = dummy_connection.select_values("SHOW DATABASES LIKE '%#{species}_#{db_type}_#{release.to_s}%'")[0]
63
67
  # if a database is not found and we are working on Ensembl Genomes database...
64
68
  if db_name.nil? and args[:ensembl_genomes] then
65
69
  words = species.split(/_/)
66
70
  first = words.shift
67
71
  # ...try to find a collection database using the first name of the species passed (convention used for collection databases)
68
- db_name = dummy_connection.select_values("SHOW DATABASES").select {|d| d=~/#{first}.*_collection_#{match}_#{release.to_s}/}[0]
72
+ db_name = dummy_connection.select_values("SHOW DATABASES").select {|d| d=~/#{first}.*_collection_#{db_type}_#{release.to_s}/}[0]
69
73
  # if a collection database match is found, then look inside to find the species
70
74
  if db_name != nil then
71
75
  dummy_db.disconnect! # close the generic connection with the host
72
76
  args[:database] = db_name
73
77
  dummy_db = DummyDBConnection.connect(args) # open a new connection directly with the collection database
74
- others = ''
75
- words.each do |w|
76
- others << " #{w}"
77
- end
78
- species_name = "#{first}#{others}" # transform the species name, so it can match the species names stored in the collection database
78
+ species_name = species.gsub(first,first[0..0]) # transform the species name, so it can match the species names stored in the collection database
79
79
  Ensembl::SESSION.collection_species = species_name # set the species used for this session, so it's easier to fetch slices from the genome of that species
80
80
 
81
81
  # check that the species passed is present in the collection database, otherwise returns a warning
@@ -87,6 +87,34 @@ module Ensembl
87
87
  return db_name
88
88
  end
89
89
 
90
+ def self.generic_connect(db_type, species, release, args = {})
91
+ Ensembl::SESSION.reset
92
+ db_name = nil
93
+ # if the connection is established with Ensembl Genomes, set the default port and host
94
+ if args[:ensembl_genomes] then
95
+ args[:port] = EG_PORT
96
+ args[:host] = EG_HOST
97
+ end
98
+ if args[:port].nil? then
99
+ args[:port] = ( release > 47 ) ? 5306 : 3306
100
+ end
101
+ if args[:database]
102
+ db_name = args[:database]
103
+ else
104
+ db_name = self.get_name_from_db(db_type,species,release,args) # try to find the corresponding database
105
+ end
106
+ establish_connection(
107
+ :adapter => args[:adapter] || Ensembl::DB_ADAPTER,
108
+ :host => args[:host] || Ensembl::DB_HOST,
109
+ :database => db_name,
110
+ :username => args[:username] || Ensembl::DB_USERNAME,
111
+ :password => args[:password] || Ensembl::DB_PASSWORD,
112
+ :port => args[:port]
113
+ )
114
+
115
+ self.retrieve_connection # Check if the connection is working
116
+ end
117
+
90
118
  end
91
119
 
92
120
  end
@@ -116,44 +144,16 @@ module Ensembl
116
144
  # *Arguments*:
117
145
  # * species:: species to connect to. Arguments should be in snake_case
118
146
  # * ensembl_release:: the release of the database to connect to
119
- # (default = 50)
147
+ # (default = 50)
120
148
  def self.connect(species, release = Ensembl::ENSEMBL_RELEASE, args = {})
121
- Ensembl::SESSION.reset
122
- db_name = nil
123
- # if the connection is established with Ensembl Genomes, set the default port and host
124
- if args[:ensembl_genomes]
125
- args[:port] = EG_PORT
126
- args[:host] = EG_HOST
127
- end
128
- if args[:port].nil? then
129
- args[:port] = ( release > 47 ) ? 5306 : 3306
130
- end
131
- if args[:database]
132
- db_name = args[:database]
133
- else
134
- db_name = self.get_name_from_db('core',species,release,args) # try to find the corresponding core database
135
- end
136
- establish_connection(
137
- :adapter => args[:adapter] || Ensembl::DB_ADAPTER,
138
- :host => args[:host] || Ensembl::DB_HOST,
139
- :database => db_name,
140
- :username => args[:username] || Ensembl::DB_USERNAME,
141
- :password => args[:password] || Ensembl::DB_PASSWORD,
142
- :port => args[:port]
143
- )
144
-
145
- self.retrieve_connection # Checkout that the connection is working
149
+ self.generic_connect('core',species, release,args)
146
150
  end
147
151
 
148
-
149
- # = DESCRIPTION
150
- # Simple wrapper for the normal DBConnection.connect() method. This is used to set the connection directly
151
- # with the Ensembl Genomes database host
152
- #
153
- def self.ensemblgenomes_connect(species, release = Ensembl::ENSEMBL_RELEASE, args = {})
152
+ def self.ensemblgenomes_connect(species, release = Ensembl::ENSEMBL_RELEASE, args={})
154
153
  args[:ensembl_genomes] = true
155
- self.connect(species,release,args)
154
+ self.generic_connect('core',species,release,args)
156
155
  end
156
+
157
157
 
158
158
  end # Core::DBConnection
159
159
 
@@ -185,29 +185,13 @@ module Ensembl
185
185
  # * ensembl_release:: the release of the database to connect to
186
186
  # (default = 50)
187
187
  def self.connect(species, release = Ensembl::ENSEMBL_RELEASE, args = {})
188
- Ensembl::SESSION.reset
189
- args[:species] = species
190
- if args[:port].nil? then
191
- args[:port] = ( release > 47 ) ? 5306 : 3306
192
- end
193
- db_name = nil
194
- if args[:database]
195
- db_name = args[:database]
196
- else
197
- db_name = self.get_name_from_db('variation',species,release,args) # try to find the corresponding variation database
198
- end
199
- establish_connection(
200
- :adapter => args[:adapter] || Ensembl::DB_ADAPTER,
201
- :host => args[:host] || Ensembl::DB_HOST,
202
- :database => db_name,
203
- :username => args[:username] || Ensembl::DB_USERNAME,
204
- :password => args[:password] || Ensembl::DB_PASSWORD,
205
- :port => args[:port]
206
- )
207
-
208
- self.retrieve_connection # Checkout that the connection is working
209
-
188
+ self.generic_connect('variation',species, release, args)
210
189
  end
190
+
191
+ def self.ensemblgenomes_connect(species, release = Ensembl::ENSEMBL_RELEASE, args={})
192
+ args[:ensembl_genomes] = true
193
+ self.generic_connect('variation',species,release,args)
194
+ end
211
195
 
212
196
  end # Variation::DBConnection
213
197