class RablRails::Library
Constants
- RENDERER_MAP
- UnknownFormat
Public Class Methods
new()
click to toggle source
# File lib/rabl-rails/library.rb, line 17 def initialize @cached_templates = {} @monitor = Monitor.new end
Public Instance Methods
compile_template_from_path(path, view)
click to toggle source
# File lib/rabl-rails/library.rb, line 42 def compile_template_from_path(path, view) if RablRails.configuration.cache_templates synchronized_compile(path, nil, view) else source = fetch_source(path, view) compile(source, view) end end
compile_template_from_source(source, view)
click to toggle source
# File lib/rabl-rails/library.rb, line 33 def compile_template_from_source(source, view) if RablRails.configuration.cache_templates path = view.instance_variable_get(:@virtual_path) synchronized_compile(path, source, view) else compile(source, view) end end
get_rendered_template(source, view, locals = nil)
click to toggle source
# File lib/rabl-rails/library.rb, line 26 def get_rendered_template(source, view, locals = nil) compiled_template = compile_template_from_source(source, view) format = view.lookup_context.formats.first || :json raise UnknownFormat, "#{format} is not supported in rabl-rails" unless RENDERER_MAP.key?(format) RENDERER_MAP[format].render(compiled_template, view, locals) end
reset_cache!()
click to toggle source
# File lib/rabl-rails/library.rb, line 22 def reset_cache! @cached_templates = {} end
Private Instance Methods
compile(source, view)
click to toggle source
# File lib/rabl-rails/library.rb, line 65 def compile(source, view) Compiler.new(view).compile_source(source) end
fetch_source(path, view)
click to toggle source
# File lib/rabl-rails/library.rb, line 69 def fetch_source(path, view) t = view.lookup_context.find_template(path, [], false) t = t.refresh(view) unless t.source t.source end
synchronized_compile(path, source, view)
click to toggle source
# File lib/rabl-rails/library.rb, line 53 def synchronized_compile(path, source, view) @cached_templates[path] || @monitor.synchronize do # Any thread holding this lock will be compiling the template needed # by the threads waiting. So re-check the template presence to avoid # re-compilation @cached_templates.fetch(path) do source ||= fetch_source(path, view) @cached_templates[path] = compile(source, view) end end end