Module: Origen::Utility::InputCapture
- Included in:
- Application::Release, RegressionManager
- Defined in:
- lib/origen/utility/input_capture.rb
Instance Method Summary collapse
-
#find_space(line, max_position) ⇒ Object
Find the space closest to but less than max_position, returns max_position if none can be found.
-
#get_text(options = {}) ⇒ Object
Gets text input from the user Supply an optional default value in the event that the user enters nothing.
-
#split_long_line(line) ⇒ Object
Splits a long line into short ones, split by the nearest space.
Instance Method Details
#find_space(line, max_position) ⇒ Object
Find the space closest to but less than max_position, returns max_position if none can be found
114 115 116 117 118 |
# File 'lib/origen/utility/input_capture.rb', line 114 def find_space(line, max_position) x = max_position x -= 1 until line[x] == ' ' || x == 0 x == 0 ? max_position : x end |
#get_text(options = {}) ⇒ Object
Gets text input from the user Supply an optional default value in the event that the user enters nothing
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/origen/utility/input_capture.rb', line 7 def get_text( = {}) # rubocop:disable Layout/MultilineHashBraceLayout = { default: false, single: false, # Set if only a single line entry is expected confirm: false, accept: false, # Supply and array of entries you are willing to accept case_sensitive: false, # If accept values are supplied they will be treated as case # in-sensitive by default wrap: true # Automatically split long lines }.merge() # rubocop:enable Layout/MultilineHashBraceLayout if [:confirm] puts "Type 'yes' or 'no' to confirm or 'quit' to abort." elsif [:accept] puts "You can enter: #{[:accept].map { |v| "'#{v}'" }.join(', ')} or 'quit' to abort." # " else puts [:single] ? "Enter 'quit' to abort." : "Enter a single '.' to finish, or 'quit' to abort." end puts '------------------------------------------------------------------------------------------' text = '' line = '' if [:confirm] print "(#{[:default]}): " if [:default] else print "Hit return to accept the default (#{[:default]}): " if [:default] end while line != '.' orig_line = Readline.readline('', false).chomp.rstrip line = orig_line.strip if (line.empty? || line == '.') && text.empty? && [:default] text = [:default].to_s line = '.' elsif line.downcase == 'quit' exit 0 elsif line == '.' # Do nothing else if [:wrap] split_long_line(orig_line) do |short_line| text << "#{short_line}\n" end else text << orig_line end end confirm = text.strip.downcase if [:confirm] text = text.strip if [:single] line = '.' if [:single] || [:confirm] end puts '' if [:confirm] if confirm == 'no' || confirm == 'n' if [:confirm] == :return_boolean return false else exit 0 end end if confirm == 'yes' || confirm == 'y' if [:confirm] == :return_boolean true end else get_text() end elsif [:accept] accept = [:accept].map do |v| v = v.to_s v = v.downcase unless [:case_sensitive] v end text = text.downcase unless [:case_sensitive] text = text.strip if accept.include?(text) text else get_text() end else text end end |
#split_long_line(line) ⇒ Object
Splits a long line into short ones, split by the nearest space
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# File 'lib/origen/utility/input_capture.rb', line 96 def split_long_line(line) if line.length <= 90 yield line else until line.empty? if line.length <= 90 yield line line = '' else yield line.slice(0, find_space(line, 90)) line = line.slice(find_space(line, 90), line.length).strip end end end end |