Module: Bidi2pdfRails::ChromedriverManagerSingleton

Defined in:
lib/bidi2pdf_rails/chromedriver_manager_singleton.rb

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.managerObject (readonly)

Returns the value of attribute manager.



8
9
10
# File 'lib/bidi2pdf_rails/chromedriver_manager_singleton.rb', line 8

def manager
  @manager
end

Instance Attribute Details

#bidi2pdf_rails_sessionObject

Returns the value of attribute bidi2pdf_rails_session.



5
6
7
# File 'lib/bidi2pdf_rails/chromedriver_manager_singleton.rb', line 5

def bidi2pdf_rails_session
  @bidi2pdf_rails_session
end

Class Method Details

.initialize_manager(force: false) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/bidi2pdf_rails/chromedriver_manager_singleton.rb', line 10

def initialize_manager(force: false)
  return unless running_as_server? || force

  @mutex ||= Mutex.new
  @mutex.synchronize do
    return if @manager && @session

    msg = Bidi2pdfRails.use_remote_browser? ? "Remote session" : "ChromeDriver manager"

    Bidi2pdfRails.logger.info "Initializing Bidi2pdf #{msg}"

    unless Bidi2pdfRails.use_remote_browser?
      @manager = Bidi2pdf::ChromedriverManager.new(
        port: Bidi2pdfRails.config.chromedriver_settings.port_value,
        headless: Bidi2pdfRails.config.general_options.headless_value,
        chrome_args: Bidi2pdfRails.config.general_options.chrome_session_args_value
      )
      @manager.start
    end
  end
end

.running_as_server?Boolean

Returns:

  • (Boolean)


68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/bidi2pdf_rails/chromedriver_manager_singleton.rb', line 68

def running_as_server?
  return false if Rails.const_defined?(:Console)
  return false if defined?(Rails::Generators)

  return false if File.basename($0) == "rake"

  # Covers common Rails server entrypoints
  server_commands = %w[server puma unicorn passenger thin webrick rackup]
  cmdline = File.basename($0)

  server_commands.any? { |s| cmdline.include?(s) } ||
    Rails.const_defined?("Server")
end

.sessionObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/bidi2pdf_rails/chromedriver_manager_singleton.rb', line 32

def session
  Thread.current.bidi2pdf_rails_session ||= begin
                                              if Bidi2pdfRails.use_remote_browser?
                                                session = Bidi2pdf::Bidi::Session.new(
                                                  session_url: Bidi2pdfRails.config.render_remote_settings.browser_url_value,
                                                  headless: Bidi2pdfRails.config.general_options.headless_value,
                                                  chrome_args: Bidi2pdfRails.config.general_options.chrome_session_args_value
                                                )
                                              else
                                                session = @manager.session
                                              end

                                              session.start
                                              session.client.on_close { Bidi2pdfRails.logger.info "WebSocket session closed" }
                                              session
                                            end
end

.session_closeObject



50
51
52
53
# File 'lib/bidi2pdf_rails/chromedriver_manager_singleton.rb', line 50

def session_close
  Thread.current.bidi2pdf_rails_session&.close
  Thread.current.bidi2pdf_rails_session = nil
end

.shutdownObject



55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/bidi2pdf_rails/chromedriver_manager_singleton.rb', line 55

def shutdown
  return unless running_as_server?

  @mutex ||= Mutex.new
  @mutex.synchronize do
    msg = Bidi2pdfRails.use_remote_browser? ? "Remote session" : "ChromeDriver manager"
    Bidi2pdfRails.logger.info "Shutting down Bidi2pdf #{msg}"
    session_close
    @manager&.stop
    @manager = nil
  end
end