class TagParser
Class that parses step definitions from Ruby files
Attributes
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