module BioTCM::Databases::HGNC::Converter

Converter module

Public Class Methods

extended(mod) click to toggle source
# File lib/biotcm/databases/hgnc/converter.rb, line 79
def self.extended(mod)
  mod.instance_eval do
    # Initialize instance variables
    @direct_converters = []
    @indirect_converters = []
    @string_mixin = ''
    @array_mixin = ''

    # Create converters
    IDENTIFIERS.each_key do |src|
      IDENTIFIERS.each_key do |dst|
        next if src == dst
        sym = (src.to_s + '2' + dst.to_s).to_sym
        [src, dst].include?(:hgncid) ? create_direct_converter(sym) : create_indirect_converter(sym)
      end
    end

    # Initialize converter hashes
    @direct_converters.each { |sym| instance_variable_set('@' + sym.to_s, {}) }
  end
end

Public Instance Methods

converter_list() click to toggle source

Get a list of existing converters @return [Hash]

# File lib/biotcm/databases/hgnc/converter.rb, line 6
def converter_list
  { direct: @direct_converters, indirect: @indirect_converters }
end
create_direct_converter(sym) click to toggle source

@private

# File lib/biotcm/databases/hgnc/converter.rb, line 11
def create_direct_converter(sym)
  instance_eval %{
    def #{sym}(obj = nil)
      return @#{sym} unless obj
      return @#{sym}[obj.to_s].to_s rescue raise ArgumentError, "The parameter \\"\#{obj}\\"(\#{obj.class}) can't be converted into String"
    end
  }

  @string_mixin += %{
    def #{sym}
      BioTCM::Databases::HGNC.#{sym}[self].to_s
    end
    def #{sym}!
      replace(BioTCM::Databases::HGNC.#{sym}[self].to_s)
    end
  }

  @array_mixin += %{
    def #{sym}
      self.collect do |item|
        item.to_s rescue raise ArgumentError, "The element \\"\#{item}\\"(\#{item.class}) in the Array can't be converted into String"
      end.collect { |item| item.#{sym} }
    end
    def #{sym}!
      self.collect! do |item|
        item.to_s rescue raise ArgumentError, "The element \\"\#{item}\\"(\#{item.class}) in the Array can't be converted into String"
      end.collect! { |item| item.#{sym} }
    end
  }

  @direct_converters << sym
end
create_indirect_converter(sym) click to toggle source

@private

# File lib/biotcm/databases/hgnc/converter.rb, line 45
def create_indirect_converter(sym)
  /^(?<src>[^2]+)2(?<dst>.+)$/ =~ sym.to_s

  instance_eval %{
    def #{sym}(obj)
      return hgncid2#{dst}(#{src}2hgncid(obj)) rescue raise ArgumentError, "The parameter \\"\#{obj}\\"(\#{obj.class}) can't be converted into String"
    end
  }

  @string_mixin += %{
    def #{sym}
      self.#{src}2hgncid.hgncid2#{dst}
    end
    def #{sym}!
      replace(self.#{src}2hgncid.hgncid2#{dst})
    end
  }

  @array_mixin += %{
    def #{sym}
      self.collect do |item|
        item.to_s rescue raise ArgumentError, "The element \\"\#{item}\\"(\#{item.class}) in the Array can't be converted into String"
      end.collect { |item| item.#{src}2hgncid.hgncid2#{dst} }
    end
    def #{sym}!
      self.collect! do |item|
        item.to_s rescue raise ArgumentError, "The element \\"\#{item}\\"(\#{item.class}) in the Array can't be converted into String"
      end.collect! { |item| item.#{src}2hgncid.hgncid2#{dst} }
    end
  }

  @indirect_converters << sym
end