Class: Pdadv::ScenarioParser

Inherits:
Object
  • Object
show all
Defined in:
lib/pdadv/scenario_parser.rb

Instance Method Summary collapse

Constructor Details

#initialize(file_path) ⇒ ScenarioParser

Returns a new instance of ScenarioParser.



5
6
7
8
9
# File 'lib/pdadv/scenario_parser.rb', line 5

def initialize(file_path)
  @file_path = file_path
  @lines = File.read(@file_path).split(/\r?\n/)
  reset
end

Instance Method Details

#add_message(scenario) ⇒ Object



55
56
57
58
59
# File 'lib/pdadv/scenario_parser.rb', line 55

def add_message(scenario)
  return if @messages.empty?
  scenario.add_message(@messages.join("\n"))
  @messages = []
end

#parseObject



16
17
18
19
20
21
22
23
24
25
# File 'lib/pdadv/scenario_parser.rb', line 16

def parse
  return @result if @result

  reset
  scenario = Scenario.new
  parse_meta(scenario)
  parse_commands(scenario)

  @result = scenario
end

#parse_commands(scenario) ⇒ Object



31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/pdadv/scenario_parser.rb', line 31

def parse_commands(scenario)
  @lines.each do |line|
    case line
    when %r{^//}
      nil # comment
    when /^%(?<name>[^\s]+)\s*(?<argv>.+)$/
      name = Regexp.last_match(1)
      argv = Regexp.last_match(2).to_s.split(/\s*,\s*/)
      scenario.add_command(name, argv)
    when /^#+\s(?<flag_name>.+)$/
      name = Regexp.last_match(1)
      add_message(scenario)
      scenario.enter_page(name)
    when /^-{3,}$/
      add_message(scenario)
      scenario.enter_page
    else
      @messages.push line
    end
  end

  add_message(scenario)
end

#parse_meta(scenario) ⇒ Object



27
28
29
# File 'lib/pdadv/scenario_parser.rb', line 27

def parse_meta(scenario)
  scenario.env.base_path = File.expand_path('..', @file_path)
end

#resetObject



11
12
13
14
# File 'lib/pdadv/scenario_parser.rb', line 11

def reset
  @messages = []
  @result = nil
end