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)