class StepParser
Class that parses step definitions from Ruby files
Attributes
steps[R]
Public Class Methods
new()
click to toggle source
# File lib/step_parser.rb, line 6 def initialize @steps = [] end
Public Instance Methods
read(file)
click to toggle source
# File lib/step_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/step_parser.rb, line 20 def next_line @line_number += 1 @lines.shift end
parse_lines()
click to toggle source
# File lib/step_parser.rb, line 30 def parse_lines @comments = [] while not @lines.empty? line = next_line case line when /^ *#/ @comments << line when /^(Given|When|Then|Before|After|AfterStep|Transform) / unread(line) parse_step @comments = [] when /^\s+(Given|When|Then|Before|After|AfterStep|Transform) / puts "WARNING: Indented step definition in file #{@current_file}: #{line}" @comments = [] else @comments = [] end end end
parse_step()
click to toggle source
# File lib/step_parser.rb, line 52 def parse_step type = parse_step_type(@lines.first) name = parse_step_name(@lines.first) line_number = @line_number + 1 code = @comments line = "" while !@lines.empty? && !(line =~ /^end\s*$/) line = next_line code << line end @steps << { :type => type, :name => name, :filename => @current_file, :code => code, :line_number => line_number } end
parse_step_name(line)
click to toggle source
# File lib/step_parser.rb, line 69 def parse_step_name(line) line = line.sub(/^(Given|When|Then|Transform) +\/\^?(.*?)\$?\/.*/, '\1 \2') line = line.gsub('\ ', ' ') line end
parse_step_type(line)
click to toggle source
# File lib/step_parser.rb, line 65 def parse_step_type(line) line.sub(/^([A-Za-z]+).*/, '\1') end
unread(line)
click to toggle source
# File lib/step_parser.rb, line 25 def unread(line) @line_number -= 1 @lines.unshift(line) end