webdrivers 3.0.0.beta1 → 3.0.0.beta2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 28974e49008ce2ee61b8456679884651537c5527
4
- data.tar.gz: 2c4a8ce5c5ec17a568a4dd966de0594a2490d15f
3
+ metadata.gz: 617d5fa4e06abcdbf66ad776593c1e409303f4a7
4
+ data.tar.gz: f92d3f5b6e78c7f4de29b3cee38e17dfb1e7bb5c
5
5
  SHA512:
6
- metadata.gz: 24676074712c8cc796347070ea7aef26388ca1c10a834a456cb10a9d1c661d21bddb4cf67e776aff37b29f092dca9fe1c1441163d245f6db3ffe1f6b83fbffdb
7
- data.tar.gz: f0e5923038eb6f006f283c876d6d317e1b8b1cfe40d3d715982a0d224bc5f4aaef1c8beda52a0ad43327ecdf751932b66aefb3695998efd3b37b1727a5670f56
6
+ metadata.gz: 219decd97dc9bf88005d95605133a77b325841e0eb933fd6c47527d4de5ac0be2ed47bb2be57e8c8b15fe6a52ab145eeffaedd8ad656e2ab77f2011e833f817f
7
+ data.tar.gz: 892b73d4f0d90c26f5b39bbb4afe58901282817ac6a4c49a1397ac30e7d0084c48626c3f7bc99d9e233a0df1a766cef267e8bc88684255785d65833de0388fbb
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
+ ### 3.0.0.beta2 (2017-08-16)
2
+
3
+ * Supports geckodriver on Mac and Linux
4
+
1
5
  ### 3.0.0.beta1 (2017-08-15)
2
6
 
3
7
  * Complete Rewrite of 2.x
4
8
  * Implemented with Monkey Patch not Shims
5
- * Supports chromedriver on
9
+ * Supports chromedriver on Mac and Linux
@@ -2,19 +2,10 @@ require 'nokogiri'
2
2
  require 'open-uri'
3
3
  require 'zip'
4
4
 
5
-
6
5
  module Webdrivers
7
- class Chromedriver
6
+ class Chromedriver < Common
8
7
  class << self
9
8
 
10
- def update
11
- unless site_available?
12
- return current.nil? ? nil : binary
13
- end
14
- return binary if current == latest
15
- remove && download
16
- end
17
-
18
9
  def current
19
10
  return nil unless downloaded?
20
11
  puts binary
@@ -23,34 +14,6 @@ module Webdrivers
23
14
  normalize string.match(/ChromeDriver (\d\.\d+)/)[1]
24
15
  end
25
16
 
26
- def latest
27
- downloads.keys.sort.last
28
- end
29
-
30
- def remove
31
- FileUtils.rm_f binary
32
- end
33
-
34
- def download(version = nil)
35
- url = downloads[version || latest]
36
- filename = File.basename url
37
-
38
- Dir.chdir install_dir do
39
- FileUtils.rm_f filename
40
- File.open(filename, "wb") do |saved_file|
41
- URI.parse(url).open("rb") do |read_file|
42
- saved_file.write(read_file.read)
43
- end
44
- end
45
- raise "Could not download #{url}" unless File.exists? filename
46
- dcf = decompress_file(filename)
47
- extract_file(dcf) if respond_to? :extract_file
48
- end
49
- raise "Could not unzip #{filename} to get #{binary}" unless File.exists?(binary)
50
- FileUtils.chmod "ugo+rx", binary
51
- binary
52
- end
53
-
54
17
  private
55
18
 
56
19
  def normalize(string)
@@ -61,82 +24,17 @@ module Webdrivers
61
24
  'chromedriver'
62
25
  end
63
26
 
64
- def downloaded?
65
- File.exist? binary
66
- end
67
-
68
- def binary
69
- File.join install_dir, file_name
70
- end
71
-
72
27
  def base_url
73
28
  'http://chromedriver.storage.googleapis.com'
74
29
  end
75
30
 
76
- def site_available?
77
- true if open(base_url)
78
- rescue
79
- false
80
- end
81
-
82
- def platform
83
- cfg = RbConfig::CONFIG
84
- case cfg['host_os']
85
- when /linux/
86
- cfg['host_cpu'] =~ /x86_64|amd64/ ? "linux64" : "linux32"
87
- when /darwin/
88
- "mac"
89
- else
90
- "win"
91
- end
92
- end
93
-
94
- def decompress_file(filename)
95
- case filename
96
- when /tar\.gz$/
97
- untargz_file(filename)
98
- when /tar\.bz2$/
99
- system "tar xjf #{filename}"
100
- filename.gsub('.tar.bz2', '')
101
- when /\.zip$/
102
- unzip_file(filename)
103
- end
104
- end
105
-
106
- def untargz_file(filename)
107
- tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename))
108
- tar_extract.rewind
109
-
110
- ucf = File.open(file_name, "w+")
111
- tar_extract.each {|entry| ucf << entry.read}
112
- ucf.close
113
- File.basename ucf
114
- end
115
-
116
- def unzip_file(filename)
117
- Zip::File.open("#{Dir.pwd}/#{filename}") do |zip_file|
118
- zip_file.each do |f|
119
- @top_path ||= f.name
120
- f_path = File.join(Dir.pwd, f.name)
121
- FileUtils.rm_rf(f_path) if File.exist?(f_path)
122
- FileUtils.mkdir_p(File.dirname(f_path)) unless File.exist?(File.dirname(f_path))
123
- zip_file.extract(f, f_path)
124
- end
125
- end
126
- @top_path
127
- end
128
-
129
- def install_dir
130
- File.expand_path(File.join(ENV['HOME'], ".webdrivers")).tap {|dir| FileUtils.mkdir_p dir}
131
- end
132
-
133
31
  def downloads
