An ImplicitStream is an easy way to create a stream on the fly without defining a subclass of BasicStream. The basic methods required for a stream are defined with blocks:
s = Stream::ImplicitStream.new { |s| x = 0 s.at_end_proc = proc {x == 5} s.forward_proc = proc {x += 1 } } s.to_a ==> [1, 2, 3, 4, 5]
Note that this stream is only partially defined since backward_proc and at_beginning_proc are not defined. It may as well be useful if only moving forward is required by the code fragment.
ImplicitStreams can be based on other streams using the method modify which is for example used in the methods for creating stream wrappers which remove the first or last element of an existing stream (see remove_first and remove_last).
Create a new ImplicitStream which might wrap an existing stream otherStream. If otherStream is supplied the blocks for the basic stream methods are initialized with closures that delegate all operations to the wrapped stream.
If a block is given to new, than it is called with the new ImplicitStream stream as parameter letting the client overwriting the default blocks.
# File lib/stream.rb, line 470 def initialize (otherStream=nil) if otherStream @wrapped_stream = otherStream @at_beginning_proc = proc {otherStream.at_beginning?} @at_end_proc = proc {otherStream.at_end?} @forward_proc = proc {otherStream.basic_forward} @backward_proc = proc {otherStream.basic_backward} @set_to_end_proc = proc {otherStream.set_to_end} @set_to_begin_proc = proc {otherStream.set_to_begin} end yield self if block_given? # let client overwrite defaults @at_beginning_proc = proc {true} unless @at_beginning_proc @at_end_proc = proc {true} unless @at_end_proc end
Returns the value of @at_beginning_proc.
# File lib/stream.rb, line 487 def at_beginning?; @at_beginning_proc.call; end
Returns the value of @at_end_proc.
# File lib/stream.rb, line 489 def at_end?; @at_end_proc.call; end
Returns the value of @backward_proc_proc.
# File lib/stream.rb, line 494 def basic_backward; @backward_proc.call; end
Returns the value of @forward_proc.
# File lib/stream.rb, line 492 def basic_forward; @forward_proc.call; end
Calls set_to_begin_proc or super if set_to_begin_proc is undefined.
# File lib/stream.rb, line 502 def set_to_begin @set_to_begin_proc ? @set_to_begin_proc.call : super end
Calls set_to_end_proc or super if set_to_end_proc is undefined.
# File lib/stream.rb, line 497 def set_to_end @set_to_end_proc ? @set_to_end_proc.call : super end
Generated with the Darkfish Rdoc Generator 2.