puppeteer-ruby 0.29.0 → 0.31.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -52,24 +52,24 @@ class Puppeteer::Page
52
52
  end
53
53
 
54
54
  PAPER_FORMATS = {
55
- letter: PaperSize.new(width: 8.5, height: 11),
56
- legal: PaperSize.new(width: 8.5, height: 14),
57
- tabloid: PaperSize.new(width: 11, height: 17),
58
- ledger: PaperSize.new(width: 17, height: 11),
59
- a0: PaperSize.new(width: 33.1, height: 46.8),
60
- a1: PaperSize.new(width: 23.4, height: 33.1),
61
- a2: PaperSize.new(width: 16.54, height: 23.4),
62
- a3: PaperSize.new(width: 11.7, height: 16.54),
63
- a4: PaperSize.new(width: 8.27, height: 11.7),
64
- a5: PaperSize.new(width: 5.83, height: 8.27),
65
- a6: PaperSize.new(width: 4.13, height: 5.83),
55
+ 'letter' => PaperSize.new(width: 8.5, height: 11),
56
+ 'legal' => PaperSize.new(width: 8.5, height: 14),
57
+ 'tabloid' => PaperSize.new(width: 11, height: 17),
58
+ 'ledger' => PaperSize.new(width: 17, height: 11),
59
+ 'a0' => PaperSize.new(width: 33.1, height: 46.8),
60
+ 'a1' => PaperSize.new(width: 23.4, height: 33.1),
61
+ 'a2' => PaperSize.new(width: 16.54, height: 23.4),
62
+ 'a3' => PaperSize.new(width: 11.7, height: 16.54),
63
+ 'a4' => PaperSize.new(width: 8.27, height: 11.7),
64
+ 'a5' => PaperSize.new(width: 5.83, height: 8.27),
65
+ 'a6' => PaperSize.new(width: 4.13, height: 5.83),
66
66
  }
67
67
 
68
68
  UNIT_TO_PIXELS = {
69
- px: 1,
70
- in: 96,
71
- cm: 37.8,
72
- mm: 3.78,
69
+ 'px' => 1,
70
+ 'in' => 96,
71
+ 'cm' => 37.8,
72
+ 'mm' => 3.78,
73
73
  }
74
74
 
75
75
  # @param parameter [String|Integer|nil]