134
32
  raise StandardError, "Can not reach site" unless site_available?
135
33
 
136
34
  @downloads ||= begin
137
35
  doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
138
36
  items = doc.css("Contents Key").collect(&:text)
139
- items.select! {|item| item.include?('linux64')}
37
+ items.select! {|item| item.include?(platform)}
140
38
  items.each_with_object({}) do |item, hash|
141
39
  key = normalize item[/^[^\/]+/]
142
40
  hash[key] = "#{base_url}/#{item}"
@@ -0,0 +1,114 @@
1
+ require 'rubygems/package'
2
+ require 'nokogiri'
3
+ require 'open-uri'
4
+ require 'zip'
5
+
6
+ module Webdrivers
7
+ class Common
8
+ class << self
9
+
10
+ def update
11
+ unless site_available?
12
+ return current.nil? ? nil : binary
13
+ end
14
+ return binary if current == latest
15
+ remove && download
16
+ end
17
+
18
+ def latest
19
+ downloads.keys.sort.last
20
+ end
21
+
22
+ def remove
23
+ FileUtils.rm_f binary
24
+ end
25
+
26
+ def download(version = nil)
27
+ url = downloads[version || latest]
28
+ filename = File.basename url
29
+
30
+ Dir.chdir install_dir do
31
+ FileUtils.rm_f filename
32
+ File.open(filename, "wb") do |saved_file|
33
+ URI.parse(url).open("rb") do |read_file|
34
+ saved_file.write(read_file.read)
35
+ end
36
+ end
37
+ raise "Could not download #{url}" unless File.exists? filename
38
+ dcf = decompress_file(filename)
39
+ extract_file(dcf) if respond_to? :extract_file
40
+ end
41
+ raise "Could not unzip #{filename} to get #{binary}" unless File.exists?(binary)
42
+ FileUtils.chmod "ugo+rx", binary
43
+ binary
44
+ end
45
+
46
+ private
47
+
48
+ def downloaded?
49
+ File.exist? binary
50
+ end
51
+
52
+ def binary
53
+ File.join install_dir, file_name
54
+ end
55
+
56
+ def site_available?
57
+ true if open(base_url)
58
+ rescue
59
+ false
60
+ end
61
+
62
+ def platform
63
+ cfg = RbConfig::CONFIG
64
+ case cfg['host_os']
65
+ when /linux/
66
+ cfg['host_cpu'] =~ /x86_64|amd64/ ? "linux64" : "linux32"
67
+ when /darwin/
68
+ "mac"
69
+ else
70
+ "win"
71
+ end
72
+ end
73
+
74
+ def decompress_file(filename)
75
+ case filename
76
+ when /tar\.gz$/
77
+ untargz_file(filename)
78
+ when /tar\.bz2$/
79
+ system "tar xjf #{filename}"
80
+ filename.gsub('.tar.bz2', '')
81
+ when /\.zip$/
82
+ unzip_file(filename)
83
+ end
84
+ end
85
+
86
+ def untargz_file(filename)
87
+ tar_extract = Gem::Package::TarReader.new(Zlib::GzipReader.open(filename))
88
+ tar_extract.rewind
89
+
90
+ ucf = File.open(file_name, "w+")
91
+ tar_extract.each {|entry| ucf << entry.read}
92
+ ucf.close
93
+ File.basename ucf
94
+ end
95
+
96
+ def unzip_file(filename)
97
+ Zip::File.open("#{Dir.pwd}/#{filename}") do |zip_file|
98
+ zip_file.each do |f|
99
+ @top_path ||= f.name
100
+ f_path = File.join(Dir.pwd, f.name)
101
+ FileUtils.rm_rf(f_path) if File.exist?(f_path)
102
+ FileUtils.mkdir_p(File.dirname(f_path)) unless File.exist?(File.dirname(f_path))
103
+ zip_file.extract(f, f_path)
104
+ end
105
+ end
106
+ @top_path
107
+ end
108
+
109
+ def install_dir
110
+ File.expand_path(File.join(ENV['HOME'], ".webdrivers")).tap {|dir| FileUtils.mkdir_p dir}
111
+ end
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,46 @@
1
+ require 'nokogiri'
2
+ require 'open-uri'
3
+ require 'zip'
4
+
5
+ module Webdrivers
6
+ class Geckodriver < Common
7
+ class << self
8
+
9
+ def current
10
+ return nil unless downloaded?
11
+ puts binary
12
+ string = %x(#{binary} --version)
13
+ puts string
14
+ normalize string.match(/geckodriver (\d+\.\d+\.\d+)/)[1]
15
+ end
16
+
17
+ private
18
+
19
+ def normalize(string)
20
+ string.match(/(\d+)\.(\d+\.\d+)/).to_a.map {|v| v.tr('.', '') }[1..-1].join('.').to_f
21
+ end
22
+
23
+ def downloads
24
+ raise StandardError, "Can not reach site" unless site_available?
25
+
26
+ doc = Nokogiri::XML.parse(OpenURI.open_uri(base_url))
27
+ items = doc.css(".release-downloads a").collect {|item| item["href"]}
28
+ items.reject! {|item| item.include?('archive')}
29
+ items.select! {|item| item.include?(platform)}
30
+ items.each_with_object({}) do |item, hash|
31
+ key = normalize item[/v(\d+\.\d+\.\d+)/, 1]
32
+ hash[key] = "https://github.com#{item}"
33
+ end
34
+ end
35
+
36
+ def file_name
37
+ 'geckodriver'
38
+ end
39
+
40
+ def base_url
41
+ 'https://github.com/mozilla/geckodriver/releases'
42
+ end
43
+
44
+ end
45
+ end
46
+ end
@@ -7,5 +7,11 @@ module Selenium
7
7
  @driver_path ||= Webdrivers::Chromedriver.update
8
8
  end
9
9
  end
10
+
11
+ module Firefox
12
+ def self.driver_path
13
+ @driver_path ||= Webdrivers::Geckodriver.update
14
+ end
15
+ end
10
16
  end
11
17
  end
data/lib/webdrivers.rb CHANGED
@@ -1,2 +1,4 @@
1
1
  require "webdrivers/selenium"
2
+ require "webdrivers/common"
2
3
  require "webdrivers/chromedriver"
4
+ require "webdrivers/geckodriver"
@@ -14,6 +14,7 @@ describe Webdrivers::Chromedriver do
14
14
  end
15
15
 
16
16
  it 'downloads latest version by default' do
17
+ chromedriver.remove
17
18
  chromedriver.download
18
19
  expect(chromedriver.current).to eq chromedriver.latest
19
20
  end
@@ -0,0 +1,40 @@
1
+ require "spec_helper"
2
+
3
+ describe Webdrivers::Geckodriver do
4
+
5
+ let(:geckodriver) { Webdrivers::Geckodriver }
6
+
7
+ it 'finds latest version' do
8
+ expect(geckodriver.latest).to be > 0.17
9
+ expect(geckodriver.latest).to be < 0.2
10
+ end
11
+
12
+ it 'downloads latest version by default' do
13
+ geckodriver.download
14
+ expect(geckodriver.current).to eq geckodriver.latest
15
+ end
16
+
17
+ it 'downloads specified version' do
18
+ geckodriver.remove
19
+ geckodriver.download(0.17)
20
+ expect(geckodriver.current).to eq 0.17
21
+ end
22
+
23
+ it 'removes geckodriver' do
24
+ geckodriver.remove
25
+ expect(geckodriver.current).to be_nil
26
+ end
27
+
28
+ context 'when offline' do
29
+ before { allow(geckodriver).to receive(:site_available?).and_return(false) }
30
+
31
+ it 'raises exception finding latest version' do
32
+ expect {geckodriver.latest}.to raise_error(StandardError, "Can not reach site")
33
+ end
34
+
35
+ it 'raises exception downloading' do
36
+ expect {geckodriver.download}.to raise_error(StandardError, "Can not reach site")
37
+ end
38
+ end
39
+
40
+ end
data/webdrivers.gemspec CHANGED
@@ -3,7 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = "webdrivers"
6
- s.version = "3.0.0.beta1"
6
+ s.version = "3.0.0.beta2"
7
7
  s.authors = ["Titus Fortner"]
8
8
  s.email = ["titusfortner@gmail.com"]
9
9
  s.homepage = "https://github.com/titusfortner/webdrivers"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webdrivers
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0.beta1
4
+ version: 3.0.0.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Titus Fortner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-08-15 00:00:00.000000000 Z
11
+ date: 2017-08-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -97,8 +97,11 @@ files:
97
97
  - Rakefile
98
98
  - lib/webdrivers.rb
99
99
  - lib/webdrivers/chromedriver.rb
100
+ - lib/webdrivers/common.rb
101
+ - lib/webdrivers/geckodriver.rb
100
102
  - lib/webdrivers/selenium.rb
101
103
  - spec/chromedriver_spec.rb
104
+ - spec/geckodriver_spec.rb
102
105
  - spec/spec_helper.rb
103
106
  - webdrivers.gemspec
104
107
  homepage: https://github.com/titusfortner/webdrivers
@@ -127,4 +130,5 @@ specification_version: 4
127
130
  summary: Easy download and use of browser drivers.
128
131
  test_files:
129
132
  - spec/chromedriver_spec.rb
133
+ - spec/geckodriver_spec.rb
130
134
  - spec/spec_helper.rb