Class: Gherkin::TokenMatcher
- Inherits:
-
Object
- Object
- Gherkin::TokenMatcher
- Defined in:
- lib/gherkin/token_matcher.rb
Constant Summary collapse
- LANGUAGE_PATTERN =
/^\s*#\s*language\s*:\s*([a-zA-Z\-_]+)\s*$/
Instance Method Summary collapse
- #_match_DocStringSeparator(token, separator, is_open) ⇒ Object
-
#initialize(dialect_name = 'en') ⇒ TokenMatcher
constructor
A new instance of TokenMatcher.
- #match_BackgroundLine(token) ⇒ Object
- #match_Comment(token) ⇒ Object
- #match_DocStringSeparator(token) ⇒ Object
- #match_Empty(token) ⇒ Object
- #match_EOF(token) ⇒ Object
- #match_ExamplesLine(token) ⇒ Object
- #match_FeatureLine(token) ⇒ Object
- #match_Language(token) ⇒ Object
- #match_Other(token) ⇒ Object
- #match_RuleLine(token) ⇒ Object
- #match_ScenarioLine(token) ⇒ Object
- #match_StepLine(token) ⇒ Object
- #match_TableRow(token) ⇒ Object
- #match_TagLine(token) ⇒ Object
- #reset ⇒ Object
Constructor Details
#initialize(dialect_name = 'en') ⇒ TokenMatcher
Returns a new instance of TokenMatcher.
9 10 11 12 13 |
# File 'lib/gherkin/token_matcher.rb', line 9 def initialize(dialect_name = 'en') @default_dialect_name = dialect_name change_dialect(dialect_name, nil) reset end |
Instance Method Details
#_match_DocStringSeparator(token, separator, is_open) ⇒ Object
93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/gherkin/token_matcher.rb', line 93 def _match_DocStringSeparator(token, separator, is_open) return false unless token.line.start_with?(separator) media_type = nil if is_open media_type = token.line.get_rest_trimmed(separator.length) @active_doc_string_separator = separator @indent_to_remove = token.line.indent else @active_doc_string_separator = nil @indent_to_remove = 0 end set_token_matched(token, :DocStringSeparator, media_type, separator) true end |
#match_BackgroundLine(token) ⇒ Object
41 42 43 |
# File 'lib/gherkin/token_matcher.rb', line 41 def match_BackgroundLine(token) match_title_line(token, :BackgroundLine, @dialect.background_keywords) end |
#match_Comment(token) ⇒ Object
63 64 65 66 67 68 69 |
# File 'lib/gherkin/token_matcher.rb', line 63 def match_Comment(token) return false unless token.line.start_with?('#') text = token.line.get_line_text(0) # take the entire line, including leading space set_token_matched(token, :Comment, text, nil, 0) true end |
#match_DocStringSeparator(token) ⇒ Object
82 83 84 85 86 87 88 89 90 91 |
# File 'lib/gherkin/token_matcher.rb', line 82 def match_DocStringSeparator(token) if @active_doc_string_separator.nil? # open _match_DocStringSeparator(token, '"""', true) || _match_DocStringSeparator(token, '```', true) else # close _match_DocStringSeparator(token, @active_doc_string_separator, false) end end |
#match_Empty(token) ⇒ Object
56 57 58 59 60 61 |
# File 'lib/gherkin/token_matcher.rb', line 56 def match_Empty(token) return false unless token.line.empty? set_token_matched(token, :Empty, nil, nil, 0) true end |
#match_EOF(token) ⇒ Object
110 111 112 113 114 115 |
# File 'lib/gherkin/token_matcher.rb', line 110 def match_EOF(token) return false unless token.eof? set_token_matched(token, :EOF) true end |
#match_ExamplesLine(token) ⇒ Object
45 46 47 |
# File 'lib/gherkin/token_matcher.rb', line 45 def match_ExamplesLine(token) match_title_line(token, :ExamplesLine, @dialect.examples_keywords) end |
#match_FeatureLine(token) ⇒ Object
28 29 30 |
# File 'lib/gherkin/token_matcher.rb', line 28 def match_FeatureLine(token) match_title_line(token, :FeatureLine, @dialect.feature_keywords) end |
#match_Language(token) ⇒ Object
71 72 73 74 75 76 77 78 79 80 |
# File 'lib/gherkin/token_matcher.rb', line 71 def match_Language(token) return false unless token.line.trimmed_line_text =~ LANGUAGE_PATTERN dialect_name = Regexp.last_match(1) set_token_matched(token, :Language, dialect_name) change_dialect(dialect_name, token.location) true end |
#match_Other(token) ⇒ Object
117 118 119 120 121 |
# File 'lib/gherkin/token_matcher.rb', line 117 def match_Other(token) text = token.line.get_line_text(@indent_to_remove) # take the entire line, except removing DocString indents set_token_matched(token, :Other, unescape_docstring(text), nil, 0) true end |
#match_RuleLine(token) ⇒ Object
32 33 34 |
# File 'lib/gherkin/token_matcher.rb', line 32 def match_RuleLine(token) match_title_line(token, :RuleLine, @dialect.rule_keywords) end |
#match_ScenarioLine(token) ⇒ Object
36 37 38 39 |
# File 'lib/gherkin/token_matcher.rb', line 36 def match_ScenarioLine(token) match_title_line(token, :ScenarioLine, @dialect.scenario_keywords) || match_title_line(token, :ScenarioLine, @dialect.scenario_outline_keywords) end |
#match_StepLine(token) ⇒ Object
123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/gherkin/token_matcher.rb', line 123 def match_StepLine(token) keywords = @dialect.given_keywords + @dialect.when_keywords + @dialect.then_keywords + @dialect.and_keywords + @dialect.but_keywords keyword = keywords.detect { |k| token.line.start_with?(k) } return false unless keyword title = token.line.get_rest_trimmed(keyword.length) keyword_types = @keyword_types[keyword] keyword_type = keyword_types[0] keyword_type = Cucumber::Messages::StepKeywordType::UNKNOWN if keyword_types.length > 1 set_token_matched(token, :StepLine, title, keyword, nil, keyword_type) true end |
#match_TableRow(token) ⇒ Object
49 50 51 52 53 54 |
# File 'lib/gherkin/token_matcher.rb', line 49 def match_TableRow(token) return false unless token.line.start_with?('|') set_token_matched(token, :TableRow, nil, nil, nil, nil, token.line.table_cells) true end |
#match_TagLine(token) ⇒ Object
21 22 23 24 25 26 |
# File 'lib/gherkin/token_matcher.rb', line 21 def match_TagLine(token) return false unless token.line.start_with?('@') set_token_matched(token, :TagLine, nil, nil, nil, nil, token.line.) true end |
#reset ⇒ Object
15 16 17 18 19 |
# File 'lib/gherkin/token_matcher.rb', line 15 def reset change_dialect(@default_dialect_name, nil) unless @dialect_name == @default_dialect_name @active_doc_string_separator = nil @indent_to_remove = 0 end |