webdrivers 3.6.0 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|