UrgentcareCLI 0.1.1 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (317) hide show
  1. checksums.yaml +4 -4
  2. data/lib/UrgentCare/CLI.rb +1 -2
  3. data/lib/UrgentCare/Scraper.rb +65 -0
  4. data/lib/UrgentCare/version.rb +2 -2
  5. data/lib/UrgentCare.rb +1 -0
  6. metadata +3 -313
  7. data/.gitignore +0 -11
  8. data/.rspec +0 -3
  9. data/.travis.yml +0 -5
  10. data/CODE_OF_CONDUCT.md +0 -74
  11. data/Gemfile +0 -12
  12. data/Gemfile.lock +0 -84
  13. data/LICENSE.txt +0 -21
  14. data/Notes +0 -41
  15. data/README.md +0 -41
  16. data/Rakefile +0 -8
  17. data/UrgentCare.gemspec +0 -39
  18. data/background.jpg +0 -0
  19. data/data.txt +0 -4
  20. data/lib/Urgentcare/Scraper.rb +0 -78
  21. data/node_modules/.bin/rimraf +0 -1
  22. data/node_modules/.package-lock.json +0 -250
  23. data/node_modules/balanced-match/.github/FUNDING.yml +0 -2
  24. data/node_modules/balanced-match/LICENSE.md +0 -21
  25. data/node_modules/balanced-match/README.md +0 -97
  26. data/node_modules/balanced-match/index.js +0 -62
  27. data/node_modules/balanced-match/package.json +0 -48
  28. data/node_modules/brace-expansion/LICENSE +0 -21
  29. data/node_modules/brace-expansion/README.md +0 -129
  30. data/node_modules/brace-expansion/index.js +0 -201
  31. data/node_modules/brace-expansion/package.json +0 -47
  32. data/node_modules/concat-map/.travis.yml +0 -4
  33. data/node_modules/concat-map/LICENSE +0 -18
  34. data/node_modules/concat-map/README.markdown +0 -62
  35. data/node_modules/concat-map/example/map.js +0 -6
  36. data/node_modules/concat-map/index.js +0 -13
  37. data/node_modules/concat-map/package.json +0 -43
  38. data/node_modules/concat-map/test/map.js +0 -39
  39. data/node_modules/core-util-is/LICENSE +0 -19
  40. data/node_modules/core-util-is/README.md +0 -3
  41. data/node_modules/core-util-is/float.patch +0 -604
  42. data/node_modules/core-util-is/lib/util.js +0 -107
  43. data/node_modules/core-util-is/package.json +0 -32
  44. data/node_modules/core-util-is/test.js +0 -68
  45. data/node_modules/fs.realpath/LICENSE +0 -43
  46. data/node_modules/fs.realpath/README.md +0 -33
  47. data/node_modules/fs.realpath/index.js +0 -66
  48. data/node_modules/fs.realpath/old.js +0 -303
  49. data/node_modules/fs.realpath/package.json +0 -26
  50. data/node_modules/glob/LICENSE +0 -21
  51. data/node_modules/glob/README.md +0 -375
  52. data/node_modules/glob/changelog.md +0 -67
  53. data/node_modules/glob/common.js +0 -234
  54. data/node_modules/glob/glob.js +0 -788
  55. data/node_modules/glob/package.json +0 -51
  56. data/node_modules/glob/sync.js +0 -484
  57. data/node_modules/immediate/LICENSE.txt +0 -20
  58. data/node_modules/immediate/README.md +0 -93
  59. data/node_modules/immediate/dist/immediate.js +0 -75
  60. data/node_modules/immediate/dist/immediate.min.js +0 -1
  61. data/node_modules/immediate/lib/browser.js +0 -69
  62. data/node_modules/immediate/lib/index.js +0 -73
  63. data/node_modules/immediate/package.json +0 -42
  64. data/node_modules/inflight/LICENSE +0 -15
  65. data/node_modules/inflight/README.md +0 -37
  66. data/node_modules/inflight/inflight.js +0 -54
  67. data/node_modules/inflight/package.json +0 -29
  68. data/node_modules/inherits/LICENSE +0 -16
  69. data/node_modules/inherits/README.md +0 -42
  70. data/node_modules/inherits/inherits.js +0 -9
  71. data/node_modules/inherits/inherits_browser.js +0 -27
  72. data/node_modules/inherits/package.json +0 -29
  73. data/node_modules/isarray/.npmignore +0 -1
  74. data/node_modules/isarray/.travis.yml +0 -4
  75. data/node_modules/isarray/Makefile +0 -6
  76. data/node_modules/isarray/README.md +0 -60
  77. data/node_modules/isarray/component.json +0 -19
  78. data/node_modules/isarray/index.js +0 -5
  79. data/node_modules/isarray/package.json +0 -45
  80. data/node_modules/isarray/test.js +0 -20
  81. data/node_modules/jszip/.codeclimate.yml +0 -16
  82. data/node_modules/jszip/.editorconfig +0 -8
  83. data/node_modules/jszip/.jshintignore +0 -1
  84. data/node_modules/jszip/.jshintrc +0 -21
  85. data/node_modules/jszip/.travis.yml +0 -17
  86. data/node_modules/jszip/CHANGES.md +0 -163
  87. data/node_modules/jszip/LICENSE.markdown +0 -651
  88. data/node_modules/jszip/README.markdown +0 -35
  89. data/node_modules/jszip/dist/jszip.js +0 -30
  90. data/node_modules/jszip/dist/jszip.min.js +0 -13
  91. data/node_modules/jszip/index.d.ts +0 -270
  92. data/node_modules/jszip/lib/base64.js +0 -106
  93. data/node_modules/jszip/lib/compressedObject.js +0 -74
  94. data/node_modules/jszip/lib/compressions.js +0 -14
  95. data/node_modules/jszip/lib/crc32.js +0 -77
  96. data/node_modules/jszip/lib/defaults.js +0 -11
  97. data/node_modules/jszip/lib/external.js +0 -19
  98. data/node_modules/jszip/lib/flate.js +0 -85
  99. data/node_modules/jszip/lib/generate/ZipFileWorker.js +0 -540
  100. data/node_modules/jszip/lib/generate/index.js +0 -57
  101. data/node_modules/jszip/lib/index.js +0 -52
  102. data/node_modules/jszip/lib/license_header.js +0 -11
  103. data/node_modules/jszip/lib/load.js +0 -81
  104. data/node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js +0 -74
  105. data/node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js +0 -42
  106. data/node_modules/jszip/lib/nodejsUtils.js +0 -57
  107. data/node_modules/jszip/lib/object.js +0 -389
  108. data/node_modules/jszip/lib/readable-stream-browser.js +0 -9
  109. data/node_modules/jszip/lib/reader/ArrayReader.js +0 -57
  110. data/node_modules/jszip/lib/reader/DataReader.js +0 -116
  111. data/node_modules/jszip/lib/reader/NodeBufferReader.js +0 -19
  112. data/node_modules/jszip/lib/reader/StringReader.js +0 -38
  113. data/node_modules/jszip/lib/reader/Uint8ArrayReader.js +0 -22
  114. data/node_modules/jszip/lib/reader/readerFor.js +0 -28
  115. data/node_modules/jszip/lib/signature.js +0 -7
  116. data/node_modules/jszip/lib/stream/ConvertWorker.js +0 -26
  117. data/node_modules/jszip/lib/stream/Crc32Probe.js +0 -24
  118. data/node_modules/jszip/lib/stream/DataLengthProbe.js +0 -29
  119. data/node_modules/jszip/lib/stream/DataWorker.js +0 -116
  120. data/node_modules/jszip/lib/stream/GenericWorker.js +0 -263
  121. data/node_modules/jszip/lib/stream/StreamHelper.js +0 -212
  122. data/node_modules/jszip/lib/support.js +0 -38
  123. data/node_modules/jszip/lib/utf8.js +0 -275
  124. data/node_modules/jszip/lib/utils.js +0 -476
  125. data/node_modules/jszip/lib/zipEntries.js +0 -262
  126. data/node_modules/jszip/lib/zipEntry.js +0 -294
  127. data/node_modules/jszip/lib/zipObject.js +0 -133
  128. data/node_modules/jszip/package.json +0 -63
  129. data/node_modules/jszip/vendor/FileSaver.js +0 -247
  130. data/node_modules/lie/README.md +0 -62
  131. data/node_modules/lie/dist/lie.js +0 -350
  132. data/node_modules/lie/dist/lie.min.js +0 -1
  133. data/node_modules/lie/dist/lie.polyfill.js +0 -358
  134. data/node_modules/lie/dist/lie.polyfill.min.js +0 -1
  135. data/node_modules/lie/lib/browser.js +0 -273
  136. data/node_modules/lie/lib/index.js +0 -298
  137. data/node_modules/lie/license.md +0 -7
  138. data/node_modules/lie/lie.d.ts +0 -244
  139. data/node_modules/lie/package.json +0 -69
  140. data/node_modules/lie/polyfill.js +0 -4
  141. data/node_modules/minimatch/LICENSE +0 -15
  142. data/node_modules/minimatch/README.md +0 -209
  143. data/node_modules/minimatch/minimatch.js +0 -923
  144. data/node_modules/minimatch/package.json +0 -30
  145. data/node_modules/once/LICENSE +0 -15
  146. data/node_modules/once/README.md +0 -79
  147. data/node_modules/once/once.js +0 -42
  148. data/node_modules/once/package.json +0 -33
  149. data/node_modules/pako/CHANGELOG.md +0 -164
  150. data/node_modules/pako/LICENSE +0 -21
  151. data/node_modules/pako/README.md +0 -191
  152. data/node_modules/pako/dist/pako.js +0 -6818
  153. data/node_modules/pako/dist/pako.min.js +0 -1
  154. data/node_modules/pako/dist/pako_deflate.js +0 -3997
  155. data/node_modules/pako/dist/pako_deflate.min.js +0 -1
  156. data/node_modules/pako/dist/pako_inflate.js +0 -3300
  157. data/node_modules/pako/dist/pako_inflate.min.js +0 -1
  158. data/node_modules/pako/index.js +0 -14
  159. data/node_modules/pako/lib/deflate.js +0 -400
  160. data/node_modules/pako/lib/inflate.js +0 -423
  161. data/node_modules/pako/lib/utils/common.js +0 -105
  162. data/node_modules/pako/lib/utils/strings.js +0 -187
  163. data/node_modules/pako/lib/zlib/README +0 -59
  164. data/node_modules/pako/lib/zlib/adler32.js +0 -51
  165. data/node_modules/pako/lib/zlib/constants.js +0 -68
  166. data/node_modules/pako/lib/zlib/crc32.js +0 -59
  167. data/node_modules/pako/lib/zlib/deflate.js +0 -1874
  168. data/node_modules/pako/lib/zlib/gzheader.js +0 -58
  169. data/node_modules/pako/lib/zlib/inffast.js +0 -345
  170. data/node_modules/pako/lib/zlib/inflate.js +0 -1556
  171. data/node_modules/pako/lib/zlib/inftrees.js +0 -343
  172. data/node_modules/pako/lib/zlib/messages.js +0 -32
  173. data/node_modules/pako/lib/zlib/trees.js +0 -1222
  174. data/node_modules/pako/lib/zlib/zstream.js +0 -47
  175. data/node_modules/pako/package.json +0 -44
  176. data/node_modules/path-is-absolute/index.js +0 -20
  177. data/node_modules/path-is-absolute/license +0 -21
  178. data/node_modules/path-is-absolute/package.json +0 -43
  179. data/node_modules/path-is-absolute/readme.md +0 -59
  180. data/node_modules/process-nextick-args/index.js +0 -45
  181. data/node_modules/process-nextick-args/license.md +0 -19
  182. data/node_modules/process-nextick-args/package.json +0 -25
  183. data/node_modules/process-nextick-args/readme.md +0 -18
  184. data/node_modules/readable-stream/.travis.yml +0 -34
  185. data/node_modules/readable-stream/CONTRIBUTING.md +0 -38
  186. data/node_modules/readable-stream/GOVERNANCE.md +0 -136
  187. data/node_modules/readable-stream/LICENSE +0 -47
  188. data/node_modules/readable-stream/README.md +0 -58
  189. data/node_modules/readable-stream/doc/wg-meetings/2015-01-30.md +0 -60
  190. data/node_modules/readable-stream/duplex-browser.js +0 -1
  191. data/node_modules/readable-stream/duplex.js +0 -1
  192. data/node_modules/readable-stream/lib/_stream_duplex.js +0 -131
  193. data/node_modules/readable-stream/lib/_stream_passthrough.js +0 -47
  194. data/node_modules/readable-stream/lib/_stream_readable.js +0 -1019
  195. data/node_modules/readable-stream/lib/_stream_transform.js +0 -214
  196. data/node_modules/readable-stream/lib/_stream_writable.js +0 -687
  197. data/node_modules/readable-stream/lib/internal/streams/BufferList.js +0 -79
  198. data/node_modules/readable-stream/lib/internal/streams/destroy.js +0 -74
  199. data/node_modules/readable-stream/lib/internal/streams/stream-browser.js +0 -1
  200. data/node_modules/readable-stream/lib/internal/streams/stream.js +0 -1
  201. data/node_modules/readable-stream/package.json +0 -52
  202. data/node_modules/readable-stream/passthrough.js +0 -1
  203. data/node_modules/readable-stream/readable-browser.js +0 -7
  204. data/node_modules/readable-stream/readable.js +0 -19
  205. data/node_modules/readable-stream/transform.js +0 -1
  206. data/node_modules/readable-stream/writable-browser.js +0 -1
  207. data/node_modules/readable-stream/writable.js +0 -8
  208. data/node_modules/rimraf/LICENSE +0 -15
  209. data/node_modules/rimraf/README.md +0 -101
  210. data/node_modules/rimraf/bin.js +0 -50
  211. data/node_modules/rimraf/package.json +0 -29
  212. data/node_modules/rimraf/rimraf.js +0 -372
  213. data/node_modules/safe-buffer/LICENSE +0 -21
  214. data/node_modules/safe-buffer/README.md +0 -584
  215. data/node_modules/safe-buffer/index.d.ts +0 -187
  216. data/node_modules/safe-buffer/index.js +0 -62
  217. data/node_modules/safe-buffer/package.json +0 -37
  218. data/node_modules/selenium-webdriver/CHANGES.md +0 -1114
  219. data/node_modules/selenium-webdriver/LICENSE +0 -202
  220. data/node_modules/selenium-webdriver/NOTICE +0 -2
  221. data/node_modules/selenium-webdriver/README.md +0 -229
  222. data/node_modules/selenium-webdriver/chrome.js +0 -295
  223. data/node_modules/selenium-webdriver/chromium.js +0 -829
  224. data/node_modules/selenium-webdriver/devtools/CDPConnection.js +0 -35
  225. data/node_modules/selenium-webdriver/edge.js +0 -224
  226. data/node_modules/selenium-webdriver/example/chrome_android.js +0 -45
  227. data/node_modules/selenium-webdriver/example/chrome_mobile_emulation.js +0 -46
  228. data/node_modules/selenium-webdriver/example/firefox_channels.js +0 -84
  229. data/node_modules/selenium-webdriver/example/google_search.js +0 -50
  230. data/node_modules/selenium-webdriver/example/google_search_test.js +0 -70
  231. data/node_modules/selenium-webdriver/example/headless.js +0 -63
  232. data/node_modules/selenium-webdriver/example/logging.js +0 -64
  233. data/node_modules/selenium-webdriver/firefox.js +0 -789
  234. data/node_modules/selenium-webdriver/http/index.js +0 -324
  235. data/node_modules/selenium-webdriver/http/util.js +0 -172
  236. data/node_modules/selenium-webdriver/ie.js +0 -503
  237. data/node_modules/selenium-webdriver/index.js +0 -825
  238. data/node_modules/selenium-webdriver/io/exec.js +0 -162
  239. data/node_modules/selenium-webdriver/io/index.js +0 -348
  240. data/node_modules/selenium-webdriver/io/zip.js +0 -223
  241. data/node_modules/selenium-webdriver/lib/atoms/find-elements.js +0 -123
  242. data/node_modules/selenium-webdriver/lib/atoms/get-attribute.js +0 -101
  243. data/node_modules/selenium-webdriver/lib/atoms/is-displayed.js +0 -101
  244. data/node_modules/selenium-webdriver/lib/atoms/mutation-listener.js +0 -55
  245. data/node_modules/selenium-webdriver/lib/by.js +0 -415
  246. data/node_modules/selenium-webdriver/lib/capabilities.js +0 -553
  247. data/node_modules/selenium-webdriver/lib/command.js +0 -206
  248. data/node_modules/selenium-webdriver/lib/error.js +0 -605
  249. data/node_modules/selenium-webdriver/lib/http.js +0 -704
  250. data/node_modules/selenium-webdriver/lib/input.js +0 -946
  251. data/node_modules/selenium-webdriver/lib/logging.js +0 -661
  252. data/node_modules/selenium-webdriver/lib/promise.js +0 -285
  253. data/node_modules/selenium-webdriver/lib/proxy.js +0 -212
  254. data/node_modules/selenium-webdriver/lib/session.js +0 -77
  255. data/node_modules/selenium-webdriver/lib/symbols.js +0 -37
  256. data/node_modules/selenium-webdriver/lib/until.js +0 -429
  257. data/node_modules/selenium-webdriver/lib/webdriver.js +0 -2919
  258. data/node_modules/selenium-webdriver/net/index.js +0 -107
  259. data/node_modules/selenium-webdriver/net/portprober.js +0 -75
  260. data/node_modules/selenium-webdriver/opera.js +0 -406
  261. data/node_modules/selenium-webdriver/package.json +0 -54
  262. data/node_modules/selenium-webdriver/proxy.js +0 -32
  263. data/node_modules/selenium-webdriver/remote/index.js +0 -624
  264. data/node_modules/selenium-webdriver/safari.js +0 -168
  265. data/node_modules/selenium-webdriver/testing/index.js +0 -504
  266. data/node_modules/set-immediate-shim/index.js +0 -7
  267. data/node_modules/set-immediate-shim/package.json +0 -34
  268. data/node_modules/set-immediate-shim/readme.md +0 -31
  269. data/node_modules/string_decoder/.travis.yml +0 -50
  270. data/node_modules/string_decoder/LICENSE +0 -48
  271. data/node_modules/string_decoder/README.md +0 -47
  272. data/node_modules/string_decoder/lib/string_decoder.js +0 -296
  273. data/node_modules/string_decoder/package.json +0 -31
  274. data/node_modules/tmp/CHANGELOG.md +0 -288
  275. data/node_modules/tmp/LICENSE +0 -21
  276. data/node_modules/tmp/README.md +0 -365
  277. data/node_modules/tmp/lib/tmp.js +0 -780
  278. data/node_modules/tmp/node_modules/.bin/rimraf +0 -1
  279. data/node_modules/tmp/node_modules/rimraf/CHANGELOG.md +0 -65
  280. data/node_modules/tmp/node_modules/rimraf/LICENSE +0 -15
  281. data/node_modules/tmp/node_modules/rimraf/README.md +0 -101
  282. data/node_modules/tmp/node_modules/rimraf/bin.js +0 -68
  283. data/node_modules/tmp/node_modules/rimraf/package.json +0 -32
  284. data/node_modules/tmp/node_modules/rimraf/rimraf.js +0 -360
  285. data/node_modules/tmp/package.json +0 -58
  286. data/node_modules/util-deprecate/History.md +0 -16
  287. data/node_modules/util-deprecate/LICENSE +0 -24
  288. data/node_modules/util-deprecate/README.md +0 -53
  289. data/node_modules/util-deprecate/browser.js +0 -67
  290. data/node_modules/util-deprecate/node.js +0 -6
  291. data/node_modules/util-deprecate/package.json +0 -27
  292. data/node_modules/wrappy/LICENSE +0 -15
  293. data/node_modules/wrappy/README.md +0 -36
  294. data/node_modules/wrappy/package.json +0 -29
  295. data/node_modules/wrappy/wrappy.js +0 -33
  296. data/node_modules/ws/LICENSE +0 -21
  297. data/node_modules/ws/README.md +0 -496
  298. data/node_modules/ws/browser.js +0 -8
  299. data/node_modules/ws/index.js +0 -10
  300. data/node_modules/ws/lib/buffer-util.js +0 -129
  301. data/node_modules/ws/lib/constants.js +0 -10
  302. data/node_modules/ws/lib/event-target.js +0 -184
  303. data/node_modules/ws/lib/extension.js +0 -223
  304. data/node_modules/ws/lib/limiter.js +0 -55
  305. data/node_modules/ws/lib/permessage-deflate.js +0 -517
  306. data/node_modules/ws/lib/receiver.js +0 -507
  307. data/node_modules/ws/lib/sender.js +0 -405
  308. data/node_modules/ws/lib/stream.js +0 -165
  309. data/node_modules/ws/lib/validation.js +0 -104
  310. data/node_modules/ws/lib/websocket-server.js +0 -418
  311. data/node_modules/ws/lib/websocket.js +0 -942
  312. data/node_modules/ws/package.json +0 -56
  313. data/package-lock.json +0 -458
  314. data/package.json +0 -5
  315. data/selenium.log +0 -1
  316. data/spec.md +0 -6
  317. data/test.data +0 -2110
