class BELParser::Language::Version1_0::Upgrades::FusionTransformation

Public Instance Methods

fusion_node?(term_node) click to toggle source
# File lib/bel_parser/language/version1_0/upgrades/fusion_transformation.rb, line 14
def fusion_node?(term_node)
  fusion_func = false

  fusionable_func =
    [
      'p', 'proteinAbundance',
      'r', 'rnaAbundance',
      'g', 'geneAbundance'
    ].include?(term_node.function.identifier.string_literal)
  return false unless fusionable_func

  if term_node.arguments[1] && term_node.arguments[1].child.respond_to?('function')
      ['fus', 'fusion'].include?(term_node.arguments[1].child.function.identifier.string_literal)
  else
    false
  end
end
on_term(term_node) click to toggle source
# File lib/bel_parser/language/version1_0/upgrades/fusion_transformation.rb, line 32
def on_term(term_node)
  if fusion_node?(term_node)
    fusionable_func = term_node.function.identifier.string_literal
    parameter = term_node.arguments[0].child

    first_prefix = parameter.prefix.identifier.string_literal
    first_value = parameter.value.children[0].string_literal
    parameter = term_node.arguments[1].child.arguments[0].child
    second_prefix = parameter.prefix.identifier.string_literal
    second_value = parameter.value.children[0].string_literal

    term(
      function(
        identifier(fusionable_func)),
        term(
          function(
            identifier('fus')),
          argument(
            parameter(
              prefix(
                identifier(first_prefix)),
              value(
                identifier(first_value)))),
          argument(
            parameter(
              prefix(
                identifier(second_prefix)),
              value(
                  identifier(second_value))))))
  else
    term_node.updated([process(term_node.function), term_node.arguments.map! {|arg| process(arg)}].flatten())
  end
end