chromedriver-helper 1.0.0 → 1.1.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 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.