Sha256: 115140ef38d1bd92097ff61507d870a38ade9cfae5dcd143d133132812aaf498
Contents?: true
Size: 1.67 KB
Versions: 4
Compression:
Stored size: 1.67 KB
Contents
module Gherkin class Query def initialize @ast_node_locations = {} end def update(message) update_feature(message[:gherkinDocument][:feature]) if message[:gherkinDocument] 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) return if feature.nil? 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[:tableBody] || []) 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
4 entries across 4 versions & 1 rubygems
Version | Path |
---|---|
cucumber-gherkin-19.0.3 | lib/gherkin/query.rb |
cucumber-gherkin-19.0.2 | lib/gherkin/query.rb |
cucumber-gherkin-19.0.1 | lib/gherkin/query.rb |
cucumber-gherkin-19.0.0 | lib/gherkin/query.rb |