class SequenceServer::Database
Model Database’s eigenclass as a collection of Database
objects.
Public Class Methods
[](ids)
click to toggle source
# File lib/sequenceserver/database.rb, line 128 def [](ids) ids = Array ids collection.values_at(*ids) end
all()
click to toggle source
# File lib/sequenceserver/database.rb, line 137 def all collection.values end
clear()
click to toggle source
Intended to be used only for testing.
# File lib/sequenceserver/database.rb, line 245 def clear collection.clear end
collection=(databases)
click to toggle source
# File lib/sequenceserver/database.rb, line 120 def collection=(databases) databases.each do |db| collection[db.id] = db end end
each(&block)
click to toggle source
# File lib/sequenceserver/database.rb, line 165 def each(&block) all.each(&block) end
first()
click to toggle source
Intended to be used only for testing.
# File lib/sequenceserver/database.rb, line 240 def first all.first end
group_by(&block)
click to toggle source
# File lib/sequenceserver/database.rb, line 173 def group_by(&block) all.group_by(&block) end
ids()
click to toggle source
# File lib/sequenceserver/database.rb, line 133 def ids collection.keys end
include?(path)
click to toggle source
# File lib/sequenceserver/database.rb, line 169 def include?(path) collection.include? Digest::MD5.hexdigest path end
retrieve(loci)
click to toggle source
Retrieve given loci from the databases we have.
loci to retrieve are specified as a String:
"accession_1,accession_2:start-stop,accession_3"
Return value is a FASTA format String containing sequences in the same order in which they were requested. If an accession could not be found, a commented out error message is included in place of the sequence. Sequences are retrieved from the first database in which the accession is found. The returned sequences can, thus, be incorrect if accessions are not unique across all database (admins should make sure of that).
# File lib/sequenceserver/database.rb, line 193 def retrieve(loci) # Exit early if loci is nil. return unless loci # String -> Array # We may have empty string if loci contains a double comma as a result # of typo (remember - loci is external input). These are eliminated. loci = loci.split(',').delete_if(&:empty?) # Each database is searched for each locus. For each locus, search is # terminated on the first database match. # NOTE: This can return incorrect sequence if the sequence ids are # not unique across all databases. seqs = loci.map do |locus| # Get sequence id and coords. coords may be nil. accession can't # be. accession, coords = locus.split(':') # Initialise a variable to store retrieved sequence. seq = nil # Go over each database looking for this accession. each do |database| # Database lookup will return a string if given accession is # present in the database, nil otherwise. seq = database.retrieve(accession, coords) # Found a match! Terminate iteration returning the retrieved # sequence. break if seq end # If accession was not present in any database, insert an error # message in place of the sequence. The line starts with '#' # and should be ignored by BLAST (not tested). unless seq seq = "# ERROR: #{locus} not found in any database" end # Return seq. seq end # Array -> String seqs.join("\n") end
to_json()
click to toggle source
# File lib/sequenceserver/database.rb, line 177 def to_json collection.values.to_json end
tree() { |db, last| ... }
click to toggle source
# File lib/sequenceserver/database.rb, line 141 def tree all.each_with_object({}) do |db, data| data[db.type] ||= [] use_parent = '#' db.categories.each_with_index do |entry, index| parent = index.zero? ? '#' : db.categories[0..(index - 1)].join('-') use_id = db.categories[0..index].join('-') element = { id: use_id, parent: parent, text: entry } data[db.type] << element unless data[db.type].include?(element) use_parent = use_id end data[db.type] << { id: db.id, parent: use_parent, text: db.title, icon: 'glyphicon glyphicon-file' } yield(db, data[db.type].last) if block_given? end end
Private Class Methods
collection()
click to toggle source
# File lib/sequenceserver/database.rb, line 116 def collection @collection ||= {} end