Sha256: 9a4241af00bc4406f1a16c588e626f39f15a06824d9fe865232020e95ff84d09

Contents?: true

Size: 1.46 KB

Versions: 2

Compression:

Stored size: 1.46 KB

Contents

# frozen_string_literal: true

require 'eac_cli/runner'
require 'eac_ruby_utils/core_ext'

module EacCli
  module RunnerWith
    module Confirmation
      DEFAULT_CONFIRM_QUESTION_TEXT = 'Confirm?'

      common_concern do
        include ::EacCli::Runner
        enable_settings_provider
        enable_simple_cache
        runner_definition do
          bool_opt '--no', 'Deny confirmation without question.'
          bool_opt '--yes', 'Accept confirmation without question.'
        end
      end

      def confirm?(message = nil)
        return for_all_answers.fetch(message) if for_all_answers.key?(message)
        return false if parsed.no?
        return true if parsed.yes?

        r = confirm_input(message)
        for_all_answers[message] = r.for_all?
        r.confirm?
      rescue ::EacCli::Speaker::InputRequested => e
        fatal_error e.message
      end

      def run_confirm(message = nil)
        yield if confirm?(message)
      end

      private

      def cached_confirm_uncached?(message = nil)
        confirm?(message)
      end

      # @param message [String, nil]
      # @return [Boolean]
      def confirm_input(message)
        ::EacCli::RunnerWith::Confirmation::InputResult.by_message(
          message || setting_value(:confirm_question_text, default: DEFAULT_CONFIRM_QUESTION_TEXT)
        )
      end

      # @return [Hash<String, Boolean>]
      def for_all_answers_uncached
        {}
      end

      require_sub __FILE__
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
eac_cli-0.40.1 lib/eac_cli/runner_with/confirmation.rb
eac_cli-0.40.0 lib/eac_cli/runner_with/confirmation.rb