@@ -1,107 +0,0 @@
1
- // Licensed to the Software Freedom Conservancy (SFC) under one
2
- // or more contributor license agreements. See the NOTICE file
3
- // distributed with this work for additional information
4
- // regarding copyright ownership. The SFC licenses this file
5
- // to you under the Apache License, Version 2.0 (the
6
- // "License"); you may not use this file except in compliance
7
- // with the License. You may obtain a copy of the License at
8
- //
9
- // http://www.apache.org/licenses/LICENSE-2.0
10
- //
11
- // Unless required by applicable law or agreed to in writing,
12
- // software distributed under the License is distributed on an
13
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- // KIND, either express or implied. See the License for the
15
- // specific language governing permissions and limitations
16
- // under the License.
17
-
18
- 'use strict'
19
-
20
- const os = require('os')
21
-
22
- function getLoInterface() {
23
- let name
24
- if (process.platform === 'darwin') {
25
- name = 'lo0'
26
- } else if (process.platform === 'linux') {
27
- name = 'lo'
28
- }
29
- return name ? os.networkInterfaces()[name] : null
30
- }
31
-
32
- /**
33
- * Queries the system network interfaces for an IP address.
34
- * @param {boolean} loopback Whether to find a loopback address.
35
- * @param {string} family The IP family (IPv4 or IPv6). Defaults to IPv4.
36
- * @return {(string|undefined)} The located IP address or undefined.
37
- */
38
- function getAddress(loopback, family) {
39
- let interfaces
40
- if (loopback) {
41
- let lo = getLoInterface()
42
- interfaces = lo ? [lo] : null
43
- }
44
- interfaces = interfaces || os.networkInterfaces()
45
- for (let key in interfaces) {
46
- if (!Object.prototype.hasOwnProperty.call(interfaces, key)) {
47
- continue
48
- }
49
-
50
- for (let ipAddress of interfaces[key]) {
51
- if (ipAddress.family === family && ipAddress.internal === loopback) {
52
- return ipAddress.address
53
- }
54
- }
55
- }
56
- return undefined
57
- }
58
-
59
- // PUBLIC API
60
-
61
- /**
62
- * Retrieves the external IP address for this host.
63
- * @param {string=} family The IP family to retrieve. Defaults to "IPv4".
64
- * @return {(string|undefined)} The IP address or undefined if not available.
65
- */
66
- exports.getAddress = function (family = 'IPv4') {
67
- return getAddress(false, family)
68
- }
69
-
70
- /**
71
- * Retrieves a loopback address for this machine.
72
- * @param {string=} family The IP family to retrieve. Defaults to "IPv4".
73
- * @return {(string|undefined)} The IP address or undefined if not available.
74
- */
75
- exports.getLoopbackAddress = function (family = 'IPv4') {
76
- return getAddress(true, family)
77
- }
78
-
79
- /**
80
- * Splits a hostport string, e.g. "www.example.com:80", into its component
81
- * parts.
82
- *
83
- * @param {string} hostport The string to split.
84
- * @return {{host: string, port: ?number}} A host and port. If no port is
85
- * present in the argument `hostport`, port is null.
86
- */
87
- exports.splitHostAndPort = function (hostport) {
88
- let lastIndex = hostport.lastIndexOf(':')
89
- if (lastIndex < 0) {
90
- return { host: hostport, port: null }
91
- }
92
-
93
- let firstIndex = hostport.indexOf(':')
94
- if (firstIndex != lastIndex && !hostport.includes('[')) {
95
- // Multiple colons but no brackets, so assume the string is an IPv6 address
96
- // with no port (e.g. "1234:5678:9:0:1234:5678:9:0").
97
- return { host: hostport, port: null }
98
- }
99
-
100
- let host = hostport.slice(0, lastIndex)
101
- if (host.startsWith('[') && host.endsWith(']')) {
102
- host = host.slice(1, -1)
103
- }
104
-
105
- let port = parseInt(hostport.slice(lastIndex + 1), 10)
106
- return { host, port }
107
- }
@@ -1,75 +0,0 @@
1
- // Licensed to the Software Freedom Conservancy (SFC) under one
2
- // or more contributor license agreements. See the NOTICE file
3
- // distributed with this work for additional information
4
- // regarding copyright ownership. The SFC licenses this file
5
- // to you under the Apache License, Version 2.0 (the
6
- // "License"); you may not use this file except in compliance
7
- // with the License. You may obtain a copy of the License at
8
- //
9
- // http://www.apache.org/licenses/LICENSE-2.0
10
- //
11
- // Unless required by applicable law or agreed to in writing,
12
- // software distributed under the License is distributed on an
13
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- // KIND, either express or implied. See the License for the
15
- // specific language governing permissions and limitations
16
- // under the License.
17
-
18
- 'use strict'
19
-
20
- const net = require('net')
21
-
22
- /**
23
- * Tests if a port is free.
24
- * @param {number} port The port to test.
25
- * @param {string=} opt_host The bound host to test the {@code port} against.
26
- * Defaults to {@code INADDR_ANY}.
27
- * @return {!Promise<boolean>} A promise that will resolve with whether the port
28
- * is free.
29
- */
30
- function isFree(port, opt_host) {
31
- return new Promise((resolve, reject) => {
32
- let server = net.createServer().on('error', function (e) {
33
- if (e.code === 'EADDRINUSE' || e.code === 'EACCES') {
34
- resolve(false)
35
- } else {
36
- reject(e)
37
- }
38
- })
39
-
40
- server.listen(port, opt_host, function () {
41
- server.close(() => resolve(true))
42
- })
43
- })
44
- }
45
-
46
- /**
47
- * @param {string=} opt_host The bound host to test the {@code port} against.
48
- * Defaults to {@code INADDR_ANY}.
49
- * @return {!Promise<number>} A promise that will resolve to a free port. If a
50
- * port cannot be found, the promise will be rejected.
51
- */
52
-
53
- function findFreePort(opt_host) {
54
- return new Promise((resolve, reject) => {
55
- const server = net.createServer()
56
- server.on('listening', function () {
57
- resolve(server.address().port)
58
- server.close()
59
- })
60
- server.on('error', (e) => {
61
- if (e.code === 'EADDRINUSE' || e.code === 'EACCES') {
62
- resolve('Unable to find a free port')
63
- } else {
64
- reject(e)
65
- }
66
- })
67
- // By providing 0 we let the operative system find an arbitrary port
68
- server.listen(0, opt_host)
69
- })
70
- }
71
-
72
- // PUBLIC API
73
-
74
- exports.findFreePort = findFreePort
75
- exports.isFree = isFree
@@ -1,406 +0,0 @@
1
- // Licensed to the Software Freedom Conservancy (SFC) under one
2
- // or more contributor license agreements. See the NOTICE file
3
- // distributed with this work for additional information
4
- // regarding copyright ownership. The SFC licenses this file
5
- // to you under the Apache License, Version 2.0 (the
6
- // "License"); you may not use this file except in compliance
7
- // with the License. You may obtain a copy of the License at
8
- //
9
- // http://www.apache.org/licenses/LICENSE-2.0
10
- //
11
- // Unless required by applicable law or agreed to in writing,
12
- // software distributed under the License is distributed on an
13
- // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14
- // KIND, either express or implied. See the License for the
15
- // specific language governing permissions and limitations
16
- // under the License.
17
-
18
- /**
19
- * @fileoverview Defines a {@linkplain Driver WebDriver} client for the
20
- * Opera web browser (v26+). Before using this module, you must download the
21
- * latest OperaDriver
22
- * [release](https://github.com/operasoftware/operachromiumdriver/releases) and
23
- * ensure it can be found on your system
24
- * [PATH](http://en.wikipedia.org/wiki/PATH_%28variable%29).
25
- *
26
- * There are three primary classes exported by this module:
27
- *
28
- * 1. {@linkplain ServiceBuilder}: configures the
29
- * {@link ./remote.DriverService remote.DriverService}
30
- * that manages the
31
- * [OperaDriver](https://github.com/operasoftware/operachromiumdriver)
32
- * child process.
33
- *
34
- * 2. {@linkplain Options}: defines configuration options for each new Opera
35
- * session, such as which {@linkplain Options#setProxy proxy} to use,
36
- * what {@linkplain Options#addExtensions extensions} to install, or
37
- * what {@linkplain Options#addArguments command-line switches} to use when
38
- * starting the browser.Service
39
- *
40
- * 3. {@linkplain Driver}: the WebDriver client; each new instance will control
41
- * a unique browser session with a clean user profile (unless otherwise
42
- * configured through the {@link Options} class).
43
- *
44
- * By default, every Opera session will use a single driver service, which is
45
- * started the first time a {@link Driver} instance is created and terminated
46
- * when this process exits. The default service will inherit its environment
47
- * from the current process and direct all output to /dev/null. You may obtain
48
- * a handle to this default service using
49
- * {@link #getDefaultService getDefaultService()} and change its configuration
50
- * with {@link #setDefaultService setDefaultService()}.
51
- *
52
- * You may also create a {@link Driver} with its own driver service. This is
53
- * useful if you need to capture the server's log output for a specific session:
54
- *
55
- * var opera = require('selenium-webdriver/opera');
56
- *
57
- * var service = new opera.ServiceBuilder()
58
- * .loggingTo('/my/log/file.txt')
59
- * .enableVerboseLogging()
60
- * .build();
61
- *
62
- * var options = new opera.Options();
63
- * // configure browser options ...
64
- *
65
- * var driver = opera.Driver.createSession(options, service);
66
- *
67
- * Users should only instantiate the {@link Driver} class directly when they
68
- * need a custom driver service configuration (as shown above). For normal
69
- * operation, users should start Opera using the
70
- * {@link ./builder.Builder selenium-webdriver.Builder}.
71
- */
72
-
73
- 'use strict'
74
-
75
- const http = require('./http'),
76
- io = require('./io'),
77
- capabilities = require('./lib/capabilities'),
78
- Symbols = require('./lib/symbols'),
79
- webdriver = require('./lib/webdriver'),
80
- remote = require('./remote')
81
-
82
- /**
83
- * Name of the OperaDriver executable.
84
- * @type {string}
85
- * @const
86
- */
87
- const OPERADRIVER_EXE =
88
- process.platform === 'win32' ? 'operadriver.exe' : 'operadriver'
89
-
90
- /**
91
- * _Synchronously_ attempts to locate the operadriver executable on the current
92
- * system.
93
- *
94
- * @return {?string} the located executable, or `null`.
95
- */
96
- function locateSynchronously() {
97
- return io.findInPath(OPERADRIVER_EXE, true)
98
- }
99
-
100
- /**
101
- * Creates {@link remote.DriverService} instances that manages an
102
- * [OperaDriver](https://github.com/operasoftware/operachromiumdriver)
103
- * server in a child process.
104
- */
105
- class ServiceBuilder extends remote.DriverService.Builder {
106
- /**
107
- * @param {string=} opt_exe Path to the server executable to use. If omitted,
108
- * the builder will attempt to locate the operadriver on the current
109
- * PATH.
110
- * @throws {Error} If provided executable does not exist, or the operadriver
111
- * cannot be found on the PATH.
112
- */
113
- constructor(opt_exe) {
114
- let exe = opt_exe || locateSynchronously()
115
- if (!exe) {
116
- throw Error(
117
- 'The OperaDriver could not be found on the current PATH. Please ' +
118
- 'download the latest version of the OperaDriver from ' +
119
- 'https://github.com/operasoftware/operachromiumdriver/releases and ' +
120
- 'ensure it can be found on your PATH.'
121
- )
122
- }
123
-
124
- super(exe)
125
- this.setLoopback(true)
126
- }
127
-
128
- /**
129
- * Sets the path of the log file the driver should log to. If a log file is
130
- * not specified, the driver will log to stderr.
131
- * @param {string} path Path of the log file to use.
132
- * @return {!ServiceBuilder} A self reference.
133
- */
134
- loggingTo(path) {
135
- return this.addArguments('--log-path=' + path)
136
- }
137
-
138
- /**
139
- * Enables verbose logging.
140
- * @return {!ServiceBuilder} A self reference.
141
- */
142
- enableVerboseLogging() {
143
- return this.addArguments('--verbose')
144
- }
145
-
146
- /**
147
- * Silence sthe drivers output.
148
- * @return {!ServiceBuilder} A self reference.
149
- */
150
- silent() {
151
- return this.addArguments('--silent')
152
- }
153
- }
154
-
155
- /** @type {remote.DriverService} */
156
- var defaultService = null
157
-
158
- /**
159
- * Sets the default service to use for new OperaDriver instances.
160
- * @param {!remote.DriverService} service The service to use.
161
- * @throws {Error} If the default service is currently running.
162
- */
163
- function setDefaultService(service) {
164
- if (defaultService && defaultService.isRunning()) {
165
- throw Error(
166
- 'The previously configured OperaDriver service is still running. ' +
167
- 'You must shut it down before you may adjust its configuration.'
168
- )
169
- }
170
- defaultService = service
171
- }
172
-
173
- /**
174
- * Returns the default OperaDriver service. If such a service has not been
175
- * configured, one will be constructed using the default configuration for
176
- * a OperaDriver executable found on the system PATH.
177
- * @return {!remote.DriverService} The default OperaDriver service.
178
- */
179
- function getDefaultService() {
180
- if (!defaultService) {
181
- defaultService = new ServiceBuilder().build()
182
- }
183
- return defaultService
184
- }
185
-
186
- /**
187
- * @type {string}
188
- * @const
189
- */
190
- var OPTIONS_CAPABILITY_KEY = 'chromeOptions'
191
-
192
- /**
193
- * Class for managing {@linkplain Driver OperaDriver} specific options.
194
- */
195
- class Options {
196
- constructor() {
197
- /** @private {!Array.<string>} */
198
- this.args_ = []
199
-
200
- /** @private {?string} */
201
- this.binary_ = null
202
-
203
- /** @private {!Array.<(string|!Buffer)>} */
204
- this.extensions_ = []
205
-
206
- /** @private {./lib/logging.Preferences} */
207
- this.logPrefs_ = null
208
-
209
- /** @private {?capabilities.ProxyConfig} */
210
- this.proxy_ = null
211
- }
212
-
213
- /**
214
- * Extracts the OperaDriver specific options from the given capabilities
215
- * object.
216
- * @param {!capabilities.Capabilities} caps The capabilities object.
217
- * @return {!Options} The OperaDriver options.
218
- */
219
- static fromCapabilities(caps) {
220
- var options
221
- var o = caps.get(OPTIONS_CAPABILITY_KEY)
222
- if (o instanceof Options) {
223
- options = o
224
- } else if (o) {
225
- options = new Options()
226
- .addArguments(o.args || [])
227
- .addExtensions(o.extensions || [])
228
- .setOperaBinaryPath(o.binary)
229
- } else {
230
- options = new Options()
231
- }
232
-
233
- if (caps.has(capabilities.Capability.PROXY)) {
234
- options.setProxy(caps.get(capabilities.Capability.PROXY))
235
- }
236
-
237
- if (caps.has(capabilities.Capability.LOGGING_PREFS)) {
238
- options.setLoggingPrefs(caps.get(capabilities.Capability.LOGGING_PREFS))
239
- }
240
-
241
- return options
242
- }
243
-
244
- /**
245
- * Add additional command line arguments to use when launching the Opera
246
- * browser. Each argument may be specified with or without the "--" prefix
247
- * (e.g. "--foo" and "foo"). Arguments with an associated value should be
248
- * delimited by an "=": "foo=bar".
249
- * @param {...(string|!Array.<string>)} var_args The arguments to add.
250
- * @return {!Options} A self reference.
251
- */
252
- addArguments(var_args) { // eslint-disable-line
253
- this.args_ = this.args_.concat.apply(this.args_, arguments)
254
- return this
255
- }
256
-
257
- /**
258
- * Add additional extensions to install when launching Opera. Each extension
259
- * should be specified as the path to the packed CRX file, or a Buffer for an
260
- * extension.
261
- * @param {...(string|!Buffer|!Array.<(string|!Buffer)>)} var_args The
262
- * extensions to add.
263
- * @return {!Options} A self reference.
264
- */
265
- addExtensions(var_args) { // eslint-disable-line
266
- this.extensions_ = this.extensions_.concat.apply(
267
- this.extensions_,
268
- arguments
269
- )
270
- return this
271
- }
272
-
273
- /**
274
- * Sets the path to the Opera binary to use. On Mac OS X, this path should
275
- * reference the actual Opera executable, not just the application binary. The
276
- * binary path be absolute or relative to the operadriver server executable, but
277
- * it must exist on the machine that will launch Opera.
278
- *
279
- * @param {string} path The path to the Opera binary to use.
280
- * @return {!Options} A self reference.
281
- */
282
- setOperaBinaryPath(path) {
283
- this.binary_ = path
284
- return this
285
- }
286
-
287
- /**
288
- * Sets the logging preferences for the new session.
289
- * @param {!./lib/logging.Preferences} prefs The logging preferences.
290
- * @return {!Options} A self reference.
291
- */
292
- setLoggingPrefs(prefs) {
293
- this.logPrefs_ = prefs
294
- return this
295
- }
296
-
297
- /**
298
- * Sets the proxy settings for the new session.
299
- * @param {capabilities.ProxyConfig} proxy The proxy configuration to use.
300
- * @return {!Options} A self reference.
301
- */
302
- setProxy(proxy) {
303
- this.proxy_ = proxy
304
- return this
305
- }
306
-
307
- /**
308
- * Converts this options instance to a {@link capabilities.Capabilities}
309
- * object.
310
- * @param {capabilities.Capabilities=} opt_capabilities The capabilities to
311
- * merge these options into, if any.
312
- * @return {!capabilities.Capabilities} The capabilities.
313
- */
314
- toCapabilities(opt_capabilities) {
315
- var caps = opt_capabilities || capabilities.Capabilities.opera()
316
- caps
317
- .set(capabilities.Capability.PROXY, this.proxy_)
318
- .set(capabilities.Capability.LOGGING_PREFS, this.logPrefs_)
319
- .set(OPTIONS_CAPABILITY_KEY, this)
320
- return caps
321
- }
322
-
323
- /**
324
- * Converts this instance to its JSON wire protocol representation. Note this
325
- * function is an implementation not intended for general use.
326
- * @return {!Object} The JSON wire protocol representation of this instance.
327
- */
328
- [Symbols.serialize]() {
329
- var json = {
330
- args: this.args_,
331
- extensions: this.extensions_.map(function (extension) {
332
- if (Buffer.isBuffer(extension)) {
333
- return extension.toString('base64')
334
- }
335
- return io
336
- .read(/** @type {string} */ (extension))
337
- .then((buffer) => buffer.toString('base64'))
338
- }),
339
- }
340
- if (this.binary_) {
341
- json.binary = this.binary_
342
- }
343
- return json
344
- }
345
- }
346
-
347
- /**
348
- * Creates a new WebDriver client for Opera.
349
- */
350
- class Driver extends webdriver.WebDriver {
351
- /**
352
- * Creates a new session for Opera.
353
- *
354
- * @param {(Capabilities|Options)=} opt_config The configuration
355
- * options.
356
- * @param {remote.DriverService=} opt_service The session to use; will use
357
- * the {@link getDefaultService default service} by default.
358
- * @return {!Driver} A new driver instance.
359
- */
360
- static createSession(opt_config, opt_service) {
361
- var service = opt_service || getDefaultService()
362
- var client = service.start().then((url) => new http.HttpClient(url))
363
- var executor = new http.Executor(client)
364
-
365
- var caps =
366
- opt_config instanceof Options
367
- ? opt_config.toCapabilities()
368
- : opt_config || capabilities.Capabilities.opera()
369
-
370
- // On Linux, the OperaDriver does not look for Opera on the PATH, so we
371
- // must explicitly find it. See: operachromiumdriver #9.
372
- if (process.platform === 'linux') {
373
- var options = Options.fromCapabilities(caps)
374
- if (!options.binary_) {
375
- let exe = io.findInPath('opera', true)
376
- if (!exe) {
377
- throw Error(
378
- 'The opera executable could not be found on the current PATH'
379
- )
380
- }
381
- options.setOperaBinaryPath(exe)
382
- }
383
- caps = options.toCapabilities(caps)
384
- }
385
-
386
- return /** @type {!Driver} */ (super.createSession(executor, caps, () =>
387
- service.kill()
388
- ))
389
- }
390
-
391
- /**
392
- * This function is a no-op as file detectors are not supported by this
393
- * implementation.
394
- * @override
395
- */
396
- setFileDetector() {}
397
- }
398
-
399
- // PUBLIC API
400
-
401
- exports.Driver = Driver
402
- exports.Options = Options
403
- exports.ServiceBuilder = ServiceBuilder
404
- exports.getDefaultService = getDefaultService
405
- exports.setDefaultService = setDefaultService
406
- exports.locateSynchronously = locateSynchronously