Sha256: a42dfc7b7aa31f6b278c6bb4dcab787e190df5916e931e5a69bd2ad42d230dba

Contents?: true

Size: 1009 Bytes

Versions: 11

Compression:

Stored size: 1009 Bytes

Contents

module Stairs
  module Util
    module CLI
      class << self
        def get(prompt)
          print prompt
          response = $stdin.gets.strip
          response.present? ? response : nil
        end

        def collect(*args, &block)
          Collector.new(*args, &block).run
        end
      end

      private

      class Collector
        def initialize(prompt, options={}, &block)
          @prompt = prompt
          @options = options.reverse_merge required: true
          @validator = block
        end

        def run
          times, value = 0, nil

          until valid?(value, times)
            value = CLI.get(prompt.blue)
            times += 1
          end

          value
        end

        private

        def valid?(value, times)
          if validator
            validator.call(value, times)
          else
            !!value || (!options[:required] && times > 0)
          end
        end

        attr_reader :prompt, :options, :validator
      end
    end
  end
end

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
stairs-0.9.0 lib/stairs/util/cli.rb
stairs-0.8.0 lib/stairs/util/cli.rb
stairs-0.7.1 lib/stairs/util/cli.rb
stairs-0.7.0 lib/stairs/util/cli.rb
stairs-0.6.1 lib/stairs/util/cli.rb
stairs-0.6.0 lib/stairs/util/cli.rb
stairs-0.5.1 lib/stairs/util/cli.rb
stairs-0.5.0 lib/stairs/util/cli.rb
stairs-0.4.2 lib/stairs/util/cli.rb
stairs-0.4.1 lib/stairs/util/cli.rb
stairs-0.4.0 lib/stairs/util/cli.rb