Module: Hirb::Util
Overview
Group of handy utility functions used throughout Hirb.
Instance Method Summary collapse
-
#any_const_get(name) ⇒ Object
Returns a constant like Module#const_get no matter what namespace it’s nested in.
-
#camelize(string) ⇒ Object
From Rails ActiveSupport, converting undescored lowercase to camel uppercase.
-
#capture_stdout(&block) ⇒ Object
Captures STDOUT of anything run in its block and returns it as string.
-
#choose_from_array(array, input, options = {}) ⇒ Object
Used by Hirb::Menu to select items from an array.
-
#command_exists?(command) ⇒ Boolean
Determines if a shell command exists by searching for it in ENV.
-
#detect_terminal_size ⇒ Object
Returns [width, height] of terminal when detected, nil if not detected.
-
#recursive_hash_merge(hash1, hash2) ⇒ Object
Recursively merge hash1 with hash2.
Instance Method Details
#any_const_get(name) ⇒ Object
Returns a constant like Module#const_get no matter what namespace it’s nested in. Returns nil if the constant is not found.
7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/hirb/util.rb', line 7 def any_const_get(name) return name if name.is_a?(Module) begin klass = Object name.split('::').each {|e| klass = klass.const_get(e) } klass rescue nil end end |
#camelize(string) ⇒ Object
From Rails ActiveSupport, converting undescored lowercase to camel uppercase.
26 27 28 |
# File 'lib/hirb/util.rb', line 26 def camelize(string) string.to_s.gsub(/\/(.?)/) { "::#{$1.upcase}" }.gsub(/(?:^|_)(.)/) { $1.upcase } end |
#capture_stdout(&block) ⇒ Object
Captures STDOUT of anything run in its block and returns it as string.
69 70 71 72 73 74 75 76 77 78 |
# File 'lib/hirb/util.rb', line 69 def capture_stdout(&block) original_stdout = $stdout $stdout = fake = StringIO.new begin yield ensure $stdout = original_stdout end fake.string end |
#choose_from_array(array, input, options = {}) ⇒ Object
Used by Hirb::Menu to select items from an array. Array counting starts at 1. Ranges of numbers are specified with a ‘-’ or ‘..’. Multiple ranges can be comma delimited. Anything that isn’t a valid number is ignored. All elements can be returned with a ‘*’. Examples:
1-3,5-6 -> [1,2,3,5,6]
* -> all elements in array
'' -> []
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'lib/hirb/util.rb', line 36 def choose_from_array(array, input, ={}) = {:splitter=>","}.merge() return array if input.strip == '*' result = [] input.split([:splitter]).each do |e| if e =~ /-|\.\./ min,max = e.split(/-|\.\./) slice_min = min.to_i - 1 result.push(*array.slice(slice_min, max.to_i - min.to_i + 1)) elsif e =~ /\s*(\d+)\s*/ index = $1.to_i - 1 next if index < 0 result.push(array[index]) if array[index] end end return result end |
#command_exists?(command) ⇒ Boolean
Determines if a shell command exists by searching for it in ENV.
55 56 57 |
# File 'lib/hirb/util.rb', line 55 def command_exists?(command) ENV['PATH'].split(File::PATH_SEPARATOR).any? {|d| File.exists? File.join(d, command) } end |
#detect_terminal_size ⇒ Object
Returns [width, height] of terminal when detected, nil if not detected. Think of this as a simpler version of Highline’s Highline::SystemExtensions.terminal_size()
61 62 63 64 65 66 |
# File 'lib/hirb/util.rb', line 61 def detect_terminal_size (ENV['COLUMNS'] =~ /^\d+$/) && (ENV['LINES'] =~ /^\d+$/) ? [ENV['COLUMNS'].to_i, ENV['LINES'].to_i] : ( command_exists?('stty') ? `stty size`.scan(/\d+/).map { |s| s.to_i }.reverse : nil ) rescue nil end |
#recursive_hash_merge(hash1, hash2) ⇒ Object
Recursively merge hash1 with hash2.
21 22 23 |
# File 'lib/hirb/util.rb', line 21 def recursive_hash_merge(hash1, hash2) hash1.merge(hash2) {|k,o,n| (o.is_a?(Hash)) ? recursive_hash_merge(o,n) : n} end |