Class: ReactOnRails::ServerRenderingPool

Inherits:
Object
  • Object
show all
Defined in:
lib/react_on_rails/server_rendering_pool.rb

Class Method Summary collapse

Class Method Details

.reset_poolObject



8
9
10
11
12
# File 'lib/react_on_rails/server_rendering_pool.rb', line 8

def self.reset_pool
  options = { size: ReactOnRails.configuration.server_renderer_pool_size,
              timeout: ReactOnRails.configuration.server_renderer_pool_size }
  @js_context_pool = ConnectionPool.new(options) { create_js_context }
end

.reset_pool_if_server_bundle_was_modifiedObject



14
15
16
17
18
19
20
21
# File 'lib/react_on_rails/server_rendering_pool.rb', line 14

def self.reset_pool_if_server_bundle_was_modified
  return unless ReactOnRails.configuration.development_mode
  file_mtime = File.mtime(ReactOnRails.configuration.server_bundle_js_file)
  @server_bundle_timestamp ||= file_mtime
  return if @server_bundle_timestamp == file_mtime
  ReactOnRails::ServerRenderingPool.reset_pool
  @server_bundle_timestamp = file_mtime
end

.server_render_js_with_console_logging(js_code) ⇒ Object

js_code: JavaScript expression that returns a string. Returns a Hash:

html: string of HTML for direct insertion on the page by evaluating js_code
consoleReplayScript: script for replaying console
hasErrors: true if server rendering errors

Note, js_code does not have to be based on React. js_code MUST RETURN json stringify Object Calling code will probably call ‘html_safe’ on return value before rendering to the view.



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

def self.server_render_js_with_console_logging(js_code)
  trace_messsage(js_code)
  json_string = eval_js(js_code)
  result = JSON.parse(json_string)

  if ReactOnRails.configuration.logging_on_server
    console_script = result["consoleReplayScript"]
    console_script_lines = console_script.split("\n")
    console_script_lines = console_script_lines[2..-2]
    re = /console\.log\.apply\(console, \["\[SERVER\] (?<msg>.*)"\]\);/
    if console_script_lines
      console_script_lines.each do |line|
        match = re.match(line)
        Rails.logger.info { "[react_on_rails] #{match[:msg]}" } if match
      end
    end
  end
  result
end