webdrivers 3.6.0 → 3.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +6 -6
- data/.travis.yml +11 -7
- data/CHANGELOG.md +100 -96
- data/Gemfile +4 -4
- data/LICENSE.txt +22 -22
- data/README.md +76 -76
- data/Rakefile +6 -6
- data/lib/webdrivers.rb +27 -27
- data/lib/webdrivers/chromedriver.rb +91 -48
- data/lib/webdrivers/common.rb +203 -203
- data/lib/webdrivers/geckodriver.rb +43 -43
- data/lib/webdrivers/iedriver.rb +43 -43
- data/lib/webdrivers/logger.rb +109 -109
- data/lib/webdrivers/mswebdriver.rb +57 -57
- data/lib/webdrivers/selenium.rb +29 -29
- data/spec/chromedriver_spec.rb +77 -75
- data/spec/geckodriver_spec.rb +62 -62
- data/spec/iedriver_spec.rb +38 -38
- data/spec/mswebdriver_spec.rb +26 -26
- data/spec/proxy_support_spec.rb +44 -44
- data/spec/spec_helper.rb +2 -2
- data/webdrivers.gemspec +27 -26
- metadata +12 -17
data/Rakefile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require "bundler/gem_tasks"
|
2
|
-
require 'rspec/core/rake_task'
|
3
|
-
|
4
|
-
RSpec::Core::RakeTask.new(:spec)
|
5
|
-
|
6
|
-
task :default => :spec
|
1
|
+
require "bundler/gem_tasks"
|
2
|
+
require 'rspec/core/rake_task'
|
3
|
+
|
4
|
+
RSpec::Core::RakeTask.new(:spec)
|
5
|
+
|
6
|
+
task :default => :spec
|
data/lib/webdrivers.rb
CHANGED
@@ -1,27 +1,27 @@
|
|
1
|
-
require "webdrivers/selenium"
|
2
|
-
require "webdrivers/logger"
|
3
|
-
require "webdrivers/common"
|
4
|
-
require "webdrivers/chromedriver"
|
5
|
-
require "webdrivers/geckodriver"
|
6
|
-
require "webdrivers/iedriver"
|
7
|
-
require "webdrivers/mswebdriver"
|
8
|
-
|
9
|
-
module Webdrivers
|
10
|
-
|
11
|
-
class << self
|
12
|
-
|
13
|
-
attr_accessor :proxy_addr, :proxy_port, :proxy_user, :proxy_pass, :install_dir
|
14
|
-
|
15
|
-
def logger
|
16
|
-
@logger ||= Webdrivers::Logger.new
|
17
|
-
end
|
18
|
-
|
19
|
-
def configure
|
20
|
-
yield self
|
21
|
-
end
|
22
|
-
|
23
|
-
def net_http_ssl_fix
|
24
|
-
require "net_http_ssl_fix"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
1
|
+
require "webdrivers/selenium"
|
2
|
+
require "webdrivers/logger"
|
3
|
+
require "webdrivers/common"
|
4
|
+
require "webdrivers/chromedriver"
|
5
|
+
require "webdrivers/geckodriver"
|
6
|
+
require "webdrivers/iedriver"
|
7
|
+
require "webdrivers/mswebdriver"
|
8
|
+
|
9
|
+
module Webdrivers
|
10
|
+
|
11
|
+
class << self
|
12
|
+
|
13
|
+
attr_accessor :proxy_addr, :proxy_port, :proxy_user, :proxy_pass, :install_dir
|
14
|
+
|
15
|
+
def logger
|
16
|
+
@logger ||= Webdrivers::Logger.new
|
17
|
+
end
|
18
|
+
|
19
|
+
def configure
|
20
|
+
yield self
|
21
|
+
end
|
22
|
+
|
23
|
+
def net_http_ssl_fix
|
24
|
+
require "net_http_ssl_fix"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -1,48 +1,91 @@
|
|
1
|
-
require 'nokogiri'
|
2
|
-
|
3
|
-
module Webdrivers
|
4
|
-
class Chromedriver < Common
|
5
|
-
class << self
|
6
|
-
|
7
|
-
def current_version
|
8
|
-
Webdrivers.logger.debug "Checking current version"
|
9
|
-
return nil unless downloaded?
|
10
|
-
string = %x(#{binary} --version)
|
11
|
-
Webdrivers.logger.debug "Current version of #{binary} is #{string}"
|
12
|
-
normalize string.match(/ChromeDriver (\d+\.\d+)/)[1]
|
13
|
-
end
|
14
|
-
|
15
|
-
def latest_version
|
16
|
-
raise StandardError, "Can not reach site" unless site_available?
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
def
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
def
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
end
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module Webdrivers
|
4
|
+
class Chromedriver < Common
|
5
|
+
class << self
|
6
|
+
|
7
|
+
def current_version
|
8
|
+
Webdrivers.logger.debug "Checking current version"
|
9
|
+
return nil unless downloaded?
|
10
|
+
string = %x(#{binary} --version)
|
11
|
+
Webdrivers.logger.debug "Current version of #{binary} is #{string}"
|
12
|
+
normalize string.match(/ChromeDriver (\d+\.\d+)/)[1]
|
13
|
+
end
|
14
|
+
|
15
|
+
def latest_version
|
16
|
+
raise StandardError, "Can not reach site" unless site_available?
|
17
|
+
|
18
|
+
# Latest webdriver release for installed Chrome version
|
19
|
+
release_file = "LATEST_RELEASE_#{release_version}"
|
20
|
+
latest_available = get(URI.join(base_url, release_file))
|
21
|
+
Gem::Version.new(latest_available)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def file_name
|
27
|
+
platform == "win" ? "chromedriver.exe" : "chromedriver"
|
28
|
+
end
|
29
|
+
|
30
|
+
def base_url
|
31
|
+
'https://chromedriver.storage.googleapis.com'
|
32
|
+
end
|
33
|
+
|
34
|
+
def downloads
|
35
|
+
Webdrivers.logger.debug "Versions previously located on downloads site: #{@downloads.keys}" if @downloads
|
36
|
+
|
37
|
+
@downloads ||= begin
|
38
|
+
doc = Nokogiri::XML.parse(get(base_url))
|
39
|
+
items = doc.css("Contents Key").collect(&:text)
|
40
|
+
items.select! { |item| item.include?(platform) }
|
41
|
+
ds = items.each_with_object({}) do |item, hash|
|
42
|
+
key = normalize item[/^[^\/]+/]
|
43
|
+
hash[key] = "#{base_url}/#{item}"
|
44
|
+
end
|
45
|
+
Webdrivers.logger.debug "Versions now located on downloads site: #{ds.keys}"
|
46
|
+
ds
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns release version from the currently installed Chrome version
|
51
|
+
#
|
52
|
+
# @example
|
53
|
+
# 73.0.3683.75 -> 73.0.3683
|
54
|
+
def release_version
|
55
|
+
chrome_version[/\d+\.\d+\.\d+/]
|
56
|
+
end
|
57
|
+
|
58
|
+
# Returns currently installed Chrome version
|
59
|
+
def chrome_version
|
60
|
+
ver = case platform
|
61
|
+
when 'win'
|
62
|
+
chrome_on_windows
|
63
|
+
when /linux/
|
64
|
+
chrome_on_linux
|
65
|
+
when 'mac'
|
66
|
+
chrome_on_mac
|
67
|
+
else
|
68
|
+
raise NotImplementedError, 'Your OS is not supported by webdrivers gem.'
|
69
|
+
end.chomp
|
70
|
+
|
71
|
+
# Google Chrome 73.0.3683.75 -> 73.0.3683.75
|
72
|
+
ver[/(\d|\.)+/]
|
73
|
+
end
|
74
|
+
|
75
|
+
def chrome_on_windows
|
76
|
+
reg = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\chrome.exe'
|
77
|
+
ps = "(Get-Item (Get-ItemProperty '#{reg}').'(Default)').VersionInfo.ProductVersion"
|
78
|
+
`powershell #{ps}`
|
79
|
+
end
|
80
|
+
|
81
|
+
def chrome_on_linux
|
82
|
+
`google-chrome --version`
|
83
|
+
end
|
84
|
+
|
85
|
+
def chrome_on_mac
|
86
|
+
loc = Shellwords.escape '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
|
87
|
+
`#{loc} --version`
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
data/lib/webdrivers/common.rb
CHANGED
@@ -1,204 +1,204 @@
|
|
1
|
-
require 'rubygems/package'
|
2
|
-
require 'zip'
|
3
|
-
|
4
|
-
module Webdrivers
|
5
|
-
class Common
|
6
|
-
class << self
|
7
|
-
|
8
|
-
attr_accessor :version
|
9
|
-
|
10
|
-
def update
|
11
|
-
unless site_available?
|
12
|
-
return current_version.nil? ? nil : binary
|
13
|
-
end
|
14
|
-
|
15
|
-
# Newer not specified or latest not found, so use existing
|
16
|
-
return binary if desired_version.nil? && File.exists?(binary)
|
17
|
-
|
18
|
-
# Can't find desired and no existing binary
|
19
|
-
if desired_version.nil?
|
20
|
-
msg = "Unable to find the latest version of #{file_name}; try downloading manually from #{base_url} and place in #{install_dir}"
|
21
|
-
raise StandardError, msg
|
22
|
-
end
|
23
|
-
|
24
|
-
if correct_binary?
|
25
|
-
Webdrivers.logger.debug "Expected webdriver version found"
|
26
|
-
return binary
|
27
|
-
end
|
28
|
-
|
29
|
-
remove # Remove outdated exe
|
30
|
-
download # Fetch latest
|
31
|
-
end
|
32
|
-
|
33
|
-
def desired_version
|
34
|
-
if self.version.is_a?(Gem::Version)
|
35
|
-
version
|
36
|
-
elsif self.version.nil?
|
37
|
-
latest_version
|
38
|
-
else
|
39
|
-
Gem::Version.new(self.version.to_s)
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def latest_version
|
44
|
-
raise StandardError, "Can not reach site" unless site_available?
|
45
|
-
|
46
|
-
downloads.keys.sort.last
|
47
|
-
end
|
48
|
-
|
49
|
-
def remove
|
50
|
-
Webdrivers.logger.debug "Deleting #{binary}"
|
51
|
-
FileUtils.rm_f binary
|
52
|
-
end
|
53
|
-
|
54
|
-
def download
|
55
|
-
raise StandardError, "Can not reach site" unless site_available?
|
56
|
-
|
57
|
-
url = downloads[desired_version]
|
58
|
-
filename = File.basename url
|
59
|
-
|
60
|
-
FileUtils.mkdir_p(install_dir) unless File.exists?(install_dir)
|
61
|
-
Dir.chdir install_dir do
|
62
|
-
FileUtils.rm_f filename
|
63
|
-
open(filename, "wb") do |file|
|
64
|
-
file.print get(url)
|
65
|
-
end
|
66
|
-
raise "Could not download #{url}" unless File.exists? filename
|
67
|
-
Webdrivers.logger.debug "Successfully downloaded #{filename}"
|
68
|
-
dcf = decompress_file(filename)
|
69
|
-
Webdrivers.logger.debug "Decompression Complete"
|
70
|
-
if dcf
|
71
|
-
Webdrivers.logger.debug "Deleting #{filename}"
|
72
|
-
FileUtils.rm_f filename
|
73
|
-
end
|
74
|
-
if respond_to? :extract_file
|
75
|
-
Webdrivers.logger.debug "Extracting #{dcf}"
|
76
|
-
extract_file(dcf)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
raise "Could not decompress #{filename} to get #{binary}" unless File.exists?(binary)
|
80
|
-
FileUtils.chmod "ugo+rx", binary
|
81
|
-
Webdrivers.logger.debug "Completed download and processing of #{binary}"
|
82
|
-
binary
|
83
|
-
end
|
84
|
-
|
85
|
-
def install_dir
|
86
|
-
Webdrivers.install_dir || File.expand_path(File.join(ENV['HOME'], ".webdrivers"))
|
87
|
-
end
|
88
|
-
|
89
|
-
def binary
|
90
|
-
File.join install_dir, file_name
|
91
|
-
end
|
92
|
-
|
93
|
-
protected
|
94
|
-
|
95
|
-
def get(url, limit = 10)
|
96
|
-
raise StandardError, 'Too many HTTP redirects' if limit == 0
|
97
|
-
|
98
|
-
response = http.get_response(URI(url))
|
99
|
-
Webdrivers.logger.debug "Get response: #{response.inspect}"
|
100
|
-
|
101
|
-
case response
|
102
|
-
when Net::HTTPSuccess
|
103
|
-
response.body
|
104
|
-
when Net::HTTPRedirection
|
105
|
-
location = response['location']
|
106
|
-
Webdrivers.logger.debug "Redirected to #{location}"
|
107
|
-
get(location, limit - 1)
|
108
|
-
else
|
109
|
-
response.value
|
110
|
-
end
|
111
|
-
end
|
112
|
-
|
113
|
-
def http
|
114
|
-
if using_proxy
|
115
|
-
Net::HTTP.Proxy(Webdrivers.proxy_addr, Webdrivers.proxy_port,
|
116
|
-
Webdrivers.proxy_user, Webdrivers.proxy_pass)
|
117
|
-
else
|
118
|
-
Net::HTTP
|
119
|
-
end
|
120
|
-
end
|
121
|
-
|
122
|
-
private
|
123
|
-
|
124
|
-
def using_proxy
|
125
|
-
Webdrivers.proxy_addr && Webdrivers.proxy_port
|
126
|
-
end
|
127
|
-
|
128
|
-
def downloaded?
|
129
|
-
result = File.exist? binary
|
130
|
-
Webdrivers.logger.debug "File is already downloaded: #{result}"
|
131
|
-
result
|
132
|
-
end
|
133
|
-
|
134
|
-
def site_available?
|
135
|
-
Webdrivers.logger.debug "Looking for Site: #{base_url}"
|
136
|
-
get(base_url)
|
137
|
-
Webdrivers.logger.debug "Found Site: #{base_url}"
|
138
|
-
true
|
139
|
-
rescue StandardError => ex
|
140
|
-
Webdrivers.logger.debug ex.inspect
|
141
|
-
false
|
142
|
-
end
|
143
|
-
|
144
|
-
def platform
|
145
|
-
if Selenium::WebDriver::Platform.linux?
|
146
|
-
"linux#{Selenium::WebDriver::Platform.bitsize}"
|
147
|
-
elsif Selenium::WebDriver::Platform.mac?
|
148
|
-
'mac'
|
149
|
-
else
|
150
|
-
'win'
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
def decompress_file(filename)
|
155
|
-
case filename
|
156
|
-
when /tar\.gz$/
|
157
|
-
Webdrivers.logger.debug "Decompressing tar"
|
158
|
-
untargz_file(filename)
|
159
|
-
when /tar\.bz2$/
|
160
|
-
Webdrivers.logger.debug "Decompressing bz2"
|
161
|
-
system "tar xjf #{filename}"
|
162
|
-
filename.gsub('.tar.bz2', '')
|
163
|
-
when /\.zip$/
|
164
|
-
Webdrivers.logger.debug "Decompressing zip"
|
165
|
-
unzip_file(filename)
|
166
|
-
else
|
167
|
-
Webdrivers.logger.debug "No Decompression needed"
|
168
|
-
nil
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
def untargz_file(filename)
|
173
|
-
tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename))
|
174
|
-
|
175
|
-
File.open(file_name, "w+b") do |ucf|
|
176
|
-
tar_extract.each { |entry| ucf << entry.read }
|
177
|
-
File.basename ucf
|
178
|
-
end
|
179
|
-
end
|
180
|
-
|
181
|
-
def unzip_file(filename)
|
182
|
-
Zip::File.open("#{Dir.pwd}/#{filename}") do |zip_file|
|
183
|
-
zip_file.each do |f|
|
184
|
-
@top_path ||= f.name
|
185
|
-
f_path = File.join(Dir.pwd, f.name)
|
186
|
-
FileUtils.rm_rf(f_path) if File.exist?(f_path)
|
187
|
-
FileUtils.mkdir_p(File.dirname(f_path)) unless File.exist?(File.dirname(f_path))
|
188
|
-
zip_file.extract(f, f_path)
|
189
|
-
end
|
190
|
-
end
|
191
|
-
@top_path
|
192
|
-
end
|
193
|
-
|
194
|
-
# Already have latest version downloaded?
|
195
|
-
def correct_binary?
|
196
|
-
desired_version == current_version && File.exists?(binary)
|
197
|
-
end
|
198
|
-
|
199
|
-
def normalize(string)
|
200
|
-
Gem::Version.new(string)
|
201
|
-
end
|
202
|
-
end
|
203
|
-
end
|
1
|
+
require 'rubygems/package'
|
2
|
+
require 'zip'
|
3
|
+
|
4
|
+
module Webdrivers
|
5
|
+
class Common
|
6
|
+
class << self
|
7
|
+
|
8
|
+
attr_accessor :version
|
9
|
+
|
10
|
+
def update
|
11
|
+
unless site_available?
|
12
|
+
return current_version.nil? ? nil : binary
|
13
|
+
end
|
14
|
+
|
15
|
+
# Newer not specified or latest not found, so use existing
|
16
|
+
return binary if desired_version.nil? && File.exists?(binary)
|
17
|
+
|
18
|
+
# Can't find desired and no existing binary
|
19
|
+
if desired_version.nil?
|
20
|
+
msg = "Unable to find the latest version of #{file_name}; try downloading manually from #{base_url} and place in #{install_dir}"
|
21
|
+
raise StandardError, msg
|
22
|
+
end
|
23
|
+
|
24
|
+
if correct_binary?
|
25
|
+
Webdrivers.logger.debug "Expected webdriver version found"
|
26
|
+
return binary
|
27
|
+
end
|
28
|
+
|
29
|
+
remove # Remove outdated exe
|
30
|
+
download # Fetch latest
|
31
|
+
end
|
32
|
+
|
33
|
+
def desired_version
|
34
|
+
if self.version.is_a?(Gem::Version)
|
35
|
+
version
|
36
|
+
elsif self.version.nil?
|
37
|
+
latest_version
|
38
|
+
else
|
39
|
+
Gem::Version.new(self.version.to_s)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def latest_version
|
44
|
+
raise StandardError, "Can not reach site" unless site_available?
|
45
|
+
|
46
|
+
downloads.keys.sort.last
|
47
|
+
end
|
48
|
+
|
49
|
+
def remove
|
50
|
+
Webdrivers.logger.debug "Deleting #{binary}"
|
51
|
+
FileUtils.rm_f binary
|
52
|
+
end
|
53
|
+
|
54
|
+
def download
|
55
|
+
raise StandardError, "Can not reach site" unless site_available?
|
56
|
+
|
57
|
+
url = downloads[desired_version]
|
58
|
+
filename = File.basename url
|
59
|
+
|
60
|
+
FileUtils.mkdir_p(install_dir) unless File.exists?(install_dir)
|
61
|
+
Dir.chdir install_dir do
|
62
|
+
FileUtils.rm_f filename
|
63
|
+
open(filename, "wb") do |file|
|
64
|
+
file.print get(url)
|
65
|
+
end
|
66
|
+
raise "Could not download #{url}" unless File.exists? filename
|
67
|
+
Webdrivers.logger.debug "Successfully downloaded #{filename}"
|
68
|
+
dcf = decompress_file(filename)
|
69
|
+
Webdrivers.logger.debug "Decompression Complete"
|
70
|
+
if dcf
|
71
|
+
Webdrivers.logger.debug "Deleting #{filename}"
|
72
|
+
FileUtils.rm_f filename
|
73
|
+
end
|
74
|
+
if respond_to? :extract_file
|
75
|
+
Webdrivers.logger.debug "Extracting #{dcf}"
|
76
|
+
extract_file(dcf)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
raise "Could not decompress #{filename} to get #{binary}" unless File.exists?(binary)
|
80
|
+
FileUtils.chmod "ugo+rx", binary
|
81
|
+
Webdrivers.logger.debug "Completed download and processing of #{binary}"
|
82
|
+
binary
|
83
|
+
end
|
84
|
+
|
85
|
+
def install_dir
|
86
|
+
Webdrivers.install_dir || File.expand_path(File.join(ENV['HOME'], ".webdrivers"))
|
87
|
+
end
|
88
|
+
|
89
|
+
def binary
|
90
|
+
File.join install_dir, file_name
|
91
|
+
end
|
92
|
+
|
93
|
+
protected
|
94
|
+
|
95
|
+
def get(url, limit = 10)
|
96
|
+
raise StandardError, 'Too many HTTP redirects' if limit == 0
|
97
|
+
|
98
|
+
response = http.get_response(URI(url))
|
99
|
+
Webdrivers.logger.debug "Get response: #{response.inspect}"
|
100
|
+
|
101
|
+
case response
|
102
|
+
when Net::HTTPSuccess
|
103
|
+
response.body
|
104
|
+
when Net::HTTPRedirection
|
105
|
+
location = response['location']
|
106
|
+
Webdrivers.logger.debug "Redirected to #{location}"
|
107
|
+
get(location, limit - 1)
|
108
|
+
else
|
109
|
+
response.value
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def http
|
114
|
+
if using_proxy
|
115
|
+
Net::HTTP.Proxy(Webdrivers.proxy_addr, Webdrivers.proxy_port,
|
116
|
+
Webdrivers.proxy_user, Webdrivers.proxy_pass)
|
117
|
+
else
|
118
|
+
Net::HTTP
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
private
|
123
|
+
|
124
|
+
def using_proxy
|
125
|
+
Webdrivers.proxy_addr && Webdrivers.proxy_port
|
126
|
+
end
|
127
|
+
|
128
|
+
def downloaded?
|
129
|
+
result = File.exist? binary
|
130
|
+
Webdrivers.logger.debug "File is already downloaded: #{result}"
|
131
|
+
result
|
132
|
+
end
|
133
|
+
|
134
|
+
def site_available?
|
135
|
+
Webdrivers.logger.debug "Looking for Site: #{base_url}"
|
136
|
+
get(base_url)
|
137
|
+
Webdrivers.logger.debug "Found Site: #{base_url}"
|
138
|
+
true
|
139
|
+
rescue StandardError => ex
|
140
|
+
Webdrivers.logger.debug ex.inspect
|
141
|
+
false
|
142
|
+
end
|
143
|
+
|
144
|
+
def platform
|
145
|
+
if Selenium::WebDriver::Platform.linux?
|
146
|
+
"linux#{Selenium::WebDriver::Platform.bitsize}"
|
147
|
+
elsif Selenium::WebDriver::Platform.mac?
|
148
|
+
'mac'
|
149
|
+
else
|
150
|
+
'win'
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
def decompress_file(filename)
|
155
|
+
case filename
|
156
|
+
when /tar\.gz$/
|
157
|
+
Webdrivers.logger.debug "Decompressing tar"
|
158
|
+
untargz_file(filename)
|
159
|
+
when /tar\.bz2$/
|
160
|
+
Webdrivers.logger.debug "Decompressing bz2"
|
161
|
+
system "tar xjf #{filename}"
|
162
|
+
filename.gsub('.tar.bz2', '')
|
163
|
+
when /\.zip$/
|
164
|
+
Webdrivers.logger.debug "Decompressing zip"
|
165
|
+
unzip_file(filename)
|
166
|
+
else
|
167
|
+
Webdrivers.logger.debug "No Decompression needed"
|
168
|
+
nil
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
def untargz_file(filename)
|
173
|
+
tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename))
|
174
|
+
|
175
|
+
File.open(file_name, "w+b") do |ucf|
|
176
|
+
tar_extract.each { |entry| ucf << entry.read }
|
177
|
+
File.basename ucf
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
def unzip_file(filename)
|
182
|
+
Zip::File.open("#{Dir.pwd}/#{filename}") do |zip_file|
|
183
|
+
zip_file.each do |f|
|
184
|
+
@top_path ||= f.name
|
185
|
+
f_path = File.join(Dir.pwd, f.name)
|
186
|
+
FileUtils.rm_rf(f_path) if File.exist?(f_path)
|
187
|
+
FileUtils.mkdir_p(File.dirname(f_path)) unless File.exist?(File.dirname(f_path))
|
188
|
+
zip_file.extract(f, f_path)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
@top_path
|
192
|
+
end
|
193
|
+
|
194
|
+
# Already have latest version downloaded?
|
195
|
+
def correct_binary?
|
196
|
+
desired_version == current_version && File.exists?(binary)
|
197
|
+
end
|
198
|
+
|
199
|
+
def normalize(string)
|
200
|
+
Gem::Version.new(string)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
204
|
end
|