bidi2pdf-rails 0.0.1.alpha.1 → 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 +4 -4
- data/.idea/bidi2pdf-rails.iml +16 -8
- data/.rubocop.yml +11 -0
- data/CHANGELOG.md +33 -0
- data/README.md +104 -41
- data/Rakefile +2 -0
- data/cliff.toml +126 -0
- data/lib/bidi2pdf_rails/browser_console_log_subscriber.rb +1 -1
- data/lib/bidi2pdf_rails/chromedriver_manager_singleton.rb +10 -10
- data/lib/bidi2pdf_rails/config.rb +133 -0
- data/lib/bidi2pdf_rails/configurable.rb +106 -0
- data/lib/bidi2pdf_rails/main_log_subscriber.rb +1 -1
- data/lib/bidi2pdf_rails/network_log_subscriber.rb +1 -1
- data/lib/bidi2pdf_rails/railtie.rb +2 -0
- data/lib/bidi2pdf_rails/services/pdf_renderer.rb +9 -8
- data/lib/bidi2pdf_rails/version.rb +1 -1
- data/lib/bidi2pdf_rails.rb +28 -99
- data/lib/generators/bidi2pdf_rails/USAGE +12 -4
- data/lib/generators/bidi2pdf_rails/initializer_generator.rb +136 -31
- data/lib/generators/bidi2pdf_rails/templates/bidi2pdf_rails.rb.tt +15 -101
- data/spec/acceptance/user_can_download_report_pdf_spec.rb +133 -0
- data/spec/acceptance/user_can_generate_pdf_from_protected_remote_url_spec.rb +173 -0
- data/spec/dummy/app/controllers/reports_controller.rb +35 -2
- data/spec/dummy/app/controllers/secure_controller.rb +52 -0
- data/spec/dummy/app/views/layouts/simple.html.erb +17 -0
- data/spec/dummy/app/views/secure/show.html.erb +10 -0
- data/spec/dummy/config/initializers/bidi2pdf_rails.rb +64 -54
- data/spec/dummy/config/routes.rb +9 -1
- data/spec/dummy/log/development.log +3850 -0
- data/spec/dummy/log/test.log +53046 -0
- data/spec/dummy/tmp/pids/server.pid +1 -1
- data/spec/integration/generators/bidi2pdf_rails/initializer_generator_spec.rb +64 -0
- data/spec/rails_helper.rb +8 -1
- data/spec/spec_helper.rb +47 -5
- data/spec/support/default_dirs_helper.rb +32 -0
- data/spec/support/pdf_helper.rb +12 -0
- data/spec/support/render_setting_helpers.rb +28 -0
- data/spec/support/request_server_bootstrap.rb +44 -0
- data/spec/{bidi2pdf_rails → unit/bidi2pdf_rails}/bidi2pdf_rails_spec.rb +1 -1
- data/spec/unit/bidi2pdf_rails/configurable/base_nested_config_spec.rb +133 -0
- data/tasks/changelog.rake +29 -0
- data/tasks/coverage.rake +23 -0
- metadata +69 -20
- data/spec/dummy/spec/helpers/reports_helper_spec.rb +0 -15
- data/spec/dummy/spec/requests/reports_spec.rb +0 -10
- data/spec/dummy/spec/views/reports/show.html.erb_spec.rb +0 -5
- data/spec/generator/bidie2pdf_rails_initializer_generator_spec.rb +0 -5
- data/spec/generator/initializer_generator_spec.rb +0 -5
- data/spec/requests/reports_spec.rb +0 -17
@@ -0,0 +1,133 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "configurable"
|
4
|
+
|
5
|
+
module Bidi2pdfRails
|
6
|
+
class Config
|
7
|
+
include Bidi2pdfRails::Configurable
|
8
|
+
|
9
|
+
CONFIG_OPTIONS = {
|
10
|
+
general_options: {
|
11
|
+
name: "General Options",
|
12
|
+
ask: "Configure general options? (y/n)",
|
13
|
+
options: [
|
14
|
+
{ name: :logger, desc: "The logger", default: -> { Rails.logger || ActiveSupport::TaggedLogging.new(Logger.new(nil)) }, default_as_str: "Rails.logger", ask: false, color: :yellow },
|
15
|
+
{ name: :verbosity, desc: "How verbose to be", default: Bidi2pdf::VerboseLogger::VERBOSITY_LEVELS.keys.sort_by { |k| Bidi2pdf::VerboseLogger::VERBOSITY_LEVELS[k] }.first.to_s, limited_to: Bidi2pdf::VerboseLogger::VERBOSITY_LEVELS.keys.sort_by { |k| Bidi2pdf::VerboseLogger::VERBOSITY_LEVELS[k] }.map(&:to_s), ask: true, color: :yellow },
|
16
|
+
{ name: :headless, desc: "Run Chrome in headless mode", default: -> { !Rails.env.development? }, default_as_str: "!Rails.env.development?", ask: true, color: :green },
|
17
|
+
{ name: :wait_for_network_idle, desc: "Wait for network idle", default: true, ask: true, color: :green },
|
18
|
+
{ name: :wait_for_page_loaded, desc: "Wait for page loaded", default: false, ask: true, color: :green },
|
19
|
+
{ name: :wait_for_page_check_script, desc: "Wait for page check script", default: nil, ask: false },
|
20
|
+
{ name: :notification_service, desc: "Notification service", default: -> { ActiveSupport::Notifications }, default_as_str: "-> { ActiveSupport::Notifications }", ask: false },
|
21
|
+
{ name: :default_timeout, desc: "Default timeout for various Bidi commands", default: 10, ask: true, color: :yellow },
|
22
|
+
{ name: :chrome_session_args, desc: "Chrome session arguments", default: Bidi2pdf::Bidi::Session::DEFAULT_CHROME_ARGS, ask: false }
|
23
|
+
]
|
24
|
+
},
|
25
|
+
|
26
|
+
chromedriver_settings: {
|
27
|
+
name: "Chromedriver Settings (when chromedriver run within your app)",
|
28
|
+
ask: "Configure chromedriver settings? (y/n)",
|
29
|
+
options: [
|
30
|
+
{ name: :install_dir, desc: "Chromedriver install directory", default: nil, ask: false, color: :yellow },
|
31
|
+
{ name: :port, desc: "Chromedriver port", default: 0, ask: true, color: :yellow }
|
32
|
+
]
|
33
|
+
},
|
34
|
+
|
35
|
+
proxy_settings: {
|
36
|
+
name: "Proxy Settings",
|
37
|
+
ask: "Use a proxy server? (y/n)",
|
38
|
+
options: [
|
39
|
+
{ name: :addr, desc: "Proxy address (e.g., 127.0.0.1)", default: nil, ask: true, color: :yellow },
|
40
|
+
{ name: :port, desc: "Proxy port (e.g., 8080)", default: nil, ask: true, color: :yellow },
|
41
|
+
{ name: :user, desc: "Proxy user", default: nil, ask: true, color: :yellow },
|
42
|
+
{
|
43
|
+
name: :pass,
|
44
|
+
desc: "Proxy password",
|
45
|
+
default: -> { -> { Rails.application.credentials.dig("bidi2pdf_rails", "proxy_pass") } },
|
46
|
+
default_as_str: "-> { Rails.application.credentials.dig('bidi2pdf_rails', 'proxy_pass') }",
|
47
|
+
secret: true,
|
48
|
+
ask: true,
|
49
|
+
color: :yellow
|
50
|
+
}
|
51
|
+
]
|
52
|
+
},
|
53
|
+
|
54
|
+
pdf_settings: {
|
55
|
+
name: "PDF Settings",
|
56
|
+
ask: "Configure custom PDF settings? (y/n)",
|
57
|
+
options: [
|
58
|
+
{ name: :orientation, desc: "PDF orientation (portrait/landscape)", default: "portrait", limited_to: %w[portrait landscape], ask: true },
|
59
|
+
{ name: :margins, desc: "Configure PDF margins?", default: false, ask: true, color: :green },
|
60
|
+
{ name: :margin_top, desc: "PDF margin top (cm)", default: 2.5, ask: true, color: :yellow },
|
61
|
+
{ name: :margin_bottom, desc: "PDF margin bottom (cm)", default: 2, ask: true, color: :yellow },
|
62
|
+
{ name: :margin_left, desc: "PDF margin left (cm)", default: 2, ask: true, color: :yellow },
|
63
|
+
{ name: :margin_right, desc: "PDF margin right (cm)", default: 2, ask: true, color: :yellow },
|
64
|
+
{ name: :page_format, desc: "PDF page format (e.g., A4)", default: nil, limited_to: Bidi2pdf::PAPER_FORMATS_CM.keys.map(&:to_s), ask: true },
|
65
|
+
{ name: :page_width, desc: "PDF page width (cm, not needed when format is specified)", default: Bidi2pdf::PAPER_FORMATS_CM[:a4][:width], ask: true, color: :yellow },
|
66
|
+
{ name: :page_height, desc: "PDF page height (cm, not needed when format is specified)", default: Bidi2pdf::PAPER_FORMATS_CM[:a4][:height], ask: true, color: :yellow },
|
67
|
+
{ name: :print_background, desc: "Print background graphics?", default: true, ask: true, color: :green },
|
68
|
+
{ name: :scale, desc: "PDF scale (e.g., 1.0)", default: 1.0, ask: true, color: :yellow },
|
69
|
+
{ name: :shrink_to_fit, desc: "Shrink to fit?", default: false, ask: true, color: :green }
|
70
|
+
]
|
71
|
+
},
|
72
|
+
|
73
|
+
render_remote_settings: {
|
74
|
+
name: "Remote URL Settings",
|
75
|
+
ask: false,
|
76
|
+
options: [
|
77
|
+
{ name: :browser_url, desc: "Remote browser URL (e.g. http://localhost:3001/sesion)", default: nil, ask: true, color: :yellow },
|
78
|
+
{ name: :basic_auth_user, desc: "Basic auth user", default: nil },
|
79
|
+
{ name: :basic_auth_pass, desc: "Basic auth password", default: nil, default_as_str: "-> { Rails.application.credentials.dig('bidi2pdf_rails', 'basic_auth_pass') }", secret: true },
|
80
|
+
{ name: :headers, desc: "Headers to be send when allong an url", default: {}, default_as_str: '{"X-API-INFO" => "my info"}' },
|
81
|
+
{ name: :cookies, desc: "Cookies to be send when alling an url", default: {}, default_as_str: '{"session_id" => "my session"}' }
|
82
|
+
]
|
83
|
+
}
|
84
|
+
|
85
|
+
}.freeze
|
86
|
+
|
87
|
+
configure_with(CONFIG_OPTIONS)
|
88
|
+
|
89
|
+
def initialize
|
90
|
+
reset_to_defaults!
|
91
|
+
end
|
92
|
+
|
93
|
+
def pdf_settings_for_bidi_cmd(overrides = {})
|
94
|
+
overrides ||= {}
|
95
|
+
opts = {}
|
96
|
+
|
97
|
+
opts[:background] = pdf_settings.print_background_value
|
98
|
+
opts[:orientation] = pdf_settings.orientation_value
|
99
|
+
opts[:scale] = pdf_settings.scale_value
|
100
|
+
opts[:shrinkToFit] = pdf_settings.shrink_to_fit_value
|
101
|
+
|
102
|
+
# Margins
|
103
|
+
margins = {
|
104
|
+
top: pdf_settings.margin_top_value,
|
105
|
+
bottom: pdf_settings.margin_bottom_value,
|
106
|
+
left: pdf_settings.margin_left_value,
|
107
|
+
right: pdf_settings.margin_right_value
|
108
|
+
}.compact
|
109
|
+
|
110
|
+
opts[:margin] = margins unless margins.empty?
|
111
|
+
|
112
|
+
# Page size
|
113
|
+
page = {
|
114
|
+
width: pdf_settings.page_width_value,
|
115
|
+
height: pdf_settings.page_height_value,
|
116
|
+
format: pdf_settings.page_format_value
|
117
|
+
}.compact
|
118
|
+
|
119
|
+
page = overrides[:page].compact if overrides[:page]&.compact.present?
|
120
|
+
page = { format: page[:format] } if page[:format]
|
121
|
+
|
122
|
+
opts[:page] = page unless page.empty?
|
123
|
+
|
124
|
+
opts.deep_merge(overrides).compact
|
125
|
+
end
|
126
|
+
|
127
|
+
def validate_print_options!
|
128
|
+
validator = Bidi2pdf::Bidi::Commands::PrintParametersValidator.new(pdf_settings_for_bidi_cmd)
|
129
|
+
|
130
|
+
validator.validate!
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "active_support/concern"
|
4
|
+
|
5
|
+
module Bidi2pdfRails
|
6
|
+
module Configurable
|
7
|
+
extend ActiveSupport::Concern
|
8
|
+
included do
|
9
|
+
include Singleton
|
10
|
+
end
|
11
|
+
|
12
|
+
class BaseNestedConfig
|
13
|
+
def initialize(option_defs)
|
14
|
+
@__options = option_defs
|
15
|
+
define_accessors!
|
16
|
+
reset_to_defaults!
|
17
|
+
end
|
18
|
+
|
19
|
+
def define_accessors!
|
20
|
+
@__options.each do |opt|
|
21
|
+
name = opt[:name]
|
22
|
+
unless respond_to?(name)
|
23
|
+
define_singleton_method(name) { instance_variable_get("@#{name}") }
|
24
|
+
define_singleton_method("#{name}=") { |v| instance_variable_set("@#{name}", v) }
|
25
|
+
|
26
|
+
define_singleton_method("#{name}_value") do |*args|
|
27
|
+
value = send("#{name}")
|
28
|
+
value.respond_to?(:call) ? value.call(*args) : value
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def reset_to_defaults!
|
35
|
+
@__options.each do |opt|
|
36
|
+
default = opt[:default]
|
37
|
+
value = default
|
38
|
+
send("#{opt[:name]}=", value)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def config_options
|
43
|
+
@__options
|
44
|
+
end
|
45
|
+
|
46
|
+
def configure
|
47
|
+
yield self if block_given?
|
48
|
+
end
|
49
|
+
|
50
|
+
def to_h
|
51
|
+
@__options.to_h do |opt|
|
52
|
+
[opt[:name], send(opt[:name])]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def inspect
|
57
|
+
"#<#{self.class.name || "ConfigSection"} #{to_h.inspect}>"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def configure
|
62
|
+
yield self if block_given?
|
63
|
+
end
|
64
|
+
|
65
|
+
class_methods do
|
66
|
+
def configure_with(grouped_options)
|
67
|
+
@config_groups = grouped_options
|
68
|
+
|
69
|
+
grouped_options.each do |group_key, group_data|
|
70
|
+
group_class = Class.new(BaseNestedConfig)
|
71
|
+
|
72
|
+
define_method(group_key) do
|
73
|
+
ivar = "@#{group_key}"
|
74
|
+
instance_variable_get(ivar) || instance_variable_set(ivar, group_class.new(group_data[:options]))
|
75
|
+
end
|
76
|
+
|
77
|
+
define_method("#{group_key}=") do |val|
|
78
|
+
raise ArgumentError, "Use individual accessors, not direct assignment to config groups"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
define_method(:reset_to_defaults!) do
|
83
|
+
grouped_options.each_key do |group_key|
|
84
|
+
section = send(group_key)
|
85
|
+
section.reset_to_defaults!
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
define_method(:config_groups) do
|
90
|
+
grouped_options
|
91
|
+
end
|
92
|
+
|
93
|
+
define_method(:to_h) do
|
94
|
+
grouped_options.keys.to_h do |group_key|
|
95
|
+
section = send(group_key)
|
96
|
+
[group_key, section.to_h]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
define_method(:inspect) do
|
101
|
+
"#<#{self.class.name} #{to_h.inspect}>"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
@@ -23,7 +23,7 @@ module Bidi2pdfRails
|
|
23
23
|
end
|
24
24
|
|
25
25
|
def logger
|
26
|
-
Bidi2pdf::VerboseLogger.new(super.tagged("bidi2pdf_rails"), Bidi2pdfRails.
|
26
|
+
Bidi2pdf::VerboseLogger.new(super.tagged("bidi2pdf_rails"), Bidi2pdfRails.config.general_options.verbosity_value)
|
27
27
|
end
|
28
28
|
|
29
29
|
def silenced?(event)
|
@@ -10,7 +10,7 @@ module Bidi2pdfRails
|
|
10
10
|
return if payload[:method] == "network.responseStarted" || payload[:method] == "network.beforeRequestSent"
|
11
11
|
|
12
12
|
logger.tagged("bidi2pdf_rails", "network") do |tagged_logger|
|
13
|
-
verbose_logger = Bidi2pdf::VerboseLogger.new(tagged_logger, Bidi2pdfRails.
|
13
|
+
verbose_logger = Bidi2pdf::VerboseLogger.new(tagged_logger, Bidi2pdfRails.config.general_options.verbosity_value)
|
14
14
|
formatter = Bidi2pdf::Bidi::NetworkEventFormatters::NetworkEventConsoleFormatter.new(logger: verbose_logger)
|
15
15
|
|
16
16
|
formatter.log [payload[:event]]
|
@@ -26,6 +26,7 @@ module Bidi2pdfRails
|
|
26
26
|
wait_for_network_idle
|
27
27
|
wait_for_page_loaded
|
28
28
|
wait_for_page_check_script
|
29
|
+
html
|
29
30
|
].freeze
|
30
31
|
|
31
32
|
PRINT_URL_OPTIONS = %i[
|
@@ -45,15 +46,15 @@ module Bidi2pdfRails
|
|
45
46
|
|
46
47
|
def render_pdf
|
47
48
|
ActiveSupport::Notifications.instrument("handle_printing.bidi2pdf_rails") do
|
48
|
-
print_options = Bidi2pdfRails.
|
49
|
-
wait_for_network_idle = @pdf_options.fetch(:wait_for_network_idle, Bidi2pdfRails.
|
50
|
-
wait_for_page_loaded = @pdf_options.fetch(:wait_for_page_loaded, Bidi2pdfRails.
|
51
|
-
wait_for_page_check_script = @pdf_options.fetch(:wait_for_page_check_script, Bidi2pdfRails.
|
49
|
+
print_options = Bidi2pdfRails.config.pdf_settings_for_bidi_cmd(@pdf_options[:print_options] || {})
|
50
|
+
wait_for_network_idle = @pdf_options.fetch(:wait_for_network_idle, Bidi2pdfRails.config.general_options.wait_for_network_idle_value)
|
51
|
+
wait_for_page_loaded = @pdf_options.fetch(:wait_for_page_loaded, Bidi2pdfRails.config.general_options.wait_for_page_loaded_value)
|
52
|
+
wait_for_page_check_script = @pdf_options.fetch(:wait_for_page_check_script, Bidi2pdfRails.config.general_options.wait_for_page_check_script_value)
|
52
53
|
|
53
54
|
if @print_url_options[:url]
|
54
|
-
headers = @print_url_options[:headers] || Bidi2pdfRails.
|
55
|
-
cookies = @print_url_options[:cookies] || Bidi2pdfRails.
|
56
|
-
auth = @print_url_options[:auth] || Bidi2pdfRails.
|
55
|
+
headers = @print_url_options[:headers] || Bidi2pdfRails.config.render_remote_settings.headers_value(@controller)
|
56
|
+
cookies = @print_url_options[:cookies] || Bidi2pdfRails.config.render_remote_settings.cookies_value(@controller)
|
57
|
+
auth = @print_url_options[:auth] || { username: Bidi2pdfRails.config.render_remote_settings.basic_auth_user_value(@controller), password: Bidi2pdfRails.config.render_remote_settings.basic_auth_pass_value(@controller) }
|
57
58
|
|
58
59
|
UrlToPdfConverter.new(@print_url_options[:url],
|
59
60
|
headers: headers,
|
@@ -65,7 +66,7 @@ module Bidi2pdfRails
|
|
65
66
|
wait_for_page_check_script: wait_for_page_check_script
|
66
67
|
).generate
|
67
68
|
else
|
68
|
-
html = HtmlRenderer.new(@controller, @html_options).render
|
69
|
+
html = @html_options.fetch(:inline, HtmlRenderer.new(@controller, @html_options).render)
|
69
70
|
|
70
71
|
HtmlToPdfConverter.new(html,
|
71
72
|
print_options: print_options,
|
data/lib/bidi2pdf_rails.rb
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
require "bidi2pdf"
|
4
4
|
require "bidi2pdf/bidi/commands/print_parameters_validator"
|
5
5
|
require_relative "bidi2pdf_rails/version"
|
6
|
+
require_relative "bidi2pdf_rails/config"
|
6
7
|
require_relative "bidi2pdf_rails/railtie"
|
7
8
|
require_relative "bidi2pdf_rails/chromedriver_manager_singleton"
|
8
9
|
require_relative "bidi2pdf_rails/main_log_subscriber"
|
@@ -11,84 +12,41 @@ require_relative "bidi2pdf_rails/network_log_subscriber"
|
|
11
12
|
|
12
13
|
module Bidi2pdfRails
|
13
14
|
class << self
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
:pdf_page_width, :pdf_page_height,
|
18
|
-
:pdf_margin_top, :pdf_margin_bottom, :pdf_margin_left, :pdf_margin_right,
|
19
|
-
:pdf_scale, :pdf_shrink_to_fit, :pdf_print_background, :pdf_page_format, :pdf_orientation, :verbosity,
|
20
|
-
:wait_for_network_idle, :wait_for_page_loaded, :wait_for_page_check_script
|
15
|
+
def config
|
16
|
+
Config.instance
|
17
|
+
end
|
21
18
|
|
22
19
|
# Allow configuration through a block
|
23
20
|
def configure
|
24
|
-
yield
|
25
|
-
|
26
|
-
validate_print_options! print_options
|
27
|
-
apply_bidi2pdf_config
|
28
|
-
end
|
21
|
+
yield config if block_given?
|
29
22
|
|
30
|
-
|
31
|
-
validator = Bidi2pdf::Bidi::Commands::PrintParametersValidator.new(opts)
|
23
|
+
config.validate_print_options!
|
32
24
|
|
33
|
-
|
25
|
+
apply_bidi2pdf_config config
|
34
26
|
end
|
35
27
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
opts[:background] = pdf_print_background unless pdf_print_background.nil?
|
41
|
-
opts[:orientation] = pdf_orientation unless pdf_orientation.nil?
|
42
|
-
opts[:scale] = pdf_scale unless pdf_scale.nil?
|
43
|
-
opts[:shrinkToFit] = pdf_shrink_to_fit unless pdf_shrink_to_fit.nil?
|
28
|
+
def apply_bidi2pdf_config(config = Config.instance)
|
29
|
+
Bidi2pdf.configure do |bidi2pdf_config|
|
30
|
+
bidi2pdf_config.notification_service = config.general_options.notification_service_value
|
44
31
|
|
45
|
-
|
46
|
-
|
47
|
-
top: @pdf_margin_top,
|
48
|
-
bottom: @pdf_margin_bottom,
|
49
|
-
left: @pdf_margin_left,
|
50
|
-
right: @pdf_margin_right
|
51
|
-
}.compact
|
32
|
+
bidi2pdf_config.logger = config.general_options.logger_value&.tagged("bidi2pdf")
|
33
|
+
bidi2pdf_config.default_timeout = config.general_options.default_timeout_value
|
52
34
|
|
53
|
-
|
35
|
+
bidi2pdf_config.network_events_logger = Logger.new(nil)
|
36
|
+
bidi2pdf_config.browser_console_logger = Logger.new(nil)
|
54
37
|
|
55
|
-
|
56
|
-
page = {
|
57
|
-
width: @pdf_page_width,
|
58
|
-
height: @pdf_page_height,
|
59
|
-
format: @pdf_page_format
|
60
|
-
}.compact
|
61
|
-
|
62
|
-
page = overrides[:page].compact if overrides[:page]&.compact.present?
|
63
|
-
|
64
|
-
opts[:page] = page unless page.empty?
|
65
|
-
|
66
|
-
opts.deep_merge(overrides)
|
67
|
-
end
|
68
|
-
|
69
|
-
def apply_bidi2pdf_config
|
70
|
-
# Allow configuration through a block
|
71
|
-
Bidi2pdf.configure do |config|
|
72
|
-
config.notification_service = notification_service
|
73
|
-
|
74
|
-
config.logger = logger.tagged("bidi2pdf")
|
75
|
-
config.default_timeout = default_timeout
|
76
|
-
|
77
|
-
config.network_events_logger = Logger.new(nil)
|
78
|
-
config.browser_console_logger = Logger.new(nil) # Disable browser console logging
|
79
|
-
|
80
|
-
config.enable_default_logging_subscriber = false
|
38
|
+
bidi2pdf_config.enable_default_logging_subscriber = false
|
81
39
|
end
|
82
40
|
|
83
|
-
Chromedriver::Binary.configure do |
|
84
|
-
|
41
|
+
Chromedriver::Binary.configure do |chromedriver_config|
|
42
|
+
chromedriver_config.logger = config.general_options.logger_value&.tagged("bidi2pdf")
|
85
43
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
44
|
+
chromedriver_config.proxy_addr = config.proxy_settings.addr_value
|
45
|
+
chromedriver_config.proxy_port = config.proxy_settings.port_value
|
46
|
+
chromedriver_config.proxy_user = config.proxy_settings.user_value
|
47
|
+
chromedriver_config.proxy_pass = config.proxy_settings.pass_value
|
90
48
|
|
91
|
-
|
49
|
+
chromedriver_config.install_dir = config.chromedriver_settings.install_dir_value
|
92
50
|
end
|
93
51
|
end
|
94
52
|
|
@@ -97,45 +55,16 @@ module Bidi2pdfRails
|
|
97
55
|
end
|
98
56
|
|
99
57
|
def use_remote_browser?
|
100
|
-
|
101
|
-
end
|
102
|
-
|
103
|
-
def reset_to_defaults!
|
104
|
-
@logger = nil
|
105
|
-
@default_timeout = 10
|
106
|
-
@verbosity = 0
|
107
|
-
@remote_browser_url = nil
|
108
|
-
@cookies = {}
|
109
|
-
@headers = {}
|
110
|
-
@auth = nil
|
111
|
-
@headless = !Rails.env.development?
|
112
|
-
@chromedriver_port = 0
|
113
|
-
@chrome_session_args = Bidi2pdf::Bidi::Session::DEFAULT_CHROME_ARGS
|
114
|
-
|
115
|
-
@proxy_addr = nil
|
116
|
-
@proxy_port = nil
|
117
|
-
@proxy_user = nil
|
118
|
-
@proxy_pass = nil
|
119
|
-
@install_dir = nil
|
120
|
-
|
121
|
-
@wait_for_network_idle = true
|
122
|
-
@wait_for_page_loaded = false
|
123
|
-
@wait_for_page_check_script = nil
|
124
|
-
|
125
|
-
@pdf_print_background = true
|
126
|
-
@pdf_orientation = "portrait"
|
127
|
-
@pdf_page_width = Bidi2pdf::PAPER_FORMATS_CM[:a4][:width]
|
128
|
-
@pdf_page_height = Bidi2pdf::PAPER_FORMATS_CM[:a4][:height]
|
129
|
-
@pdf_page_format = nil
|
130
|
-
|
131
|
-
@pdf_shrink_to_fit = nil
|
132
|
-
@pdf_scale = 1.0
|
58
|
+
config.render_remote_settings.browser_url_value.present?
|
133
59
|
end
|
134
60
|
|
135
61
|
def logger
|
136
|
-
|
62
|
+
config.general_options.logger_value&.tagged("bidi2pdf-rails")
|
137
63
|
end
|
138
64
|
end
|
139
65
|
|
140
|
-
self
|
66
|
+
that = self
|
67
|
+
ActiveSupport.on_load(:action_controller_base, run_once: true) do
|
68
|
+
that.configure # apply the default configuration at load time
|
69
|
+
end
|
141
70
|
end
|
@@ -1,8 +1,16 @@
|
|
1
1
|
Description:
|
2
|
-
|
2
|
+
Generates a configuration file for Bidi2pdfRails in config/initializers/bidi2pdf_rails.rb
|
3
|
+
and adds development environment settings.
|
3
4
|
|
4
5
|
Example:
|
5
|
-
bin/rails generate initializer
|
6
|
+
bin/rails generate bidi2pdf_rails:initializer
|
6
7
|
|
7
|
-
|
8
|
-
|
8
|
+
# With options
|
9
|
+
bin/rails generate bidi2pdf_rails:initializer --quiet # Skip interactive prompts
|
10
|
+
bin/rails generate bidi2pdf_rails:initializer --force # Overwrite existing config
|
11
|
+
|
12
|
+
This will create:
|
13
|
+
config/initializers/bidi2pdf_rails.rb
|
14
|
+
|
15
|
+
And add settings to:
|
16
|
+
config/environments/development.rb
|