puppeteer-ruby 0.0.14 → 0.0.19

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.
@@ -0,0 +1,113 @@
1
+ require 'json'
2
+
3
+ class Puppeteer::Response
4
+ include Puppeteer::IfPresent
5
+
6
+ class Redirected < StandardError
7
+ def initialize
8
+ super('Response body is unavailable for redirect responses')
9
+ end
10
+ end
11
+
12
+ # defines methods used only in NetworkManager
13
+ class InternalAccessor
14
+ def initialize(response)
15
+ @response = response
16
+ end
17
+
18
+ def body_loaded_promise
19
+ @response.instance_variable_get(:@body_loaded_promise)
20
+ end
21
+ end
22
+
23
+ class RemoteAddress
24
+ def initialize(ip:, port:)
25
+ @ip = ip
26
+ @port = port
27
+ end
28
+ attr_reader :ip, :port
29
+ end
30
+
31
+ # @param client [Puppeteer::CDPSession]
32
+ # @param request [Puppeteer::Request]
33
+ # @param response_payload [Hash]
34
+ def initialize(client, request, response_payload)
35
+ @client = client
36
+ @request = request
37
+
38
+ @body_loaded_promise = resolvable_future
39
+ @remote_address = RemoteAddress.new(
40
+ ip: response_payload['remoteIPAddress'],
41
+ port: response_payload['remotePort'],
42
+ )
43
+
44
+ @status = response_payload['status']
45
+ @status_text = response_payload['statusText']
46
+ @url = request.url
47
+ @from_disk_cache = !!response_payload['fromDiskCache']
48
+ @from_service_worker = !!response_payload['fromServiceWorker']
49
+
50
+ @headers = {}
51
+ response_payload['headers'].each do |key, value|
52
+ @headers[key.downcase] = value
53
+ end
54
+ @security_details = if_present(response_payload['securityDetails']) do |security_payload|
55
+ SecurityDetails.new(security_payload)
56
+ end
57
+
58
+ @internal = InternalAccessor.new(self)
59
+ end
60
+
61
+ attr_reader :internal
62
+
63
+ attr_reader :remote_address, :url, :status, :status_text, :headers, :security_details, :request
64
+
65
+ # @return [Boolean]
66
+ def ok?
67
+ @status == 0 || (@status >= 200 && @status <= 299)
68
+ end
69
+
70
+ def buffer
71
+ await @body_loaded_promise
72
+ response = @client.send_message('Network.getResponseBody', requestId: @request.internal.request_id)
73
+ if response['base64Encoded']
74
+ Base64.decode64(response['body'])
75
+ else
76
+ response['body']
77
+ end
78
+ end
79
+
80
+ # @param text [String]
81
+ def text
82
+ buffer
83
+ end
84
+
85
+ # @param json [Hash]
86
+ def json
87
+ JSON.parse(text)
88
+ end
89
+
90
+ def from_cache?
91
+ @from_disk_cache || @request.internal.from_memory_cache?
92
+ end
93
+
94
+ def from_service_worker?
95
+ @from_service_worker
96
+ end
97
+
98
+ def frame
99
+ @request.frame
100
+ end
101
+
102
+ class SecurityDetails
103
+ def initialize(security_payload)
104
+ @subject_name = security_payload['subjectName']
105
+ @issuer = security_payload['issuer']
106
+ @valid_from = security_payload['validFrom']
107
+ @valid_to = security_payload['validTo']
108
+ @protocol = security_payload['protocol']
109
+ end
110
+
111
+ attr_reader :subject_name, :issuer, :valid_from, :valid_to, :protocol
112
+ end
113
+ end
@@ -1,3 +1,3 @@
1
1
  class Puppeteer
2
- VERSION = '0.0.14'
2
+ VERSION = '0.0.19'
3
3
  end
@@ -25,7 +25,7 @@ class Puppeteer::WaitTask
25
25
  @dom_world = dom_world
26
26
  @polling = polling
27
27
  @timeout = timeout
28
- @predicate_body = predicate_body
28
+ @predicate_body = "return (#{predicate_body})(...args);"
29
29
  @args = args
30
30
  @run_count = 0
31
31
  @dom_world._wait_tasks.add(self)
@@ -16,10 +16,14 @@ class Puppeteer::WebSocket
16
16
 
17
17
  def write(data)
18
18
  @socket.write(data)
19
+ rescue Errno::EPIPE
20
+ raise EOFError.new('already closed')
19
21
  end
