class CucumberReports::Transformer::Json

Public Instance Methods

parse_arguments(block_type, parsed_ast) click to toggle source
# File lib/cucumber-reports/transformer/json.rb, line 34
def parse_arguments(block_type, parsed_ast)
  args = parsed_ast.children
    .filter do |block|
      block.is_a?(Parser::AST::Node) && [:args].include?(block.type)
    end
    .map do |ast_block|
      return [] if ast_block.children.empty?
      ast_block.children.map {|ast_arg| ast_arg.children[0] }
    end

  args.flatten
end
parse_title(block_type, parsed_ast) click to toggle source
# File lib/cucumber-reports/transformer/json.rb, line 22
def parse_title(block_type, parsed_ast)
  case block_type
  when :str
    title = parsed_ast.children[0].children[2].children[0]
  when :regexp
    title = parsed_ast.children[0].children[2].children[0].children[0]
    title = title.children[0] if title.is_a?(Parser::AST::Node)
  end

  title
end
transform(parsed_ast, filename) click to toggle source
# File lib/cucumber-reports/transformer/json.rb, line 6
def transform(parsed_ast, filename)
  steps = parsed_ast.map do |code_block|
    begin
      block_type = code_block.children[0].children[2].type

      title = parse_title(block_type, code_block)
      arguments = parse_arguments(block_type, code_block)
      {title: title, arguments: arguments}
    rescue
      next
    end
  end

  steps.compact
end