class TagParser

Class that parses step definitions from Ruby files

Attributes

tags[R]

Public Class Methods

new() click to toggle source
# File lib/tag_parser.rb, line 6
def initialize
  @tags = []
end

Public Instance Methods

read(file) click to toggle source
# File lib/tag_parser.rb, line 10
def read(file)
  @current_file = file
  @line_number = 0
  @lines = IO.read(file).split(/\r?\n/)
  parse_lines
end

Private Instance Methods

next_line() click to toggle source
# File lib/tag_parser.rb, line 19
def next_line
  @line_number += 1
  @lines.shift
end
parse_lines() click to toggle source
# File lib/tag_parser.rb, line 29
def parse_lines
  @comments = []
  while not @lines.empty?
    line = next_line
    case line
    when /^ *#/
      @comments << line
    when /^\s+@.*/
      unread(line)
      parse_tag
      @comments = []
    when /^@.*/
      unread(line)
      parse_tag
    else
      @comments = []
    end

  end
end
parse_step_type(line) click to toggle source
# File lib/tag_parser.rb, line 71
def parse_step_type(line)
  line.sub(/^([A-Za-z]+).*/, '\1')
end
parse_tag() click to toggle source
# File lib/tag_parser.rb, line 50
def parse_tag
  line = next_line
  tag_names = parse_tag_names(line)
  line_number =@line_number
  code = ""
  line = ""
  scenario = ""
  while !@lines.empty? && !(line =~ /^\s+@.*/)
    line = next_line
    case line

    when /^\s+Scenario:.*/
      scenario = line
    else
      code << line
    end

  end
  @tags << {  :names => tag_names, :filename => @current_file, :comments => @comments,:code => code, :scenario=>scenario, :line_number => line_number }
end
parse_tag_names(line) click to toggle source
# File lib/tag_parser.rb, line 75
def parse_tag_names(line)
  tags = line.split(' ')
  tags
end
unread(line) click to toggle source
# File lib/tag_parser.rb, line 24
def unread(line)
  @line_number -= 1
  @lines.unshift(line)
end