class Selenium::WebDriver::Support::CDPClientGenerator
Constants
- RESERVED_KEYWORDS
- TEMPLATE_PATH
Input JSON files are generated from PDL tasks.
Public Instance Methods
call(output_dir:, version:, browser_protocol_path: nil, js_protocol_path: nil, loader_path: nil, **)
click to toggle source
# File lib/selenium/webdriver/support/cdp_client_generator.rb, line 33 def call(output_dir:, version:, browser_protocol_path: nil, js_protocol_path: nil, loader_path: nil, **) @template = ERB.new(File.read(TEMPLATE_PATH)) @output_dir = output_dir @loader_path = loader_path || "#{@output_dir}.rb" @version = version browser_protocol_path ||= File.expand_path('cdp/browser_protocol.json', __dir__) js_protocol_path ||= File.expand_path('cdp/js_protocol.json', __dir__) browser_protocol = JSON.parse(File.read(browser_protocol_path), symbolize_names: true) js_protocol = JSON.parse(File.read(js_protocol_path), symbolize_names: true) FileUtils.mkdir_p(@output_dir) browser_protocol[:domains].each { |domain| process_domain(domain) } js_protocol[:domains].each { |domain| process_domain(domain) } require_file end
kwargs(parameters)
click to toggle source
# File lib/selenium/webdriver/support/cdp_client_generator.rb, line 70 def kwargs(parameters) parameters = parameters.map do |parameter| if parameter[:optional] "#{snake_case(parameter[:name])}: nil" else "#{snake_case(parameter[:name])}:" end end parameters.join(', ') end
process_domain(domain)
click to toggle source
# File lib/selenium/webdriver/support/cdp_client_generator.rb, line 52 def process_domain(domain) result = @template.result_with_hash(domain: domain, version: @version.upcase, h: self) filename = File.join(@output_dir, "#{snake_case(domain[:domain])}.rb") File.write(filename, remove_empty_lines(result)) end
remove_empty_lines(string)
click to toggle source
# File lib/selenium/webdriver/support/cdp_client_generator.rb, line 81 def remove_empty_lines(string) string.split("\n").grep_v(/^\s+$/).join("\n") end
require_file()
click to toggle source
# File lib/selenium/webdriver/support/cdp_client_generator.rb, line 85 def require_file # rubocop:disable Lint/InterpolationCheck dynamic_location = '#{File.dirname(File.absolute_path(__FILE__))}' # rubocop:enable Lint/InterpolationCheck require_all = "Dir.glob(\"#{dynamic_location}/#{@version}/*\", &method(:require))" File.write(@loader_path, require_all) end
snake_case(string)
click to toggle source
# File lib/selenium/webdriver/support/cdp_client_generator.rb, line 58 def snake_case(string) name = string.gsub('JavaScript', 'Javascript') .gsub(/([A-Z]+)([A-Z][a-z]{2,})/, '\1_\2') .gsub(/([a-z\d])([A-Z])/, '\1_\2') .downcase # Certain CDP parameters conflict with Ruby keywords # so we prefix the name with underscore. name = "_#{name}" if RESERVED_KEYWORDS.include?(name) name end