puppeteer-ruby 0.29.0 → 0.31.4

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.
@@ -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: /.*/