rubium 0.3.0 → 0.3.2

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 578d3543ceff2361188340f76906d497b68a81bd7fae58ea0a07b07b1911d376
4
- data.tar.gz: 9b4f4f016e5af7a935ef52f469939ac9e4c8f7c399f8c2105fb6c2f4b3c8df4e
3
+ metadata.gz: fcfb93374d1a40e65007cbadd579dccb55715a7cc16298944bac5276112b7fd6
4
+ data.tar.gz: db26213aa97ca72da071ad52602034cd69a5a21726e4b437c1c8e87ff952a88f
5
5
  SHA512:
6
- metadata.gz: e3efeeab3587f3cfdc3c578469d99f2004d59720161b492759bac5d5ade74d33147ca9ced2838e6d7c31b4a08b510d7b89358c5628fbd088eab4aa9a2f0039fd
7
- data.tar.gz: 55f45b10d25cf66cd8517933bf0b44a15ebf21c98ee2831fe040d4a19188fc9f4bcc7ee1f0c8cd9fbd53b7b4f3690cd185fcfd1b3d73bd1a282bddab8d8d2a22
6
+ metadata.gz: acd06d872499a883b00d47246d0d66639bf54f6b93e777d87f273ef1783dd761a5a13b87be0204114b18b129169c80982248cd06ee7e6baf7913c1f0a344f44a
7
+ data.tar.gz: 83913f350d231770cae28c720b84655d577380f623e1955027723503b6ea86ffe7f333cde46c4bccc2a3ae176819bf116a2ce6e89a9c9bf35b98fa32275fe0b3
data/.rubocop.yml ADDED
@@ -0,0 +1,2 @@
1
+ AllCops:
2
+ TargetRubyVersion: 3.1.0
data/CHANGELOG.md CHANGED
@@ -5,6 +5,18 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## [0.3.2] - 2025-12-31
9
+
10
+ * Add ostruct to gemspec (Ruby 3.5 compatibility)
11
+ * Rename DEFAULT_PUPPETEER_ARGS to DEFAULT_ARGS
12
+
13
+ ## [0.3.1] - 2025-12-16
14
+
15
+ ### Added
16
+ - Use [Patchright like](https://github.com/Kaliiiiiiiiii-Vinyzu/patchright?tab=readme-ov-file#command-flags-leaks) CLI args for better antidetect performance
17
+ - Add required Ruby version >= 3.1.0
18
+ - Add Rubocop
19
+
8
20
  ## [0.3.0] - 2025-12-12
9
21
 
10
22
  ### Added
data/Gemfile CHANGED
@@ -1,6 +1,8 @@
1
- source "https://rubygems.org"
1
+ # frozen_string_literal: true
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ source 'https://rubygems.org'
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
7
  # Specify your gem's dependencies in rubium.gemspec
6
8
  gemspec
data/LICENSE.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2025 Victor Afanasev
3
+ Copyright (c) 2026 Victor Afanasev
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -2,9 +2,7 @@
2
2
 
3
3
  ## Description
4
4
 
5
- Rubium is a handy wrapper around [chrome_remote](https://github.com/cavalle/chrome_remote) gem. It adds browsers instances handling, and some Capybara-like methods. It is very lightweight (250 lines of code in the main `Rubium::Browser` class for now) and doens't use Selenium or Capybara. Consider Rubium as a _very simple_ and _basic_ implementation of [Puppeteer](https://github.com/GoogleChrome/puppeteer) in Ruby language.
6
-
7
- You can use Rubium as a lightweight alternative to Selenium/Capybara/Watir if you need to perform some operations (like web scraping) using Headless Chromium and Ruby. Of course, the API currently doesn't has a lot of methods to automate browser, but it has the most frequently used and basic ones.
5
+ Rubium is a lightweight Ruby API for headless antidetect Chrome browser automation. It provides essential Capybara-like methods in just 300 lines of code no Selenium or heavy dependencies required. Use it as a simple alternative to Puppeteer/Playwright for web scraping and basic browser automation tasks:
8
6
 
9
7
  ```ruby
10
8
  require 'rubium'
@@ -111,7 +109,7 @@ end
111
109
 
112
110
 
113
111
  ## Installation
114
- Rubium tested with `2.3.0` Ruby version and up.
112
+ Rubium tested with `3.1.0` Ruby version and up.
115
113
 
116
114
  ## Contribution
117
115
  Sure, feel free to fork and add new functionality.
data/Rakefile CHANGED
@@ -1,10 +1,12 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
1
+ # frozen_string_literal: true
2
+
3
+ require 'bundler/gem_tasks'
4
+ require 'rake/testtask'
3
5
 
4
6
  Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
7
+ t.libs << 'test'
8
+ t.libs << 'lib'
9
+ t.test_files = FileList['test/**/*_test.rb']
8
10
  end
9
11
 
10
- task :default => :test
12
+ task default: :test
data/bin/console CHANGED
@@ -1,7 +1,8 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
- require "rubium"
4
+ require 'bundler/setup'
5
+ require 'rubium'
5
6
 
6
7
  # You can add fixtures and/or initialization code here to make experimenting
7
8
  # with your gem easier. You can also use a different console, if you like.
@@ -10,5 +11,5 @@ require "rubium"
10
11
  # require "pry"
11
12
  # Pry.start
12
13
 
13
- require "irb"
14
+ require 'irb'
14
15
  IRB.start(__FILE__)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'chrome_remote'
2
4
  require 'nokogiri'
3
5
  require 'random-port'
@@ -8,7 +10,7 @@ require 'logger'
8
10
  require 'fileutils'
9
11
 
10
12
  at_exit do
11
- Rubium::Browser.running_pids.each { |pid| Process.kill("HUP", pid) }
13
+ Rubium::Browser.running_pids.each { |pid| Process.kill('HUP', pid) }
12
14
  end
13
15
 
14
16
  module Rubium
@@ -20,7 +22,7 @@ module Rubium
20
22
 
21
23
  class << self
22
24
  def ports_pool
23
- @pool ||= RandomPort::Pool.new
25
+ @ports_pool ||= RandomPort::Pool.new
24
26
  end
25
27
 
26
28
  def running_pids
@@ -28,13 +30,13 @@ module Rubium
28
30
  end
29
31
  end
30
32
 
31
- attr_reader :client, :devtools_url, :pid, :port, :options, :processed_requests_count, :logger
33
+ attr_reader :client, :devtools_url, :pid, :port, :options, :processed_requests_count, :logger
32
34
 
33
35
  def initialize(options = {})
34
36
  @options = options
35
37
 
36
38
  if @options[:enable_logger]
37
- @logger = Logger.new(STDOUT)
39
+ @logger = Logger.new($stdout)
38
40
  @logger.progname = self.class.to_s
39
41
  end
40
42
 
@@ -42,7 +44,7 @@ module Rubium
42
44
  end
43
45
 
44
46
  def restart!
45
- logger.info "Restarting..." if options[:enable_logger]
47
+ logger.info 'Restarting...' if options[:enable_logger]
46
48
 
47
49
  close
48
50
  create_browser
@@ -50,23 +52,21 @@ module Rubium
50
52
 
51
53
  def close
52
54
  if closed?
53
- logger.info "Browser already has been closed" if options[:enable_logger]
55
+ logger.info 'Browser already has been closed' if options[:enable_logger]
54
56
  else
55
- Process.kill("HUP", @pid)
57
+ Process.kill('HUP', @pid)
56
58
  self.class.running_pids.delete(@pid)
57
59
  self.class.ports_pool.release(@port)
58
60
 
59
61
  # Delete temp profile directory, if there is no custom one
60
- unless options[:data_dir]
61
- FileUtils.rm_rf(@data_dir) if Dir.exist?(@data_dir)
62
- end
62
+ FileUtils.rm_rf(@data_dir) if !options[:data_dir] && Dir.exist?(@data_dir)
63
63
 
64
- logger.info "Closed browser" if options[:enable_logger]
64
+ logger.info 'Closed browser' if options[:enable_logger]
65
65
  @closed = true
66
66
  end
67
67
  end
68
68
 
69
- alias_method :destroy_driver!, :close
69
+ alias destroy_driver! close
70
70
 
71
71
  def closed?
72
72
  @closed
@@ -74,11 +74,9 @@ module Rubium
74
74
 
75
75
  def goto(url, wait: options[:max_timeout] || MAX_DEFAULT_TIMEOUT)
76
76
  logger.info "Started request: #{url}" if options[:enable_logger]
77
- if options[:restart_after] && processed_requests_count >= options[:restart_after]
78
- restart!
79
- end
77
+ restart! if options[:restart_after] && processed_requests_count >= options[:restart_after]
80
78
 
81
- response = @client.send_cmd "Page.navigate", url: url
79
+ response = @client.send_cmd 'Page.navigate', url: url
82
80
 
83
81
  # By default, after Page.navigate we should wait till page will load completely
84
82
  # using Page.loadEventFired. But on some websites with Ajax navigation, Page.loadEventFired
@@ -87,7 +85,7 @@ module Rubium
87
85
  # https://chromedevtools.github.io/devtools-protocol/tot/Page#event-frameStoppedLoading
88
86
  Timeout.timeout(wait) do
89
87
  @client.wait_for do |event_name, event_params|
90
- event_name == "Page.frameStoppedLoading" && event_params["frameId"] == response["frameId"]
88
+ event_name == 'Page.frameStoppedLoading' && event_params['frameId'] == response['frameId']
91
89
  end
92
90
  end
93
91
  end
@@ -96,11 +94,11 @@ module Rubium
96
94
  logger.info "Finished request: #{url}" if options[:enable_logger]
97
95
  end
98
96
 
99
- alias_method :visit, :goto
97
+ alias visit goto
100
98
 
101
99
  def body
102
- response = @client.send_cmd "Runtime.evaluate", expression: 'document.documentElement.outerHTML'
103
- response.dig("result", "value")
100
+ response = @client.send_cmd 'Runtime.evaluate', expression: 'document.documentElement.outerHTML'
101
+ response.dig('result', 'value')
104
102
  end
105
103
 
106
104
  def current_response
@@ -111,6 +109,7 @@ module Rubium
111
109
  timer = 0
112
110
  until current_response.at_xpath(path)
113
111
  return false if timer >= wait
112
+
114
113
  timer += 0.2 and sleep 0.2
115
114
  end
116
115
 
@@ -121,6 +120,7 @@ module Rubium
121
120
  timer = 0
122
121
  until current_response.at_css(selector)
123
122
  return false if timer >= wait
123
+
124
124
  timer += 0.2 and sleep 0.2
125
125
  end
126
126
 
@@ -131,6 +131,7 @@ module Rubium
131
131
  timer = 0
132
132
  until body&.include?(text)
133
133
  return false if timer >= wait
134
+
134
135
  timer += 0.2 and sleep 0.2
135
136
  end
136
137
 
@@ -138,52 +139,52 @@ module Rubium
138
139
  end
139
140
 
140
141
  def click(selector)
141
- @client.send_cmd "Runtime.evaluate", expression: <<~js
142
+ @client.send_cmd 'Runtime.evaluate', expression: <<~JS
142
143
  document.querySelector(`#{selector}`).click();
143
- js
144
+ JS
144
145
  end
145
146
 
146
147
  # https://github.com/cyrus-and/chrome-remote-interface/issues/226#issuecomment-320247756
147
148
  # https://stackoverflow.com/a/18937620
148
149
  def send_key_on(selector, key)
149
- @client.send_cmd "Runtime.evaluate", expression: <<~js
150
+ @client.send_cmd 'Runtime.evaluate', expression: <<~JS
150
151
  document.querySelector(`#{selector}`).dispatchEvent(
151
152
  new KeyboardEvent("keydown", {
152
153
  bubbles: true, cancelable: true, keyCode: #{key}
153
154
  })
154
155
  );
155
- js
156
+ JS
156
157
  end
157
158
 
158
159
  # https://github.com/GoogleChrome/puppeteer/blob/master/lib/Page.js#L784
159
160
  # https://stackoverflow.com/questions/46113267/how-to-use-evaluateonnewdocument-and-exposefunction
160
161
  # https://chromedevtools.github.io/devtools-protocol/tot/Page/#method-addScriptToEvaluateOnNewDocument
161
162
  def evaluate_on_new_document(script)
162
- @client.send_cmd "Page.addScriptToEvaluateOnNewDocument", source: script
163
+ @client.send_cmd 'Page.addScriptToEvaluateOnNewDocument', source: script
163
164
  end
164
165
 
165
166
  ###
166
167
 
167
168
  def cookies
168
- response = @client.send_cmd "Network.getCookies"
169
- response["cookies"]
169
+ response = @client.send_cmd 'Network.getCookies'
170
+ response['cookies']
170
171
  end
171
172
 
172
173
  # https://chromedevtools.github.io/devtools-protocol/tot/Network#method-setCookies
173
174
  def set_cookies(cookies)
174
- @client.send_cmd "Network.setCookies", cookies: cookies
175
+ @client.send_cmd 'Network.setCookies', cookies: cookies
175
176
  end
176
177
 
177
178
  ###
178
179
 
179
180
  def fill_in(selector, text)
180
- execute_script <<~js
181
+ execute_script <<~JS
181
182
  document.querySelector(`#{selector}`).value = "#{text}"
182
- js
183
+ JS
183
184
  end
184
185
 
185
186
  def execute_script(script)
186
- @client.send_cmd "Runtime.evaluate", expression: script
187
+ @client.send_cmd 'Runtime.evaluate', expression: script
187
188
  end
188
189
 
189
190
  private
@@ -198,13 +199,13 @@ module Rubium
198
199
  chrome_path = get_chrome_path
199
200
  raise ConfigurationError, "Can't find chrome executable" unless chrome_path
200
201
 
201
- command = %W(
202
+ command = %W[
202
203
  #{chrome_path} about:blank
203
204
  --remote-debugging-port=#{@port}
204
205
  --user-data-dir=#{@data_dir}
205
- ) + DEFAULT_PUPPETEER_ARGS
206
+ ] + DEFAULT_ARGS
206
207
 
207
- command << "--headless" if ENV["HEADLESS"] != "false" && options[:headless] != false
208
+ command << '--headless' if ENV['HEADLESS'] != 'false' && options[:headless] != false
208
209
  command << "--window-size=#{options[:window_size].join(',')}" if options[:window_size]
209
210
 
210
211
  if options[:user_agent]
@@ -214,11 +215,11 @@ module Rubium
214
215
 
215
216
  if options[:proxy_server]
216
217
  proxy_server = options[:proxy_server].respond_to?(:call) ? options[:proxy_server].call : options[:proxy_server]
217
- proxy_server = convert_proxy(proxy_server) unless proxy_server.include?("://")
218
+ proxy_server = convert_proxy(proxy_server) unless proxy_server.include?('://')
218
219
  command << "--proxy-server=#{proxy_server}"
219
220
  end
220
221
 
221
- @pid = spawn(*command, [:out, :err] => "/dev/null")
222
+ @pid = spawn(*command, %i[out err] => '/dev/null')
222
223
  self.class.running_pids << @pid
223
224
  @closed = false
224
225
 
@@ -233,9 +234,9 @@ module Rubium
233
234
  @devtools_url = "http://localhost:#{@port}/"
234
235
 
235
236
  # https://github.com/GoogleChrome/puppeteer/blob/master/lib/Page.js
236
- @client.send_cmd "Target.setAutoAttach", autoAttach: true, waitForDebuggerOnStart: false
237
- @client.send_cmd "Network.enable"
238
- @client.send_cmd "Page.enable"
237
+ @client.send_cmd 'Target.setAutoAttach', autoAttach: true, waitForDebuggerOnStart: false
238
+ @client.send_cmd 'Network.enable'
239
+ @client.send_cmd 'Page.enable'
239
240
 
240
241
  evaluate_on_new_document(options[:extension_code]) if options[:extension_code]
241
242
 
@@ -244,32 +245,29 @@ module Rubium
244
245
  if options[:urls_blacklist] || options[:disable_images]
245
246
  urls = []
246
247
 
247
- if options[:urls_blacklist]
248
- urls += options[:urls_blacklist]
249
- end
248
+ urls += options[:urls_blacklist] if options[:urls_blacklist]
250
249
 
251
250
  if options[:disable_images]
252
- urls += %w(jpg jpeg png gif swf svg tif).map { |ext| ["*.#{ext}", "*.#{ext}?*"] }.flatten
253
- urls << "data:image*"
251
+ urls += %w[jpg jpeg png gif swf svg tif].map { |ext| ["*.#{ext}", "*.#{ext}?*"] }.flatten
252
+ urls << 'data:image*'
254
253
  end
255
254
 
256
- @client.send_cmd "Network.setBlockedURLs", urls: urls
255
+ @client.send_cmd 'Network.setBlockedURLs', urls: urls
257
256
  end
258
257
 
259
-
260
- logger.info "Opened browser" if options[:enable_logger]
258
+ logger.info 'Opened browser' if options[:enable_logger]
261
259
  end
262
260
 
263
261
  def get_chrome_path
264
- path = Rubium.configuration.chrome_path || Cliver.detect("chromium-browser") || Cliver.detect("google-chrome")
262
+ path = Rubium.configuration.chrome_path || Cliver.detect('chromium-browser') || Cliver.detect('google-chrome')
265
263
  return path if path
266
264
 
267
- macos_path = "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"
265
+ macos_path = '/Applications/Google Chrome.app/Contents/MacOS/Google Chrome'
268
266
  macos_path if File.executable?(macos_path)
269
267
  end
270
268
 
271
269
  def convert_proxy(proxy_string)
272
- ip, port, type, user, password = proxy_string.split(":")
270
+ ip, port, type, = proxy_string.split(':')
273
271
  "#{type}://#{ip}:#{port}"
274
272
  end
275
273
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Rubium
2
- VERSION = "0.3.0"
4
+ VERSION = '0.3.2'
3
5
  end
data/lib/rubium.rb CHANGED
@@ -1,37 +1,40 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'ostruct'
2
4
  require 'rubium/version'
3
5
  require 'rubium/browser'
4
6
 
5
7
  module Rubium
6
- DEFAULT_PUPPETEER_ARGS = %w(
8
+ DEFAULT_ARGS = %w[
9
+ --disable-field-trial-config
7
10
  --disable-background-networking
8
11
  --disable-background-timer-throttling
9
12
  --disable-backgrounding-occluded-windows
10
13
  --disable-breakpad
11
- --disable-client-side-phishing-detection
12
- --disable-default-apps
14
+ --no-default-browser-check
13
15
  --disable-dev-shm-usage
14
- --disable-extensions
15
- --disable-features=site-per-process
16
+ --disable-features=AcceptCHFrame,AvoidUnnecessaryBeforeUnloadCheckSync,DestroyProfileOnBrowserClose,DialMediaRouteProvider,GlobalMediaControls,HttpsUpgrades,LensOverlay,MediaRouter,PaintHolding,ThirdPartyStoragePartitioning,Translate,AutoDeElevate,RenderDocument,OptimizationHints
17
+ --enable-features=CDPScreenshotNewSurface
16
18
  --disable-hang-monitor
17
- --disable-ipc-flooding-protection
18
- --disable-popup-blocking
19
19
  --disable-prompt-on-repost
20
20
  --disable-renderer-backgrounding
21
- --disable-sync
22
- --disable-translate
23
- --metrics-recording-only
21
+ --force-color-profile=srgb
24
22
  --no-first-run
25
- --safebrowsing-disable-auto-update
26
- --enable-automation
27
23
  --password-store=basic
28
24
  --use-mock-keychain
29
- --hide-scrollbars
30
- --mute-audio
31
- --no-sandbox
25
+ --no-service-autorun
26
+ --export-tagged-pdf
27
+ --disable-search-engine-choice-screen
28
+ --edge-skip-compat-layer-relaunch
32
29
  --disable-infobars
30
+ --disable-search-engine-choice-screen
31
+ --disable-sync
33
32
  --disable-blink-features=AutomationControlled
34
- ).freeze
33
+ --enable-unsafe-swiftshader
34
+ --no-sandbox
35
+ --force-webrtc-ip-handling-policy=disable_non_proxied_udp
36
+ --webrtc-ip-handling-policy=disable_non_proxied_udp
37
+ ].freeze
35
38
 
36
39
  def self.configuration
37
40
  @configuration ||= OpenStruct.new
data/rubium.gemspec CHANGED
@@ -1,32 +1,31 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path("../lib", __FILE__)
3
+ lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require "rubium/version"
5
+ require 'rubium/version'
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = "rubium"
8
+ spec.name = 'rubium'
8
9
  spec.version = Rubium::VERSION
9
- spec.authors = ["Victor Afanasev"]
10
- spec.email = ["vicfreefly@gmail.com"]
10
+ spec.authors = ['Victor Afanasev']
11
+ spec.email = ['vicfreefly@gmail.com']
11
12
 
12
- spec.summary = "Headless Chromium Ruby API based on ChromeRemote gem"
13
+ spec.summary = 'Antidetect Headless Chromium Ruby API based on ChromeRemote gem'
13
14
  spec.description = spec.summary
14
- spec.homepage = "https://github.com/vifreefly/rubium"
15
- spec.license = "MIT"
15
+ spec.homepage = 'https://github.com/vifreefly/rubium'
16
+ spec.license = 'MIT'
16
17
 
17
18
  # Specify which files should be added to the gem when it is released.
18
19
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
19
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
20
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
20
21
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
21
22
  end
22
- spec.require_paths = ["lib"]
23
+ spec.require_paths = ['lib']
24
+ spec.required_ruby_version = '>= 3.1.0'
23
25
 
24
- spec.add_dependency "chrome_remote", "~> 0.3"
25
- spec.add_dependency "cliver", "~> 0.3"
26
- spec.add_dependency "random-port"
27
- spec.add_dependency "nokogiri"
28
-
29
- spec.add_development_dependency "bundler", "~> 2.4"
30
- spec.add_development_dependency "rake", "~> 13.0"
31
- spec.add_development_dependency "minitest", "~> 5.22"
26
+ spec.add_dependency 'chrome_remote', '~> 0.3'
27
+ spec.add_dependency 'cliver', '~> 0.3'
28
+ spec.add_dependency 'nokogiri'
29
+ spec.add_dependency 'random-port'
30
+ spec.add_dependency 'ostruct'
32
31
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubium
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Victor Afanasev
@@ -38,7 +38,7 @@ dependencies:
38
38
  - !ruby/object:Gem::Version
39
39
  version: '0.3'
40
40
  - !ruby/object:Gem::Dependency
41
- name: random-port
41
+ name: nokogiri
42
42
  requirement: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
@@ -52,7 +52,7 @@ dependencies:
52
52
  - !ruby/object:Gem::Version
53
53
  version: '0'
54
54
  - !ruby/object:Gem::Dependency
55
- name: nokogiri
55
+ name: random-port
56
56
  requirement: !ruby/object:Gem::Requirement
57
57
  requirements:
58
58
  - - ">="
@@ -66,48 +66,20 @@ dependencies:
66
66
  - !ruby/object:Gem::Version
67
67
  version: '0'
68
68
  - !ruby/object:Gem::Dependency
69
- name: bundler
70
- requirement: !ruby/object:Gem::Requirement
71
- requirements:
72
- - - "~>"
73
- - !ruby/object:Gem::Version
74
- version: '2.4'
75
- type: :development
76
- prerelease: false
77
- version_requirements: !ruby/object:Gem::Requirement
78
- requirements:
79
- - - "~>"
80
- - !ruby/object:Gem::Version
81
- version: '2.4'
82
- - !ruby/object:Gem::Dependency
83
- name: rake
84
- requirement: !ruby/object:Gem::Requirement
85
- requirements:
86
- - - "~>"
87
- - !ruby/object:Gem::Version
88
- version: '13.0'
89
- type: :development
90
- prerelease: false
91
- version_requirements: !ruby/object:Gem::Requirement
92
- requirements:
93
- - - "~>"
94
- - !ruby/object:Gem::Version
95
- version: '13.0'
96
- - !ruby/object:Gem::Dependency
97
- name: minitest
69
+ name: ostruct
98
70
  requirement: !ruby/object:Gem::Requirement
99
71
  requirements:
100
- - - "~>"
72
+ - - ">="
101
73
  - !ruby/object:Gem::Version
102
- version: '5.22'
103
- type: :development
74
+ version: '0'
75
+ type: :runtime
104
76
  prerelease: false
105
77
  version_requirements: !ruby/object:Gem::Requirement
106
78
  requirements:
107
- - - "~>"
79
+ - - ">="
108
80
  - !ruby/object:Gem::Version
109
- version: '5.22'
110
- description: Headless Chromium Ruby API based on ChromeRemote gem
81
+ version: '0'
82
+ description: Antidetect Headless Chromium Ruby API based on ChromeRemote gem
111
83
  email:
112
84
  - vicfreefly@gmail.com
113
85
  executables: []
@@ -115,6 +87,7 @@ extensions: []
115
87
  extra_rdoc_files: []
116
88
  files:
117
89
  - ".gitignore"
90
+ - ".rubocop.yml"
118
91
  - CHANGELOG.md
119
92
  - Gemfile
120
93
  - LICENSE.txt
@@ -137,7 +110,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
137
110
  requirements:
138
111
  - - ">="
139
112
  - !ruby/object:Gem::Version
140
- version: '0'
113
+ version: 3.1.0
141
114
  required_rubygems_version: !ruby/object:Gem::Requirement
142
115
  requirements:
143
116
  - - ">="
@@ -146,5 +119,5 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
119
  requirements: []
147
120
  rubygems_version: 4.0.1
148
121
  specification_version: 4
149
- summary: Headless Chromium Ruby API based on ChromeRemote gem
122
+ summary: Antidetect Headless Chromium Ruby API based on ChromeRemote gem
150
123
  test_files: []