class TodoistQuerynaut::Parser

Public Class Methods

parse(data) click to toggle source
# File lib/todoist_querynaut/parser.rb, line 6
def self.parse(data)
  tree = @@parser.parse(data)

  if tree.nil?
    raise Exception, "Parse error at offset: #{@@parser.index}"
  end

  #return tree
  return self.clean_tree(tree)
end

Private Class Methods

clean_tree(node) click to toggle source
# File lib/todoist_querynaut/parser.rb, line 19
def self.clean_tree(node)
  if node.class.name == "Treetop::Runtime::SyntaxNode"
    if node.elements.nil? || node.elements.length == 0
      return node.empty? ? [] : node
    else
      return node.elements.map{|n| self.clean_tree n}.flatten(1)
    end
  else
    if !node.elements.nil?
      node.elements.replace node.elements.map{|n| self.clean_tree n}.flatten(1)
      return node.children[0] if node.is_a?(TodoistQuery::SetExpressionNode) && node.sole?
    end
    return node
  end
end