Class: ActionView::StreamingFlow

Inherits:
OutputFlow show all
Defined in:
actionview/lib/action_view/flows.rb

Overview

:nodoc:

Instance Attribute Summary

Attributes inherited from OutputFlow

#content

Instance Method Summary collapse

Methods inherited from OutputFlow

#append, #set

Constructor Details

#initialize(view, fiber) ⇒ StreamingFlow

Returns a new instance of StreamingFlow.

[View source]

31
32
33
34
35
36
37
38
# File 'actionview/lib/action_view/flows.rb', line 31

def initialize(view, fiber)
  @view    = view
  @parent  = nil
  @child   = view.output_buffer
  @content = view.view_flow.content
  @fiber   = fiber
  @root    = Fiber.current.object_id
end

Instance Method Details

#append!(key, value) ⇒ Object

Appends the contents for the given key. This is called by providing and resuming back to the fiber, if that’s the key it’s waiting for.

[View source]

65
66
67
68
# File 'actionview/lib/action_view/flows.rb', line 65

def append!(key, value)
  super
  @fiber.resume if @waiting_for == key
end

#get(key) ⇒ Object

Try to get stored content. If the content is not available and we’re inside the layout fiber, then it will begin waiting for the given key and yield.

[View source]

43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'actionview/lib/action_view/flows.rb', line 43

def get(key)
  return super if @content.key?(key)

  if inside_fiber?
    view = @view

    begin
      @waiting_for = key
      view.output_buffer, @parent = @child, view.output_buffer
      Fiber.yield
    ensure
      @waiting_for = nil
      view.output_buffer, @child = @parent, view.output_buffer
    end
  end

  super
end