pokeedex 0.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 +7 -0
- data/.github/workflows/main.yml +30 -0
- data/.gitignore +13 -0
- data/.standard.yml +9 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +125 -0
- data/LICENSE.txt +21 -0
- data/README.md +154 -0
- data/Rakefile +20 -0
- data/bin/pokeedex +85 -0
- data/lib/pokeedex/configuration.rb +47 -0
- data/lib/pokeedex/database.rb +42 -0
- data/lib/pokeedex/db/migrations/001_create_pokemons.rb +26 -0
- data/lib/pokeedex/exceptions.rb +15 -0
- data/lib/pokeedex/pokemon/base.rb +16 -0
- data/lib/pokeedex/pokemon/decorators/base.rb +112 -0
- data/lib/pokeedex/pokemon/model/base.rb +43 -0
- data/lib/pokeedex/pokemon/scrapper/base.rb +34 -0
- data/lib/pokeedex/pokemon/scrapper/fetchers/base.rb +123 -0
- data/lib/pokeedex/pokemon/scrapper/parsers/base.rb +205 -0
- data/lib/pokeedex/pokemon/scrapper/pokedex.rb +50 -0
- data/lib/pokeedex/pokemon/searcher/base.rb +59 -0
- data/lib/pokeedex/version.rb +5 -0
- data/lib/pokeedex.rb +55 -0
- data/node_modules/.bin/playwright +1 -0
- data/node_modules/.bin/playwright-core +1 -0
- data/node_modules/.yarn-integrity +22 -0
- data/node_modules/@playwright/test/LICENSE +202 -0
- data/node_modules/@playwright/test/NOTICE +5 -0
- data/node_modules/@playwright/test/README.md +169 -0
- data/node_modules/@playwright/test/cli.js +19 -0
- data/node_modules/@playwright/test/index.d.ts +18 -0
- data/node_modules/@playwright/test/index.js +17 -0
- data/node_modules/@playwright/test/index.mjs +18 -0
- data/node_modules/@playwright/test/node_modules/.bin/playwright +1 -0
- data/node_modules/@playwright/test/package.json +35 -0
- data/node_modules/@playwright/test/reporter.d.ts +17 -0
- data/node_modules/@playwright/test/reporter.js +17 -0
- data/node_modules/@playwright/test/reporter.mjs +17 -0
- data/node_modules/@types/node/LICENSE +21 -0
- data/node_modules/@types/node/README.md +15 -0
- data/node_modules/@types/node/assert/strict.d.ts +8 -0
- data/node_modules/@types/node/assert.d.ts +1040 -0
- data/node_modules/@types/node/async_hooks.d.ts +541 -0
- data/node_modules/@types/node/buffer.d.ts +2300 -0
- data/node_modules/@types/node/child_process.d.ts +1544 -0
- data/node_modules/@types/node/cluster.d.ts +578 -0
- data/node_modules/@types/node/console.d.ts +452 -0
- data/node_modules/@types/node/constants.d.ts +19 -0
- data/node_modules/@types/node/crypto.d.ts +4451 -0
- data/node_modules/@types/node/dgram.d.ts +596 -0
- data/node_modules/@types/node/diagnostics_channel.d.ts +554 -0
- data/node_modules/@types/node/dns/promises.d.ts +476 -0
- data/node_modules/@types/node/dns.d.ts +865 -0
- data/node_modules/@types/node/dom-events.d.ts +124 -0
- data/node_modules/@types/node/domain.d.ts +170 -0
- data/node_modules/@types/node/events.d.ts +931 -0
- data/node_modules/@types/node/fs/promises.d.ts +1264 -0
- data/node_modules/@types/node/fs.d.ts +4390 -0
- data/node_modules/@types/node/globals.d.ts +611 -0
- data/node_modules/@types/node/globals.global.d.ts +1 -0
- data/node_modules/@types/node/http.d.ts +1921 -0
- data/node_modules/@types/node/http2.d.ts +2555 -0
- data/node_modules/@types/node/https.d.ts +544 -0
- data/node_modules/@types/node/index.d.ts +90 -0
- data/node_modules/@types/node/inspector.d.ts +3966 -0
- data/node_modules/@types/node/module.d.ts +301 -0
- data/node_modules/@types/node/net.d.ts +995 -0
- data/node_modules/@types/node/os.d.ts +495 -0
- data/node_modules/@types/node/package.json +217 -0
- data/node_modules/@types/node/path.d.ts +200 -0
- data/node_modules/@types/node/perf_hooks.d.ts +941 -0
- data/node_modules/@types/node/process.d.ts +1912 -0
- data/node_modules/@types/node/punycode.d.ts +117 -0
- data/node_modules/@types/node/querystring.d.ts +153 -0
- data/node_modules/@types/node/readline/promises.d.ts +150 -0
- data/node_modules/@types/node/readline.d.ts +540 -0
- data/node_modules/@types/node/repl.d.ts +430 -0
- data/node_modules/@types/node/sea.d.ts +153 -0
- data/node_modules/@types/node/sqlite.d.ts +213 -0
- data/node_modules/@types/node/stream/consumers.d.ts +12 -0
- data/node_modules/@types/node/stream/promises.d.ts +83 -0
- data/node_modules/@types/node/stream/web.d.ts +606 -0
- data/node_modules/@types/node/stream.d.ts +1726 -0
- data/node_modules/@types/node/string_decoder.d.ts +67 -0
- data/node_modules/@types/node/test.d.ts +2098 -0
- data/node_modules/@types/node/timers/promises.d.ts +97 -0
- data/node_modules/@types/node/timers.d.ts +240 -0
- data/node_modules/@types/node/tls.d.ts +1220 -0
- data/node_modules/@types/node/trace_events.d.ts +197 -0
- data/node_modules/@types/node/tty.d.ts +208 -0
- data/node_modules/@types/node/url.d.ts +969 -0
- data/node_modules/@types/node/util.d.ts +2301 -0
- data/node_modules/@types/node/v8.d.ts +808 -0
- data/node_modules/@types/node/vm.d.ts +922 -0
- data/node_modules/@types/node/wasi.d.ts +181 -0
- data/node_modules/@types/node/worker_threads.d.ts +712 -0
- data/node_modules/@types/node/zlib.d.ts +539 -0
- data/node_modules/fsevents/LICENSE +22 -0
- data/node_modules/fsevents/README.md +83 -0
- data/node_modules/fsevents/fsevents.d.ts +46 -0
- data/node_modules/fsevents/fsevents.js +82 -0
- data/node_modules/fsevents/fsevents.node +0 -0
- data/node_modules/fsevents/package.json +62 -0
- data/node_modules/playwright/.eslintrc.js +6 -0
- data/node_modules/playwright/LICENSE +202 -0
- data/node_modules/playwright/NOTICE +5 -0
- data/node_modules/playwright/README.md +169 -0
- data/node_modules/playwright/ThirdPartyNotices.txt +4356 -0
- data/node_modules/playwright/cli.js +19 -0
- data/node_modules/playwright/index.d.ts +17 -0
- data/node_modules/playwright/index.js +17 -0
- data/node_modules/playwright/index.mjs +18 -0
- data/node_modules/playwright/jsx-runtime.js +41 -0
- data/node_modules/playwright/jsx-runtime.mjs +21 -0
- data/node_modules/playwright/lib/common/config.js +256 -0
- data/node_modules/playwright/lib/common/configLoader.js +321 -0
- data/node_modules/playwright/lib/common/esmLoaderHost.js +93 -0
- data/node_modules/playwright/lib/common/expectBundle.js +27 -0
- data/node_modules/playwright/lib/common/expectBundleImpl.js +389 -0
- data/node_modules/playwright/lib/common/fixtures.js +323 -0
- data/node_modules/playwright/lib/common/globals.js +48 -0
- data/node_modules/playwright/lib/common/ipc.js +48 -0
- data/node_modules/playwright/lib/common/poolBuilder.js +79 -0
- data/node_modules/playwright/lib/common/process.js +140 -0
- data/node_modules/playwright/lib/common/suiteUtils.js +133 -0
- data/node_modules/playwright/lib/common/test.js +311 -0
- data/node_modules/playwright/lib/common/testLoader.js +102 -0
- data/node_modules/playwright/lib/common/testType.js +284 -0
- data/node_modules/playwright/lib/fsWatcher.js +69 -0
- data/node_modules/playwright/lib/index.js +888 -0
- data/node_modules/playwright/lib/internalsForTest.js +28 -0
- data/node_modules/playwright/lib/isomorphic/events.js +72 -0
- data/node_modules/playwright/lib/isomorphic/folders.js +25 -0
- data/node_modules/playwright/lib/isomorphic/stringInternPool.js +58 -0
- data/node_modules/playwright/lib/isomorphic/teleReceiver.js +504 -0
- data/node_modules/playwright/lib/isomorphic/teleSuiteUpdater.js +149 -0
- data/node_modules/playwright/lib/isomorphic/testServerConnection.js +210 -0
- data/node_modules/playwright/lib/isomorphic/testServerInterface.js +5 -0
- data/node_modules/playwright/lib/isomorphic/testTree.js +272 -0
- data/node_modules/playwright/lib/loader/loaderMain.js +58 -0
- data/node_modules/playwright/lib/matchers/expect.js +297 -0
- data/node_modules/playwright/lib/matchers/matcherHint.js +50 -0
- data/node_modules/playwright/lib/matchers/matchers.js +449 -0
- data/node_modules/playwright/lib/matchers/toBeTruthy.js +55 -0
- data/node_modules/playwright/lib/matchers/toEqual.js +57 -0
- data/node_modules/playwright/lib/matchers/toMatchSnapshot.js +383 -0
- data/node_modules/playwright/lib/matchers/toMatchText.js +76 -0
- data/node_modules/playwright/lib/plugins/gitCommitInfoPlugin.js +78 -0
- data/node_modules/playwright/lib/plugins/index.js +19 -0
- data/node_modules/playwright/lib/plugins/webServerPlugin.js +187 -0
- data/node_modules/playwright/lib/program.js +346 -0
- data/node_modules/playwright/lib/reporters/base.js +553 -0
- data/node_modules/playwright/lib/reporters/blob.js +133 -0
- data/node_modules/playwright/lib/reporters/dot.js +82 -0
- data/node_modules/playwright/lib/reporters/empty.js +42 -0
- data/node_modules/playwright/lib/reporters/github.js +115 -0
- data/node_modules/playwright/lib/reporters/html.js +623 -0
- data/node_modules/playwright/lib/reporters/internalReporter.js +123 -0
- data/node_modules/playwright/lib/reporters/json.js +243 -0
- data/node_modules/playwright/lib/reporters/junit.js +233 -0
- data/node_modules/playwright/lib/reporters/line.js +108 -0
- data/node_modules/playwright/lib/reporters/list.js +222 -0
- data/node_modules/playwright/lib/reporters/markdown.js +76 -0
- data/node_modules/playwright/lib/reporters/merge.js +477 -0
- data/node_modules/playwright/lib/reporters/multiplexer.js +90 -0
- data/node_modules/playwright/lib/reporters/reporterV2.js +118 -0
- data/node_modules/playwright/lib/reporters/teleEmitter.js +268 -0
- data/node_modules/playwright/lib/reporters/versions/blobV1.js +5 -0
- data/node_modules/playwright/lib/runner/dispatcher.js +532 -0
- data/node_modules/playwright/lib/runner/failureTracker.js +60 -0
- data/node_modules/playwright/lib/runner/loadUtils.js +308 -0
- data/node_modules/playwright/lib/runner/loaderHost.js +85 -0
- data/node_modules/playwright/lib/runner/processHost.js +175 -0
- data/node_modules/playwright/lib/runner/projectUtils.js +203 -0
- data/node_modules/playwright/lib/runner/reporters.js +151 -0
- data/node_modules/playwright/lib/runner/runner.js +179 -0
- data/node_modules/playwright/lib/runner/sigIntWatcher.js +100 -0
- data/node_modules/playwright/lib/runner/taskRunner.js +147 -0
- data/node_modules/playwright/lib/runner/tasks.js +407 -0
- data/node_modules/playwright/lib/runner/testGroups.js +136 -0
- data/node_modules/playwright/lib/runner/testServer.js +605 -0
- data/node_modules/playwright/lib/runner/uiModeReporter.js +31 -0
- data/node_modules/playwright/lib/runner/vcs.js +55 -0
- data/node_modules/playwright/lib/runner/watchMode.js +398 -0
- data/node_modules/playwright/lib/runner/workerHost.js +85 -0
- data/node_modules/playwright/lib/third_party/tsconfig-loader.js +134 -0
- data/node_modules/playwright/lib/transform/babelBundle.js +28 -0
- data/node_modules/playwright/lib/transform/babelBundleImpl.js +2032 -0
- data/node_modules/playwright/lib/transform/compilationCache.js +254 -0
- data/node_modules/playwright/lib/transform/esmLoader.js +117 -0
- data/node_modules/playwright/lib/transform/esmUtils.js +32 -0
- data/node_modules/playwright/lib/transform/portTransport.js +81 -0
- data/node_modules/playwright/lib/transform/transform.js +267 -0
- data/node_modules/playwright/lib/util.js +356 -0
- data/node_modules/playwright/lib/utilsBundle.js +28 -0
- data/node_modules/playwright/lib/utilsBundleImpl.js +102 -0
- data/node_modules/playwright/lib/worker/fixtureRunner.js +279 -0
- data/node_modules/playwright/lib/worker/testInfo.js +397 -0
- data/node_modules/playwright/lib/worker/testTracing.js +314 -0
- data/node_modules/playwright/lib/worker/timeoutManager.js +153 -0
- data/node_modules/playwright/lib/worker/workerMain.js +637 -0
- data/node_modules/playwright/node_modules/.bin/playwright-core +1 -0
- data/node_modules/playwright/package.json +66 -0
- data/node_modules/playwright/test.d.ts +18 -0
- data/node_modules/playwright/test.js +24 -0
- data/node_modules/playwright/test.mjs +33 -0
- data/node_modules/playwright/types/test.d.ts +8444 -0
- data/node_modules/playwright/types/testReporter.d.ts +749 -0
- data/node_modules/playwright-core/LICENSE +202 -0
- data/node_modules/playwright-core/NOTICE +5 -0
- data/node_modules/playwright-core/README.md +3 -0
- data/node_modules/playwright-core/ThirdPartyNotices.txt +1548 -0
- data/node_modules/playwright-core/bin/PrintDeps.exe +0 -0
- data/node_modules/playwright-core/bin/README.md +2 -0
- data/node_modules/playwright-core/bin/install_media_pack.ps1 +5 -0
- data/node_modules/playwright-core/bin/reinstall_chrome_beta_linux.sh +40 -0
- data/node_modules/playwright-core/bin/reinstall_chrome_beta_mac.sh +13 -0
- data/node_modules/playwright-core/bin/reinstall_chrome_beta_win.ps1 +24 -0
- data/node_modules/playwright-core/bin/reinstall_chrome_stable_linux.sh +40 -0
- data/node_modules/playwright-core/bin/reinstall_chrome_stable_mac.sh +12 -0
- data/node_modules/playwright-core/bin/reinstall_chrome_stable_win.ps1 +24 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_beta_linux.sh +40 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_beta_mac.sh +11 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_beta_win.ps1 +23 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_dev_linux.sh +40 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_dev_mac.sh +11 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_dev_win.ps1 +23 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_stable_linux.sh +40 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_stable_mac.sh +11 -0
- data/node_modules/playwright-core/bin/reinstall_msedge_stable_win.ps1 +24 -0
- data/node_modules/playwright-core/browsers.json +53 -0
- data/node_modules/playwright-core/cli.js +18 -0
- data/node_modules/playwright-core/index.d.ts +17 -0
- data/node_modules/playwright-core/index.js +33 -0
- data/node_modules/playwright-core/index.mjs +28 -0
- data/node_modules/playwright-core/lib/androidServerImpl.js +69 -0
- data/node_modules/playwright-core/lib/browserServerImpl.js +92 -0
- data/node_modules/playwright-core/lib/cli/driver.js +95 -0
- data/node_modules/playwright-core/lib/cli/program.js +577 -0
- data/node_modules/playwright-core/lib/cli/programWithTestStub.js +67 -0
- data/node_modules/playwright-core/lib/client/accessibility.js +50 -0
- data/node_modules/playwright-core/lib/client/android.js +473 -0
- data/node_modules/playwright-core/lib/client/api.js +279 -0
- data/node_modules/playwright-core/lib/client/artifact.js +79 -0
- data/node_modules/playwright-core/lib/client/browser.js +145 -0
- data/node_modules/playwright-core/lib/client/browserContext.js +541 -0
- data/node_modules/playwright-core/lib/client/browserType.js +241 -0
- data/node_modules/playwright-core/lib/client/cdpSession.js +53 -0
- data/node_modules/playwright-core/lib/client/channelOwner.js +231 -0
- data/node_modules/playwright-core/lib/client/clientHelper.js +57 -0
- data/node_modules/playwright-core/lib/client/clientInstrumentation.js +50 -0
- data/node_modules/playwright-core/lib/client/clock.js +68 -0
- data/node_modules/playwright-core/lib/client/connection.js +330 -0
- data/node_modules/playwright-core/lib/client/consoleMessage.js +55 -0
- data/node_modules/playwright-core/lib/client/coverage.js +41 -0
- data/node_modules/playwright-core/lib/client/dialog.js +57 -0
- data/node_modules/playwright-core/lib/client/download.js +62 -0
- data/node_modules/playwright-core/lib/client/electron.js +135 -0
- data/node_modules/playwright-core/lib/client/elementHandle.js +321 -0
- data/node_modules/playwright-core/lib/client/errors.js +77 -0
- data/node_modules/playwright-core/lib/client/eventEmitter.js +314 -0
- data/node_modules/playwright-core/lib/client/events.js +94 -0
- data/node_modules/playwright-core/lib/client/fetch.js +396 -0
- data/node_modules/playwright-core/lib/client/fileChooser.js +45 -0
- data/node_modules/playwright-core/lib/client/frame.js +504 -0
- data/node_modules/playwright-core/lib/client/harRouter.js +99 -0
- data/node_modules/playwright-core/lib/client/input.js +111 -0
- data/node_modules/playwright-core/lib/client/jsHandle.js +129 -0
- data/node_modules/playwright-core/lib/client/jsonPipe.js +35 -0
- data/node_modules/playwright-core/lib/client/localUtils.js +35 -0
- data/node_modules/playwright-core/lib/client/locator.js +441 -0
- data/node_modules/playwright-core/lib/client/network.js +604 -0
- data/node_modules/playwright-core/lib/client/page.js +725 -0
- data/node_modules/playwright-core/lib/client/playwright.js +77 -0
- data/node_modules/playwright-core/lib/client/selectors.js +67 -0
- data/node_modules/playwright-core/lib/client/stream.js +54 -0
- data/node_modules/playwright-core/lib/client/tracing.js +138 -0
- data/node_modules/playwright-core/lib/client/types.js +24 -0
- data/node_modules/playwright-core/lib/client/video.js +51 -0
- data/node_modules/playwright-core/lib/client/waiter.js +158 -0
- data/node_modules/playwright-core/lib/client/webError.js +37 -0
- data/node_modules/playwright-core/lib/client/worker.js +71 -0
- data/node_modules/playwright-core/lib/client/writableStream.js +54 -0
- data/node_modules/playwright-core/lib/common/socksProxy.js +569 -0
- data/node_modules/playwright-core/lib/common/timeoutSettings.js +73 -0
- data/node_modules/playwright-core/lib/common/types.js +5 -0
- data/node_modules/playwright-core/lib/generated/clockSource.js +7 -0
- data/node_modules/playwright-core/lib/generated/consoleApiSource.js +7 -0
- data/node_modules/playwright-core/lib/generated/injectedScriptSource.js +7 -0
- data/node_modules/playwright-core/lib/generated/recorderSource.js +7 -0
- data/node_modules/playwright-core/lib/generated/utilityScriptSource.js +7 -0
- data/node_modules/playwright-core/lib/image_tools/colorUtils.js +98 -0
- data/node_modules/playwright-core/lib/image_tools/compare.js +108 -0
- data/node_modules/playwright-core/lib/image_tools/imageChannel.js +70 -0
- data/node_modules/playwright-core/lib/image_tools/stats.js +102 -0
- data/node_modules/playwright-core/lib/inProcessFactory.js +54 -0
- data/node_modules/playwright-core/lib/inprocess.js +20 -0
- data/node_modules/playwright-core/lib/outofprocess.js +67 -0
- data/node_modules/playwright-core/lib/protocol/debug.js +27 -0
- data/node_modules/playwright-core/lib/protocol/serializers.js +173 -0
- data/node_modules/playwright-core/lib/protocol/transport.js +82 -0
- data/node_modules/playwright-core/lib/protocol/validator.js +2694 -0
- data/node_modules/playwright-core/lib/protocol/validatorPrimitives.js +139 -0
- data/node_modules/playwright-core/lib/remote/playwrightConnection.js +274 -0
- data/node_modules/playwright-core/lib/remote/playwrightServer.js +110 -0
- data/node_modules/playwright-core/lib/server/accessibility.js +62 -0
- data/node_modules/playwright-core/lib/server/android/android.js +441 -0
- data/node_modules/playwright-core/lib/server/android/backendAdb.js +172 -0
- data/node_modules/playwright-core/lib/server/artifact.js +104 -0
- data/node_modules/playwright-core/lib/server/bidi/bidiBrowser.js +296 -0
- data/node_modules/playwright-core/lib/server/bidi/bidiConnection.js +206 -0
- data/node_modules/playwright-core/lib/server/bidi/bidiExecutionContext.js +162 -0
- data/node_modules/playwright-core/lib/server/bidi/bidiFirefox.js +110 -0
- data/node_modules/playwright-core/lib/server/bidi/bidiInput.js +174 -0
- data/node_modules/playwright-core/lib/server/bidi/bidiNetworkManager.js +304 -0
- data/node_modules/playwright-core/lib/server/bidi/bidiPage.js +456 -0
- data/node_modules/playwright-core/lib/server/bidi/third_party/bidiDeserializer.js +93 -0
- data/node_modules/playwright-core/lib/server/bidi/third_party/bidiKeyboard.js +238 -0
- data/node_modules/playwright-core/lib/server/bidi/third_party/bidiProtocol.js +139 -0
- data/node_modules/playwright-core/lib/server/bidi/third_party/bidiSerializer.js +144 -0
- data/node_modules/playwright-core/lib/server/browser.js +137 -0
- data/node_modules/playwright-core/lib/server/browserContext.js +684 -0
- data/node_modules/playwright-core/lib/server/browserType.js +307 -0
- data/node_modules/playwright-core/lib/server/chromium/appIcon.png +0 -0
- data/node_modules/playwright-core/lib/server/chromium/chromium.js +362 -0
- data/node_modules/playwright-core/lib/server/chromium/chromiumSwitches.js +44 -0
- data/node_modules/playwright-core/lib/server/chromium/crAccessibility.js +237 -0
- data/node_modules/playwright-core/lib/server/chromium/crBrowser.js +515 -0
- data/node_modules/playwright-core/lib/server/chromium/crConnection.js +228 -0
- data/node_modules/playwright-core/lib/server/chromium/crCoverage.js +246 -0
- data/node_modules/playwright-core/lib/server/chromium/crDevTools.js +104 -0
- data/node_modules/playwright-core/lib/server/chromium/crDragDrop.js +143 -0
- data/node_modules/playwright-core/lib/server/chromium/crExecutionContext.js +156 -0
- data/node_modules/playwright-core/lib/server/chromium/crInput.js +171 -0
- data/node_modules/playwright-core/lib/server/chromium/crNetworkManager.js +767 -0
- data/node_modules/playwright-core/lib/server/chromium/crPage.js +1128 -0
- data/node_modules/playwright-core/lib/server/chromium/crPdf.js +153 -0
- data/node_modules/playwright-core/lib/server/chromium/crProtocolHelper.js +133 -0
- data/node_modules/playwright-core/lib/server/chromium/crServiceWorker.js +112 -0
- data/node_modules/playwright-core/lib/server/chromium/defaultFontFamilies.js +145 -0
- data/node_modules/playwright-core/lib/server/chromium/videoRecorder.js +155 -0
- data/node_modules/playwright-core/lib/server/clock.js +125 -0
- data/node_modules/playwright-core/lib/server/codegen/csharp.js +299 -0
- data/node_modules/playwright-core/lib/server/codegen/java.js +235 -0
- data/node_modules/playwright-core/lib/server/codegen/javascript.js +223 -0
- data/node_modules/playwright-core/lib/server/codegen/jsonl.js +47 -0
- data/node_modules/playwright-core/lib/server/codegen/language.js +76 -0
- data/node_modules/playwright-core/lib/server/codegen/languages.js +30 -0
- data/node_modules/playwright-core/lib/server/codegen/python.js +265 -0
- data/node_modules/playwright-core/lib/server/codegen/types.js +5 -0
- data/node_modules/playwright-core/lib/server/console.js +57 -0
- data/node_modules/playwright-core/lib/server/cookieStore.js +112 -0
- data/node_modules/playwright-core/lib/server/debugController.js +234 -0
- data/node_modules/playwright-core/lib/server/debugger.js +132 -0
- data/node_modules/playwright-core/lib/server/deviceDescriptors.js +26 -0
- data/node_modules/playwright-core/lib/server/deviceDescriptorsSource.json +1669 -0
- data/node_modules/playwright-core/lib/server/dialog.js +70 -0
- data/node_modules/playwright-core/lib/server/dispatchers/androidDispatcher.js +193 -0
- data/node_modules/playwright-core/lib/server/dispatchers/artifactDispatcher.js +118 -0
- data/node_modules/playwright-core/lib/server/dispatchers/browserContextDispatcher.js +351 -0
- data/node_modules/playwright-core/lib/server/dispatchers/browserDispatcher.js +170 -0
- data/node_modules/playwright-core/lib/server/dispatchers/browserTypeDispatcher.js +55 -0
- data/node_modules/playwright-core/lib/server/dispatchers/cdpSessionDispatcher.js +48 -0
- data/node_modules/playwright-core/lib/server/dispatchers/debugControllerDispatcher.js +103 -0
- data/node_modules/playwright-core/lib/server/dispatchers/dialogDispatcher.js +44 -0
- data/node_modules/playwright-core/lib/server/dispatchers/dispatcher.js +395 -0
- data/node_modules/playwright-core/lib/server/dispatchers/electronDispatcher.js +93 -0
- data/node_modules/playwright-core/lib/server/dispatchers/elementHandlerDispatcher.js +228 -0
- data/node_modules/playwright-core/lib/server/dispatchers/frameDispatcher.js +286 -0
- data/node_modules/playwright-core/lib/server/dispatchers/jsHandleDispatcher.js +102 -0
- data/node_modules/playwright-core/lib/server/dispatchers/jsonPipeDispatcher.js +59 -0
- data/node_modules/playwright-core/lib/server/dispatchers/localUtilsDispatcher.js +413 -0
- data/node_modules/playwright-core/lib/server/dispatchers/networkDispatchers.js +221 -0
- data/node_modules/playwright-core/lib/server/dispatchers/pageDispatcher.js +358 -0
- data/node_modules/playwright-core/lib/server/dispatchers/playwrightDispatcher.js +106 -0
- data/node_modules/playwright-core/lib/server/dispatchers/selectorsDispatcher.js +36 -0
- data/node_modules/playwright-core/lib/server/dispatchers/streamDispatcher.js +62 -0
- data/node_modules/playwright-core/lib/server/dispatchers/tracingDispatcher.js +54 -0
- data/node_modules/playwright-core/lib/server/dispatchers/writableStreamDispatcher.js +58 -0
- data/node_modules/playwright-core/lib/server/dom.js +845 -0
- data/node_modules/playwright-core/lib/server/download.js +53 -0
- data/node_modules/playwright-core/lib/server/electron/electron.js +296 -0
- data/node_modules/playwright-core/lib/server/electron/loader.js +57 -0
- data/node_modules/playwright-core/lib/server/errors.js +68 -0
- data/node_modules/playwright-core/lib/server/fetch.js +660 -0
- data/node_modules/playwright-core/lib/server/fileChooser.js +42 -0
- data/node_modules/playwright-core/lib/server/fileUploadUtils.js +75 -0
- data/node_modules/playwright-core/lib/server/firefox/ffAccessibility.js +216 -0
- data/node_modules/playwright-core/lib/server/firefox/ffBrowser.js +458 -0
- data/node_modules/playwright-core/lib/server/firefox/ffConnection.js +168 -0
- data/node_modules/playwright-core/lib/server/firefox/ffExecutionContext.js +138 -0
- data/node_modules/playwright-core/lib/server/firefox/ffInput.js +150 -0
- data/node_modules/playwright-core/lib/server/firefox/ffNetworkManager.js +233 -0
- data/node_modules/playwright-core/lib/server/firefox/ffPage.js +556 -0
- data/node_modules/playwright-core/lib/server/firefox/firefox.js +110 -0
- data/node_modules/playwright-core/lib/server/formData.js +75 -0
- data/node_modules/playwright-core/lib/server/frameSelectors.js +171 -0
- data/node_modules/playwright-core/lib/server/frames.js +1654 -0
- data/node_modules/playwright-core/lib/server/har/harRecorder.js +139 -0
- data/node_modules/playwright-core/lib/server/har/harTracer.js +531 -0
- data/node_modules/playwright-core/lib/server/helper.js +103 -0
- data/node_modules/playwright-core/lib/server/index.js +114 -0
- data/node_modules/playwright-core/lib/server/input.js +311 -0
- data/node_modules/playwright-core/lib/server/instrumentation.js +70 -0
- data/node_modules/playwright-core/lib/server/isomorphic/utilityScriptSerializers.js +226 -0
- data/node_modules/playwright-core/lib/server/javascript.js +306 -0
- data/node_modules/playwright-core/lib/server/launchApp.js +91 -0
- data/node_modules/playwright-core/lib/server/macEditingCommands.js +139 -0
- data/node_modules/playwright-core/lib/server/network.js +617 -0
- data/node_modules/playwright-core/lib/server/page.js +825 -0
- data/node_modules/playwright-core/lib/server/pipeTransport.js +85 -0
- data/node_modules/playwright-core/lib/server/playwright.js +85 -0
- data/node_modules/playwright-core/lib/server/progress.js +102 -0
- data/node_modules/playwright-core/lib/server/protocolError.js +49 -0
- data/node_modules/playwright-core/lib/server/recorder/contextRecorder.js +316 -0
- data/node_modules/playwright-core/lib/server/recorder/recorderActions.js +5 -0
- data/node_modules/playwright-core/lib/server/recorder/recorderApp.js +190 -0
- data/node_modules/playwright-core/lib/server/recorder/recorderCollection.js +127 -0
- data/node_modules/playwright-core/lib/server/recorder/recorderRunner.js +177 -0
- data/node_modules/playwright-core/lib/server/recorder/recorderUtils.js +71 -0
- data/node_modules/playwright-core/lib/server/recorder/throttledFile.js +46 -0
- data/node_modules/playwright-core/lib/server/recorder.js +324 -0
- data/node_modules/playwright-core/lib/server/registry/browserFetcher.js +168 -0
- data/node_modules/playwright-core/lib/server/registry/dependencies.js +322 -0
- data/node_modules/playwright-core/lib/server/registry/index.js +924 -0
- data/node_modules/playwright-core/lib/server/registry/nativeDeps.js +490 -0
- data/node_modules/playwright-core/lib/server/registry/oopDownloadBrowserMain.js +138 -0
- data/node_modules/playwright-core/lib/server/screenshotter.js +348 -0
- data/node_modules/playwright-core/lib/server/selectors.js +73 -0
- data/node_modules/playwright-core/lib/server/socksClientCertificatesInterceptor.js +328 -0
- data/node_modules/playwright-core/lib/server/socksInterceptor.js +100 -0
- data/node_modules/playwright-core/lib/server/trace/recorder/snapshotter.js +171 -0
- data/node_modules/playwright-core/lib/server/trace/recorder/snapshotterInjected.js +493 -0
- data/node_modules/playwright-core/lib/server/trace/recorder/tracing.js +486 -0
- data/node_modules/playwright-core/lib/server/trace/test/inMemorySnapshotter.js +93 -0
- data/node_modules/playwright-core/lib/server/trace/viewer/traceViewer.js +216 -0
- data/node_modules/playwright-core/lib/server/transport.js +191 -0
- data/node_modules/playwright-core/lib/server/types.js +24 -0
- data/node_modules/playwright-core/lib/server/usKeyboardLayout.js +555 -0
- data/node_modules/playwright-core/lib/server/webkit/webkit.js +87 -0
- data/node_modules/playwright-core/lib/server/webkit/wkAccessibility.js +194 -0
- data/node_modules/playwright-core/lib/server/webkit/wkBrowser.js +328 -0
- data/node_modules/playwright-core/lib/server/webkit/wkConnection.js +173 -0
- data/node_modules/playwright-core/lib/server/webkit/wkExecutionContext.js +146 -0
- data/node_modules/playwright-core/lib/server/webkit/wkInput.js +169 -0
- data/node_modules/playwright-core/lib/server/webkit/wkInterceptableRequest.js +162 -0
- data/node_modules/playwright-core/lib/server/webkit/wkPage.js +1216 -0
- data/node_modules/playwright-core/lib/server/webkit/wkProvisionalPage.js +94 -0
- data/node_modules/playwright-core/lib/server/webkit/wkWorkers.js +104 -0
- data/node_modules/playwright-core/lib/third_party/diff_match_patch.js +2222 -0
- data/node_modules/playwright-core/lib/third_party/pixelmatch.js +255 -0
- data/node_modules/playwright-core/lib/utils/ascii.js +31 -0
- data/node_modules/playwright-core/lib/utils/comparators.js +171 -0
- data/node_modules/playwright-core/lib/utils/crypto.js +174 -0
- data/node_modules/playwright-core/lib/utils/debug.js +46 -0
- data/node_modules/playwright-core/lib/utils/debugLogger.js +91 -0
- data/node_modules/playwright-core/lib/utils/env.js +49 -0
- data/node_modules/playwright-core/lib/utils/eventsHelper.js +38 -0
- data/node_modules/playwright-core/lib/utils/expectUtils.js +33 -0
- data/node_modules/playwright-core/lib/utils/fileUtils.js +205 -0
- data/node_modules/playwright-core/lib/utils/happy-eyeballs.js +181 -0
- data/node_modules/playwright-core/lib/utils/headers.js +52 -0
- data/node_modules/playwright-core/lib/utils/hostPlatform.js +133 -0
- data/node_modules/playwright-core/lib/utils/httpServer.js +236 -0
- data/node_modules/playwright-core/lib/utils/index.js +368 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/cssParser.js +250 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/cssTokenizer.js +979 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/locatorGenerators.js +651 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/locatorParser.js +179 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/locatorUtils.js +62 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/mimeType.js +29 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/selectorParser.js +397 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/stringUtils.js +139 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/traceUtils.js +39 -0
- data/node_modules/playwright-core/lib/utils/isomorphic/urlMatch.js +120 -0
- data/node_modules/playwright-core/lib/utils/linuxUtils.js +78 -0
- data/node_modules/playwright-core/lib/utils/manualPromise.js +109 -0
- data/node_modules/playwright-core/lib/utils/multimap.js +75 -0
- data/node_modules/playwright-core/lib/utils/network.js +160 -0
- data/node_modules/playwright-core/lib/utils/processLauncher.js +248 -0
- data/node_modules/playwright-core/lib/utils/profiler.js +53 -0
- data/node_modules/playwright-core/lib/utils/rtti.js +44 -0
- data/node_modules/playwright-core/lib/utils/semaphore.js +51 -0
- data/node_modules/playwright-core/lib/utils/spawnAsync.js +45 -0
- data/node_modules/playwright-core/lib/utils/stackTrace.js +121 -0
- data/node_modules/playwright-core/lib/utils/task.js +58 -0
- data/node_modules/playwright-core/lib/utils/time.js +37 -0
- data/node_modules/playwright-core/lib/utils/timeoutRunner.js +66 -0
- data/node_modules/playwright-core/lib/utils/traceUtils.js +44 -0
- data/node_modules/playwright-core/lib/utils/userAgent.js +105 -0
- data/node_modules/playwright-core/lib/utils/wsServer.js +127 -0
- data/node_modules/playwright-core/lib/utils/zipFile.js +75 -0
- data/node_modules/playwright-core/lib/utils/zones.js +62 -0
- data/node_modules/playwright-core/lib/utilsBundle.js +82 -0
- data/node_modules/playwright-core/lib/utilsBundleImpl/index.js +53 -0
- data/node_modules/playwright-core/lib/utilsBundleImpl/xdg-open +1066 -0
- data/node_modules/playwright-core/lib/vite/htmlReport/index.html +66 -0
- data/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-aW6Vz3gf.js +24 -0
- data/node_modules/playwright-core/lib/vite/recorder/assets/codeMirrorModule-ez37Vkbh.css +1 -0
- data/node_modules/playwright-core/lib/vite/recorder/assets/codicon-DCmgc-ay.ttf +0 -0
- data/node_modules/playwright-core/lib/vite/recorder/assets/index-B-MT5gKo.css +1 -0
- data/node_modules/playwright-core/lib/vite/recorder/assets/index-DCpXOVIh.js +47 -0
- data/node_modules/playwright-core/lib/vite/recorder/index.html +29 -0
- data/node_modules/playwright-core/lib/vite/recorder/playwright-logo.svg +9 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/assets/codeMirrorModule-eFKCUIu2.js +24 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/assets/testServerConnection-DeE2kSzz.js +1 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/assets/workbench-D0cirtfA.js +72 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/assets/xtermModule-BeNbaIVa.js +9 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/codeMirrorModule.ez37Vkbh.css +1 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/codicon.DCmgc-ay.ttf +0 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/embedded.BkuvsLJp.js +2 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/embedded.html +16 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/embedded.w7WN2u1R.css +1 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/index.C968kAiC.js +2 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/index.CrbWWHbf.css +1 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/index.html +27 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/playwright-logo.svg +9 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/snapshot.html +21 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/sw.bundle.js +3 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/uiMode.BkFnr4V0.js +10 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/uiMode.D3cNFP6u.css +1 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/uiMode.html +18 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/workbench.DjbIuxix.css +1 -0
- data/node_modules/playwright-core/lib/vite/traceViewer/xtermModule.DSXBckUd.css +32 -0
- data/node_modules/playwright-core/lib/zipBundle.js +25 -0
- data/node_modules/playwright-core/lib/zipBundleImpl.js +5 -0
- data/node_modules/playwright-core/package.json +44 -0
- data/node_modules/playwright-core/types/protocol.d.ts +21500 -0
- data/node_modules/playwright-core/types/structs.d.ts +45 -0
- data/node_modules/playwright-core/types/types.d.ts +21431 -0
- data/node_modules/undici-types/LICENSE +21 -0
- data/node_modules/undici-types/README.md +6 -0
- data/node_modules/undici-types/agent.d.ts +31 -0
- data/node_modules/undici-types/api.d.ts +43 -0
- data/node_modules/undici-types/balanced-pool.d.ts +29 -0
- data/node_modules/undici-types/cache.d.ts +36 -0
- data/node_modules/undici-types/client.d.ts +108 -0
- data/node_modules/undici-types/connector.d.ts +34 -0
- data/node_modules/undici-types/content-type.d.ts +21 -0
- data/node_modules/undici-types/cookies.d.ts +28 -0
- data/node_modules/undici-types/diagnostics-channel.d.ts +66 -0
- data/node_modules/undici-types/dispatcher.d.ts +255 -0
- data/node_modules/undici-types/env-http-proxy-agent.d.ts +21 -0
- data/node_modules/undici-types/errors.d.ts +149 -0
- data/node_modules/undici-types/eventsource.d.ts +63 -0
- data/node_modules/undici-types/fetch.d.ts +209 -0
- data/node_modules/undici-types/file.d.ts +39 -0
- data/node_modules/undici-types/filereader.d.ts +54 -0
- data/node_modules/undici-types/formdata.d.ts +108 -0
- data/node_modules/undici-types/global-dispatcher.d.ts +9 -0
- data/node_modules/undici-types/global-origin.d.ts +7 -0
- data/node_modules/undici-types/handlers.d.ts +15 -0
- data/node_modules/undici-types/header.d.ts +4 -0
- data/node_modules/undici-types/index.d.ts +71 -0
- data/node_modules/undici-types/interceptors.d.ts +15 -0
- data/node_modules/undici-types/mock-agent.d.ts +50 -0
- data/node_modules/undici-types/mock-client.d.ts +25 -0
- data/node_modules/undici-types/mock-errors.d.ts +12 -0
- data/node_modules/undici-types/mock-interceptor.d.ts +93 -0
- data/node_modules/undici-types/mock-pool.d.ts +25 -0
- data/node_modules/undici-types/package.json +55 -0
- data/node_modules/undici-types/patch.d.ts +71 -0
- data/node_modules/undici-types/pool-stats.d.ts +19 -0
- data/node_modules/undici-types/pool.d.ts +39 -0
- data/node_modules/undici-types/proxy-agent.d.ts +28 -0
- data/node_modules/undici-types/readable.d.ts +60 -0
- data/node_modules/undici-types/retry-agent.d.ts +8 -0
- data/node_modules/undici-types/retry-handler.d.ts +116 -0
- data/node_modules/undici-types/util.d.ts +18 -0
- data/node_modules/undici-types/webidl.d.ts +222 -0
- data/node_modules/undici-types/websocket.d.ts +152 -0
- data/pokeedex.gemspec +32 -0
- data/spec/fixtures/pokemon_com/responses/GET-200-bulbasaur.html +2262 -0
- data/spec/fixtures/pokemon_com/responses/GET-404-not-found.html +808 -0
- data/spec/pokeedex/configuration_spec.rb +37 -0
- data/spec/pokeedex/database_spec.rb +21 -0
- data/spec/pokeedex/exceptions_spec.rb +11 -0
- data/spec/pokeedex/pokemon/base_spec.rb +15 -0
- data/spec/pokeedex/pokemon/decorators/base_spec.rb +63 -0
- data/spec/pokeedex/pokemon/model/base_spec.rb +36 -0
- data/spec/pokeedex/pokemon/scrapper/fetchers/base_spec.rb +36 -0
- data/spec/pokeedex/pokemon/scrapper/parsers/base_spec.rb +49 -0
- data/spec/pokeedex/pokemon/scrapper/pokedex_spec.rb +71 -0
- data/spec/pokeedex/pokemon/searcher/base.rb +81 -0
- data/spec/pokeedex_spec.rb +7 -0
- data/spec/spec_helper.rb +42 -0
- data/yarn.lock +41 -0
- metadata +731 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sequel'
|
4
|
+
|
5
|
+
Sequel.extension :migration
|
6
|
+
|
7
|
+
module Pokeedex # :nodoc:
|
8
|
+
##
|
9
|
+
# Class that holds the database connection and methods to connect to the database and run the migrations if needed and clean the database for testing purposes
|
10
|
+
class Database
|
11
|
+
##
|
12
|
+
# The database connection to use for the gem (default: /path/to/pokeedex/db/pokeedex_local.sqlite3)
|
13
|
+
attr_accessor :db_connection
|
14
|
+
|
15
|
+
##
|
16
|
+
# Connect to the database with the configuration provided and set the database connection to the connection object
|
17
|
+
def self.connect(config)
|
18
|
+
@db_connection = config.db_connection
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
# Return the database connection to use for the gem (default: /path/to/pokeedex/db/pokeedex_local.sqlite3)
|
23
|
+
def self.connection
|
24
|
+
@db_connection
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Run the migrations for the database connection to the database file to use for the gem (default: /path/to/pokeedex/db/pokeedex_local.sqlite3) using the migrations in the migrations folder
|
29
|
+
# The migrations are run in the order of the timestamp in the filename of the migration file (e.g. 001_create_pokemon_table.rb)
|
30
|
+
def self.run_migrations!
|
31
|
+
Sequel::Migrator.run(connection, File.join(Pokeedex.root_path, 'lib', 'pokeedex', 'db', 'migrations'))
|
32
|
+
end
|
33
|
+
|
34
|
+
##
|
35
|
+
# Clean the database by deleting all the rows in all the tables in the database for testing purposes (e.g. before running the tests)
|
36
|
+
def self.clean!
|
37
|
+
connection.tables.each do |table|
|
38
|
+
connection.from(table).delete
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'sequel'
|
2
|
+
|
3
|
+
Sequel.migration do
|
4
|
+
change do
|
5
|
+
unless table_exists?(:pokemons)
|
6
|
+
create_table :pokemons do
|
7
|
+
primary_key :id
|
8
|
+
Integer :number
|
9
|
+
index :number, unique: true
|
10
|
+
String :name
|
11
|
+
index :name
|
12
|
+
String :description
|
13
|
+
Float :hight
|
14
|
+
Float :weight
|
15
|
+
String :category
|
16
|
+
Text :abilities
|
17
|
+
Text :gender
|
18
|
+
Text :types
|
19
|
+
Text :weakness
|
20
|
+
Text :stats
|
21
|
+
Time :created_at
|
22
|
+
Time :updated_at
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Pokeedex # :nodoc:
|
4
|
+
##
|
5
|
+
# Class that holds the exceptions for the gem
|
6
|
+
module Exceptions
|
7
|
+
##
|
8
|
+
# Error that is raised when an error occurs while trying to get the information from the scrapper class
|
9
|
+
class ScrapperError < StandardError
|
10
|
+
def initialize(msg = 'An error occurred while trying to get the information. Please try again later.')
|
11
|
+
super
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Pokeedex # :nodoc:
|
4
|
+
module Pokemon # :nodoc:
|
5
|
+
##
|
6
|
+
# The base class for the Pokemon module. It holds the methods to search for a Pokemon by number or name
|
7
|
+
class Base
|
8
|
+
##
|
9
|
+
# Search for a Pokemon by number or name
|
10
|
+
# @param query [String] the number or name of the Pokemon to search
|
11
|
+
def self.search(query)
|
12
|
+
Searcher::Base.new(query)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
module Pokeedex # :nodoc:
|
2
|
+
module Pokemon # :nodoc:
|
3
|
+
module Decorators # :nodoc:
|
4
|
+
##
|
5
|
+
# Base class for the Pokemon decorators
|
6
|
+
# This class is used to decorate the Pokemon object with additional information and format it for display to the user in the CLI or other interfaces.
|
7
|
+
# The class is initialized with a Pokemon object and has a method to return the decorated Pokemon object as a string for display to the user in the CLI or other interfaces with the following information:
|
8
|
+
# ==== For example
|
9
|
+
# Número: 1
|
10
|
+
# Nombre: Bulbasaur
|
11
|
+
# Descripción: Tras nacer, crece alimentándose durante un tiempo de los nutrientes que contiene el bulbo de su lomo.
|
12
|
+
# Altura: 0.7 m
|
13
|
+
# Peso: 6.9 kg
|
14
|
+
# Categoría:
|
15
|
+
# Habilidades: Espesura
|
16
|
+
# Genero: Macho, Hembra
|
17
|
+
# Tipo: Planta, Veneno
|
18
|
+
# Habilidades: Fuego, Hielo, Volador, Psíquico
|
19
|
+
#
|
20
|
+
# Puntos de base
|
21
|
+
# %%%------------ PS
|
22
|
+
# %%%------------ Ataque
|
23
|
+
# %%%------------ Defensa
|
24
|
+
# %%%%----------- Ataque Especial
|
25
|
+
# %%%%----------- Defensa Especial
|
26
|
+
# %%%------------ Velocidad
|
27
|
+
#
|
28
|
+
class Base
|
29
|
+
##
|
30
|
+
# The Pokemon object to decorate. Receive a Pokemon object to decorate of Pokeedex::Pokemon::Model::Base class
|
31
|
+
attr_reader :pokemon
|
32
|
+
|
33
|
+
GENDER = {
|
34
|
+
'male' => 'Macho',
|
35
|
+
'female' => 'Hembra'
|
36
|
+
}.freeze
|
37
|
+
|
38
|
+
MAXIMUM_STAT_VALUE = 15
|
39
|
+
|
40
|
+
def initialize(pokemon)
|
41
|
+
@pokemon = pokemon
|
42
|
+
end
|
43
|
+
|
44
|
+
##
|
45
|
+
# Return the decorated Pokemon object as a string for display to the user in the CLI or other interfaces
|
46
|
+
def to_s
|
47
|
+
decorate
|
48
|
+
end
|
49
|
+
|
50
|
+
private
|
51
|
+
|
52
|
+
def decorate
|
53
|
+
return "Pokemon's not found" unless pokemon
|
54
|
+
|
55
|
+
<<~DECORATOR
|
56
|
+
Número: #{number}
|
57
|
+
Nombre: #{name}
|
58
|
+
Descripción: #{description}
|
59
|
+
Altura: #{hight} m
|
60
|
+
Peso: #{weight} kg
|
61
|
+
Categoría: #{category}
|
62
|
+
Habilidades: #{abilities}
|
63
|
+
Genero: #{gender}
|
64
|
+
Tipo: #{types}
|
65
|
+
Habilidades: #{weakness}
|
66
|
+
|
67
|
+
Puntos de base
|
68
|
+
#{stats}
|
69
|
+
DECORATOR
|
70
|
+
end
|
71
|
+
|
72
|
+
def number = pokemon.number
|
73
|
+
|
74
|
+
def name = pokemon.name
|
75
|
+
|
76
|
+
def description = pokemon.description
|
77
|
+
|
78
|
+
def hight = pokemon.hight
|
79
|
+
|
80
|
+
def weight = pokemon.weight
|
81
|
+
|
82
|
+
def category = pokemon.category
|
83
|
+
|
84
|
+
def abilities = pokemon.abilities.join(', ')
|
85
|
+
|
86
|
+
def gender
|
87
|
+
pokemon.gender.map { |g| GENDER[g] }.join(', ')
|
88
|
+
end
|
89
|
+
|
90
|
+
def types = pokemon.types.join(', ')
|
91
|
+
|
92
|
+
def weakness = pokemon.weakness.join(', ')
|
93
|
+
|
94
|
+
def stats
|
95
|
+
pokemon.stats.each_with_object('').each do |(key, value), stats_decorate|
|
96
|
+
stats_decorate << "#{display_graph(value, MAXIMUM_STAT_VALUE)} #{key}\n"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def display_graph(value, max_value)
|
101
|
+
value = [[value, 1].max, max_value].min
|
102
|
+
|
103
|
+
total_chars = max_value
|
104
|
+
filled_chars = (value.to_f / max_value * total_chars).round
|
105
|
+
empty_chars = total_chars - filled_chars
|
106
|
+
|
107
|
+
'#' * filled_chars + '-' * empty_chars
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'sequel'
|
4
|
+
require 'json'
|
5
|
+
|
6
|
+
require_relative '../../database'
|
7
|
+
|
8
|
+
module Pokeedex # :nodoc:
|
9
|
+
module Pokemon # :nodoc:
|
10
|
+
module Model # :nodoc:
|
11
|
+
##
|
12
|
+
# Base class for the Pokemon model. It holds the database connection and the methods to interact with the database table for the Pokemon model
|
13
|
+
class Base < Sequel::Model(Database.connection[:pokemons])
|
14
|
+
CACHE_TTL = 3600
|
15
|
+
|
16
|
+
plugin :timestamps, update_on_create: true
|
17
|
+
plugin :validation_helpers
|
18
|
+
plugin :serialization, :json, :abilities, :gender, :types, :weakness, :stats
|
19
|
+
plugin :caching, CACHE_TTL
|
20
|
+
|
21
|
+
##
|
22
|
+
# Search for a Pokemon by number or name
|
23
|
+
def self.search(query)
|
24
|
+
where(Sequel.|({ number: query }, Sequel.ilike(:name, query)))
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Validate the Pokemon model attributes
|
29
|
+
def validate
|
30
|
+
super
|
31
|
+
validates_presence %i[number name]
|
32
|
+
validates_unique :number
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Return true when the Pokemon model is persisted in the database
|
37
|
+
def persisted?
|
38
|
+
!id.nil?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'fetchers/base'
|
4
|
+
require_relative 'parsers/base'
|
5
|
+
|
6
|
+
module Pokeedex # :nodoc:
|
7
|
+
module Pokemon # :nodoc:
|
8
|
+
module Scrapper # :nodoc:
|
9
|
+
##
|
10
|
+
# Base class for the Pokemon scrapper. It holds the methods to crawl the Pokemon data from the Pokemon website
|
11
|
+
class Base
|
12
|
+
##
|
13
|
+
# The base URI to crawl the Pokemon data
|
14
|
+
BASE_URI = 'https://www.pokemon.com/el/pokedex'
|
15
|
+
|
16
|
+
##
|
17
|
+
# Crawl the Pokemon data from the Pokemon website
|
18
|
+
def crawl
|
19
|
+
raise NotImplementedError
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def parser
|
25
|
+
raise NotImplementedError
|
26
|
+
end
|
27
|
+
|
28
|
+
def fetcher
|
29
|
+
raise NotImplementedError
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'playwright'
|
4
|
+
|
5
|
+
module Pokeedex # :nodoc:
|
6
|
+
module Pokemon # :nodoc:
|
7
|
+
module Scrapper # :nodoc:
|
8
|
+
module Fetchers # :nodoc:
|
9
|
+
##
|
10
|
+
# It holds the Playwright instance and the methods to fetch the content of a URL
|
11
|
+
# and fake mouse movements and scroll the page to avoid detection, and to generate a random viewport size to avoid detection.
|
12
|
+
# This implementation is based on the Playwright gem (
|
13
|
+
class Base
|
14
|
+
##
|
15
|
+
# The URL to fetch the content from
|
16
|
+
attr_reader :url
|
17
|
+
|
18
|
+
##
|
19
|
+
# The Playwright executable instance to use
|
20
|
+
attr_reader :playwright_exec
|
21
|
+
|
22
|
+
##
|
23
|
+
# The Playwright instance to use to interact with the browser and the page to fetch the content from the URL
|
24
|
+
attr_reader :playwright
|
25
|
+
|
26
|
+
def initialize(url:)
|
27
|
+
@url = url
|
28
|
+
@playwright_exec = Playwright.create(playwright_cli_executable_path: Pokeedex.configuration.playwright_cli_executable_path)
|
29
|
+
@playwright = playwright_exec.playwright
|
30
|
+
end
|
31
|
+
|
32
|
+
##
|
33
|
+
# Fetch the content of the URL and return the content as a string (HTML) or raise an exception if the content could not be fetched
|
34
|
+
def content
|
35
|
+
browser do |context|
|
36
|
+
page = context.new_page(viewport: generate_random_viewport)
|
37
|
+
page.goto(url)
|
38
|
+
page.wait_for_load_state
|
39
|
+
|
40
|
+
fake_mouse_movements(page, steps: 6)
|
41
|
+
fake_scroll_page_down_and_up(page)
|
42
|
+
|
43
|
+
page.content
|
44
|
+
end
|
45
|
+
rescue Playwright::Error
|
46
|
+
raise Exceptions::ScrapperError
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Open a browser instance and execute the block with the browser instance and close the browser instance after the block is executed
|
51
|
+
def browser(&block)
|
52
|
+
block.call(chromium)
|
53
|
+
ensure
|
54
|
+
chromium.close
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def chromium
|
60
|
+
@chromium ||= begin
|
61
|
+
args = [
|
62
|
+
'--no-sandbox',
|
63
|
+
'--disable-setuid-sandbox',
|
64
|
+
'--disable-blink-features=AutomationControlled'
|
65
|
+
]
|
66
|
+
|
67
|
+
playwright.chromium.launch(headless: true, args: args)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def generate_random_viewport
|
72
|
+
min_width = 1024
|
73
|
+
max_width = 2560
|
74
|
+
min_height = 800
|
75
|
+
max_height = 1440
|
76
|
+
|
77
|
+
width = rand(min_width..max_width)
|
78
|
+
height = rand(min_height..max_height)
|
79
|
+
|
80
|
+
{ width: width, height: height }
|
81
|
+
end
|
82
|
+
|
83
|
+
def fake_mouse_movements(page, steps: 5)
|
84
|
+
viewport = page.viewport_size
|
85
|
+
|
86
|
+
max_width = viewport[:width]
|
87
|
+
max_height = viewport[:height]
|
88
|
+
|
89
|
+
steps.times do
|
90
|
+
x = rand(0..max_width)
|
91
|
+
y = rand(0..max_height)
|
92
|
+
|
93
|
+
page.mouse.move(x, y)
|
94
|
+
|
95
|
+
sleep(rand(0.2..0.5))
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def fake_scroll_page_down_and_up(page)
|
100
|
+
page_height = page.evaluate('document.body.scrollHeight')
|
101
|
+
|
102
|
+
current_scroll_position = 0
|
103
|
+
scroll_step = 100
|
104
|
+
|
105
|
+
while current_scroll_position < page_height
|
106
|
+
page.evaluate("window.scrollBy(0, #{scroll_step})")
|
107
|
+
current_scroll_position += scroll_step
|
108
|
+
|
109
|
+
sleep(0.01)
|
110
|
+
end
|
111
|
+
|
112
|
+
while current_scroll_position > 0
|
113
|
+
page.evaluate("window.scrollBy(0, -#{scroll_step})")
|
114
|
+
current_scroll_position -= scroll_step
|
115
|
+
|
116
|
+
sleep(0.01)
|
117
|
+
end
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
@@ -0,0 +1,205 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
module Pokeedex # :nodoc:
|
6
|
+
module Pokemon # :nodoc:
|
7
|
+
module Scrapper # :nodoc:
|
8
|
+
module Parsers # :nodoc:
|
9
|
+
##
|
10
|
+
# Base class for the Pokemon parser. It holds the response and the methods to parse the response and return
|
11
|
+
# the Pokemon attributes from a HTML response
|
12
|
+
class Base
|
13
|
+
##
|
14
|
+
# Response from the Pokemon::Pokemon::Scrapper::Fetcher::Base website (HTML response) to parse
|
15
|
+
attr_reader :response
|
16
|
+
|
17
|
+
def initialize(response)
|
18
|
+
@response = response
|
19
|
+
end
|
20
|
+
|
21
|
+
##
|
22
|
+
# Return the Pokemon attributes as a JSON object
|
23
|
+
# @return [Hash] the Pokemon attributes as a JSON object
|
24
|
+
def as_json(*)
|
25
|
+
{
|
26
|
+
number: number,
|
27
|
+
name: name,
|
28
|
+
description: description,
|
29
|
+
hight: hight,
|
30
|
+
weight: weight,
|
31
|
+
category: category,
|
32
|
+
abilities: abilities,
|
33
|
+
gender: gender,
|
34
|
+
types: types,
|
35
|
+
weakness: weakness,
|
36
|
+
stats: stats
|
37
|
+
}
|
38
|
+
end
|
39
|
+
|
40
|
+
private
|
41
|
+
|
42
|
+
def raw_body
|
43
|
+
@raw_body ||= Nokogiri::HTML(response)
|
44
|
+
end
|
45
|
+
|
46
|
+
def raw_number
|
47
|
+
raw_body.css('.pokedex-pokemon-pagination-title > div > .pokemon-number').children[0].text.strip
|
48
|
+
rescue StandardError
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
def number
|
53
|
+
raw_number[-4..].to_i if raw_number
|
54
|
+
end
|
55
|
+
|
56
|
+
def raw_name
|
57
|
+
raw_body.css('.pokedex-pokemon-pagination-title > div').children[0].text
|
58
|
+
rescue StandardError
|
59
|
+
nil
|
60
|
+
end
|
61
|
+
|
62
|
+
def name
|
63
|
+
raw_name&.strip if raw_name
|
64
|
+
end
|
65
|
+
|
66
|
+
def raw_description
|
67
|
+
raw_body
|
68
|
+
.css('.pokedex-pokemon-details-right')
|
69
|
+
.css('.version-descriptions .active').children[0].text
|
70
|
+
rescue StandardError
|
71
|
+
nil
|
72
|
+
end
|
73
|
+
|
74
|
+
def description
|
75
|
+
raw_description.strip if raw_description
|
76
|
+
end
|
77
|
+
|
78
|
+
def raw_hight
|
79
|
+
raw_body
|
80
|
+
.css('.pokedex-pokemon-details-right')
|
81
|
+
.css('.pokemon-ability-info > .column-7 > .left-column > ul > li:nth-child(1) > span.attribute-value')
|
82
|
+
.text
|
83
|
+
.gsub(',', '.')
|
84
|
+
rescue StandardError
|
85
|
+
nil
|
86
|
+
end
|
87
|
+
|
88
|
+
def hight
|
89
|
+
raw_hight[0..2].to_f if raw_hight
|
90
|
+
end
|
91
|
+
|
92
|
+
def raw_weight
|
93
|
+
raw_body
|
94
|
+
.css('.pokedex-pokemon-details-right')
|
95
|
+
.css('.pokemon-ability-info > .column-7 > .left-column > ul > li:nth-child(2) > span.attribute-value')
|
96
|
+
.text
|
97
|
+
.gsub(',', '.')
|
98
|
+
rescue StandardError
|
99
|
+
nil
|
100
|
+
end
|
101
|
+
|
102
|
+
def weight
|
103
|
+
raw_weight[0..2].to_f if raw_weight
|
104
|
+
end
|
105
|
+
|
106
|
+
def raw_category
|
107
|
+
raw_body
|
108
|
+
.css('div.pokemon-ability-info.color-bg.color-lightblue.match.active > div.column-7.push-4 > div > ul > li:nth-child(1) > span.attribute-value')
|
109
|
+
.text
|
110
|
+
rescue StandardError
|
111
|
+
nil
|
112
|
+
end
|
113
|
+
|
114
|
+
def category
|
115
|
+
raw_category.strip if raw_category
|
116
|
+
end
|
117
|
+
|
118
|
+
def raw_abilities
|
119
|
+
raw_body
|
120
|
+
.css('.pokedex-pokemon-details-right')
|
121
|
+
.css('.pokemon-ability-info > .column-7 > .right-column > ul > li:nth-child(2) > ul.attribute-list > li > a > span')
|
122
|
+
.children
|
123
|
+
.uniq
|
124
|
+
.map(&:text)
|
125
|
+
.map(&:strip)
|
126
|
+
rescue StandardError
|
127
|
+
[]
|
128
|
+
end
|
129
|
+
|
130
|
+
def abilities
|
131
|
+
raw_abilities if raw_abilities.any?
|
132
|
+
end
|
133
|
+
|
134
|
+
def raw_gender
|
135
|
+
raw_body
|
136
|
+
.css('.pokedex-pokemon-details-right')
|
137
|
+
.css('.pokemon-ability-info > .column-7 > .left-column > ul > li:nth-child(3) > span.attribute-value > i')
|
138
|
+
.map { |i| i.attribute('class').text }
|
139
|
+
.uniq
|
140
|
+
rescue StandardError
|
141
|
+
[]
|
142
|
+
end
|
143
|
+
|
144
|
+
def gender
|
145
|
+
raw_gender.map { |g| g[/male|female/] } if raw_gender.any?
|
146
|
+
end
|
147
|
+
|
148
|
+
def raw_types
|
149
|
+
raw_body
|
150
|
+
.css('.pokedex-pokemon-attributes > .dtm-type > ul > li > a')
|
151
|
+
.children
|
152
|
+
.map(&:text)
|
153
|
+
.uniq
|
154
|
+
.map(&:strip)
|
155
|
+
.reject(&:empty?)
|
156
|
+
rescue StandardError
|
157
|
+
[]
|
158
|
+
end
|
159
|
+
|
160
|
+
def types
|
161
|
+
raw_types if raw_types.any?
|
162
|
+
end
|
163
|
+
|
164
|
+
def raw_weakness
|
165
|
+
raw_body
|
166
|
+
.css('.dtm-weaknesses > ul > li > a > span')
|
167
|
+
.children
|
168
|
+
.map(&:text)
|
169
|
+
.uniq
|
170
|
+
.map(&:strip)
|
171
|
+
.reject(&:empty?)
|
172
|
+
rescue StandardError
|
173
|
+
[]
|
174
|
+
end
|
175
|
+
|
176
|
+
def weakness
|
177
|
+
raw_weakness if raw_weakness.any?
|
178
|
+
end
|
179
|
+
|
180
|
+
def raw_stats_info
|
181
|
+
raw_body.css('.pokemon-stats-info > ul')
|
182
|
+
end
|
183
|
+
|
184
|
+
def raw_stat_names
|
185
|
+
raw_stats_info.css('li > span').map(&:text)
|
186
|
+
end
|
187
|
+
|
188
|
+
def raw_stat_index_value(index)
|
189
|
+
raw_stats_info.css('li > ul > li:nth-child(1)')[index].attribute('data-value').value.to_i
|
190
|
+
end
|
191
|
+
|
192
|
+
def raw_stats
|
193
|
+
raw_stat_names.each_with_object({}).with_index do |(stat, stats), index|
|
194
|
+
stats[stat] = raw_stat_index_value(index)
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
def stats
|
199
|
+
raw_stats
|
200
|
+
end
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'base'
|
4
|
+
|
5
|
+
module Pokeedex # :nodoc:
|
6
|
+
module Pokemon # :nodoc:
|
7
|
+
module Scrapper # :nodoc:
|
8
|
+
##
|
9
|
+
# The Pokedex scrapper. It holds the methods to crawl the Pokedex data from the Pokemon website
|
10
|
+
class Pokedex < Base
|
11
|
+
##
|
12
|
+
# Find by number or name the Pokemon data from the Pokemon website
|
13
|
+
attr_reader :number_or_name
|
14
|
+
|
15
|
+
def initialize(number_or_name:)
|
16
|
+
@number_or_name = number_or_name
|
17
|
+
end
|
18
|
+
|
19
|
+
##
|
20
|
+
# Return the URL to crawl the Pokemon data
|
21
|
+
# If you number_or_name is 'pikachu' then the URL will be 'https://www.pokemon.com/el/pokedex/pikachu'
|
22
|
+
# @return [String]
|
23
|
+
def url
|
24
|
+
"#{BASE_URI}/#{number_or_name}"
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Crawl the Pokemon data from the Pokemon website
|
29
|
+
# @return [Hash]
|
30
|
+
def crawl
|
31
|
+
parser.as_json
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def parser
|
37
|
+
Parsers::Base.new(remote_content)
|
38
|
+
end
|
39
|
+
|
40
|
+
def remote_content
|
41
|
+
fetcher.content
|
42
|
+
end
|
43
|
+
|
44
|
+
def fetcher
|
45
|
+
@fetcher ||= Fetchers::Base.new(url: url)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|