module CukeModeler::Parsing
A module providing source text parsing functionality.
Attributes
dialect[W]
The dialect that will be used to parse snippets of Gherkin text
Public Class Methods
dialect()
click to toggle source
The dialect that will be used to parse snippets of Gherkin text
# File lib/cuke_modeler/parsing.rb, line 31 def dialect @dialect || 'en' end
dialects()
click to toggle source
The dialects currently known by the gherkin gem
# File lib/cuke_modeler/parsing.rb, line 36 def dialects Gherkin::DIALECTS end
parse_text(source_text, filename = 'cuke_modeler_fake_file.feature')
click to toggle source
Parses the Cucumber feature given in source_text and returns a hash representation of its logical structure. This is a standardized AST that should remain consistent across different versions of `cucumber-gherkin`
# File lib/cuke_modeler/parsing.rb, line 43 def parse_text(source_text, filename = 'cuke_modeler_fake_file.feature') unless source_text.is_a?(String) raise(ArgumentError, "Text to parse must be a String but got #{source_text.class}") end begin parsed_result = parsing_method(source_text.encode('UTF-8'), filename) rescue => e raise(ArgumentError, "Error encountered while parsing '#{filename}'\n#{e.class} - #{e.message}") end adapter_class.new.adapt(parsed_result) end
parsing_method(source_text, filename)
click to toggle source
TODO: make these methods private? NOT A PART OF THE PUBLIC API The method to use for parsing Gherkin text
# File lib/cuke_modeler/parsing.rb, line 70 def parsing_method(source_text, filename) messages = Gherkin.from_source(filename, source_text, { include_gherkin_document: true }) .to_a error_message = messages.find(&:parse_error) gherkin_ast_message = messages.find(&:gherkin_document) raise error_message.parse_error.message if error_message gherkin_ast_message.gherkin_document end
Private Instance Methods
dialect_feature_keyword()
click to toggle source
# File lib/cuke_modeler/parsing.rb, line 172 def dialect_feature_keyword get_word(Parsing.dialects[Parsing.dialect]['feature']) end
dialect_outline_keyword()
click to toggle source
# File lib/cuke_modeler/parsing.rb, line 180 def dialect_outline_keyword get_word(Parsing.dialects[Parsing.dialect]['scenarioOutline'] || Parsing.dialects[Parsing.dialect]['scenario_outline']) end
dialect_scenario_keyword()
click to toggle source
# File lib/cuke_modeler/parsing.rb, line 176 def dialect_scenario_keyword get_word(Parsing.dialects[Parsing.dialect]['scenario']) end
dialect_step_keyword()
click to toggle source
# File lib/cuke_modeler/parsing.rb, line 185 def dialect_step_keyword get_word(Parsing.dialects[Parsing.dialect]['given']) end
get_word(word_set)
click to toggle source
# File lib/cuke_modeler/parsing.rb, line 189 def get_word(word_set) word_set = word_set.is_a?(Array) ? word_set : word_set.split('|') word_set.first end