Sha256: c5c10a5b7867a7f2db5476a02934b9885897703a12780f04a0085a21c36e49ea

Contents?: true

Size: 1.77 KB

Versions: 6

Compression:

Stored size: 1.77 KB

Contents


class StepDefinitionHandler < YARD::Handlers::Ruby::Legacy::Base
  #TODO: This needs to become language independent.
  STEP_DEFINITION_MATCH = /^((When|Given|And|Then)\s*(\/.+\/)\s+do(?:\s*\|.+\|)?\s*)$/
  handles STEP_DEFINITION_MATCH

  @@unique_name = 0

  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
  
  #
  # 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
  #
  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
  
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
cucumber-in-the-yard-1.7.3 lib/yard/handlers/step_definition_handler.rb
cucumber-in-the-yard-1.7.2 lib/yard/handlers/step_definition_handler.rb
cucumber-in-the-yard-1.7.1 lib/yard/handlers/step_definition_handler.rb
cucumber-in-the-yard-1.7.0 lib/yard/handlers/step_definition_handler.rb
cucumber-in-the-yard-1.6.4 lib/yard/handlers/step_definition_handler.rb
cucumber-in-the-yard-1.6.3 lib/yard/handlers/step_definition_handler.rb