lib/tracksperanto/ext_io.rb in tracksperanto-2.1.0 vs lib/tracksperanto/ext_io.rb in tracksperanto-2.1.1

- old
+ new

@@ -1,20 +1,32 @@ # Many importers use this as a standard. This works like a wrapper for any -# IO object with a couple extra methods added. +# IO object with a couple extra methods added. Note that if you use this in an +# importer you need to wrap the incoming input with it yourself (that is, an IO passed +# to the import module will NOT be wrapped into this already) +# +# io = ExtIO.new(my_open_file) +# io.gets_non_empty #=> "This is the first line after 2000 linebreaks" +# class Tracksperanto::ExtIO < DelegateClass(IO) def initialize(with) __setobj__ with end + # Similar to IO#gets however it will also strip the returned result. This is useful + # for doing + # while non_empty_str = io.gets_and_strip + # because you don't have to check for io.eof? all the time or see if the string is not nil def gets_and_strip s = gets s ? s.strip : nil end + # Similar to IO#gets but it skips empty lines and the first line returned will actually contain something def gets_non_empty - line = gets - return nil if line.nil? - s = line.strip - return gets_non_empty if s.empty? - s + until eof? + line = gets + return nil if line.nil? + s = line.strip + return s unless s.empty? + end end end \ No newline at end of file