lib/Dhalang/puppeteer.rb in Dhalang-0.3.1 vs lib/Dhalang/puppeteer.rb in Dhalang-0.4.0
- old
+ new
@@ -1,17 +1,78 @@
module Dhalang
# Contains common logic for interacting with Puppeteer.
class Puppeteer
NODE_MODULES_PATH = Dir.pwd + '/node_modules/'.freeze
private_constant :NODE_MODULES_PATH
-
+
+ NAVIGATION_TIMEOUT = 10000
+ private_constant :NAVIGATION_TIMEOUT
+
+ NAVIGATION_WAIT_UNTIL = 'load'
+ private_constant :NAVIGATION_WAIT_UNTIL
+
+ USER_AGENT = ''
+ private_constant :USER_AGENT
+
+ VIEW_PORT = ''
+ private_constant :VIEW_PORT
+
+ HTTP_AUTHENTICATION_CREDENTIALS = ''
+ private_constant :HTTP_AUTHENTICATION_CREDENTIALS
+
+ DEFAULT_OPTIONS = {
+ scale: 1,
+ displayHeaderFooter: false,
+ headerTemplate: '',
+ footerTemplate: '',
+ printBackground: true,
+ landscape: false,
+ pageRanges: '',
+ format: 'A4',
+ width: '',
+ height: '',
+ margin: { top: 36, right: 36, bottom: 20, left: 36 },
+ preferCSSPageSiz: false
+ }
+ private_constant :DEFAULT_OPTIONS
+
+
# Launches a new Node process, executing the (Puppeteer) script under the given script_path.
#
# @param [String] page_url The url to pass to the goTo method of Puppeteer.
# @param [String] script_path The absolute path of the JS script to execute.
- # @param [String] temp_file_path The absolute path of the temp file to use to write any actions tom from Puppeteer.
+ # @param [String] temp_file_path The absolute path of the temp file to use to write any actions from Puppeteer.
# @param [String] temp_file_extension The extension of the temp file.
- def self.visit(page_url, script_path, temp_file_path, temp_file_extension)
- system("node #{script_path} #{Shellwords.escape(NODE_MODULES_PATH)} #{page_url} #{Shellwords.escape(temp_file_path)} #{Shellwords.escape(temp_file_extension)}")
+ # @param [Object] options Set of options to use, configurable by the user.
+ def self.visit(page_url, script_path, temp_file_path, temp_file_extension, options)
+ configuration = create_configuration(page_url, script_path, temp_file_path, temp_file_extension, options)
+ Kernel.system("node #{script_path} #{Shellwords.escape(configuration)}")
end
+
+
+ # Returns a JSON string with the configuration to use within the Puppeteer script.
+ #
+ # @param [String] page_url The url to pass to the goTo method of Puppeteer.
+ # @param [String] script_path The absolute path of the JS script to execute.
+ # @param [String] temp_file_path The absolute path of the temp file to use to write any actions from Puppeteer.
+ # @param [String] temp_file_extension The extension of the temp file.
+ # @param [Hash] options Set of options to use, configurable by the user.
+ private_class_method def self.create_configuration(page_url, script_path, temp_file_path, temp_file_extension, options)
+ {
+ webPageUrl: page_url,
+ tempFilePath: temp_file_path,
+ puppeteerPath: NODE_MODULES_PATH,
+ imageType: temp_file_extension,
+ userOptions: {
+ navigationParameters: {
+ timeout: options.has_key?(:navigation_timeout) ? options[:navigation_timeout] : NAVIGATION_TIMEOUT,
+ waitUntil: NAVIGATION_WAIT_UNTIL
+ },
+ userAgent: options.has_key?(:user_agent) ? options[:user_agent] : USER_AGENT,
+ viewPort: options.has_key?(:view_port) ? options[:view_port] : VIEW_PORT,
+ httpAuthenticationCredentials: options.has_key?(:http_authentication_credentials) ? options[:http_authentication_credentials] : HTTP_AUTHENTICATION_CREDENTIALS
+ },
+ pdfOptions: DEFAULT_OPTIONS.map { |option, value| [option, options.has_key?(option) ? options[option] : value] }.to_h
+ }.to_json
+ end
end
-end
\ No newline at end of file
+end