Sha256: 7e65dfe88b075473932b85a70e2fe5216983b7f1af3dc6732a52a87a7d7bf0e6
Contents?: true
Size: 1.54 KB
Versions: 1
Compression:
Stored size: 1.54 KB
Contents
# frozen_string_literal: true require_relative 'async_partial/railtie' module AsyncPartial module Renderer def render(context, options, block) if (options.delete(:async) || (options[:locals]&.delete(:async))) AsyncResult.new(Thread.new { super }) else super end end end class AsyncResult def initialize(thread) @thread = thread end def nil? false end def html_safe? true end def to_s self end def value val = @thread.value @thread.kill val end end module ArrayBuffer def initialize(*) super @values = [] end def <<(value) @values << [value, :<<] unless value.nil? self end alias :append= :<< def safe_concat(value) raise ActiveSupport::SafeBuffer::SafeConcatError unless html_safe? @values << [value, :safe_concat] unless value.nil? self end alias :safe_append= :safe_concat def safe_expr_append=(val) @values << [val, :safe_expr_append] unless val.nil? self end def to_s result = @values.each_with_object(ActiveSupport::SafeBuffer.new) do |(v, meth), buf| if meth == :<< if AsyncPartial::AsyncResult === v buf << v.value else buf << v.to_s end else if AsyncPartial::AsyncResult === v buf.safe_concat(v.value) else buf.safe_concat(v.to_s) end end end result.to_s end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
async_partial-0.3.0 | lib/async_partial.rb |