@@ -0,0 +1,164 @@
1
+ class Puppeteer::Puppeteer
2
+ # @param project_root [String]
3
+ # @param prefereed_revision [String]
4
+ # @param is_puppeteer_core [String]
5
+ def initialize(project_root:, preferred_revision:, is_puppeteer_core:)
6
+ @project_root = project_root
7
+ @preferred_revision = preferred_revision
8
+ @is_puppeteer_core = is_puppeteer_core
9
+ end
10
+
11
+ # @param product [String]
12
+ # @param executable_path [String]
13
+ # @param ignore_default_args [Array<String>|nil]
14
+ # @param handle_SIGINT [Boolean]
15
+ # @param handle_SIGTERM [Boolean]
16
+ # @param handle_SIGHUP [Boolean]
17
+ # @param timeout [Integer]
18
+ # @param dumpio [Boolean]
19
+ # @param env [Hash]
20
+ # @param pipe [Boolean]
21
+ # @param args [Array<String>]
22
+ # @param user_data_dir [String]
23
+ # @param devtools [Boolean]
24
+ # @param headless [Boolean]
25
+ # @param ignore_https_errors [Boolean]
26
+ # @param default_viewport [Puppeteer::Viewport|nil]
27
+ # @param slow_mo [Integer]
28
+ # @return [Puppeteer::Browser]
29
+ def launch(
30
+ product: nil,
31
+ executable_path: nil,
32
+ ignore_default_args: nil,
33
+ handle_SIGINT: nil,
34
+ handle_SIGTERM: nil,
35
+ handle_SIGHUP: nil,
36
+ timeout: nil,
37
+ dumpio: nil,
38
+ env: nil,
39
+ pipe: nil,
40
+ args: nil,
41
+ user_data_dir: nil,
42
+ devtools: nil,
43
+ headless: nil,
44
+ ignore_https_errors: nil,
45
+ default_viewport: nil,
46
+ slow_mo: nil
47
+ )
48
+ options = {
49
+ executable_path: executable_path,
50
+ ignore_default_args: ignore_default_args,
51
+ handle_SIGINT: handle_SIGINT,
52
+ handle_SIGTERM: handle_SIGTERM,
53
+ handle_SIGHUP: handle_SIGHUP,
54
+ timeout: timeout,
55
+ dumpio: dumpio,
56
+ env: env,
57
+ pipe: pipe,
58
+ args: args,
59
+ user_data_dir: user_data_dir,
60
+ devtools: devtools,
61
+ headless: headless,
62
+ ignore_https_errors: ignore_https_errors,
63
+ default_viewport: default_viewport,
64
+ slow_mo: slow_mo,
65
+ }
66
+
67
+ @product_name ||= product
68
+ browser = launcher.launch(options)
69
+ if block_given?
70
+ begin
71
+ yield(browser)
72
+ ensure
73
+ browser.close
74
+ end
75
+ else
76
+ browser
77
+ end
78
+ end
79
+
80
+ # @param browser_ws_endpoint [String]
81
+ # @param browser_url [String]
82
+ # @param transport [Puppeteer::WebSocketTransport]
83
+ # @param ignore_https_errors [Boolean]
84
+ # @param default_viewport [Puppeteer::Viewport|nil]
85
+ # @param slow_mo [Integer]
86
+ # @return [Puppeteer::Browser]
87
+ def connect(
88
+ browser_ws_endpoint: nil,
89
+ browser_url: nil,
90
+ transport: nil,
91
+ ignore_https_errors: nil,
92
+ default_viewport: nil,
93
+ slow_mo: nil
94
+ )
95
+ options = {
96
+ browser_ws_endpoint: browser_ws_endpoint,
97
+ browser_url: browser_url,
98
+ transport: transport,
99
+ ignore_https_errors: ignore_https_errors,
100
+ default_viewport: default_viewport,
101
+ slow_mo: slow_mo,
102
+ }.compact
103
+ browser = launcher.connect(options)
104
+ if block_given?
105
+ begin
106
+ yield(browser)
107
+ ensure
108
+ browser.disconnect
109
+ end
110
+ else
111
+ browser
112
+ end
113
+ end
114
+
115
+ # @return [String]
116
+ def executable_path
117
+ launcher.executable_path
118
+ end
119
+
120
+ private def launcher
121
+ @launcher ||= Puppeteer::Launcher.new(
122
+ project_root: @project_root,
123
+ preferred_revision: @preferred_revision,
124
+ is_puppeteer_core: @is_puppeteer_core,
125
+ product: @product_name,
126
+ )
127
+ end
128
+
129
+ # @return [String]
130
+ def product
131
+ launcher.product
132
+ end
133
+
134
+ # @return [Puppeteer::Devices]
135
+ def devices
136
+ Puppeteer::Devices
137
+ end
138
+
139
+ # # @return {Object}
140
+ # def errors
141
+ # # ???
142
+ # end
143
+
144
+ # @param args [Array<String>]
145
+ # @param user_data_dir [String]
146
+ # @param devtools [Boolean]
147
+ # @param headless [Boolean]
148
+ # @return [Array<String>]
149
+ def default_args(args: nil, user_data_dir: nil, devtools: nil, headless: nil)
150
+ options = {
151
+ args: args,
152
+ user_data_dir: user_data_dir,
153
+ devtools: devtools,
154
+ headless: headless,
155
+ }.compact
156
+ launcher.default_args(options)
157
+ end
158
+
159
+ # @param {!BrowserFetcher.Options=} options
160
+ # @return {!BrowserFetcher}
161
+ def createBrowserFetcher(options = {})
162
+ BrowserFetcher.new(@project_root, options)
163
+ end
164
+ end
@@ -1,3 +1,3 @@
1
- class Puppeteer
2
- VERSION = '0.29.0'
1
+ module Puppeteer
2
+ VERSION = '0.31.4'
3
3
  end
@@ -135,18 +135,17 @@ class Puppeteer::WaitTask
135
135
  /**
136
136
  * @return {!Promise<*>}
137
137
  */
