rio 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|