Skip to content

Commit

Permalink
Add rake tasks for update, remove, and version.
Browse files Browse the repository at this point in the history
  • Loading branch information
kapoorlakshya committed May 19, 2019
1 parent bd6f025 commit 17e02d1
Show file tree
Hide file tree
Showing 10 changed files with 207 additions and 6 deletions.
1 change: 1 addition & 0 deletions .rubocop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ Metrics/MethodLength:
Metrics/BlockLength:
Exclude:
- 'spec/**/*'
- 'lib/webdrivers/tasks/*.rake'

Metrics/ClassLength:
Max: 116
Expand Down
1 change: 1 addition & 0 deletions lib/webdrivers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,3 +4,4 @@
require 'webdrivers/geckodriver'
require 'webdrivers/iedriver'
require 'webdrivers/mswebdriver'
require 'webdrivers/railtie' if defined?(Rails)
6 changes: 6 additions & 0 deletions lib/webdrivers/Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# frozen_string_literal: true

require 'webdrivers'

path = File.expand_path(__dir__)
Dir.glob("#{path}/tasks/*.rake").each { |f| import f }
12 changes: 10 additions & 2 deletions lib/webdrivers/common.rb
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,14 @@ class NetworkError < StandardError
end

class << self
attr_accessor :proxy_addr, :proxy_port, :proxy_user, :proxy_pass, :install_dir
attr_accessor :proxy_addr, :proxy_port, :proxy_user, :proxy_pass
attr_writer :install_dir

#
# Returns the amount of time (Seconds) the gem waits between two update checks.
#
def cache_time
@cache_time || 0
@cache_time || ENV['WD_CACHE_TIME'].to_i || 0
end

#
Expand All @@ -36,6 +37,13 @@ def cache_time=(value)
@cache_time = value
end

#
# Returns the install (download) directory path for the drivers.
#
def install_dir
@install_dir || ENV['WD_INSTALL_DIR'] || File.expand_path(File.join(ENV['HOME'], '.webdrivers'))
end

def logger
@logger ||= Webdrivers::Logger.new
end
Expand Down
15 changes: 15 additions & 0 deletions lib/webdrivers/railtie.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# frozen_string_literal: true

require 'webdrivers'
require 'rails'

module Webdrivers
class Railtie < Rails::Railtie
railtie_name :webdrivers

rake_tasks do
path = File.expand_path(__dir__)
Dir.glob("#{path}/tasks/*.rake").each { |f| load f }
end
end
end
2 changes: 1 addition & 1 deletion lib/webdrivers/system.rb
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def delete(file)
end

def install_dir
Webdrivers.install_dir || File.expand_path(File.join(ENV['HOME'], '.webdrivers'))
Webdrivers.install_dir
end

def cache_version(file_name, version)
Expand Down
46 changes: 46 additions & 0 deletions lib/webdrivers/tasks/chromedriver.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# frozen_string_literal: true

namespace :webdrivers do
require 'webdrivers/chromedriver'

namespace :chromedriver do
Webdrivers.logger.level = :info

desc 'Print current chromedriver version'
task :version do
gem_ver = Webdrivers::Chromedriver.current_version
if gem_ver
Webdrivers.logger.info 'chromedriver ' + gem_ver.version
else
Webdrivers.logger.warn 'No existing chromedriver found.'
end
end

desc 'Remove and download updated chromedriver if necessary'
task :update, [:version] do |_, args|
args.with_defaults(version: 0)
Webdrivers.cache_time = ENV.fetch('WD_CACHE_TIME', 86_400)
Webdrivers.install_dir = ENV.fetch('WD_INSTALL_DIR', nil)
Webdrivers::Chromedriver.required_version = args.version
Webdrivers::Chromedriver.update
Webdrivers.logger.info "Updated to chromedriver #{Webdrivers::Chromedriver.current_version}"
end

desc 'Force remove chromedriver'
task :remove do
unless File.exist? Webdrivers::Chromedriver.driver_path
Webdrivers.logger.info 'No existing chromedriver to remove.'
next # Return early
end

cur_version = Webdrivers::Chromedriver.current_version
Webdrivers::Chromedriver.remove

if File.exist? Webdrivers::Chromedriver.driver_path # Failed for some reason
Webdrivers.logger.error 'Failed to remove chromedriver. Please try removing manually.'
else
Webdrivers.logger.info "Removed chromedriver #{cur_version}."
end
end
end
end
46 changes: 46 additions & 0 deletions lib/webdrivers/tasks/geckodriver.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# frozen_string_literal: true

namespace :webdrivers do
require 'webdrivers/geckodriver'

namespace :geckodriver do
Webdrivers.logger.level = :info

desc 'Print current geckodriver version'
task :version do
gem_ver = Webdrivers::Geckodriver.current_version
if gem_ver
Webdrivers.logger.info 'geckodriver ' + gem_ver.version
else
Webdrivers.logger.warn 'No existing geckodriver found.'
end
end

