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
-
#ask(text, params = {}) ⇒ Object
Asks user for something.
-
#ask_for_object(object_list) ⇒ Object
prints names as enumerable list and asks user for element.
- #ask_for_user(message, params = {}) ⇒ Object
- #ask_from_text_editor(welcome_message = '') ⇒ Object
-
#ask_url(text, params = {}) ⇒ Object
#ask with :limited_to set to url regexp.
-
#parse_time(input) ⇒ Object
Parses time from user’s input.
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>` orRegexp -
: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 (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(, params = {}) params[:limited_to] = proc do |input| begin @ask_for_user_cache = RedmineRest::Models::User.find(input) # save record rescue nil end end ask(, 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( = '') file = Tempfile.open('redmine_cli') do |f| f.write 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
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 |