Sha256: fc837959dd75b6bf95dc3acab958fefe422334058597c4c2ee5f5f6404ff3207

Contents?: true

Size: 1.33 KB

Versions: 4

Compression:

Stored size: 1.33 KB

Contents

require 'cucumberator/parser'
require 'cucumberator/steps'

module Cucumberator
  class Input
    attr_accessor :world, :scenario, :step_line, :last_input, :exit_flag, :saved_stack

    def initialize(world, scenario, step_line = nil)
      @world, @scenario = world, scenario
      @step_line = step_line if step_line
      @saved_stack = []

      check_scenario
      set_autocomplete
      read_input
    end

    def check_scenario
      raise "Sorry, cucumberator is not available when scenario is already failing!" if scenario.failed?
    end

    def read_input
      input = Readline.readline("> ", true)
      exit_flag = Cucumberator::Parser.parse_input(input, scenario, step_line, world, saved_stack)
      read_input unless exit_flag
    end

    def set_autocomplete
      commands = Cucumberator::Commands::AVAILABLE

      Cucumberator::Steps.new(scenario).all.each do |s|
        # remove typical start/end regexp parts
        step = s.gsub(/^\/\^|\$\/$/,'')
        # every step is equal, no matter if When/Then/And, so combining everything for autocomplete
        commands << "When #{step}" << "Then #{step}" << "And #{step}"
      end

      Readline.basic_word_break_characters = ""; # no break chars = no autobreaking for completion input
      Readline.completion_proc = proc { |s| commands.grep( /^#{Regexp.escape(s)}/ ) }
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
cucumberator-1.0.3 lib/cucumberator/input.rb
cucumberator-1.0.2 lib/cucumberator/input.rb
cucumberator-1.0.1 lib/cucumberator/input.rb
cucumberator-1.0.0 lib/cucumberator/input.rb