desc 'Remove and download updated geckodriver if necessary'
task :update, [:version] do |_, args|
args.with_defaults(version: 0)
Webdrivers.cache_time = ENV.fetch('WD_CACHE_TIME', 86_400)
Webdrivers.install_dir = ENV.fetch('WD_INSTALL_DIR', nil)
Webdrivers::Geckodriver.required_version = args.version
Webdrivers::Geckodriver.update
Webdrivers.logger.info "Updated to geckodriver #{Webdrivers::Geckodriver.current_version}"
end

desc 'Force remove geckodriver'
task :remove do
unless File.exist? Webdrivers::Geckodriver.driver_path
Webdrivers.logger.info 'No existing geckodriver to remove.'
next # Return early
end

cur_version = Webdrivers::Geckodriver.current_version
Webdrivers::Geckodriver.remove

if File.exist? Webdrivers::Geckodriver.driver_path # Failed for some reason
Webdrivers.logger.error 'Failed to remove geckodriver. Please try removing manually.'
else
Webdrivers.logger.info "Removed geckodriver #{cur_version}."
end
end
end
end
46 changes: 46 additions & 0 deletions lib/webdrivers/tasks/iedriver.rake
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# frozen_string_literal: true

namespace :webdrivers do
require 'webdrivers/iedriver'

namespace :iedriver do
Webdrivers.logger.level = :info

desc 'Print current IEDriverServer version'
task :version do
gem_ver = Webdrivers::IEdriver.current_version
if gem_ver
Webdrivers.logger.info 'IEDriverServer ' + gem_ver.version
else
Webdrivers.logger.warn 'No existing IEDriverServer found.'
end
end

desc 'Remove and download updated IEDriverServer if necessary'
task :update, [:version] do |_, args|
args.with_defaults(version: 0)
Webdrivers.cache_time = ENV.fetch('WD_CACHE_TIME', 86_400)
Webdrivers.install_dir = ENV.fetch('WD_INSTALL_DIR', nil)
Webdrivers::IEdriver.required_version = args.version
Webdrivers::IEdriver.update
Webdrivers.logger.info "Updated to IEDriverServer #{Webdrivers::IEdriver.current_version}"
end

desc 'Force remove IEDriverServer'
task :remove do
unless File.exist? Webdrivers::IEdriver.driver_path
Webdrivers.logger.info 'No existing IEDriverServer to remove.'
next # Return early
end

cur_version = Webdrivers::IEdriver.current_version
Webdrivers::IEdriver.remove

if File.exist? Webdrivers::IEdriver.driver_path # Failed for some reason
Webdrivers.logger.error 'Failed to remove IEDriverServer. Please try removing manually.'
else
Webdrivers.logger.info "Removed IEDriverServer #{cur_version}."
end
end
end
end
38 changes: 35 additions & 3 deletions spec/webdrivers/chromedriver_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,31 @@

expect(Webdrivers::Network).to have_received(:get).twice
end

context 'when required version is 0' do
it 'downloads the latest version' do
allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('72.0.3626.7'))
chromedriver.required_version = 0
chromedriver.update
expect(chromedriver.current_version.version).to eq('72.0.3626.7')
end
end

context 'when required version is nil' do
it 'downloads the latest version' do
allow(chromedriver).to receive(:latest_version).and_return(Gem::Version.new('72.0.3626.7'))
chromedriver.required_version = nil
chromedriver.update
expect(chromedriver.current_version.version).to eq('72.0.3626.7')
end
end

context 'when ENV variable WD_CACHE_TIME is set' do
it 'uses cache time value from ENV variable' do
allow(ENV).to receive(:[]).with('WD_CACHE_TIME').and_return('999')
expect(Webdrivers.cache_time).to be(999)
end
end
end

describe '#current_version' do
Expand Down Expand Up @@ -234,19 +259,26 @@

describe '#install_dir' do
it 'uses ~/.webdrivers as default value' do
expect(Webdrivers::System.install_dir).to include('.webdriver')
expect(Webdrivers.install_dir).to include('.webdriver')
end

it 'uses provided value' do
begin
install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
install_dir = File.expand_path(File.join(ENV['HOME'], '.webdrivers2'))
Webdrivers.install_dir = install_dir

expect(Webdrivers::System.install_dir).to eq install_dir
expect(Webdrivers.install_dir).to eq install_dir
ensure
Webdrivers.install_dir = nil
end
end

context 'when ENV variable WD_INSTALL_DIR is set' do
it 'uses path from the ENV variable' do
allow(ENV).to receive(:[]).with('WD_INSTALL_DIR').and_return('custom_dir')
expect(Webdrivers.install_dir).to be('custom_dir')
end
end
end

describe '#driver_path' do
Expand Down

0 comments on commit 17e02d1

Please sign in to comment.