chromedriver-helper 1.0.0 → 1.1.0

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: df768e5ebc420cae5c5ba9d9a512e39f36030a1d
4
- data.tar.gz: e8f602c7919db642e7cd94d28370a3b6b45d9e0a
3
+ metadata.gz: 0cf62727ee028fa0e91b8867a7eae498cbc9577b
4
+ data.tar.gz: a3529789da5ffac99204f2db6dac4ea9cc893288
5
5
  SHA512:
6
- metadata.gz: 626d368e041ad821f3d503162f0edbd0f1f62a52f612e90f5f320e5854ffacd68cee55f9f354189eb0189a2df3960c8814539424c0c4977b510954c5fef9023b
7
- data.tar.gz: 37c6653d713d2f5e53837903cfe1882e467f6edb0f1c7d58eb7b7859c563f35d6705107d888894c391468cc2d84a110de828dbc415fa52d65af121a66ec9cee8
6
+ metadata.gz: 6e89499aca520cbcb21fa7acdd387929d983eb93d624713fc1bb2b4ae9f32c11e0d8e54edc1646e0be8f33fce31fe18509902e3ad7a82092140ba76cbe86aec6
7
+ data.tar.gz: 2ab325ecd08e895c93522be086367ab396b5ba06232e72178288ad22ef2703c518e44888766418ec6c636f78f00ff20da7482b1672b38b751f71ab3cde050c16
data/.gitignore CHANGED
@@ -3,3 +3,6 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  chromedriver.log
6
+ .tags
7
+ concourse/private.yml
8
+ concourse/chromedriver-helper.final.yml
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --color
2
+ --format=documentation
3
+ --order=random
@@ -1,6 +1,14 @@
1
- Changelog
1
+ chromedriver-helper changelog
2
2
  ==========
3
3
 
