BigW Consortium Gitlab

utils.rb 1.95 KB
Newer Older
1 2 3 4 5 6 7
module Gitlab
  module Utils
    extend self

    # Run system command without outputting to stdout.
    #
    # @param  cmd [Array<String>]
Valery Sizov committed
8
    # @return [Boolean]
9
    def system_silent(cmd)
10
      Popen.popen(cmd).last.zero?
11
    end
12 13 14 15

    def force_utf8(str)
      str.force_encoding(Encoding::UTF_8)
    end
16

17 18 19 20 21 22 23 24 25 26 27 28 29
    # A slugified version of the string, suitable for inclusion in URLs and
    # domain names. Rules:
    #
    #   * Lowercased
    #   * Anything not matching [a-z0-9-] is replaced with a -
    #   * Maximum length is 63 bytes
    #   * First/Last Character is not a hyphen
    def slugify(str)
      return str.downcase
        .gsub(/[^a-z0-9]/, '-')[0..62]
        .gsub(/(\A-+|-+\z)/, '')
    end

Robert Speicher committed
30 31 32 33
    def remove_line_breaks(str)
      str.gsub(/\r?\n/, '')
    end

34 35 36 37 38 39 40
    def to_boolean(value)
      return value if [true, false].include?(value)
      return true if value =~ /^(true|t|yes|y|1|on)$/i
      return false if value =~ /^(false|f|no|n|0|off)$/i

      nil
    end
41 42 43 44 45 46 47 48

    def boolean_to_yes_no(bool)
      if bool
        'Yes'
      else
        'No'
      end
    end
49 50 51 52

    def random_string
      Random.rand(Float::MAX.to_i).to_s(36)
    end
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69

    # See: http://stackoverflow.com/questions/2108727/which-in-ruby-checking-if-program-exists-in-path-from-ruby
    # Cross-platform way of finding an executable in the $PATH.
    #
    #   which('ruby') #=> /usr/bin/ruby
    def which(cmd, env = ENV)
      exts = env['PATHEXT'] ? env['PATHEXT'].split(';') : ['']

      env['PATH'].split(File::PATH_SEPARATOR).each do |path|
        exts.each do |ext|
          exe = File.join(path, "#{cmd}#{ext}")
          return exe if File.executable?(exe) && !File.directory?(exe)
        end
      end

      nil
    end
70 71 72 73 74 75 76 77

    # Used in EE
    # Accepts either an Array or a String and returns an array
    def ensure_array_from_string(string_or_array)
      return string_or_array if string_or_array.is_a?(Array)

      string_or_array.split(',').map(&:strip)
    end
78 79
  end
end