Class: BELParser::ASTFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/bel_parser/ast_filter.rb

Overview

ASTFilter filters types of Parsers::AST::Node.

Instance Method Summary collapse

Constructor Details

#initialize(ast_enum, *types) ⇒ ASTFilter

Returns a new instance of ASTFilter.



6
7
8
9
# File 'lib/bel_parser/ast_filter.rb', line 6

def initialize(ast_enum, *types)
  @ast_enum = ast_enum
  @types    = Hash[types.map { |t| [t, true] }]
end

Instance Method Details

#each(enum = @ast_enum) ⇒ Object



11
12
13
14
15
16
17
18
19
20
# File 'lib/bel_parser/ast_filter.rb', line 11

def each(enum = @ast_enum)
  if block_given?
    enum.each do |(line_number, line, ast_results)|
      selected = filter(ast_results)
      yield([line_number, line, selected]) unless selected.empty?
    end
  else
    enum_for(:each, enum)
  end
end

#filter(ast_enum) ⇒ Object



22
23
24
25
26
27
28
29
30
# File 'lib/bel_parser/ast_filter.rb', line 22

def filter(ast_enum)
  ast_enum.select do |node|
    if node.nil?
      @types[nil]
    else
      @types[node.type]
    end
  end
end