Sha256: 1e064bd095fa8df3e4ea51791ef924006f961ae7072a377895abd52d67e01639

Contents?: true

Size: 1.93 KB

Versions: 34

Compression:

Stored size: 1.93 KB

Contents

require 'kontena/cli/stacks/yaml/opto'
require 'kontena/cli/common'

module Kontena::Cli::Stacks
  module YAML
    class Prompt < ::Opto::Resolver
      include Kontena::Cli::Common

      using ::Opto::Extension::HashStringOrSymbolKey

      def enum?
        option.type == 'enum'
      end

      def boolean?
        option.type == 'boolean'
      end

      def prompt_word
        return "Select" if enum?
        return "Enable" if boolean?
        "Enter"
      end

      def question_text
        (!hint.nil? && hint != option.name) ? "#{hint} :" : "#{prompt_word} #{option.label || option.name} :"
      end

      def enum_can_be_other?
        enum? && option.handler.options[:can_be_other] ? true : false
      end

      def enum
        opts = option.handler.options[:options]
        opts << { label: '(Other)', value: nil, description: '(Other)' } if enum_can_be_other?

        answer = prompt.select(question_text) do |menu|
          menu.enum ':' # makes it show numbers before values, you can press the number to select.
          menu.default(opts.index {|opt| opt[:value] == option.default }.to_i + 1) if option.default
          opts.each do |opt|
            menu.choice opt[:label], opt[:value]
          end
        end

        if answer.nil? && enum_can_be_other?
          ask
        else
          answer
        end
      end

      def bool
        prompt.yes?(question_text, default: option.default.nil? || option.default)
      end

      def echo?
        return true if option.handler.nil?
        return true if option.handler.options.nil?
        return true if option.handler.options[:echo].nil?
        option.handler.options[:echo]
      end

      def ask
        prompt.ask(question_text, default: option.default, echo: echo?)
      end

      def resolve
        return nil if option.skip?
        if enum?
          enum
        elsif boolean?
          bool
        else
          ask
        end
      end
    end
  end
end

Version data entries

34 entries across 34 versions & 1 rubygems

Version Path
kontena-cli-1.3.5 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.5.rc1 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.4.0.pre6 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.4.0.pre5 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.4.0.pre4 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.4.0.pre3 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.4.0.pre2 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.4.0.pre1 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.4 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.4.rc1 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.3 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.3.rc1 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.2 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.2.rc2 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.2.rc1 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.1 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.1.rc2 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.1.rc1 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.0 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb
kontena-cli-1.3.0.rc4 lib/kontena/cli/stacks/yaml/opto/prompt_resolver.rb