Module: RedmineCLI::Helpers::Input

Includes:
Output
Included in:
RedmineCLI::Helpers::Issue::Update, Subcommands::Conf, Subcommands::User
Defined in:
lib/redmine_cli/helpers/input.rb

Overview

Helpers for input

Instance Method Summary collapse

Methods included from Output

#erb, #message, #print_object_list, #print_prompt_message

Instance Method Details

#ask(text, params = {}) ⇒ Object

Asks user for something.

Params:

  • :default

  • :limited_to - can be ‘Array<String>` or Regexp

  • :required - force user input until it’s not empty



84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/redmine_cli/helpers/input.rb', line 84

def ask(text, params = {})
  default_set = params.key?(:default)
  if params[:required]
    fail('required + default options') if default_set
    fail('required + array with limits') if params[:limited_to].is_a? Array
  end

  print_prompt_message(text, params)
  input = read(params)

  return params[:default] if default_set && input.empty?
  input
end

#ask_for_object(object_list) ⇒ Object

prints names as enumerable list and asks user for element



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/redmine_cli/helpers/input.rb', line 32

def ask_for_object(object_list)
  fail EmptyList if object_list.size.zero?

  # From 1
  i = 0
  object_list = object_list.map { |obj| [(i += 1), obj] }.to_h

  print_object_list(object_list)
  puts
  input = ask m(:enter_object_number),
              default: '1',
              limited_to: ->(str) { (1..i).cover? str.to_i }

  object_list[input.to_i]
end

#ask_from_text_editor(welcome_message = '') ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/redmine_cli/helpers/input.rb', line 14

def ask_from_text_editor(welcome_message = '')
  file = Tempfile.open('redmine_cli') do |f|
    f.write welcome_message
    f
  end

  editor = Config['editor'] || ENV['EDITOR'] || 'nano'

  system(editor + ' ' + file.path)
  result = File.read(file)
  file.unlink

  result
end

#ask_url(text, params = {}) ⇒ Object

#ask with :limited_to set to url regexp. TODO: make good regexp



71
72
73
74
# File 'lib/redmine_cli/helpers/input.rb', line 71

def ask_url(text, params = {})
  params[:limited_to] = /\S*/
  ask(text, params)
end

#parse_time(input) ⇒ Object

Parses time from user’s input. Formats: HH:MM; M; H.h

Parameters:



54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/redmine_cli/helpers/input.rb', line 54

def parse_time(input)
  fail(BadInputTime) unless input =~ /^\d+[\:\.]?\d*/

  if input.include?(':')
    h, m = input.split(':').map(&:to_i)
    (60 * h + m) / 60.0
  elsif input.include?('.')
    input.to_f
  else
    input.to_i
  end
end