20
22
 
21
23
  def readpartial(maxlen = 1024)
22
24
  @socket.readpartial(maxlen)
25
+ rescue Errno::ECONNRESET
26
+ raise EOFError.new('closed by remote')
23
27
  end
24
28
  end
25
29
 
@@ -40,6 +44,9 @@ class Puppeteer::WebSocket
40
44
  rescue EOFError
41
45
  # Google Chrome was gone.
42
46
  # We have nothing todo. Just finish polling.
47
+ if @ready_state < STATE_CLOSING
48
+ handle_on_close(reason: 'Going Away', code: 1001)
49
+ end
43
50
  end
44
51
  end
45
52
 
@@ -26,7 +26,8 @@ Gem::Specification.new do |spec|
26
26
  spec.add_development_dependency 'rake', '~> 10.0'
27
27
  spec.add_development_dependency 'rspec', '~> 3.0'
28
28
  spec.add_development_dependency 'rspec_junit_formatter' # for CircleCI.
29
- spec.add_development_dependency 'rubocop', '~> 0.86.0'
29
+ spec.add_development_dependency 'rubocop', '~> 0.90.0'
30
30
  spec.add_development_dependency 'rubocop-rspec'
31
+ spec.add_development_dependency 'sinatra'
31
32
  spec.add_development_dependency 'yard'
32
33
  end
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.0.14
4
+ version: 0.0.19
5
5
  platform: ruby
6
6
  authors:
7
7
  - YusukeIwaki
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2020-06-27 00:00:00.000000000 Z
11
+ date: 2020-09-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 0.86.0
131
+ version: 0.90.0
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 0.86.0
138
+ version: 0.90.0
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: rubocop-rspec
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +150,20 @@ dependencies:
150
150
  - - ">="
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: sinatra
155
+ requirement: !ruby/object:Gem::Requirement
156
+ requirements:
157
+ - - ">="
158
+ - !ruby/object:Gem::Version
159
+ version: '0'
160
+ type: :development
161
+ prerelease: false
162
+ version_requirements: !ruby/object:Gem::Requirement
163
+ requirements:
164
+ - - ">="
165
+ - !ruby/object:Gem::Version
166
+ version: '0'
153
167
  - !ruby/object:Gem::Dependency
154
168
  name: yard
155
169
  requirement: !ruby/object:Gem::Requirement
@@ -179,11 +193,13 @@ files:
179
193
  - ".rspec"
180
194
  - ".rubocop.yml"
181
195
  - ".travis.yml"
196
+ - Dockerfile
182
197
  - Gemfile
183
198
  - README.md
184
199
  - Rakefile
185
200
  - bin/console
186
201
  - bin/setup
202
+ - docker-compose.yml
187
203
  - lib/puppeteer.rb
188
204
  - lib/puppeteer/browser.rb
189
205
  - lib/puppeteer/browser_context.rb
@@ -203,6 +219,7 @@ files:
203
219
  - lib/puppeteer/element_handle/box_model.rb
204
220
  - lib/puppeteer/element_handle/point.rb
205
221
  - lib/puppeteer/emulation_manager.rb
222
+ - lib/puppeteer/env.rb
206
223
  - lib/puppeteer/errors.rb
207
224
  - lib/puppeteer/event_callbackable.rb
208
225
  - lib/puppeteer/execution_context.rb
@@ -219,13 +236,17 @@ files:
219
236
  - lib/puppeteer/launcher/browser_options.rb
220
237
  - lib/puppeteer/launcher/chrome.rb
221
238
  - lib/puppeteer/launcher/chrome_arg_options.rb
239
+ - lib/puppeteer/launcher/firefox.rb
222
240
  - lib/puppeteer/launcher/launch_options.rb
223
241
  - lib/puppeteer/lifecycle_watcher.rb
224
242
  - lib/puppeteer/mouse.rb
225
243
  - lib/puppeteer/network_manager.rb
226
244
  - lib/puppeteer/page.rb
245
+ - lib/puppeteer/page/pdf_options.rb
227
246
  - lib/puppeteer/page/screenshot_options.rb
228
247
  - lib/puppeteer/remote_object.rb
248
+ - lib/puppeteer/request.rb
249
+ - lib/puppeteer/response.rb
229
250
  - lib/puppeteer/target.rb
230
251
  - lib/puppeteer/timeout_settings.rb
231
252
  - lib/puppeteer/touch_screen.rb