class Lolcommits::Platform

Public Class Methods

can_animate?() click to toggle source

Is the platform capable of capturing animated GIFs from webcam? @return Boolean

# File lib/lolcommits/platform.rb, line 58
def self.can_animate?
  platform_linux? || platform_mac? || platform_windows?
end
capturer_class(animate: false) click to toggle source

The capturer class constant to use @return Class

# File lib/lolcommits/platform.rb, line 10
def self.capturer_class(animate: false)
  if ENV['LOLCOMMITS_CAPTURER']
    const_get(ENV['LOLCOMMITS_CAPTURER'])
  elsif platform_mac?
    animate ? CaptureMacVideo : CaptureMac
  elsif platform_linux?
    animate ? CaptureLinuxVideo : CaptureLinux
  elsif platform_windows?
    animate ? CaptureWindowsVideo : CaptureWindows
  elsif platform_cygwin?
    CaptureCygwin
  else
    raise 'Unknown / Unsupported Platform.'
  end
end
command_which(cmd, only_path: false) click to toggle source

Cross-platform way of finding an executable in the $PATH.

Idea taken from bit.ly/qDaTbY, if only_path is true, only the path is returned (not the path and command)

@example

command_which('ruby') #=> /usr/bin/ruby

@return Boolean

# File lib/lolcommits/platform.rb, line 93
def self.command_which(cmd, only_path: false)
  exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
  ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
    exts.each do |ext|
      exe = "#{path}/#{cmd}#{ext}"
      return only_path ? path : exe if File.executable? exe
    end
  end
  nil
end
device_list() click to toggle source

Returns a list of system camera devices in a format suitable to display to the user.

@note Currently only functions on Mac. @return String

# File lib/lolcommits/platform.rb, line 122
def self.device_list
  # TODO: handle other platforms here (linux/windows) e.g with ffmpeg -list_devices
  return unless Platform.platform_mac?

  videosnap = File.join(Configuration::LOLCOMMITS_ROOT, 'vendor', 'ext', 'videosnap', 'videosnap')
  `#{videosnap} -l`
end
git_config_color_always?() click to toggle source

Is `git config color.ui` set to 'always'?

Due to a bug in the ruby-git library, git config for color.ui cannot be set to 'always' or it won't read properly.

This helper method let's us check for that error condition so we can alert the user in the CLI tool.

@return Boolean

# File lib/lolcommits/platform.rb, line 113
def self.git_config_color_always?
  `git config color.ui`.chomp =~ /always/
end
host_os() click to toggle source

return host_os identifier from the RbConfig::CONFIG constant @return String

# File lib/lolcommits/platform.rb, line 52
def self.host_os
  ENV['LOLCOMMITS_FAKE_HOST_OS'] || RbConfig::CONFIG['host_os'].downcase
end
platform_cygwin?() click to toggle source

Are we on a Cygwin platform? @return Boolean

# File lib/lolcommits/platform.rb, line 46
def self.platform_cygwin?
  host_os.include?('cygwin')
end
platform_linux?() click to toggle source

Are we on a Linux platform? @return Boolean

# File lib/lolcommits/platform.rb, line 34
def self.platform_linux?
  host_os.include?('linux')
end
platform_mac?() click to toggle source

Are we on a Mac platform? @return Boolean

# File lib/lolcommits/platform.rb, line 28
def self.platform_mac?
  host_os.include?('darwin')
end
platform_windows?() click to toggle source

Are we on a Windows platform? @return Boolean

# File lib/lolcommits/platform.rb, line 40
def self.platform_windows?
  !host_os.match(/(win|w)32/).nil?
end
valid_ffmpeg_installed?() click to toggle source

Is a valid install of ffmpeg present on the system?

@note For now, this just checks for presence, any version should work. @return Boolean

# File lib/lolcommits/platform.rb, line 80
def self.valid_ffmpeg_installed?
  command_which('ffmpeg')
end
valid_imagemagick_installed?() click to toggle source

Is a valid install of imagemagick present on the system? @return Boolean

# File lib/lolcommits/platform.rb, line 64
def self.valid_imagemagick_installed?
  return false unless command_which('identify')

  return false unless command_which('mogrify')

  # cli_version check will throw a MiniMagick::Error exception if IM is not
  # installed in PATH, since it attempts to parse output from `identify`
  !MiniMagick.cli_version.nil?
rescue MiniMagick::Error
  false
end