Module: RedmineCLI::Helpers::Input

Includes:
Output
Included in:
RedmineCLI::Helpers::Issue::Create, 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



100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'lib/redmine_cli/helpers/input.rb', line 100

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



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/redmine_cli/helpers/input.rb', line 45

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(:select_item_from_list),
              default: '1',
              limited_to: ->(str) { (1..i).cover? str.to_i }

  object_list[input.to_i]
end

#ask_for_user(message, params = {}) ⇒ Object



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

def ask_for_user(message, params = {})
  params[:limited_to] = proc do |input|
    begin
      @ask_for_user_cache = RedmineRest::Models::User.find(input) # save record
    rescue
      nil
    end
  end

  ask(message, params)
  @ask_for_user_cache
end

#ask_from_text_editor(welcome_message = '') ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/redmine_cli/helpers/input.rb', line 27

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



84
85
86
87
88
89
90
# File 'lib/redmine_cli/helpers/input.rb', line 84

def ask_url(text, params = {})
  params[:limited_to] = /\S*/
  url = ask(text, params).strip
  url = "http://#{url}" unless url =~ %r{\Ahttps?://}

  url
end

#parse_time(input) ⇒ Object

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

Parameters:



67
68
69
70
71
72
73
74
75
76
77
78
# File 'lib/redmine_cli/helpers/input.rb', line 67

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