Module: LanguageOperator::CLI::Helpers::ValidationHelper

Included in:
Wizards::ModelWizard
Defined in:
lib/language_operator/cli/helpers/validation_helper.rb

Overview

Common input validation patterns for CLI wizards

Provides validation helpers for URLs, Kubernetes names, emails, ports, etc. Uses UxHelper for prompt access.

Examples:

class MyWizard
  include Helpers::UxHelper
  include Helpers::ValidationHelper

  def run
    url = ask_url('Enter endpoint:')
    name = ask_k8s_name('Resource name:')
  end
end

Instance Method Summary collapse

Instance Method Details

#ask_k8s_name(question, default: nil) ⇒ String?

Ask for a Kubernetes-compatible resource name

Parameters:

  • question (String)

    The prompt question

  • default (String, nil) (defaults to: nil)

    Default value

Returns:

  • (String, nil)

    The validated name or nil if cancelled



45
46
47
48
49
50
51
52
53
# File 'lib/language_operator/cli/helpers/validation_helper.rb', line 45

def ask_k8s_name(question, default: nil)
  prompt.ask(question, default: default) do |q|
    q.required true
    q.validate(/^[a-z0-9]([-a-z0-9]*[a-z0-9])?$/, 'Must be lowercase alphanumeric with hyphens')
    q.modify :strip, :down
  end
rescue TTY::Reader::InputInterrupt
  nil
end

#ask_secret(question, required: true) ⇒ String?

Ask for a masked input (like API keys or passwords)

Parameters:

  • question (String)

    The prompt question

  • required (Boolean) (defaults to: true)

    Whether input is required

Returns:

  • (String, nil)

    The input value or nil if cancelled



60
61
62
63
64
65
66
# File 'lib/language_operator/cli/helpers/validation_helper.rb', line 60

def ask_secret(question, required: true)
  prompt.mask(question) do |q|
    q.required required
  end
rescue TTY::Reader::InputInterrupt
  nil
end

#ask_select(question, choices, per_page: 10) ⇒ Object?

Ask for selection from a list

Parameters:

  • question (String)

    The prompt question

  • choices (Array)

    Array of choices

  • per_page (Integer) (defaults to: 10)

    Items per page for pagination

Returns:

  • (Object, nil)

    The selected choice or nil if cancelled



85
86
87
88
89
# File 'lib/language_operator/cli/helpers/validation_helper.rb', line 85

def ask_select(question, choices, per_page: 10)
  prompt.select(question, choices, per_page: per_page)
rescue TTY::Reader::InputInterrupt
  nil
end

#ask_url(question, default: nil, required: true) ⇒ String?

Ask for a URL with validation

Parameters:

  • question (String)

    The prompt question

  • default (String, nil) (defaults to: nil)

    Default value

  • required (Boolean) (defaults to: true)

    Whether input is required

Returns:

  • (String, nil)

    The validated URL or nil if cancelled



30
31
32
33
34
35
36
37
38
# File 'lib/language_operator/cli/helpers/validation_helper.rb', line 30

def ask_url(question, default: nil, required: true)
  prompt.ask(question, default: default) do |q|
    q.required required
    q.validate(%r{^https?://})
    q.messages[:valid?] = 'Must be a valid HTTP(S) URL'
  end
rescue TTY::Reader::InputInterrupt
  nil
end

#ask_yes_no(question, default: false) ⇒ Boolean?

Ask a yes/no question

Parameters:

  • question (String)

    The prompt question

  • default (Boolean) (defaults to: false)

    Default value

Returns:

  • (Boolean, nil)

    The response or nil if cancelled



73
74
75
76
77
# File 'lib/language_operator/cli/helpers/validation_helper.rb', line 73

def ask_yes_no(question, default: false)
  prompt.yes?(question, default: default)
rescue TTY::Reader::InputInterrupt
  nil
end