class JsRender::Renderer
Constants
- CONSOLE_POLYFILL
- CONSOLE_REPLAY
- GLOBAL_CONTEXT
Attributes
asset_finder[R]
component_name[R]
json_data[R]
uuid[R]
Public Class Methods
new(component_name, data)
click to toggle source
# File lib/js_render/renderer.rb, line 21 def initialize(component_name, data) @component_name = component_name unless data.is_a?(String) transform_keys(data) data = data.to_json end @json_data = data @uuid = SecureRandom.uuid end
Public Instance Methods
generate_client_script()
click to toggle source
# File lib/js_render/renderer.rb, line 54 def generate_client_script func_name = JsRender.config.client_render_function.gsub('*', @component_name) <<-HTML <script> typeof #{func_name} === 'function' && #{func_name}('#{@uuid}', #{@json_data}); </script> HTML end
generate_html()
click to toggle source
# File lib/js_render/renderer.rb, line 38 def generate_html return "<span id=\"#{@uuid}\"></span>" unless JsRender.config.should_server_render func_name = JsRender.config.server_render_function.gsub('*', @component_name) server_code = <<-JS (function () { var serverStr = typeof #{func_name} === 'function' ? #{func_name}(#{@json_data}) : ''; var consoleReplayStr = #{CONSOLE_REPLAY}; return '<span id="#{@uuid}">' + serverStr + '</span>' + consoleReplayStr; })() JS context.eval(server_code) rescue ExecJS::RuntimeError, ExecJS::ProgramError => error raise Errors::ServerRenderError::new(@component_name, @json_data, error) end
render_component()
click to toggle source
# File lib/js_render/renderer.rb, line 31 def render_component server_html = generate_html client_script = generate_client_script component = (server_html + client_script) component.respond_to?(:html_safe) ? component.html_safe : component end
Private Instance Methods
context()
click to toggle source
# File lib/js_render/renderer.rb, line 66 def context base_path = JsRender.config.base_path paths = JsRender.config.component_paths suffix = JsRender.config.component_suffix @@cache.getset(base_path + paths.join('') + suffix + @component_name) do renderer_code = asset_finder.read_files(@component_name) ExecJS.compile(GLOBAL_CONTEXT + CONSOLE_POLYFILL + renderer_code) end end
transform_keys(data)
click to toggle source
# File lib/js_render/renderer.rb, line 87 def transform_keys(data) JsRender.config.key_transforms.reduce(data) do |transformed_data, transform| transformed_data.tap do |d| d.keys.each { |k| d[transform.call(k.to_s)] = d.delete(k) } end end end