module SvelteOnRails::ViewHelpers
def cached_svelte_component(filename, props = {})
def cached_svelte_component(filename, props = {}) support = SvelteOnRails::Lib::ViewHelperSupport.new(filename, props, request, true) support.debug_log("Rendering component: #{filename}") log_message = '?' redis = support.conf.redis_instance support.debug_log("Redis configuration: #{support.conf.redis_cache_store}") # TTL if support.debug? ttl = redis.ttl(support.cache_key) support.debug_log("Cache key: «#{support.cache_key}» (ttl was: #{ttl} seconds, now set to: #{support.redis_expiration_seconds} seconds)") end redis.expire(support.cache_key, support.redis_expiration_seconds) cached_content = redis.get(support.cache_key) res = if cached_content log_message = "Returned #{support.filename}.svelte from cache" cached_content.html_safe else log_message = "Rendered #{support.filename}.svelte and stored to cache" support.debug_log("cache recalculating for key: #{support.cache_key}") r = render_component(support) support.debug_log("cache recalculated") redis.scan_each(match: "#{support.cache_key_primary}:*") do |key| redis.del(key) support.debug_log("deleted cache: #{key}") end redis.set(support.cache_key, r) r end support.log_rendering(log_message) res end
def render_component(support)
def render_component(support) if support.ssr? ssr_result = support.render_ssr content_tag(:div, support.html_options) do concat(content_tag(:style, ssr_result['css'], type: 'text/css')) concat(ssr_result['html'].html_safe) end else content_tag(:div, support.html_options) {} end end
def svelte_component(filename, props = {})
def svelte_component(filename, props = {}) support = SvelteOnRails::Lib::ViewHelperSupport.new(filename, props, request, false) support.debug_log("Rendering component: #{filename}") log_message = '?' log_message = "Rendered #{support.filename}.svelte #{'as empty element that will be mounted on the client side' unless support.ssr?}" res = render_component(support) support.log_rendering(log_message) res end