class Strut::Parser

Constants

X_SCENARIO_PREFIX

Public Class Methods

new(namespace) click to toggle source
# File lib/strut/parser.rb, line 12
def initialize(namespace)
  @namespace = namespace
  @command_factory = SlimCommandFactory.new
  @document_builder = DocumentBuilder.new
  @interaction_factory = InteractionFactory.new
  @scenario_builder = ScenarioBuilder.new(@document_builder, @command_factory)
  @scenario_number = 1
end

Public Instance Methods

append_import_command() click to toggle source
# File lib/strut/parser.rb, line 28
def append_import_command
  metadata = CommandMetadata.new(1)
  import_command = @command_factory.make_import_command(metadata, @namespace)
  @document_builder.append_command(import_command)
end
extract_scenarios(node) click to toggle source
# File lib/strut/parser.rb, line 34
def extract_scenarios(node)
  wrapped_node = {"value" => node, "line" => 0}
  extract_scenarios_for_node("", wrapped_node, [])
end
extract_scenarios_for_children(scenario_number, node, path_stack) click to toggle source
# File lib/strut/parser.rb, line 49
def extract_scenarios_for_children(scenario_number, node, path_stack)
  return unless node.respond_to?(:each_pair)
  node.each_pair do |child_node_name, child_node|
    next_path_stack = path_stack + [child_node_name]
    extract_scenarios_for_node(child_node_name.to_s, child_node, next_path_stack)
  end
end
extract_scenarios_for_node(node_name, node, path_stack) click to toggle source
# File lib/strut/parser.rb, line 39
def extract_scenarios_for_node(node_name, node, path_stack)
  if node_name.start_with?(X_SCENARIO_PREFIX)
    fixture = node_name.gsub(/^#{X_SCENARIO_PREFIX}/, "")
    interaction = @interaction_factory.make_interaction(path_stack)
    @scenario_number = @scenario_builder.extract_scenarios_for_interaction(@scenario_number, interaction, fixture, node)
  else
    extract_scenarios_for_children(@scenario_number, node["value"], path_stack)
  end
end
parse(yaml) click to toggle source
# File lib/strut/parser.rb, line 21
def parse(yaml)
  parsed_yaml = Psych::parse_yaml(yaml)
  append_import_command
  extract_scenarios(parsed_yaml)
  @document_builder.document
end