Class: RIO::Cmd::From

Inherits:
FibPipe show all
Defined in:
lib/rio/fibpipe.rb

Direct Known Subclasses

FromInput, FromProc

Instance Attribute Summary collapse

Attributes inherited from FibPipe

#fib, #source

Instance Method Summary collapse

Methods inherited from FibPipe

#dest_report_data_done, #dest_report_new_data, #dest_wait_for_reader, #fiber_yield, #resume, #source_resume

Constructor Details

#initialize(io) ⇒ From

Returns a new instance of From.



169
170
171
172
173
174
# File 'lib/rio/fibpipe.rb', line 169

def initialize(io)
  super(_create_output_fiber)
  @pipe = IOPipe.new
  data.in = io
  data.out = @pipe.wr
end

Instance Attribute Details

#pipeObject (readonly)

Returns the value of attribute pipe.



168
169
170
# File 'lib/rio/fibpipe.rb', line 168

def pipe
  @pipe
end

Instance Method Details

#_create_output_fiberObject



179
180
181
182
183
184
185
186
# File 'lib/rio/fibpipe.rb', line 179

def _create_output_fiber
  fibname = /[^:]+$/.match(self.class.to_s)[0]
  NamedFiber.new(fibname) do |trail|
    _fiber_init(trail)
    process_loop
    dest_wait_for_reader
  end
end

#_fiber_init(trail) ⇒ Object



175
176
177
178
# File 'lib/rio/fibpipe.rb', line 175

def _fiber_init(trail)
  super
  source_resume(trail) if source
end

#process_loopObject



187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
# File 'lib/rio/fibpipe.rb', line 187

def process_loop
  loop do
    begin
      rec = get()
      data.out.write(rec)
      data.out.flush
      dest_report_new_data
    rescue Errno::EWOULDBLOCK
      source_resume(true) or source_wait
    rescue Errno::EINTR
      break
    rescue EOFError,StopIteration
      data.out.close_write
      source_resume(nil) if source
      break
    end
  end
end