4
+ 1.1.0 - 2017-03-19
5
+ ----------
6
+
7
+ Features:
8
+
9
+ * Allow user to choose what version of chromedriver runs. [#34] (Thanks, @jonny5!)
10
+
11
+
4
12
  1.0.0 - 2015-06-06
5
13
  ----------
6
14
 
data/README.md CHANGED
@@ -35,11 +35,23 @@ then, in your specs:
35
35
  end
36
36
 
37
37
 
38
- # Updating Chromedriver
38
+ # Specifying a version
39
39
 
40
- If you'd like to force-upgrade to the latest version of chromedriver,
41
- run the script `chromedriver-update` that also comes packaged with
42
- this gem.
40
+ If you want to run a specific version of chromedriver, you can set the version like so:
41
+
42
+ Chromedriver.set_version "2.24"
43
+
44
+ Or, from the command line, you can run
45
+
46
+ chromedriver-update 2.24
47
+
48
+
49
+ # Updating to latest Chromedriver
50
+
51
+ If you'd like to force-upgrade to the latest version of chromedriver:
52
+
53
+ 1. delete the directory `$HOME/.chromedriver-helper`
54
+ 2. run `chromedriver-update`
43
55
 
44
56
  This might be necessary on platforms on which Chrome auto-updates,
45
57
  which has been known to introduce incompatibilities with older
@@ -55,6 +67,26 @@ The code lives at
55
67
  Open a Github Issue, or send a pull request! Thanks! You're the best.
56
68
 
57
69
 
70
+ ## CentOS 6 and 7
71
+
72
+ Apparently recent versions of `chromedriver` won't run on CentOS 6 and 7, due to the [problems explained here](https://chrome.richardlloyd.org.uk/). The error messages look something like:
73
+
74
+ ```
75
+ chromedriver: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /home/vagrant/.chromedriver-helper/linux64/chromedriver)
76
+ chromedriver: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /home/vagrant/.chromedriver-helper/linux64/chromedriver)
77
+ chromedriver: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /home/vagrant/.chromedriver-helper/linux64/chromedriver)
78
+
79
+ ```
80
+
81
+ You can get `chromedriver` to work on these systems by running the `install_chrome.sh` script on the page linked to above, and then making sure your `chromedriver` process has `LD_LIBRARY_PATH` set so that `/opt/google/chrome/lib` is present, e.g.
82
+
83
+ ```
84
+ $ LD_LIBRARY_PATH=/opt/google/chrome/lib chromedriver
85
+ Starting ChromeDriver 2.28.455506 (18f6627e265f442aeec9b6661a49fe819aeeea1f) on port 9515
86
+ Only local connections are allowed.
87
+
88
+ ```
89
+
58
90
  # License
59
91
 
60
92
  MIT licensed, see LICENSE.txt for full details.
data/Rakefile CHANGED
@@ -1,6 +1,9 @@
1
1
  require "bundler/gem_tasks"
2
2
  require 'rspec/core/rake_task'
3
+ require 'concourse'
3
4
 
4
5
  RSpec::Core::RakeTask.new(:spec)
5
6
 
6
7
  task :default => :spec
8
+
9
+ Concourse.new("chromedriver-helper").create_tasks!
@@ -2,4 +2,4 @@
2
2
 
3
3
  require "chromedriver/helper"
4
4
 
5
- Chromedriver::Helper.new.run *ARGV
5
+ Chromedriver::Helper.new.run(*ARGV)
@@ -2,4 +2,4 @@
2
2
 
3
3
  require "chromedriver/helper"
4
4
 
5
- Chromedriver::Helper.new.update
5
+ Chromedriver::Helper.new.update(ARGV[0])
@@ -2,24 +2,33 @@
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
3
  require "chromedriver/helper/version"
4
4
 
5
+ def windows?
6
+ RbConfig::CONFIG['target_os'] =~ /mingw32|mswin/
7
+ end
8
+
5
9
  Gem::Specification.new do |s|
6
10
  s.name = "chromedriver-helper"
7
11
  s.version = Chromedriver::Helper::VERSION
8
12
  s.authors = ["Mike Dalessio"]
9
13
  s.email = ["mike.dalessio@gmail.com"]
10
- s.homepage = "https://github.com/flavorjones/loofah"
14
+ s.homepage = "https://github.com/flavorjones/chromedriver-helper"
11
15
  s.summary = "Easy installation and use of chromedriver."
12
16
  s.description = "Easy installation and use of chromedriver, the Chromium project's selenium webdriver adapter."
13
17
  s.licenses = ["MIT"]
14
18
 
15
- s.files = `git ls-files`.split("\n")
16
- s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
17
- s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ begin
20
+ s.files = `git ls-files`.split("\n")
21
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
22
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
23
+ rescue Exception => e
24
+ warn "WARNING: could not set spec.files: #{e.class}: #{e}"
25
+ end
18
26
  s.require_paths = ["lib"]
19
27
 
20
- s.add_development_dependency "rspec", "~> 3.0"
21
- s.add_development_dependency "rake", "~> 10.0"
28
+ s.add_development_dependency "rspec", "~> 3.0"
29
+ s.add_development_dependency "rake", "~> 10.0"
30
+ s.add_development_dependency "concourse", "~> 0.12"
22
31
 
23
- s.add_runtime_dependency "nokogiri", "~> 1.6"
24
- s.add_runtime_dependency "archive-zip", "~> 0.7.0"
32
+ s.add_runtime_dependency "nokogiri", "~> 1.6"
33
+ s.add_runtime_dependency "archive-zip", "~> 0.7.0"
25
34
  end
@@ -0,0 +1,78 @@
1
+ resources:
2
+ - name: ci
3
+ type: git
4
+ source:
5
+ uri: https://github.com/flavorjones/chromedriver-helper/
6
+ branch: master
7
+ disable_ci_skip: true # always get the latest pipeline configuration
8
+
9
+ - name: nokogiri-ci
10
+ type: git
11
+ source:
12
+ uri: https://github.com/sparklemotion/nokogiri/
13
+ branch: master
14
+ disable_ci_skip: true # always get the latest pipeline configuration
15
+
16
+ - name: chromedriver-helper
17
+ type: git
18
+ source:
19
+ uri: https://github.com/flavorjones/chromedriver-helper/
20
+ branch: master
21
+ ignore_paths:
22
+ - concourse/**
23
+
24
+ jobs:
25
+ <% ruby_version = RUBIES[:mri].last %>
26
+ - name: ruby-<%= ruby_version %>
27
+ public: true
28
+ plan:
29
+ - get: ci
30
+ - get: chromedriver-helper
31
+ trigger: true
32
+ - task: rake-test
33
+ config:
34
+ platform: linux
35
+ image_resource:
36
+ type: docker-image
37
+ source: {repository: ruby, tag: "<%= ruby_version %>"}
38
+ inputs:
39
+ - name: ci
40
+ - name: chromedriver-helper
41
+ run:
42
+ path: ci/concourse/tasks/rake-test/run.sh
43
+
44
+ - name: windows-install-ruby-2.3
45
+ public: true
46
+ serial_groups: [windows-configuration]
47
+ plan:
48
+ - get: nokogiri-ci
49
+ - get: chromedriver-helper
50
+ trigger: true
51
+ - task: setup
52
+ config:
53
+ platform: windows
54
+ inputs:
55
+ - name: nokogiri-ci
56
+ path: ci
57
+ run:
58
+ path: powershell
59
+ args: ["-File", "ci/concourse/tasks/windows-config/install-ruby-and-devkit.ps1"]
60
+
61
+ - name: ruby-2.3-devkit
62
+ public: true
63
+ plan:
64
+ - get: ci
65
+ - get: nokogiri-ci
66
+ - get: chromedriver-helper
67
+ trigger: true
68
+ passed: ["windows-install-ruby-2.3"]
69
+ - task: rake-test
70
+ config:
71
+ platform: windows
72
+ inputs:
73
+ - name: ci
74
+ - name: nokogiri-ci
75
+ - name: chromedriver-helper
76
+ run:
77
+ path: powershell
78
+ args: ["-File", "ci/concourse/tasks/rake-test/run.ps1"]
@@ -0,0 +1,12 @@
1
+ . "nokogiri-ci\concourse\shared\common.ps1"
2
+
3
+ prepend-path $ruby23_bin_path
4
+ $env:RUBYOPT = "-rdevkit"
5
+
6
+ push-location chromedriver-helper
7
+
8
+ stream-cmd "gem" "install bundler"
9
+ stream-cmd "bundle" "install"
10
+ stream-cmd "bundle" "exec rake spec"
11
+
12
+ pop-location
@@ -0,0 +1,12 @@
1
+ #! /usr/bin/env bash
2
+
3
+ set -e -x -u
4
+
5
+ export NOKOGIRI_USE_SYSTEM_LIBRARIES=t
6
+
7
+ pushd chromedriver-helper
8
+
9
+ bundle install
10
+ bundle exec rake spec
11
+
12
+ popd
@@ -6,37 +6,67 @@ require 'open-uri'
6
6
  require 'archive/zip'
7
7
 
8
8
  module Chromedriver
9
- class Helper
9
+ def self.set_version(version)
10
+ Chromedriver::Helper.new.update(version)
11
+ end
10
12
 
11
- def run *args
13
+ class Helper
14
+ def run(*args)
12
15
  download
13
16
  exec binary_path, *args
14
17
  end
15
18
 
16
- def download hit_network=false
17
- return if File.exists?(binary_path) && ! hit_network
18
- url = download_url
19
- filename = File.basename url
19
+ def download(hit_network = false)
20
+ return if File.exist?(binary_path) && !hit_network
21
+
22
+ raise "Version not found for #{download_version}" unless download_url
23
+
24
+ filename = File.basename download_url
20
25
  Dir.chdir platform_install_dir do
21
26
  FileUtils.rm_f filename
22
27
  File.open(filename, "wb") do |saved_file|
23
- URI.parse(url).open("rb") do |read_file|
28
+ URI.parse(download_url).open("rb") do |read_file|
24
29
  saved_file.write(read_file.read)
25
30
  end
26
31
  end
27
- raise "Could not download #{url}" unless File.exists? filename
32
+
33
+ raise "Could not download #{download_url}" unless File.exists? filename
28
34
  Archive::Zip.extract(filename, '.', :overwrite => :all)
29
35
  end
30
36
  raise "Could not unzip #{filename} to get #{binary_path}" unless File.exists? binary_path
31
37
  FileUtils.chmod "ugo+rx", binary_path
38
+ File.open(version_path, 'w') { |file| file.write(download_version) }
39
+ end
40
+
41
+ def update(version = nil)
42
+ if version
43
+ @download_version = version
44
+ end
45
+
46
+ hit_network = (current_version != download_version) ? true : false
47
+ download(hit_network)
32
48
  end
33
49
 
34
- def update
35
- download true
50
+ def current_version
51
+ @current_version ||= if File.exist?(version_path)
52
+ File.read(version_path).strip
53
+ end
54
+ end
55
+
56
+ def download_version
57
+ @download_version ||= current_version || google_code_parser.newest_download_version.to_s
36
58
  end
37
59
 
38
60
  def download_url
39
- GoogleCodeParser.new(platform).newest_download
61
+ @download_url ||= google_code_parser.version_download_url(download_version)
62
+ end
63
+
64
+ def google_code_parser
65
+ @google_code_parser ||= GoogleCodeParser.new(platform)
66
+ end
67
+
68
+ def version_path
69
+ @version_path ||= File.join(base_install_dir, ".chromedriver-version")
40
70
  end
41
71
 
42
72
  def binary_path
@@ -48,17 +78,25 @@ module Chromedriver
48
78
  end
49
79
 
50
80
  def platform_install_dir
51
- dir = File.join install_dir, platform
81
+ dir = File.join version_install_dir, platform
52
82
  FileUtils.mkdir_p dir
53
83
  dir
54
84
  end
55
85
 
56
- def install_dir
57
- dir = File.expand_path File.join(ENV['HOME'], ".chromedriver-helper")
86
+ def version_install_dir
87
+ dir = File.expand_path File.join(base_install_dir, download_version)
58
88
  FileUtils.mkdir_p dir
59
89
  dir
60
90
  end
61
91
 
92
+ def base_install_dir
93
+ @base_install_dir ||= begin
94
+ dir = File.expand_path File.join(ENV['HOME'], ".chromedriver-helper")
95
+ FileUtils.mkdir_p dir
96
+ dir
97
+ end
98
+ end
99
+
62
100
  def platform
63
101
  cfg = RbConfig::CONFIG
64
102
  case cfg['host_os']
@@ -68,6 +106,5 @@ module Chromedriver
68
106
  else "win"
69
107
  end
70
108
  end
71
-
72
109
  end
73
110
  end
@@ -14,14 +14,21 @@ module Chromedriver
14
14
  end
15
15
 
16
16
  def downloads
17
- doc = Nokogiri::XML.parse(source)
18
- items = doc.css("Contents Key").collect {|k| k.text }
19
- items.reject! {|k| !(/chromedriver_#{platform}/===k) }
20
- items.map {|k| "#{BUCKET_URL}/#{k}"}
17
+ @downloads ||= begin
18
+ doc = Nokogiri::XML.parse(source)
19
+ items = doc.css("Contents Key").collect {|k| k.text }
20
+ items.reject! {|k| !(/chromedriver_#{platform}/===k) }
21
+ items.map {|k| "#{BUCKET_URL}/#{k}"}
22
+ end
21
23
  end
22
24
 
23
- def newest_download
24
- (downloads.sort { |a, b| version_of(a) <=> version_of(b)}).last
25
+ def newest_download_version
26
+ @newest_download_version ||= downloads.map { |download| version_of(download) }.max
27
+ end
28
+
29
+ def version_download_url(version)
30
+ gem_version = Gem::Version.new(version)
31
+ downloads.find { |download_url| version_of(download_url) == gem_version }
25
32
  end
26
33
 
27
34
  private
@@ -1,5 +1,5 @@
1
1
  module Chromedriver
2
2
  class Helper
3
- VERSION = "1.0.0"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -19,24 +19,30 @@ describe Chromedriver::Helper::GoogleCodeParser do
19
19
  end
20
20
  end
21
21
 
22
- describe "#newest_download" do
22
+ describe "#newest_download_version" do
23
23
  it "returns the last URL for the platform" do
24
- expect(parser.newest_download).to eq "http://chromedriver.storage.googleapis.com/2.4/chromedriver_mac32.zip"
24
+ expect(parser.newest_download_version).to eq Gem::Version.new("2.4")
25
25
  end
26
26
 
27
27
  context "out-of-order versions" do
28
28
  before do
29
29
  allow(parser).to receive(:downloads).and_return([
30
- "http://chromedriver.storage.googleapis.com/2.3/chromedriver_mac32.zip",
31
- "http://chromedriver.storage.googleapis.com/2.4/chromedriver_mac32.zip",
32
- "http://chromedriver.storage.googleapis.com/2.14/chromedriver_mac32.zip",
33
- "http://chromedriver.storage.googleapis.com/2.2/chromedriver_mac32.zip",
34
- ])
30
+ "http://chromedriver.storage.googleapis.com/2.3/chromedriver_mac32.zip",
31
+ "http://chromedriver.storage.googleapis.com/2.4/chromedriver_mac32.zip",
32
+ "http://chromedriver.storage.googleapis.com/2.14/chromedriver_mac32.zip",
33
+ "http://chromedriver.storage.googleapis.com/2.2/chromedriver_mac32.zip",
34
+ ])
35
35
  end
36
36
 
37
37
  it "returns the newest version" do
38
- expect(parser.newest_download).to eq("http://chromedriver.storage.googleapis.com/2.14/chromedriver_mac32.zip")
38
+ expect(parser.newest_download_version).to eq(Gem::Version.new("2.14"))
39
39
  end
40
40
  end
41
41
  end
42
+
43
+ describe '#version_download_url' do
44
+ it 'returns the version asked for' do
45
+ expect(parser.version_download_url(2.0)).to eq "http://chromedriver.storage.googleapis.com/2.0/chromedriver_mac32.zip"
46
+ end
47
+ end
42
48
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chromedriver-helper
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mike Dalessio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-06 00:00:00.000000000 Z
11
+ date: 2017-03-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: concourse
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '0.12'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '0.12'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: nokogiri
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -77,6 +91,7 @@ extensions: []
77
91
  extra_rdoc_files: []
78
92
  files:
79
93
  - ".gitignore"
94
+ - ".rspec"
80
95
  - ".travis.yml"
81
96
  - CHANGELOG.md
82
97
  - Gemfile
@@ -86,6 +101,9 @@ files:
86
101
  - bin/chromedriver
87
102
  - bin/chromedriver-update
88
103
  - chromedriver-helper.gemspec
104
+ - concourse/chromedriver-helper.yml
105
+ - concourse/tasks/rake-test/run.ps1
106
+ - concourse/tasks/rake-test/run.sh
89
107
  - lib/chromedriver/helper.rb
90
108
  - lib/chromedriver/helper/google_code_parser.rb
91
109
  - lib/chromedriver/helper/version.rb
@@ -94,7 +112,7 @@ files:
94
112
  - spec/google_code_parser_spec.rb
95
113
  - spec/helper_spec.rb
96
114
  - spec/spec_helper.rb
97
- homepage: https://github.com/flavorjones/loofah
115
+ homepage: https://github.com/flavorjones/chromedriver-helper
98
116
  licenses:
99
117
  - MIT
100
118
  metadata: {}
@@ -114,7 +132,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
132
  version: '0'
115
133
  requirements: []
116
134
  rubyforge_project:
117
- rubygems_version: 2.4.6
135
+ rubygems_version: 2.6.10
118
136
  signing_key:
119
137
  specification_version: 4
120
138
  summary: Easy installation and use of chromedriver.