lib/lucid/ast/step_invocation.rb in lucid-0.0.6 vs lib/lucid/ast/step_invocation.rb in lucid-0.0.7

- old
+ new

@@ -4,12 +4,10 @@ require 'gherkin/rubify' module Lucid module AST class StepInvocation #:nodoc: - include Gherkin::Rubify - attr_writer :step_collection, :background attr_reader :name, :matched_cells, :status, :reported_exception attr_accessor :exception class << self @@ -33,24 +31,29 @@ @skip_invoke = true end def accept(visitor) return if Lucid.wants_to_quit - invoke(visitor.runtime, visitor.configuration) - visit_step_result(visitor) + + visitor.visit_step(self) do + invoke(visitor.runtime, visitor.configuration) + visit_step_result(visitor) + end end def visit_step_result(visitor) visitor.visit_step_result( - keyword, - @step_match, - (@different_table || @multiline_arg), - @status, - @reported_exception, - source_indent, - @background, - file_colon_line + StepResult.new( + keyword, + @step_match, + (@different_table || @multiline_arg), + @status, + @reported_exception, + source_indent, + @background, + file_colon_line + ) ) end def invoke(runtime, configuration) find_step_match!(runtime, configuration) @@ -142,14 +145,42 @@ def previous @step_collection.previous_step(self) end def actual_keyword - repeat_keywords = rubify([language.keywords('but'), language.keywords('and')]).flatten.uniq.reject{|kw| kw == '* '} - if repeat_keywords.index(@step.keyword) && previous + #repeat_keywords = rubify([language.keywords('but'), language.keywords('and')]).flatten.uniq.reject{|kw| kw == '* '} + #if repeat_keywords.index(@step.keyword) && previous + keywords = Keywords.new(language) + if keywords.repeat_keyword?(keyword) && previous previous.actual_keyword else - keyword == '* ' ? language.code_keywords.first : keyword + #keyword == '* ' ? language.code_keywords.first : keyword + keyword == '* ' ? keywords.star_code_keyword : keyword + end + end + + class Keywords + include Gherkin::Rubify + + def initialize(language) + @language = language + end + + def repeat_keyword?(keyword) + repeat_keywords.index(keyword) + end + + def star_code_keyword + language.code_keywords.reject { |k| repeat_keywords.map(&:strip).include?(k) }.first + end + + attr_reader :language + private :language + + private + + def repeat_keywords + rubify([language.keywords('but'), language.keywords('and')]).flatten.uniq.reject{|kw| kw == '* '} end end def source_indent @step.feature_element.source_indent(text_length)