code: public static Writable filterLine(Reader reader, final @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure closure) {
          final BufferedReader br = new BufferedReader(reader);
          return new Writable() {
              public Writer writeTo(Writer out) throws IOException {
                  BufferedWriter bw = new BufferedWriter(out);
                  String line;
                  BooleanClosureWrapper bcw = new BooleanClosureWrapper(closure);
                  while ((line = br.readLine()) != null) {
                      if (bcw.call(line)) {
                          bw.write(line);
                          bw.newLine();
                      }
                  }
                  bw.flush();
                  return out;
              }
  
              public String toString() {
                  StringWriter buffer = new StringWriter();
                  try {
                      writeTo(buffer);
                  } catch (IOException e) {
                      throw new StringWriterIOException(e);
                  }
                  return buffer.toString();
              }
          };
      }
docs: Filter the lines from this Reader, and return a Writable which can be
  used to stream the filtered lines to a destination.  The closure should
  return <code>true</code> if the line should be passed to the writer.
  
  @param reader  this reader
  @param closure a closure used for filtering
  @return a Writable which will use the closure to filter each line
  from the reader when the Writable#writeTo(Writer) is called.
  @since 1.0