rio 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +340 -0
- data/ChangeLog +755 -0
- data/README +65 -0
- data/RUNME.1st.rb +75 -0
- data/Rakefile +312 -0
- data/VERSION +1 -0
- data/doc/README_MSWIN32.txt +39 -0
- data/doc/RELEASE_NOTES +130 -0
- data/doc/generators/template/html/rio.rb +895 -0
- data/doc/rdoc/classes/Kernel.html +181 -0
- data/doc/rdoc/classes/Kernel.src/M000183.html +18 -0
- data/doc/rdoc/classes/RIO.html +508 -0
- data/doc/rdoc/classes/RIO.src/M000001.html +18 -0
- data/doc/rdoc/classes/RIO.src/M000002.html +18 -0
- data/doc/rdoc/classes/RIO.src/M000003.html +18 -0
- data/doc/rdoc/classes/RIO/Doc.html +138 -0
- data/doc/rdoc/classes/RIO/Doc/HOWTO.html +1031 -0
- data/doc/rdoc/classes/RIO/Doc/INTRO.html +1116 -0
- data/doc/rdoc/classes/RIO/Doc/MISC.html +443 -0
- data/doc/rdoc/classes/RIO/Doc/SYNOPSIS.html +325 -0
- data/doc/rdoc/classes/RIO/Rio.html +6333 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000004.html +18 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000005.html +20 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000006.html +27 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000007.html +27 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000008.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000009.html +18 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000010.html +20 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000011.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000012.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000013.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000014.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000015.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000016.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000017.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000018.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000019.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000020.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000021.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000022.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000023.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000024.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000025.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000026.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000027.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000028.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000029.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000030.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000031.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000032.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000033.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000034.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000035.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000036.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000037.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000038.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000039.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000040.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000041.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000042.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000043.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000044.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000045.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000046.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000047.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000048.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000049.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000050.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000051.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000052.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000053.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000054.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000055.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000056.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000057.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000058.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000059.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000060.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000061.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000062.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000063.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000064.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000065.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000066.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000067.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000068.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000069.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000070.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000071.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000072.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000073.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000074.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000075.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000076.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000077.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000078.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000079.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000080.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000081.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000082.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000083.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000084.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000085.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000086.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000087.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000088.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000089.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000090.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000091.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000092.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000093.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000094.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000095.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000096.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000097.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000098.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000099.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000100.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000101.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000102.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000103.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000104.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000105.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000106.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000107.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000108.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000109.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000110.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000111.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000112.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000113.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000114.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000115.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000116.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000117.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000118.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000119.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000120.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000121.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000122.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000123.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000124.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000125.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000126.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000127.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000128.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000129.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000130.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000131.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000132.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000133.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000134.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000135.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000136.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000137.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000138.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000139.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000140.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000141.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000142.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000143.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000144.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000145.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000146.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000147.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000148.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000149.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000150.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000151.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000152.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000153.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000154.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000155.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000156.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000157.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000158.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000159.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000160.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000161.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000162.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000163.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000164.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000165.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000166.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000167.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000168.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000169.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000170.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000171.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000172.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000173.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000174.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000175.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000176.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000177.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000178.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000179.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000180.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000181.html +16 -0
- data/doc/rdoc/classes/RIO/Rio.src/M000182.html +16 -0
- data/doc/rdoc/created.rid +1 -0
- data/doc/rdoc/files/README.html +215 -0
- data/doc/rdoc/files/lib/rio/constructor_rb.html +142 -0
- data/doc/rdoc/files/lib/rio/doc/HOWTO_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/doc/INTRO_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/doc/MISC_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/doc/SYNOPSIS_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/basic_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/dir_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/file_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/fileordir_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/grande_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/internal_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/methods_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/path_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/stream_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/if/test_rb.html +135 -0
- data/doc/rdoc/files/lib/rio/kernel_rb.html +142 -0
- data/doc/rdoc/files/lib/rio_rb.html +153 -0
- data/doc/rdoc/fr_class_index.html +34 -0
- data/doc/rdoc/fr_file_index.html +44 -0
- data/doc/rdoc/fr_method_index.html +210 -0
- data/doc/rdoc/index.html +24 -0
- data/doc/rdoc/rdoc-style.css +384 -0
- data/doc/rfc1738.txt +1403 -0
- data/doc/rfc959.txt +3933 -0
- data/ex/colx.rb +6 -0
- data/ex/findinruby +19 -0
- data/ex/findruby +11 -0
- data/ex/prompt.rb +25 -0
- data/ex/rgb.txt.gz +0 -0
- data/ex/riocat +35 -0
- data/ex/riogunzip +31 -0
- data/ex/riogzip +24 -0
- data/ex/tolf +11 -0
- data/lib/rio.rb +163 -0
- data/lib/rio/abstract_method.rb +57 -0
- data/lib/rio/argv.rb +57 -0
- data/lib/rio/arrayio.rb +199 -0
- data/lib/rio/arycopy.rb +44 -0
- data/lib/rio/assert.rb +115 -0
- data/lib/rio/base.rb +59 -0
- data/lib/rio/constructor.rb +183 -0
- data/lib/rio/context.rb +117 -0
- data/lib/rio/context/chomp.rb +53 -0
- data/lib/rio/context/closeoneof.rb +50 -0
- data/lib/rio/context/cxx.rb +67 -0
- data/lib/rio/context/dir.rb +92 -0
- data/lib/rio/context/gzip.rb +51 -0
- data/lib/rio/context/methods.rb +196 -0
- data/lib/rio/context/stream.rb +170 -0
- data/lib/rio/cp.rb +305 -0
- data/lib/rio/cxdir.rb +79 -0
- data/lib/rio/dir.rb +145 -0
- data/lib/rio/doc.rb +45 -0
- data/lib/rio/doc/HOWTO.rb +691 -0
- data/lib/rio/doc/INTRO.rb +579 -0
- data/lib/rio/doc/MISC.rb +257 -0
- data/lib/rio/doc/SYNOPSIS.rb +170 -0
- data/lib/rio/entrysel.rb +162 -0
- data/lib/rio/exception.rb +42 -0
- data/lib/rio/exception/copy.rb +98 -0
- data/lib/rio/exception/open.rb +62 -0
- data/lib/rio/exception/state.rb +74 -0
- data/lib/rio/ext.rb +62 -0
- data/lib/rio/ext/csv.rb +261 -0
- data/lib/rio/factory.rb +236 -0
- data/lib/rio/file.rb +77 -0
- data/lib/rio/filter/chomp.rb +61 -0
- data/lib/rio/filter/closeoneof.rb +103 -0
- data/lib/rio/filter/gzip.rb +58 -0
- data/lib/rio/ftp.rb +275 -0
- data/lib/rio/ftp/conn.rb +167 -0
- data/lib/rio/ftp/ioh.rb +88 -0
- data/lib/rio/grande.rb +126 -0
- data/lib/rio/handle.rb +101 -0
- data/lib/rio/if.rb +53 -0
- data/lib/rio/if/basic.rb +64 -0
- data/lib/rio/if/dir.rb +362 -0
- data/lib/rio/if/file.rb +57 -0
- data/lib/rio/if/fileordir.rb +247 -0
- data/lib/rio/if/grande.rb +510 -0
- data/lib/rio/if/internal.rb +53 -0
- data/lib/rio/if/methods.rb +612 -0
- data/lib/rio/if/path.rb +413 -0
- data/lib/rio/if/stream.rb +599 -0
- data/lib/rio/if/test.rb +219 -0
- data/lib/rio/impl/path.rb +82 -0
- data/lib/rio/ioh.rb +137 -0
- data/lib/rio/iomode.rb +96 -0
- data/lib/rio/kernel.rb +47 -0
- data/lib/rio/local.rb +63 -0
- data/lib/rio/match.rb +51 -0
- data/lib/rio/matchrecord.rb +254 -0
- data/lib/rio/open3.rb +69 -0
- data/lib/rio/ops/create.rb +78 -0
- data/lib/rio/ops/dir.rb +302 -0
- data/lib/rio/ops/either.rb +117 -0
- data/lib/rio/ops/file.rb +94 -0
- data/lib/rio/ops/path.rb +292 -0
- data/lib/rio/ops/stream.rb +84 -0
- data/lib/rio/ops/stream/input.rb +237 -0
- data/lib/rio/ops/stream/output.rb +96 -0
- data/lib/rio/ops/stream/read.rb +84 -0
- data/lib/rio/ops/stream/write.rb +58 -0
- data/lib/rio/ops/symlink.rb +70 -0
- data/lib/rio/path.rb +117 -0
- data/lib/rio/path/reset.rb +70 -0
- data/lib/rio/record.rb +59 -0
- data/lib/rio/rectype.rb +86 -0
- data/lib/rio/rl/base.rb +147 -0
- data/lib/rio/rl/builder.rb +166 -0
- data/lib/rio/rl/ioi.rb +66 -0
- data/lib/rio/rl/path.rb +141 -0
- data/lib/rio/rl/uri.rb +118 -0
- data/lib/rio/scheme/aryio.rb +89 -0
- data/lib/rio/scheme/cmdio.rb +74 -0
- data/lib/rio/scheme/fd.rb +65 -0
- data/lib/rio/scheme/ftp.rb +73 -0
- data/lib/rio/scheme/http.rb +81 -0
- data/lib/rio/scheme/path.rb +100 -0
- data/lib/rio/scheme/stderr.rb +56 -0
- data/lib/rio/scheme/stdio.rb +71 -0
- data/lib/rio/scheme/strio.rb +82 -0
- data/lib/rio/scheme/sysio.rb +61 -0
- data/lib/rio/scheme/tcp.rb +74 -0
- data/lib/rio/scheme/tempfile.rb +104 -0
- data/lib/rio/state.rb +209 -0
- data/lib/rio/state/error.rb +73 -0
- data/lib/rio/stream.rb +181 -0
- data/lib/rio/stream/base.rb +50 -0
- data/lib/rio/stream/duplex.rb +76 -0
- data/lib/rio/stream/open.rb +203 -0
- data/lib/rio/symantics.rb +46 -0
- data/lib/rio/to_rio.rb +57 -0
- data/lib/rio/uri/file.rb +145 -0
- data/lib/rio/version.rb +52 -0
- data/setup.rb +1331 -0
- data/test/1.rb +14 -0
- data/test/mswin32.rb +28 -0
- data/test/once.rb +7 -0
- data/test/runtests.rb +12 -0
- data/test/runtests_gem.rb +15 -0
- data/test/tc/abs.rb +349 -0
- data/test/tc/all.rb +42 -0
- data/test/tc/cd1.rb +116 -0
- data/test/tc/clearsel.rb +69 -0
- data/test/tc/closeoncopy.rb +91 -0
- data/test/tc/closeoneof.rb +194 -0
- data/test/tc/copy-from.rb +183 -0
- data/test/tc/copy-to.rb +94 -0
- data/test/tc/copy.rb +72 -0
- data/test/tc/copyarray.rb +191 -0
- data/test/tc/copydest.rb +50 -0
- data/test/tc/copydir.rb +192 -0
- data/test/tc/copydirlines.rb +124 -0
- data/test/tc/copylines.rb +40 -0
- data/test/tc/copynonex.rb +121 -0
- data/test/tc/create.rb +104 -0
- data/test/tc/csv.rb +229 -0
- data/test/tc/dir.rb +79 -0
- data/test/tc/dirautoclose.rb +70 -0
- data/test/tc/dirent.rb +180 -0
- data/test/tc/dirss.rb +84 -0
- data/test/tc/each.rb +111 -0
- data/test/tc/each_break.rb +241 -0
- data/test/tc/edf.rb +82 -0
- data/test/tc/entary.rb +230 -0
- data/test/tc/eq.rb +101 -0
- data/test/tc/expand_path.rb +94 -0
- data/test/tc/ext.rb +115 -0
- data/test/tc/fileno.rb +95 -0
- data/test/tc/getrec.rb +140 -0
- data/test/tc/lineno.rb +197 -0
- data/test/tc/lines.rb +66 -0
- data/test/tc/methods.rb +185 -0
- data/test/tc/misc.rb +473 -0
- data/test/tc/nolines.rb +205 -0
- data/test/tc/noqae.rb +873 -0
- data/test/tc/once.rb +6 -0
- data/test/tc/overload.rb +137 -0
- data/test/tc/pa.rb +159 -0
- data/test/tc/pathop.rb +63 -0
- data/test/tc/paths.rb +147 -0
- data/test/tc/qae.rb +494 -0
- data/test/tc/qae_riovar.rb +500 -0
- data/test/tc/records.rb +69 -0
- data/test/tc/rename.rb +224 -0
- data/test/tc/rename_assign.rb +48 -0
- data/test/tc/sub.rb +49 -0
- data/test/tc/symlink.rb +177 -0
- data/test/tc/symlink0.rb +298 -0
- data/test/tc/symlink1.rb +115 -0
- data/test/tc/testcase.rb +152 -0
- metadata +461 -0
@@ -0,0 +1,53 @@
|
|
1
|
+
#--
|
2
|
+
# ===============================================================================
|
3
|
+
# Copyright (c) 2005, Christopher Kleckner
|
4
|
+
# All rights reserved
|
5
|
+
#
|
6
|
+
# This file is part of the Rio library for ruby.
|
7
|
+
#
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with Rio; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
# ===============================================================================
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
# To create the documentation for Rio run the command
|
25
|
+
# rake rdoc
|
26
|
+
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
|
+
#
|
28
|
+
# Suggested Reading
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
30
|
+
# * RIO::Doc::INTRO
|
31
|
+
# * RIO::Doc::HOWTO
|
32
|
+
# * RIO::Rio
|
33
|
+
#
|
34
|
+
# <b>Rio is pre-alpha software.
|
35
|
+
# The documented interface and behavior is subject to change without notice.</b>
|
36
|
+
|
37
|
+
|
38
|
+
module RIO
|
39
|
+
class Rio
|
40
|
+
# This is an internal function and is not needed in client code.
|
41
|
+
# It returns the internal 'Context' object.
|
42
|
+
#def cx() target.cx() end
|
43
|
+
|
44
|
+
# This is an internal function and should not normally be needed in client code.
|
45
|
+
# It closes a Rio and returns it to its 'reset' state.
|
46
|
+
def reset() target.reset() end
|
47
|
+
|
48
|
+
# This is an internal function and is not needed in client code.
|
49
|
+
# It returns the internal 'Rio Resource Locator' object.
|
50
|
+
def rl() target.rl() end
|
51
|
+
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,612 @@
|
|
1
|
+
#--
|
2
|
+
# ===============================================================================
|
3
|
+
# Copyright (c) 2005, Christopher Kleckner
|
4
|
+
# All rights reserved
|
5
|
+
#
|
6
|
+
# This file is part of the Rio library for ruby.
|
7
|
+
#
|
8
|
+
# Rio is free software; you can redistribute it and/or modify
|
9
|
+
# it under the terms of the GNU General Public License as published by
|
10
|
+
# the Free Software Foundation; either version 2 of the License, or
|
11
|
+
# (at your option) any later version.
|
12
|
+
#
|
13
|
+
# Rio is distributed in the hope that it will be useful,
|
14
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
15
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
16
|
+
# GNU General Public License for more details.
|
17
|
+
#
|
18
|
+
# You should have received a copy of the GNU General Public License
|
19
|
+
# along with Rio; if not, write to the Free Software
|
20
|
+
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
21
|
+
# ===============================================================================
|
22
|
+
#++
|
23
|
+
#
|
24
|
+
# To create the documentation for Rio run the command
|
25
|
+
# rake rdoc
|
26
|
+
# from the distribution directory. Then point your browser at the 'doc/rdoc' directory.
|
27
|
+
#
|
28
|
+
# Suggested Reading
|
29
|
+
# * RIO::Doc::SYNOPSIS
|
30
|
+
# * RIO::Doc::INTRO
|
31
|
+
# * RIO::Doc::HOWTO
|
32
|
+
# * RIO::Rio
|
33
|
+
#
|
34
|
+
# <b>Rio is pre-alpha software.
|
35
|
+
# The documented interface and behavior is subject to change without notice.</b>
|
36
|
+
|
37
|
+
|
38
|
+
module RIO
|
39
|
+
class Rio
|
40
|
+
|
41
|
+
# Sets the rio to read lines and returns the Rio
|
42
|
+
#
|
43
|
+
# If called with a block behaves as if lines(*args).each(&block) had been called
|
44
|
+
#
|
45
|
+
# If args are provided they may be one or more of the following:
|
46
|
+
# Regexp:: any matching record will be processed
|
47
|
+
# Range:: specifies a range of records (zero-based) to be included
|
48
|
+
# Integer:: interpreted as a one element range of lines to be processed
|
49
|
+
# Proc:: a proc which will be called for each record, records are included unless nil or false is returned
|
50
|
+
# Symbol:: a symbol which will _sent_ to each record, records are included unless nil or false is returned
|
51
|
+
#
|
52
|
+
# rio('f.txt').lines(/^\s*#/) { |line| ... } # iterate over comment-only lines
|
53
|
+
# rio('f.txt').lines(/^\s*#/).each { |line| ... } # same as above
|
54
|
+
#
|
55
|
+
# rio('f.txt').lines(1,7..9) > rio('anotherfile.txt') # copy lines 1,7,8 and 9 to anotherfile.txt
|
56
|
+
#
|
57
|
+
# rio('f.txt').lines(1...3).to_a # return an array containing lines 1 and 2 of f.txt
|
58
|
+
# rio('f.txt').lines[1...3] # same thing
|
59
|
+
#
|
60
|
+
def lines(*args,&block) target.lines(*args,&block); self end
|
61
|
+
|
62
|
+
# Sets the rio to read bytes and returns the rio
|
63
|
+
#
|
64
|
+
# _n_ specifies the number of bytes to be returned on each iteration of Rio#each or by Rio#getrec. If _args_
|
65
|
+
# are provided, they are treated as record selectors as if <tt>ario.bytes(n).records(*args)</tt> had been
|
66
|
+
# called. See also Rio#records, Rio#lines, Rio#each, Rio#[]
|
67
|
+
#
|
68
|
+
# If called with a block behaves as if <tt>ario.bytes(n,*args).each(&block)</tt> had been called
|
69
|
+
#
|
70
|
+
# rio('f.dat').bytes(1024) { |rec| ... } # iterate through f.txt 1024 bytes at a time
|
71
|
+
# rio('f.dat').bytes(1024).each { |rec| ... } # same as above
|
72
|
+
#
|
73
|
+
# rio('f.dat').bytes(1024,0..4) { |rec| ... } # iterate through the first five 1024 byte blocks
|
74
|
+
#
|
75
|
+
# rio('f.dat').bytes(64).to_a # return the contents of f.dat as an array of 64 byte chunks
|
76
|
+
#
|
77
|
+
# rio('f.dat').bytes(512).records(0,7..9) > rio('dfile.dat') # copy 512-byte blocks 0,7,8 and 9 to dfile.dat
|
78
|
+
#
|
79
|
+
# rio('f.dat').bytes(2048).records[0...10] # return an array containing the first 10 2K blocks of f.dat
|
80
|
+
# rio('f.dat').bytes(2048)[0...10] # same thing
|
81
|
+
#
|
82
|
+
# rio('f.dat').bytes { |bytestr| ... } # iterate over f.dat 1 byte at a time.
|
83
|
+
# rio('f.dat').bytes[0...100] # returns an array of the first 100 bytes of f.dat
|
84
|
+
#
|
85
|
+
def bytes(n=1,*args,&block) target.bytes(n,*args,&block); self end
|
86
|
+
|
87
|
+
# Specifies which records will be iterated through by Rio#each or returned by Rio#getrec
|
88
|
+
#
|
89
|
+
# If called with a block behaves as if <tt>records(*args).each(&block)</tt> had been called
|
90
|
+
#
|
91
|
+
# Returns the Rio
|
92
|
+
#
|
93
|
+
# If no args are provided, all records are selected. What constitutes a record is affected by Rio#lines,Rio#bytes,
|
94
|
+
# and extensions such as Rio#csv.
|
95
|
+
#
|
96
|
+
# If args are provided they may be one or more of the following:
|
97
|
+
# [Regexp]
|
98
|
+
# any matching record will be iterated over by Rio#each or returned by Rio#getrec
|
99
|
+
# [Integer]
|
100
|
+
# specifies a record-number (zero-based) to be iterated over by Rio#each or returned by Rio#getrec
|
101
|
+
# [Range]
|
102
|
+
# specifies a range of records (zero-based) to included in the iteration
|
103
|
+
# [Proc]
|
104
|
+
# a proc which will be called for each record, records are included unless nil or false is returned
|
105
|
+
# [Symbol]
|
106
|
+
# a symbol which will _sent_ to each record, records are included unless nil or false is returned
|
107
|
+
#
|
108
|
+
# Note in the following examples that since +lines+ is the default <tt>ario.records(*args)</tt>
|
109
|
+
# is effectively the same as <tt>ario.lines(*args)</tt>.
|
110
|
+
#
|
111
|
+
# rio('afile').records(0) { |line| ... } # iterate over the first line of 'afile'
|
112
|
+
# rio('afile').records(0,5..7)) { |line| ... } # iterate over lines 0,5,6 and 7
|
113
|
+
# rio('afile').records(/Zippy/) { |line| ... } # iterate over all lines containing 'Zippy'
|
114
|
+
# rio('afile').lines(0,/^\s*#/) { |line| ... } # iterate over the first line and comment lines
|
115
|
+
# rio('afile').records(0,/^\s*#/) { |line| ... } # same thing
|
116
|
+
# rio('afile').lines(proc { |rec,rnum,rio| rnum == 0 || rec =~ /^\s*#/ }) { |line| ... } # same thing
|
117
|
+
# rio('afile').chomp.lines(proc { |rec,rnum,rio| rec.size > 0 }) { |line| ... } # non-empty lines
|
118
|
+
# # return array containing line 0, all comment lines and any line containing the filename of the Rio
|
119
|
+
# rio('afile').lines[0,/^\s*#/,proc { |rec,rnum,ario| rec =~ /#{ario.filename}/ }]
|
120
|
+
#
|
121
|
+
#
|
122
|
+
def records(*args,&block) target.records(*args,&block); self end
|
123
|
+
|
124
|
+
# Specifies records which should *not* be iterated through by Rio#each or returned by Rio#getrec
|
125
|
+
#
|
126
|
+
# If called with a block behaves as if norecords(*args).each(&block) had been called
|
127
|
+
#
|
128
|
+
# Returns the Rio
|
129
|
+
#
|
130
|
+
# See also Rio#records, Rio#nolines, Rio#lines
|
131
|
+
#
|
132
|
+
# If no args are provided, no records are rejected. What constitutes a record is affected by Rio#lines,Rio#bytes,
|
133
|
+
# and extensions such as Rio#csv.
|
134
|
+
#
|
135
|
+
# If args are provided they may be one or more of the following:
|
136
|
+
# Regexp:: any matching record will not be processed
|
137
|
+
# Integer:: specifies a record-number (zero-based) to be skipped
|
138
|
+
# Range:: specifies a range of records (zero-based) to be excluded
|
139
|
+
# Proc:: a proc which will be called for each record, records are excluded unless nil or false is returned
|
140
|
+
# Symbol:: a symbol which will _sent_ to each record, records are excluded unless nil or false is returned
|
141
|
+
#
|
142
|
+
# Note in the following examples that since +lines+ is the default record
|
143
|
+
# type <tt>ario.norecords(*args)</tt> is effectively
|
144
|
+
# the same as <tt>ario.nolines(*args)</tt>.
|
145
|
+
#
|
146
|
+
# rio('afile').norecords(0) { |line| ... } # iterate over all but the first line of 'afile'
|
147
|
+
# rio('afile').norecords(0,5..7)) { |line| ... } # don't iterate over lines 0,5,6 and 7
|
148
|
+
# rio('afile').norecords(/Zippy/) { |line| ... } # skip all lines containing 'Zippy'
|
149
|
+
# rio('afile').chomp.nolines(:empty?) { |line| ... } # skip empty lines
|
150
|
+
#
|
151
|
+
def norecords(*args,&block) target.norecords(*args,&block); self end
|
152
|
+
|
153
|
+
# Sets the Rio to read lines and specifies lines which should *not* be iterated through by Rio#each or
|
154
|
+
# returned by Rio#getrec
|
155
|
+
#
|
156
|
+
# If called with a block behaves as if <tt>nolines(*args).each(&block)</tt> had been called
|
157
|
+
#
|
158
|
+
# Returns the Rio
|
159
|
+
#
|
160
|
+
# See also Rio#lines, Rio#records
|
161
|
+
#
|
162
|
+
# If no args are provided, no lines are rejected.
|
163
|
+
#
|
164
|
+
# If args are provided they may be one or more of the following:
|
165
|
+
# [Regexp] any matching line will not be processed
|
166
|
+
# [Integer] specifies a line-number (zero-based) to be skipped
|
167
|
+
# [Range] specifies a range of lines (zero-based) to be excluded
|
168
|
+
# [Proc] a proc which will be called for each line, lines are excluded unless nil or false is returned
|
169
|
+
# [Symbol] a symbol which will _sent_ to each line, lines are excluded unless nil or false is returned
|
170
|
+
#
|
171
|
+
# rio('afile').nolines(0) { |line| ... } # iterate over all but the first line of 'afile'
|
172
|
+
# rio('afile').nolines(0,5..7)) { |line| ... } # don't iterate over lines 0,5,6 and 7
|
173
|
+
# rio('afile').nolines(/Zippy/) { |line| ... } # skip all lines containing 'Zippy'
|
174
|
+
# rio('afile').chomp.nolines(:empty?) { |line| ... } # skip empty lines
|
175
|
+
#
|
176
|
+
def nolines(*args,&block) target.nolines(*args,&block); self end
|
177
|
+
|
178
|
+
|
179
|
+
|
180
|
+
# Sets the Rio to read rows and specifies rows which should be iterated through
|
181
|
+
# by Rio#each or returned by Rio#getrec
|
182
|
+
# Rio#rows is intended for use by extensions, where the concept of a row is reasonable.
|
183
|
+
# In the absensence of an extension behaves like Rio#records
|
184
|
+
def rows(*args,&block) target.rows(*args,&block); self end
|
185
|
+
|
186
|
+
# Sets the Rio to read rows and specifies lines which should *not* be iterated
|
187
|
+
# through by Rio#each or returned by Rio#getrec
|
188
|
+
# Rio#norows is intended for use by extensions, where the concept of a row is
|
189
|
+
# reasonable. In the absensence of an extension behaves like Rio#norecords
|
190
|
+
def norows(*args,&block) target.norows(*args,&block); self end
|
191
|
+
|
192
|
+
# Sets the implicit output mode to 'a'.
|
193
|
+
#
|
194
|
+
# This is the mode Rio will use for output when no mode is specified
|
195
|
+
#
|
196
|
+
# Rios normally don't need to be opened or have their open mode specified. A Rio determines the mode
|
197
|
+
# based on the file system object and on the action specified. For instance when a Rio encounters
|
198
|
+
# a +read+ on a file it opens the file for reading using File#open and calls IO#read; when it encounters
|
199
|
+
# a +read+ on a directory it knows to use Dir#open and call Dir#read. When it encounters a Rio#puts, it knows
|
200
|
+
# to perform a File#open, and call IO#puts on the returned handle. By default when a method requires
|
201
|
+
# a file be opened for writing the file is opened with a mode of 'w'. Rio#a changes this implicit
|
202
|
+
# output mode to 'a'.
|
203
|
+
#
|
204
|
+
# Note that this is not the same as setting the output mode *explicitly*, as in rio('afile').mode('a').
|
205
|
+
# When the mode is set explicitly using Rio#mode, the mode specified will be used regardless of
|
206
|
+
# the operation being performed. The Rio#a method only affects how Rio opens a file when
|
207
|
+
# it sees an operator that requires writing, and must determine for itself how to open it.
|
208
|
+
#
|
209
|
+
# rio('afile').puts!('Hello World') # call IO#puts on a file handle opened in 'w' mode
|
210
|
+
# rio('afile').a.puts!('Hello World') # call IO#puts on a file handle opened in 'a' mode
|
211
|
+
#
|
212
|
+
# See also Rio#a!, Rio#w! for setting the implicit output mode 'a+' and 'w+' respectively
|
213
|
+
#
|
214
|
+
# The methods Rio#a, Rio#a!, Rio#w, Rio#w!, Rio#r, Rio#r! set the +implicit+ open mode
|
215
|
+
# to 'a','a+','w','w+','r' and 'r+' respectively.
|
216
|
+
def a() target.a(); self end
|
217
|
+
|
218
|
+
|
219
|
+
# Sets the implicit output mode to 'a+'.
|
220
|
+
#
|
221
|
+
# The implicit output mode is the mode Rio will use for output when no mode is specified.
|
222
|
+
#
|
223
|
+
# Returns the Rio
|
224
|
+
#
|
225
|
+
# See the discussion for Rio#a.
|
226
|
+
#
|
227
|
+
def a!() target.a!(); self end
|
228
|
+
|
229
|
+
|
230
|
+
# Sets the implicit input mode to 'r'.
|
231
|
+
#
|
232
|
+
# The implicit input mode is the mode Rio will use for input when no mode is specified.
|
233
|
+
#
|
234
|
+
# Returns the Rio
|
235
|
+
#
|
236
|
+
# See the discussion for Rio#a.
|
237
|
+
#
|
238
|
+
# Since 'r' is the implicit input mode used by default, this method
|
239
|
+
# is probably uneeded.
|
240
|
+
#
|
241
|
+
def r() target.r(); self end
|
242
|
+
|
243
|
+
|
244
|
+
# Sets the implicit input mode to 'r+'.
|
245
|
+
#
|
246
|
+
# The implicit input mode is the mode Rio will use for input when no mode is specified.
|
247
|
+
#
|
248
|
+
# Returns the Rio
|
249
|
+
#
|
250
|
+
# See the discussion for Rio#a.
|
251
|
+
#
|
252
|
+
def r!() target.r!(); self end
|
253
|
+
|
254
|
+
|
255
|
+
# Sets the implicit output mode to 'w'.
|
256
|
+
#
|
257
|
+
# The implicit output mode is the mode Rio will use for output when no mode is specified.
|
258
|
+
#
|
259
|
+
# Returns the Rio
|
260
|
+
#
|
261
|
+
# See the discussion for Rio#a.
|
262
|
+
#
|
263
|
+
# Since 'w' is the implicit output mode used by default, this method
|
264
|
+
# is uneeded, is considered experimental and may be removed at any time.
|
265
|
+
#
|
266
|
+
def w() target.w(); self end
|
267
|
+
|
268
|
+
|
269
|
+
# Sets the implicit output mode to 'w+'.
|
270
|
+
#
|
271
|
+
# The implicit output mode is the mode Rio will use for output when no mode is specified.
|
272
|
+
#
|
273
|
+
# Returns the Rio
|
274
|
+
#
|
275
|
+
# See the discussion for Rio#a.
|
276
|
+
#
|
277
|
+
def w!() target.w!(); self end
|
278
|
+
|
279
|
+
|
280
|
+
# Set the Rio's closeoneof mode.
|
281
|
+
#
|
282
|
+
# ario.closeoneof(&block) => ario
|
283
|
+
#
|
284
|
+
# +closeoneof+ causes a Rio to be closed automatically whenever the end of
|
285
|
+
# file is reached. This is handled at the IO level, and thus affects
|
286
|
+
# all methods that read from a rio (Rio#readlines, Rio#to_a, Rio#each Rio#gets etc.)
|
287
|
+
# Because +closeoneof+ must be on for many of Rio's most useful idioms,
|
288
|
+
# it is on by default. +closeoneof+ can be turned off using Rio#nocloseoneof.
|
289
|
+
#
|
290
|
+
# If a block is given behaves like <tt>ario.closeoneof.each(&block)</tt> had been called
|
291
|
+
#
|
292
|
+
# Returns the Rio
|
293
|
+
#
|
294
|
+
# ario = rio('afile')
|
295
|
+
# lines = ario.readlines
|
296
|
+
# ario.closed? #=> true
|
297
|
+
#
|
298
|
+
# ario = rio('afile').nocloseoneof
|
299
|
+
# lines = ario.readlines
|
300
|
+
# ario.closed? #=> false
|
301
|
+
# ario.close # must be explicitly closed
|
302
|
+
#
|
303
|
+
# +closeoneof+ is ignored by directory Rios, however, setting it on a directory Rio
|
304
|
+
# causes each file Rio returned while iterating to inherit the directory's setting
|
305
|
+
#
|
306
|
+
# rio('adir').files do |file|
|
307
|
+
# file.closeoneof? #=> true
|
308
|
+
# end
|
309
|
+
#
|
310
|
+
# rio('adir').files.nocloseoneof do |file|
|
311
|
+
# file.closeoneof? #=> false
|
312
|
+
# end
|
313
|
+
#
|
314
|
+
# rio('adir').files.nocloseoneof['*.rb'] # array of .rb file Rios in adir with closeoneof off
|
315
|
+
#
|
316
|
+
# drio = rio('adir').files
|
317
|
+
# frio1 = drio.read
|
318
|
+
# frio1.closeoneof? #=> true
|
319
|
+
# drio.nocloseoneof
|
320
|
+
# frio2 = drio.read
|
321
|
+
# frio2.closeoneof? #=> false
|
322
|
+
#
|
323
|
+
#
|
324
|
+
def closeoneof(arg=true,&block) target.closeoneof(arg,&block); self end
|
325
|
+
|
326
|
+
|
327
|
+
# Set the Rio's closeoneof mode to false
|
328
|
+
# ario.nocloseoneof(&block) => ario
|
329
|
+
# See Rio#closeoneof
|
330
|
+
#
|
331
|
+
# If a block is given behaves like
|
332
|
+
# ario.nocloseoneof.each(&block)
|
333
|
+
#
|
334
|
+
# Returns the Rio
|
335
|
+
#
|
336
|
+
# ario = rio('afile')
|
337
|
+
# lines = ario.to_a
|
338
|
+
# ario.closed? #=> true
|
339
|
+
#
|
340
|
+
# ario = rio('afile').nocloseoneof
|
341
|
+
# lines = ario.to_a
|
342
|
+
# ario.closed? #=> false
|
343
|
+
# ario.close # must be explicitly closed
|
344
|
+
def nocloseoneof(arg=false,&block) target.nocloseoneof(arg,&block); self end
|
345
|
+
|
346
|
+
|
347
|
+
# Query a Rio's closeoneof mode
|
348
|
+
# ario.closeoneof? => true or false
|
349
|
+
#
|
350
|
+
# See Rio#closeoneof and Rio#nocloseoneof
|
351
|
+
#
|
352
|
+
# ario = rio('afile')
|
353
|
+
# ario.closeoneof? #=> true
|
354
|
+
# lines = ario.to_a
|
355
|
+
# ario.closed? #=> true
|
356
|
+
#
|
357
|
+
# ario = rio('afile').nocloseoneof
|
358
|
+
# ario.closeoneof? #=> false
|
359
|
+
# lines = ario.to_a
|
360
|
+
# ario.closed? #=> false
|
361
|
+
# ario.close # must be explicitly closed
|
362
|
+
def closeoneof?() target.closeoneof?() end
|
363
|
+
|
364
|
+
|
365
|
+
|
366
|
+
# Set a Rio's closeoncopy mode
|
367
|
+
#
|
368
|
+
# ario.closeoncopy(&block) => ario
|
369
|
+
#
|
370
|
+
# Rio#closeoncopy causes the Rio being written to to be closed when using
|
371
|
+
# a grande copy operator. While Rio#closeoneof causes all Rio's to be closed
|
372
|
+
# when reading to the end of file, it does not affect Rios being written to.
|
373
|
+
# Rio#closeoncopy only affects the Rio being written to and only when a
|
374
|
+
# grande copy operator is used. +closeoncopy+ is on by default, with one exception.
|
375
|
+
#
|
376
|
+
# dest = rio('destfile')
|
377
|
+
# dest < rio('srcfile')
|
378
|
+
# dest.closed? #=> true
|
379
|
+
#
|
380
|
+
# dest = rio('destfile').nocloseoncopy
|
381
|
+
# dest < rio('srcfile')
|
382
|
+
# dest.closed? #=> false
|
383
|
+
# dest.close # must be explicitly closed
|
384
|
+
#
|
385
|
+
# dest = rio('destfile')
|
386
|
+
# dest.print(rio('srcfile').slurp)
|
387
|
+
# dest.closed? #=> false (Rio#print is not a copy operator)
|
388
|
+
# dest.close
|
389
|
+
#
|
390
|
+
#
|
391
|
+
# ==== The Exception
|
392
|
+
#
|
393
|
+
# When a block is passed directly to the rio constructor +closeoncopy+ is turned off.
|
394
|
+
#
|
395
|
+
# rio('afile') { |file|
|
396
|
+
# file.closeoncopy? #=> false
|
397
|
+
# file < a_string
|
398
|
+
# file.closed? #=> false
|
399
|
+
# }
|
400
|
+
# # The file is now closed. See Rio#rio for more informatioin
|
401
|
+
#
|
402
|
+
# ==== Why?
|
403
|
+
#
|
404
|
+
# Some of my favorite Rio idioms are its copy one-liners
|
405
|
+
#
|
406
|
+
# rio('afile') < a_string # put a string into a file
|
407
|
+
# rio('afile') < an_array # put an array into a file
|
408
|
+
# rio('afile') < rio('anotherfile').lines(1..10) # copy the first 10 lines of anotherfile into afile
|
409
|
+
# rio('afile.gz').gzip < rio('anotherfile').lines(1..10) # same thing into a gzipped file
|
410
|
+
#
|
411
|
+
# In each of these cases, 'afile' would remain open after the copy and furthermore
|
412
|
+
# since the destination Rio was not saved in a variable, There is no way to close file.
|
413
|
+
# Without closeoncopy Something like this would be required:
|
414
|
+
#
|
415
|
+
# ario = rio('afile')
|
416
|
+
# ario < something_else
|
417
|
+
# ario.close
|
418
|
+
#
|
419
|
+
# Or this...
|
420
|
+
#
|
421
|
+
# ario = rio('afile') < something_else
|
422
|
+
# ario.close
|
423
|
+
#
|
424
|
+
# Or this...
|
425
|
+
#
|
426
|
+
# (rio('afile') < something_else).close
|
427
|
+
# One line, but ugly, and prone to error.
|
428
|
+
#
|
429
|
+
# What I want is this:
|
430
|
+
#
|
431
|
+
# rio('afile') < something_else
|
432
|
+
#
|
433
|
+
# Simple. I want to copy this to that, I point the arrow and it works.
|
434
|
+
#
|
435
|
+
# In perl the rio's destructor would be called, because there are no remaining references to the Rio
|
436
|
+
# However, it my understanding and experience that in Ruby the finalizer will not necessarily be
|
437
|
+
# called at this point. Calling all gurus: If I am missing something,
|
438
|
+
# and there is a way to make this work without closeoncopy,
|
439
|
+
# please contact the author.
|
440
|
+
#
|
441
|
+
def closeoncopy(arg=true,&block) target.closeoncopy(arg,&block); self end
|
442
|
+
|
443
|
+
|
444
|
+
# Set a Rio's closeoncopy mode to false
|
445
|
+
#
|
446
|
+
# ario.nocloseoncopy(&block) => ario
|
447
|
+
#
|
448
|
+
# See Rio#closeoncopy
|
449
|
+
#
|
450
|
+
def nocloseoncopy(arg=false,&block) target.nocloseoncopy(arg,&block); self end
|
451
|
+
|
452
|
+
|
453
|
+
# Query a Rio's closeoncopy mode
|
454
|
+
#
|
455
|
+
# ario.closeoncopy? => true or false
|
456
|
+
#
|
457
|
+
# See Rio#closeoncopy
|
458
|
+
#
|
459
|
+
def closeoncopy?() target.closeoncopy?() end
|
460
|
+
|
461
|
+
|
462
|
+
# Rio#autorewind?
|
463
|
+
#
|
464
|
+
#
|
465
|
+
#def autorewind?() target.autorewind?() end
|
466
|
+
|
467
|
+
|
468
|
+
# Rio#autorewind
|
469
|
+
#
|
470
|
+
#
|
471
|
+
#def autorewind(arg=true,&block) target.autorewind(arg,&block); self end
|
472
|
+
|
473
|
+
|
474
|
+
# Rio#noautorewind
|
475
|
+
#
|
476
|
+
#
|
477
|
+
#def noautorewind(arg=false,&block) target.noautorewind(arg,&block); self end
|
478
|
+
|
479
|
+
|
480
|
+
# Queries the Rio's chomp-mode.
|
481
|
+
# See Rio#chomp.
|
482
|
+
#
|
483
|
+
#
|
484
|
+
def chomp?() target.chomp?() end
|
485
|
+
|
486
|
+
|
487
|
+
# Sets the Rio to chomp lines and returns the Rio
|
488
|
+
#
|
489
|
+
# When called with a block, behaves as if chomp.each(&block) had been called
|
490
|
+
#
|
491
|
+
# chomp causes lines returned by each, to_a, readlines, readline, gets, each_line etc.
|
492
|
+
# to be chomped before iterated over or assigned
|
493
|
+
#
|
494
|
+
# rio('f.txt').chomp.each { |line| ... } # Block is called with lines already chomped
|
495
|
+
#
|
496
|
+
# rio('f.txt').chomp { |line| ... } # same as above
|
497
|
+
#
|
498
|
+
# rio('f.txt').chomp.to_a # returns the lines of f.txt chomped
|
499
|
+
#
|
500
|
+
# rio('f.txt').chomp.lines(1..2).to_a # returns an array containg lines 1 and 2 of the file after being chomped
|
501
|
+
#
|
502
|
+
# This would have similar results to rio('f.txt').lines(1..2).to_a.map{ |line| line.chomp}
|
503
|
+
#
|
504
|
+
# rio('f.txt').lines(1..2).chomp.to_a # same as above
|
505
|
+
#
|
506
|
+
# rio('f.txt').chomp.readlines # returns the lines of f.txt chomped
|
507
|
+
#
|
508
|
+
# rio('f.txt').chomp.gets # returns the first line of 'f.txt' chomped
|
509
|
+
#
|
510
|
+
# rio('f.txt').chomp > an_array # copies the chomped lines of f.txt into an_array
|
511
|
+
#
|
512
|
+
# # fill an array with all the 'require' lines in all the .rb files (recursively) in adir
|
513
|
+
# # chomping each line
|
514
|
+
# an_array = []
|
515
|
+
# rio('adir').chomp.all.files("*.rb") { |file|
|
516
|
+
# an_array << file.lines(/^\s*require/)
|
517
|
+
# }
|
518
|
+
#
|
519
|
+
def chomp(arg=true,&block) target.chomp(arg,&block); self end
|
520
|
+
|
521
|
+
|
522
|
+
# Sets the Rio to gzip mode.
|
523
|
+
# ario.gzip #=> ario
|
524
|
+
# If applied to a Rio that is being read from Reads
|
525
|
+
# through a <tt>Zlib::GzipReader</tt>; If applied to a Rio that is being written to
|
526
|
+
# writes through a <tt>Zlib::GzipWriter</tt>.
|
527
|
+
#
|
528
|
+
# Returns the Rio
|
529
|
+
#
|
530
|
+
# If a block is given, acts like <tt>ario.gzip.each(&block)</tt>
|
531
|
+
#
|
532
|
+
# rio('afile') > rio('afile.gz').gzip # gzip a file
|
533
|
+
# rio('afile.gz').gzip < rio('afile') # same thing
|
534
|
+
#
|
535
|
+
# rio('afile.gz').gzip > rio('afile') # ungzip a file
|
536
|
+
# rio('afile') < rio('afile.gz').gzip # same thing
|
537
|
+
#
|
538
|
+
# rio('afile.gz').gzip.chomp { |line| ...} # process each chomped line of a gzipped file
|
539
|
+
# rio('afile.gz').gzip[0..9] # an array containing the first 10 lines of a gzipped file
|
540
|
+
#
|
541
|
+
def gzip(&block) target.gzip(true,&block); self end
|
542
|
+
|
543
|
+
|
544
|
+
# Queries the Rio's gzip-mode
|
545
|
+
# ario.gzip? #=> true or false
|
546
|
+
# See Rio#gzip
|
547
|
+
#
|
548
|
+
def gzip?() target.gzip?() end
|
549
|
+
|
550
|
+
|
551
|
+
# Rio#inputmode?
|
552
|
+
#
|
553
|
+
#
|
554
|
+
#def inputmode?() target.inputmode?() end
|
555
|
+
|
556
|
+
|
557
|
+
|
558
|
+
# Rio#outputmode?
|
559
|
+
#
|
560
|
+
#
|
561
|
+
#def outputmode?() target.outputmode?() end
|
562
|
+
|
563
|
+
|
564
|
+
# Sets the 'sync-mode' of the underlying IO using IO#sync=
|
565
|
+
# ario.sync(boolean=true,&block) => ario
|
566
|
+
# Sets the Rio so that its 'sync mode' will be set to +true+ or +false+ when opened, or set
|
567
|
+
# it immediatly if already open. When sync mode is
|
568
|
+
# true, all output is immediately flushed to the underlying operating
|
569
|
+
# system and is not buffered internally. Returns the rio. See
|
570
|
+
# also Rio#fsync, Rio#nosync, Rio#sync?.
|
571
|
+
#
|
572
|
+
# If a block is given behaves like <tt>ario.sync(arg).each(&block)</tt>
|
573
|
+
#
|
574
|
+
# f = rio("testfile").sync.puts("Hello World")
|
575
|
+
# f.sync? # => true
|
576
|
+
#
|
577
|
+
def sync(arg=true,&block) target.sync(arg,&block); self end
|
578
|
+
|
579
|
+
# Similar to IO#sync= false
|
580
|
+
# ario.nosync(&block) => ario
|
581
|
+
# Sets the Rio so that its 'sync mode' will be set to +false+ when opened, or set
|
582
|
+
# it immediatly if already open. When sync mode is
|
583
|
+
# true, all output is immediately flushed to the underlying operating
|
584
|
+
# system and is not buffered internally. Returns the rio. See
|
585
|
+
# also Rio#fsync, Rio#sync, Rio#sync?.
|
586
|
+
#
|
587
|
+
# If a block is given behaves like <tt>ario.nosync.each(&block)</tt>
|
588
|
+
#
|
589
|
+
# f = rio("testfile").sync.puts("Hello World")
|
590
|
+
# f.sync? # => true
|
591
|
+
# f.nosync
|
592
|
+
# f.sync? # => false
|
593
|
+
#
|
594
|
+
def nosync(arg=false,&block) target.nosync(arg,&block); self end
|
595
|
+
|
596
|
+
# Query the current 'sync mode' with IO#sync
|
597
|
+
# ario.sync? => true or false
|
598
|
+
# Returns the current ``sync mode'' of _ario_. When sync mode is true,
|
599
|
+
# all output is immediately flushed to the underlying operating
|
600
|
+
# system and is not buffered by Ruby internally. See also +Rio#fsync+,
|
601
|
+
# Rio#sync, Rio#nosync
|
602
|
+
#
|
603
|
+
# f = rio("testfile")
|
604
|
+
# f.sync? #=> false
|
605
|
+
#
|
606
|
+
def sync?() target.sync?() end
|
607
|
+
|
608
|
+
|
609
|
+
|
610
|
+
|
611
|
+
end
|
612
|
+
end
|