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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/.idea/bidi2pdf-rails.iml +16 -8
  3. data/.rubocop.yml +11 -0
  4. data/CHANGELOG.md +33 -0
  5. data/README.md +104 -41
  6. data/Rakefile +2 -0
  7. data/cliff.toml +126 -0
  8. data/lib/bidi2pdf_rails/browser_console_log_subscriber.rb +1 -1
  9. data/lib/bidi2pdf_rails/chromedriver_manager_singleton.rb +10 -10
  10. data/lib/bidi2pdf_rails/config.rb +133 -0
  11. data/lib/bidi2pdf_rails/configurable.rb +106 -0
  12. data/lib/bidi2pdf_rails/main_log_subscriber.rb +1 -1
  13. data/lib/bidi2pdf_rails/network_log_subscriber.rb +1 -1
  14. data/lib/bidi2pdf_rails/railtie.rb +2 -0
  15. data/lib/bidi2pdf_rails/services/pdf_renderer.rb +9 -8
  16. data/lib/bidi2pdf_rails/version.rb +1 -1
  17. data/lib/bidi2pdf_rails.rb +28 -99
  18. data/lib/generators/bidi2pdf_rails/USAGE +12 -4
  19. data/lib/generators/bidi2pdf_rails/initializer_generator.rb +136 -31
  20. data/lib/generators/bidi2pdf_rails/templates/bidi2pdf_rails.rb.tt +15 -101
  21. data/spec/acceptance/user_can_download_report_pdf_spec.rb +133 -0
  22. data/spec/acceptance/user_can_generate_pdf_from_protected_remote_url_spec.rb +173 -0
  23. data/spec/dummy/app/controllers/reports_controller.rb +35 -2
  24. data/spec/dummy/app/controllers/secure_controller.rb +52 -0
  25. data/spec/dummy/app/views/layouts/simple.html.erb +17 -0
  26. data/spec/dummy/app/views/secure/show.html.erb +10 -0
  27. data/spec/dummy/config/initializers/bidi2pdf_rails.rb +64 -54
  28. data/spec/dummy/config/routes.rb +9 -1
  29. data/spec/dummy/log/development.log +3850 -0
  30. data/spec/dummy/log/test.log +53046 -0
  31. data/spec/dummy/tmp/pids/server.pid +1 -1
  32. data/spec/integration/generators/bidi2pdf_rails/initializer_generator_spec.rb +64 -0
  33. data/spec/rails_helper.rb +8 -1
  34. data/spec/spec_helper.rb +47 -5
  35. data/spec/support/default_dirs_helper.rb +32 -0
  36. data/spec/support/pdf_helper.rb +12 -0
  37. data/spec/support/render_setting_helpers.rb +28 -0
  38. data/spec/support/request_server_bootstrap.rb +44 -0
  39. data/spec/{bidi2pdf_rails → unit/bidi2pdf_rails}/bidi2pdf_rails_spec.rb +1 -1
  40. data/spec/unit/bidi2pdf_rails/configurable/base_nested_config_spec.rb +133 -0
  41. data/tasks/changelog.rake +29 -0
  42. data/tasks/coverage.rake +23 -0
  43. metadata +69 -20
  44. data/spec/dummy/spec/helpers/reports_helper_spec.rb +0 -15
  45. data/spec/dummy/spec/requests/reports_spec.rb +0 -10
  46. data/spec/dummy/spec/views/reports/show.html.erb_spec.rb +0 -5
  47. data/spec/generator/bidie2pdf_rails_initializer_generator_spec.rb +0 -5
  48. data/spec/generator/initializer_generator_spec.rb +0 -5
  49. 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.verbosity)
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.verbosity)
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]]
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "rails/railtie"
4
+
3
5
  require_relative "services/html_renderer"
4
6
  require_relative "services/pdf_renderer"
5
7
  require_relative "services/pdf_browser_session"
@@ -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.print_options(@pdf_options[:print_options] || {})
49
- wait_for_network_idle = @pdf_options.fetch(:wait_for_network_idle, Bidi2pdfRails.wait_for_network_idle)
50
- wait_for_page_loaded = @pdf_options.fetch(:wait_for_page_loaded, Bidi2pdfRails.wait_for_page_loaded)
51
- wait_for_page_check_script = @pdf_options.fetch(:wait_for_page_check_script, Bidi2pdfRails.wait_for_page_check_script)
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.headers
55
- cookies = @print_url_options[:cookies] || Bidi2pdfRails.cookies
56
- auth = @print_url_options[:auth] || Bidi2pdfRails.auth
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,
@@ -1,3 +1,3 @@
1
1
  module Bidi2pdfRails
2
- VERSION = "0.0.1.alpha.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -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
- attr_accessor :logger, :notification_service, :verbosity, :default_timeout, :remote_browser_url, :cookies,
15
- :headers, :auth, :headless, :chromedriver_port, :chrome_session_args,
16
- :proxy_addr, :proxy_port, :proxy_user, :proxy_pass, :install_dir,
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 self if block_given?
25
-
26
- validate_print_options! print_options
27
- apply_bidi2pdf_config
28
- end
21
+ yield config if block_given?
29
22
 
30
- def validate_print_options!(opts)
31
- validator = Bidi2pdf::Bidi::Commands::PrintParametersValidator.new(opts)
23
+ config.validate_print_options!
32
24
 
33
- validator.validate!
25
+ apply_bidi2pdf_config config
34
26
  end
35
27
 
36
- def print_options(overrides = {})
37
- overrides ||= {}
38
- opts = {}
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
- # Margins
46
- margins = {
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
- opts[:margin] = margins unless margins.empty?
35
+ bidi2pdf_config.network_events_logger = Logger.new(nil)
36
+ bidi2pdf_config.browser_console_logger = Logger.new(nil)
54
37
 
55
- # Page size
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 |config|
84
- config.logger = logger
41
+ Chromedriver::Binary.configure do |chromedriver_config|
42
+ chromedriver_config.logger = config.general_options.logger_value&.tagged("bidi2pdf")
85
43
 
86
- config.proxy_addr = proxy_addr
87
- config.proxy_port = proxy_port
88
- config.proxy_user = proxy_user
89
- config.proxy_pass = proxy_pass
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
- config.install_dir = install_dir
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
- remote_browser_url.present?
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
- @logger ||= Rails.logger # lazy load the logger, after it exists
62
+ config.general_options.logger_value&.tagged("bidi2pdf-rails")
137
63
  end
138
64
  end
139
65
 
140
- self.reset_to_defaults!
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
- Explain the generator
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 Thing
6
+ bin/rails generate bidi2pdf_rails:initializer
6
7
 
7
- This will create:
8
- what/will/it/create
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