Sha256: 53b06110ef33dbc811442aba23100651d0c658af13becb8c9d210516e8a8499a

Contents?: true

Size: 1.91 KB

Versions: 4

Compression:

Stored size: 1.91 KB

Contents

require "interact"

module VMC
  module Interactive
    include ::Interactive::Rewindable

    def ask(question, options = {})
      if force? and options.key?(:default)
        options[:default]
      else
        super
      end
    end

    def list_choices(choices, options)
      choices.each_with_index do |o, i|
        puts "#{c(i + 1, :number)}: #{o}"
      end
    end

    def input_state(options)
      CFState.new(options)
    end

    def prompt(question, options)
      value =
        case options[:default]
        when true
          "y"
        when false
          "n"
        when nil
          ""
        else
          options[:default].to_s
        end

      print "#{question}"
      print c("> ", :prompt)

      unless value.empty?
        print "#{c(value, :default) + "\b" * value.size}"
      end
    end

    def handler(which, state)
      ans = state.answer
      pos = state.position

      if state.default?
        if which.is_a?(Array) and which[0] == :key
          # initial non-movement keypress clears default answer
          clear_input(state)
        else
          # wipe away any coloring
          redraw_input(state)
        end

        state.clear_default!
      end

      super

      print "\n" if which == :enter
    end

    class CFState < ::Interactive::InputState
      def initialize(options = {}, answer = nil, position = 0)
        @options = options

        if answer
          @answer = answer
        elsif options[:default]
          case options[:default]
          when true
            @answer = "y"
          when false
            @answer = "n"
          else
            @answer = options[:default].to_s
          end

          @default = true
        else
          @answer = ""
        end

        @position = position
        @done = false
      end

      def clear_default!
        @default = false
      end

      def default?
        @default
      end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
vmc-0.4.0.beta.16 vmc-ng/lib/vmc/cli/interactive.rb
vmc-0.4.0.beta.15 vmc-ng/lib/vmc/cli/interactive.rb
vmc-0.4.0.beta.14 vmc-ng/lib/vmc/cli/interactive.rb
vmc-0.4.0.beta.13 vmc-ng/lib/vmc/cli/interactive.rb