Class: YARD::Handlers::Ruby::Legacy::StepDefinitionHandler

Inherits:
Base
  • Object
show all
Defined in:
lib/yard/handlers/legacy/step_definition_handler.rb

Constant Summary collapse

STEP_DEFINITION_MATCH =

TODO: This needs to become language independent.

/^((When|Given|And|Then)\s*(\/.+\/)\s+do(?:\s*\|.+\|)?\s*)$/
@@unique_name =
0

Instance Method Summary collapse

Instance Method Details

#find_steps_defined_in_block(block) ⇒ Object

Step Definitions can contain defined steps within them. While it is likely that they could not very easily be parsed because of variables that are only calculated at runtime, it would be nice to at least list those in use within a step definition and if you can find a match, go ahead and make it



32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/yard/handlers/legacy/step_definition_handler.rb', line 32

def find_steps_defined_in_block(block)
  #log.debug "#{block} #{block.class}"
  block.each_with_index do |token,index|
    #log.debug "Token #{token.class} #{token.text}"
      if token.is_a?(YARD::Parser::Ruby::Legacy::RubyToken::TkCONSTANT)  && 
        token.text =~ /^(given|when|then|and)$/i &&
        block[index + 2].is_a?(YARD::Parser::Ruby::Legacy::RubyToken::TkSTRING)
        log.debug "Step found in Step Definition: #{block[index + 2].text} "
      end
        
  end
  
end

#processObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/yard/handlers/legacy/step_definition_handler.rb', line 8

def process
  keyword = statement.tokens.to_s[STEP_DEFINITION_MATCH,2]
  step_definition = statement.tokens.to_s[STEP_DEFINITION_MATCH,3]

  @@unique_name = @@unique_name + 1
    
  stepdef_instance = StepDefinitionObject.new(YARD::CodeObjects::Cucumber::CUCUMBER_STEPTRANSFORM_NAMESPACE, "definition_#{@@unique_name}") do |o| 
    o.source = "#{keyword} #{step_definition} do #{statement.block.to_s =~ /^\s*\|.+/ ? '' : "\n  "}#{statement.block.to_s}\nend"
    o.value = step_definition
    o.keyword = keyword
  end
  
  obj = register stepdef_instance
  parse_block :owner => obj
  
rescue YARD::Handlers::NamespaceMissingError
end