138
- function pollMutation() {
139
- const success = predicate(...args);
140
- if (success)
141
- return Promise.resolve(success);
138
+ async function pollMutation() {
139
+ const success = await predicate(...args);
140
+ if (success) return Promise.resolve(success);
142
141
  let fulfill;
143
142
  const result = new Promise((x) => (fulfill = x));
144
- const observer = new MutationObserver(() => {
143
+ const observer = new MutationObserver(async () => {
145
144
  if (timedOut) {
146
145
  observer.disconnect();
147
146
  fulfill();
148
147
  }
149
- const success = predicate(...args);
148
+ const success = await predicate(...args);
150
149
  if (success) {
151
150
  observer.disconnect();
152
151
  fulfill(success);
@@ -159,38 +158,34 @@ class Puppeteer::WaitTask
159
158
  });
160
159
  return result;
161
160
  }
162
- function pollRaf() {
161
+ async function pollRaf() {
163
162
  let fulfill;
164
163
  const result = new Promise((x) => (fulfill = x));
165
- onRaf();
164
+ await onRaf();
166
165
  return result;
167
- function onRaf() {
166
+ async function onRaf() {
168
167
  if (timedOut) {
169
168
  fulfill();
170
169
  return;
171
170
  }
172
- const success = predicate(...args);
173
- if (success)
174
- fulfill(success);
175
- else
176
- requestAnimationFrame(onRaf);
171
+ const success = await predicate(...args);
172
+ if (success) fulfill(success);
173
+ else requestAnimationFrame(onRaf);
177
174
  }
178
175
  }
179
- function pollInterval(pollInterval) {
176
+ async function pollInterval(pollInterval) {
180
177
  let fulfill;
181
178
  const result = new Promise((x) => (fulfill = x));
182
- onTimeout();
179
+ await onTimeout();
183
180
  return result;
184
- function onTimeout() {
181
+ async function onTimeout() {
185
182
  if (timedOut) {
186
183
  fulfill();
187
184
  return;
188
185
  }
189
- const success = predicate(...args);
190
- if (success)
191
- fulfill(success);
192
- else
193
- setTimeout(onTimeout, pollInterval);
186
+ const success = await predicate(...args);
187
+ if (success) fulfill(success);
188
+ else setTimeout(onTimeout, pollInterval);
194
189
  }
195
190
  }
196
191
  }
@@ -18,6 +18,8 @@ class Puppeteer::WebSocket
18
18
  @socket.write(data)
19
19
  rescue Errno::EPIPE
20
20
  raise EOFError.new('already closed')
21
+ rescue Errno::ECONNRESET
22
+ raise EOFError.new('closed by remote')
21
23
  end
22
24
 
23
25
  def readpartial(maxlen = 1024)
@@ -37,6 +37,8 @@ class Puppeteer::WebSocketTransport
37
37
 
38
38
  def close
39
39
  @ws.close
40
+ rescue EOFError
41
+ # ignore EOLError. The connection is already closed.
40
42
  end
41
43
 
42
44
  def on_close(&block)
@@ -12,7 +12,9 @@ Gem::Specification.new do |spec|
12
12
  spec.homepage = 'https://github.com/YusukeIwaki/puppeteer-ruby'
13
13
 
14
14
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
15
- `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
15
+ `git ls-files -z`.split("\x0").reject do |f|
16
+ f.match(%r{^(test|spec|features)/}) || f.include?(".git") || f.include?(".circleci") || f.start_with?("development/")
17
+ end
16
18
  end
17
19
  spec.bindir = 'exe'
18
20
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -23,11 +25,12 @@ Gem::Specification.new do |spec|
23
25
  spec.add_dependency 'mime-types', '>= 3.0'
24
26
  spec.add_development_dependency 'bundler', '~> 2.2.3'
25
27
  spec.add_development_dependency 'chunky_png'
28
+ spec.add_development_dependency 'dry-inflector'
26
29
  spec.add_development_dependency 'pry-byebug'
27
30
  spec.add_development_dependency 'rake', '~> 13.0.3'
28
31
  spec.add_development_dependency 'rspec', '~> 3.10.0 '
29
32
  spec.add_development_dependency 'rspec_junit_formatter' # for CircleCI.
30
- spec.add_development_dependency 'rubocop', '~> 1.10.0'
33
+ spec.add_development_dependency 'rubocop', '~> 1.12.0'
31
34
  spec.add_development_dependency 'rubocop-rspec'
32
35
  spec.add_development_dependency 'sinatra'
33
36
  spec.add_development_dependency 'webrick'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppeteer-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.29.0
4
+ version: 0.31.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-23 00:00:00.000000000 Z
11
+ date: 2021-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: dry-inflector
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: pry-byebug
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +156,14 @@ dependencies:
142
156
  requirements:
143
157
  - - "~>"
144
158
  - !ruby/object:Gem::Version
145
- version: 1.10.0
159
+ version: 1.12.0
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
- version: 1.10.0
166
+ version: 1.12.0
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: rubocop-rspec
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -213,16 +227,8 @@ executables: []
213
227
  extensions: []
214
228
  extra_rdoc_files: []
215
229
  files:
216
- - ".circleci/config.yml"
217
- - ".github/ISSUE_TEMPLATE/bug_report.md"
218
- - ".github/ISSUE_TEMPLATE/feature_request.md"
219
- - ".github/stale.yml"
220
- - ".github/workflows/docs.yml"
221
- - ".github/workflows/reviewdog.yml"
222
- - ".gitignore"
223
230
  - ".rspec"
224
231
  - ".rubocop.yml"
225
- - ".travis.yml"
226
232
  - CHANGELOG.md
227
233
  - Dockerfile
228
234
  - Gemfile
@@ -231,6 +237,7 @@ files:
231
237
  - bin/console
232
238
  - bin/setup
233
239
  - docker-compose.yml
240
+ - docs/api_coverage.md
234
241
  - lib/puppeteer.rb
235
242
  - lib/puppeteer/aria_query_handler.rb
236
243
  - lib/puppeteer/browser.rb
@@ -282,6 +289,7 @@ files:
282
289
  - lib/puppeteer/page/pdf_options.rb
283
290
  - lib/puppeteer/page/screenshot_options.rb
284
291
  - lib/puppeteer/page/screenshot_task_queue.rb
292
+ - lib/puppeteer/puppeteer.rb
285
293
  - lib/puppeteer/query_handler_manager.rb
286
294
  - lib/puppeteer/remote_object.rb
287
295
  - lib/puppeteer/request.rb
data/.circleci/config.yml DELETED
@@ -1,92 +0,0 @@
1
- version: 2.1
2
-
3
- rspec_chrome_job: &rspec_chrome_job
4
- steps:
5
- - checkout
6
- - run:
7
- command: gem install bundler:2.2.3 && bundle install
8
- - run:
9
- name: rspec
10
- command: |
11
- DEBUG=1 bundle exec rspec --profile 10 \
12
- --format RspecJunitFormatter \
13
- --out test_results/rspec.xml \
14
- --format documentation
15
-
16
- jobs:
17
- rspec_chrome_ruby2_6:
18
- docker:
19
- - image: circleci/ruby:2.6.6-buster-node-browsers
20
- <<: *rspec_chrome_job
21
-
22
- rspec_chrome_ruby2_7:
23
- docker:
24
- - image: circleci/ruby:2.7.2-buster-node-browsers
25
- <<: *rspec_chrome_job
26
-
27
- rspec_chrome_ruby3_0:
28
- docker:
29
- - image: circleci/ruby:3.0.0-buster-node-browsers
30
- <<: *rspec_chrome_job
31
-
32
- rspec_firefox:
33
- docker:
34
- - image: circleci/ruby:2.7.2-buster-node-browsers
35
- steps:
36
- - checkout
37
- - run:
38
- command: gem install bundler:2.2.3 && bundle install
39
- - run:
40
- name: install firefox-nightly
41
- command: |
42
- wget -O nightly.tar.bz2 "https://download.mozilla.org/?product=firefox-nightly-latest-ssl&os=linux64&lang=en-US"
43
- tar xf nightly.tar.bz2
44
- - run:
45
- name: rspec
46
- command: |
47
- DEBUG=1 PUPPETEER_PRODUCT_RSPEC=firefox \
48
- PUPPETEER_EXECUTABLE_PATH_RSPEC=${CIRCLE_WORKING_DIRECTORY/#\~/$HOME}/firefox/firefox \
49
- bundle exec rspec --profile 10 \
50
- --format RspecJunitFormatter \
51
- --out test_results/rspec.xml \
52
- --format documentation spec/integration/
53
-
54
- deploy:
55
- docker:
56
- - image: circleci/ruby:2.6.3-stretch-node
57
- steps:
58
- - checkout
59
- - run:
60
- command: gem install bundler:2.2.3 && bundle install
61
- - run:
62
- name: rake build
63
- command: rake build
64
- - run:
65
- name: setup API key
66
- command: |
67
- mkdir -p ~/.gem/
68
- echo "---" > ~/.gem/credentials
69
- echo ":rubygems_api_key: $RUBYGEMS_API_KEY" >> ~/.gem/credentials
70
- chmod 600 ~/.gem/credentials
71
- - run:
72
- name: Check Puppeteer::version
73
- command: bundle exec ruby -e 'raise "invalid Puppeteer::VERSION" unless Puppeteer::VERSION == ENV["CIRCLE_TAG"]'
74
- - run:
75
- name: gem push
76
- command: gem push pkg/puppeteer-ruby-$CIRCLE_TAG.gem
77
-
78
- workflows:
79
- ci:
80
- jobs:
81
- - rspec_chrome_ruby2_6
82
- - rspec_chrome_ruby2_7
83
- - rspec_chrome_ruby3_0
84
- - rspec_firefox
85
- rubygems-deploy:
86
- jobs:
87
- - deploy:
88
- filters:
89
- tags:
90
- only: /^[0-9]\.[0-9]+\.[0-9].*/
91
- branches:
92
- ignore: /.*/