class Webdrivers::System
@api private
Public Class Methods
apple_m1_architecture?()
click to toggle source
# File lib/webdrivers/system.rb, line 151 def apple_m1_architecture? if platform == 'mac' && RUBY_PLATFORM.include?('arm64-darwin') Webdrivers.logger.debug 'Apple architecture: M1 (arm64-darwin)' return true end Webdrivers.logger.debug 'Apple architecture: Intel (mac64)' false end
bitsize()
click to toggle source
# File lib/webdrivers/system.rb, line 180 def bitsize Selenium::WebDriver::Platform.bitsize end
cache_version(file_name, version)
click to toggle source
# File lib/webdrivers/system.rb, line 41 def cache_version(file_name, version) FileUtils.mkdir_p(install_dir) unless File.exist?(install_dir) File.open("#{install_dir}/#{file_name.gsub('.exe', '')}.version", 'w+') do |file| file.print(version) end end
cached_version(file_name)
click to toggle source
# File lib/webdrivers/system.rb, line 49 def cached_version(file_name) File.open("#{install_dir}/#{file_name.gsub('.exe', '')}.version", 'r', &:read) end
call(process, arg = nil)
click to toggle source
# File lib/webdrivers/system.rb, line 184 def call(process, arg = nil) cmd = arg ? [process, arg] : process # Windows provides powershell command (process) only, no args. Webdrivers.logger.debug "making System call: #{cmd}" p = IO.popen(cmd) out = p.read p.close raise "Failed to make system call: #{cmd}" unless $CHILD_STATUS.success? Webdrivers.logger.debug "System call returned: #{out}" out end
decompress_file(tempfile, file_name, target)
click to toggle source
# File lib/webdrivers/system.rb, line 93 def decompress_file(tempfile, file_name, target) tempfile = tempfile.to_path case tempfile when /tar\.gz$/ untargz_file(tempfile, File.basename(target)) when /tar\.bz2$/ untarbz2_file(tempfile) when /\.zip$/ unzip_file(tempfile, File.basename(target)) else Webdrivers.logger.debug 'No Decompression needed' FileUtils.cp(tempfile, File.join(Dir.pwd, file_name)) end raise "Could not decompress #{file_name} to get #{target}" unless File.exist?(File.basename(target)) end
delete(file)
click to toggle source
# File lib/webdrivers/system.rb, line 19 def delete(file) max_attempts = 3 attempts_made = 0 delay = 0.5 begin attempts_made += 1 if File.exist? file Webdrivers.logger.debug "Deleting #{file}" File.delete file end rescue Errno::EACCES # Solves an intermittent file locking issue on Windows sleep(delay) retry if File.exist?(file) && attempts_made <= max_attempts raise end end
download(url, target)
click to toggle source
# File lib/webdrivers/system.rb, line 60 def download(url, target) FileUtils.mkdir_p(install_dir) unless File.exist?(install_dir) download_file(url, target) FileUtils.chmod 'ugo+rx', target Webdrivers.logger.debug "Completed download and processing of #{target}" target end
download_file(url, target)
click to toggle source
# File lib/webdrivers/system.rb, line 70 def download_file(url, target) file_name = File.basename(url) Dir.chdir(install_dir) do tempfile = Tempfile.open(['', file_name], binmode: true) do |file| file.print Network.get(url) file end raise "Could not download #{url}" unless File.exist?(tempfile.to_path) Webdrivers.logger.debug "Successfully downloaded #{tempfile.to_path}" decompress_file(tempfile, file_name, target) tempfile.close! end end
exists?(file)
click to toggle source
# File lib/webdrivers/system.rb, line 87 def exists?(file) result = File.exist? file Webdrivers.logger.debug "#{file} is#{' not' unless result} already downloaded" result end
install_dir()
click to toggle source
# File lib/webdrivers/system.rb, line 37 def install_dir Webdrivers.install_dir end
platform()
click to toggle source
# File lib/webdrivers/system.rb, line 139 def platform if Selenium::WebDriver::Platform.linux? 'linux' elsif Selenium::WebDriver::Platform.mac? 'mac' elsif Selenium::WebDriver::Platform.windows? 'win' else raise NotImplementedError, 'Your OS is not supported by webdrivers gem.' end end
to_win32_path(path)
click to toggle source
@param [String] path @return [String]
# File lib/webdrivers/system.rb, line 168 def to_win32_path(path) return path if /[a-z]:\\/iu.match?(path) call("wslpath -w '#{path}'").chomp end
to_wsl_path(path)
click to toggle source
@param [String] path @return [String]
# File lib/webdrivers/system.rb, line 176 def to_wsl_path(path) call("wslpath -u '#{path}'").chomp end
untarbz2_file(filename)
click to toggle source
# File lib/webdrivers/system.rb, line 109 def untarbz2_file(filename) Webdrivers.logger.debug "Decompressing #{filename}" call("tar xjf #{filename}").gsub('.tar.bz2', '') end
untargz_file(source, target)
click to toggle source
# File lib/webdrivers/system.rb, line 115 def untargz_file(source, target) Webdrivers.logger.debug "Decompressing #{source}" tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(source)) File.open(target, 'w+b') do |ucf| tar_extract.each { |entry| ucf << entry.read } File.basename ucf end end
unzip_file(filename, driver_name)
click to toggle source
# File lib/webdrivers/system.rb, line 126 def unzip_file(filename, driver_name) Webdrivers.logger.debug "Decompressing #{filename}" Zip::File.open(filename) do |zip_file| driver = zip_file.get_entry(driver_name) f_path = File.join(Dir.pwd, driver.name) delete(f_path) FileUtils.mkdir_p(File.dirname(f_path)) unless File.exist?(File.dirname(f_path)) zip_file.extract(driver, f_path) end driver_name end
valid_cache?(file_name)
click to toggle source
# File lib/webdrivers/system.rb, line 53 def valid_cache?(file_name) file = "#{install_dir}/#{file_name.gsub('.exe', '')}.version" return false unless File.exist?(file) Time.now - File.mtime(file) < Webdrivers.cache_time end
wsl_v1?()
click to toggle source
@return [TrueClass, FalseClass]
# File lib/webdrivers/system.rb, line 162 def wsl_v1? platform == 'linux' && File.open('/proc/version').read.include?('Microsoft') end