Module: AsyncRender::AsyncHelper

Includes:
Utils
Defined in:
lib/async_render/async_helper.rb

Constant Summary collapse

POOL =
AsyncRender.executor

Instance Method Summary collapse

Methods included from Utils

#build_memoized_render_key, #generate_token, #normalize_locals

Instance Method Details

#async_render(partial, locals = {}) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/async_render/async_helper.rb', line 9

def async_render(partial, locals = {})
  return render(partial, locals) unless AsyncRender.enabled

  AsyncRender::Current.skip_middleware = false

  warmup_key = build_memoized_render_key(partial, locals)
  placeholder = AsyncRender::Current.warmup_partials[warmup_key]
  return placeholder if placeholder

  token       = generate_token(partial)
  placeholder = (AsyncRender::PLACEHOLDER_TEMPLATE % token).html_safe
  state       = AsyncRender.dump_state_proc&.call

  AsyncRender::Current.async_futures[token] = Concurrent::Promises.future_on(POOL) do
    AsyncRender::Executor.new(partial:, locals:, state:).call
  end

  placeholder
end