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.


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

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.


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

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.


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

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