Class: Spurline::Streaming::StreamEnumerator

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/spurline/streaming/stream_enumerator.rb

Overview

Wraps a block-based streaming interface into a Ruby Enumerator. This allows both block and enumerator usage patterns (ADR-001):

agent.run("hello") { |chunk| print chunk.text }
agent.run("hello").each { |chunk| print chunk.text }

Instance Method Summary collapse

Constructor Details

#initialize(&producer) ⇒ StreamEnumerator

Returns a new instance of StreamEnumerator.



14
15
16
# File 'lib/spurline/streaming/stream_enumerator.rb', line 14

def initialize(&producer)
  @producer = producer
end

Instance Method Details

#each(&consumer) ⇒ Object



18
19
20
21
22
23
24
25
26
# File 'lib/spurline/streaming/stream_enumerator.rb', line 18

def each(&consumer)
  if consumer
    @producer.call(consumer)
  else
    ::Enumerator.new do |yielder|
      @producer.call(proc { |chunk| yielder << chunk })
    end
  end
end