Sha256: 5b447d0ee65f9bf0b533aa5f0ed68428960cf7762596938fa8ed20b23d857e33

Contents?: true

Size: 1.59 KB

Versions: 6

Compression:

Stored size: 1.59 KB

Contents

module Gherkin
  class Query
    def initialize
      @ast_node_locations = {}
    end

    def update(message)
      update_feature(message.gherkin_document.feature) if message.gherkin_document
    end

    def location(ast_node_id)
      return @ast_node_locations[ast_node_id] if @ast_node_locations.has_key?(ast_node_id)
      raise AstNodeNotLocatedException, "No location found for #{ast_node_id} }. Known: #{@ast_node_locations.keys}"
    end

    private

    def update_feature(feature)
      store_nodes_location(feature.tags)

      feature.children.each do |child|
        update_rule(child.rule) if child.rule
        update_background(child.background) if child.background
        update_scenario(child.scenario) if child.scenario
      end
    end

    def update_rule(rule)
      rule.children.each do |child|
        update_background(child.background) if child.background
        update_scenario(child.scenario) if child.scenario
      end
    end

    def update_background(background)
      update_steps(background.steps)
    end

    def update_scenario(scenario)
      store_node_location(scenario)
      store_nodes_location(scenario.tags)
      update_steps(scenario.steps)
      scenario.examples.each do |examples|
        store_nodes_location(examples.tags)
        store_nodes_location(examples.table_body)
      end
    end

    def update_steps(steps)
      store_nodes_location(steps)
    end

    def store_nodes_location(nodes)
      nodes.each { |node| store_node_location(node) }
    end

    def store_node_location(node)
      @ast_node_locations[node.id] = node.location
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
cucumber-gherkin-13.0.0 lib/gherkin/query.rb
cucumber-gherkin-12.0.0 lib/gherkin/query.rb
cucumber-gherkin-11.0.0 lib/gherkin/query.rb
cucumber-gherkin-10.0.0 lib/gherkin/query.rb
cucumber-gherkin-9.2.0 lib/gherkin/query.rb
cucumber-gherkin-9.1.0 lib/gherkin/query.rb