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
data/lib/rio/ftp/ioh.rb
ADDED
|
@@ -0,0 +1,88 @@
|
|
|
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
|
+
require 'net/ftp'
|
|
39
|
+
require 'rio/ioh'
|
|
40
|
+
module RIO
|
|
41
|
+
module FTP
|
|
42
|
+
class IOH < RIO::IOH::Base
|
|
43
|
+
def each(&block)
|
|
44
|
+
names.each do |s|
|
|
45
|
+
yield s
|
|
46
|
+
end
|
|
47
|
+
self
|
|
48
|
+
end
|
|
49
|
+
def close()
|
|
50
|
+
@ios.close unless closed?
|
|
51
|
+
@ios = nil
|
|
52
|
+
end
|
|
53
|
+
def closed?() @ios.nil? end
|
|
54
|
+
def chdir(dir,&block)
|
|
55
|
+
if block_given?
|
|
56
|
+
wd = @ios.pwd
|
|
57
|
+
@ios.chdir(dir) unless dir == wd
|
|
58
|
+
rtn = yield self
|
|
59
|
+
@ios.chdir(wd) unless dir == wd
|
|
60
|
+
return rtn
|
|
61
|
+
else
|
|
62
|
+
@ios.chdir(dir)
|
|
63
|
+
end
|
|
64
|
+
self
|
|
65
|
+
end
|
|
66
|
+
def list()
|
|
67
|
+
@ios.list
|
|
68
|
+
end
|
|
69
|
+
def nlst()
|
|
70
|
+
@ios.nlst
|
|
71
|
+
end
|
|
72
|
+
def names()
|
|
73
|
+
begin
|
|
74
|
+
@ios.nlst
|
|
75
|
+
rescue ::Net::FTPTempError
|
|
76
|
+
[]
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
extend Forwardable
|
|
80
|
+
def_instance_delegators(:handle,:pwd,:mkdir,:rename,:put,:delete,:rmdir,:mdtm,:mtime,:root_dir)
|
|
81
|
+
|
|
82
|
+
def callstr(func,*args)
|
|
83
|
+
self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
data/lib/rio/grande.rb
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
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
|
+
require 'rio/match'
|
|
39
|
+
module RIO
|
|
40
|
+
module Grande #:nodoc: all
|
|
41
|
+
include Match::Common
|
|
42
|
+
def [](*args)
|
|
43
|
+
#p "#{callstr('[]',*args)} ss_type=#{cx['ss_type']} stream_iter=#{stream_iter?}"
|
|
44
|
+
ss_args = cx['ss_args'] = args
|
|
45
|
+
if ss_args and (ss_type = ss_type?(_ss_keys()))
|
|
46
|
+
return self.__send__(ss_type,*(ss_args)).to_a
|
|
47
|
+
else
|
|
48
|
+
return to_a()
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
module RIO
|
|
54
|
+
module Grande
|
|
55
|
+
module Dir
|
|
56
|
+
|
|
57
|
+
def each_(*args,&block)
|
|
58
|
+
#p "#{callstr('each_',*args)} sel=#{cx['sel'].inspect} nosel=#{cx['nosel'].inspect}"
|
|
59
|
+
sel = Match::Entry::Selector.new(cx['sel'],cx['nosel'])
|
|
60
|
+
selfstr = (self.to_s == '.' ? nil : self.to_s)
|
|
61
|
+
self.ioh.each do |estr|
|
|
62
|
+
next if estr =~ /^\.(\.)?$/
|
|
63
|
+
begin
|
|
64
|
+
erio = new_rio_cx(selfstr ? Impl::U.join(selfstr,estr) : estr )
|
|
65
|
+
|
|
66
|
+
if stream_iter?
|
|
67
|
+
_add_stream_iter_cx(erio).each(&block) if erio.file? and sel.match?(erio)
|
|
68
|
+
else
|
|
69
|
+
yield _add_iter_cx(erio) if sel.match?(erio)
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
if cx.has_key?('all') and erio.dir?
|
|
73
|
+
rsel = Match::Entry::Selector.new(cx['r_sel'],cx['r_nosel'])
|
|
74
|
+
_add_recurse_iter_cx(erio).each(&block) if rsel.match?(erio)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
rescue ::Errno::ENOENT, ::URI::InvalidURIError => ex
|
|
78
|
+
$stderr.puts(ex.message+". Skipping.")
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
closeoneof? ? self.close.softreset : self
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
private
|
|
87
|
+
|
|
88
|
+
def _ss_keys() Cx::SS::ENTRY_KEYS + Cx::SS::STREAM_KEYS end
|
|
89
|
+
CX_ALL_SKIP_KEYS = ['retrystate']
|
|
90
|
+
def _add_recurse_iter_cx(ario)
|
|
91
|
+
new_cx = ario.cx
|
|
92
|
+
cx.keys.reject { |k| CX_ALL_SKIP_KEYS.include?(k) }.each { |k|
|
|
93
|
+
new_cx.set_(k,cx[k])
|
|
94
|
+
}
|
|
95
|
+
ario.cx = new_cx
|
|
96
|
+
ario
|
|
97
|
+
end
|
|
98
|
+
def _add_cx(ario,keys)
|
|
99
|
+
new_cx = ario.cx
|
|
100
|
+
keys.each {|k|
|
|
101
|
+
next unless cx.has_key?(k)
|
|
102
|
+
new_cx.set_(k,cx[k])
|
|
103
|
+
}
|
|
104
|
+
ario.cx = new_cx
|
|
105
|
+
end
|
|
106
|
+
CX_DIR_ITER_KEYS = %w[sel nosel]
|
|
107
|
+
CX_STREAM_ITER_KEYS = %w[stream_rectype stream_itertype stream_sel stream_nosel]
|
|
108
|
+
def _add_iter_cx(ario)
|
|
109
|
+
if nostreamenum?
|
|
110
|
+
_add_cx(ario,CX_DIR_ITER_KEYS)
|
|
111
|
+
end
|
|
112
|
+
_add_stream_iter_cx(ario)
|
|
113
|
+
end
|
|
114
|
+
def _add_stream_iter_cx(ario)
|
|
115
|
+
_add_cx(ario,CX_STREAM_ITER_KEYS)
|
|
116
|
+
new_cx = ario.cx
|
|
117
|
+
if stream_iter?
|
|
118
|
+
new_cx.set_('ss_args',cx['ss_args']) if cx.has_key?('ss_args')
|
|
119
|
+
new_cx.set_('ss_type',cx['ss_type']) if cx.has_key?('ss_type')
|
|
120
|
+
end
|
|
121
|
+
ario.cx = new_cx
|
|
122
|
+
ario
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
end
|
data/lib/rio/handle.rb
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
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
|
+
require 'rio/base'
|
|
39
|
+
|
|
40
|
+
module RIO
|
|
41
|
+
class Handle < Base #:nodoc: all
|
|
42
|
+
attr_accessor :target
|
|
43
|
+
def initialize(st=nil)
|
|
44
|
+
@target = st
|
|
45
|
+
end
|
|
46
|
+
def initialize_copy(*args)
|
|
47
|
+
#p callstr('initialize_copy',*args)
|
|
48
|
+
super
|
|
49
|
+
@target = @target.clone
|
|
50
|
+
end
|
|
51
|
+
def method_missing(sym,*args,&block)
|
|
52
|
+
# p callstr('method_missing',*args)
|
|
53
|
+
@target.__send__(sym,*args,&block)
|
|
54
|
+
end
|
|
55
|
+
def t_instance_of?(*args) @target.instance_of?(*args) end
|
|
56
|
+
def t_kind_of?(*args) @target.kind_of?(*args) end
|
|
57
|
+
def t_class(*args) @target.class(*args) end
|
|
58
|
+
def to_s() @target.to_s() end
|
|
59
|
+
def split(*args,&block) @target.split(*args,&block) end
|
|
60
|
+
def callstr(func,*args)
|
|
61
|
+
self.class.to_s+'['+self.to_s+']'+'.'+func.to_s+'('+args.join(',')+')'
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
if $0 == __FILE__
|
|
67
|
+
eval DATA.read, nil, $0, __LINE__+4
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
__END__
|
|
71
|
+
|
|
72
|
+
require 'test/unit'
|
|
73
|
+
|
|
74
|
+
class TC_Handle < Test::Unit::TestCase
|
|
75
|
+
def test_handle
|
|
76
|
+
assert_nothing_raised {
|
|
77
|
+
h = Handle.new()
|
|
78
|
+
}
|
|
79
|
+
h = Handle.new()
|
|
80
|
+
assert_nil(h.v)
|
|
81
|
+
object = String.new("Zippy")
|
|
82
|
+
h = FwdHandle.new(object,$stdout)
|
|
83
|
+
s = "Hello World\n"
|
|
84
|
+
|
|
85
|
+
rtn = h.fwd_rtn(:write,s)
|
|
86
|
+
assert_equal(rtn,s.length)
|
|
87
|
+
|
|
88
|
+
rtn = h.fwd_rtn_obj(:write,s)
|
|
89
|
+
assert_same(rtn,object)
|
|
90
|
+
|
|
91
|
+
rtn = h.fwd_rtn_new(:write,s)
|
|
92
|
+
assert_equal(object.class,rtn.class)
|
|
93
|
+
assert_not_same(object,rtn)
|
|
94
|
+
assert_equal(rtn,s.length.to_s)
|
|
95
|
+
|
|
96
|
+
rtn = h.write(s)
|
|
97
|
+
p rtn
|
|
98
|
+
# assert_equal(sdocdir,docdir.to_s)
|
|
99
|
+
# assert_instance_of(RIO::Rio,doc,"catpath does not return an FS")
|
|
100
|
+
end
|
|
101
|
+
end
|
data/lib/rio/if.rb
ADDED
|
@@ -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
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
require 'rio/if/internal'
|
|
44
|
+
require 'rio/if/basic'
|
|
45
|
+
require 'rio/if/methods'
|
|
46
|
+
require 'rio/if/grande'
|
|
47
|
+
|
|
48
|
+
require 'rio/if/test'
|
|
49
|
+
require 'rio/if/path'
|
|
50
|
+
require 'rio/if/fileordir'
|
|
51
|
+
require 'rio/if/file'
|
|
52
|
+
require 'rio/if/dir'
|
|
53
|
+
require 'rio/if/stream'
|
data/lib/rio/if/basic.rb
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
def to_rl() target.to_rl end
|
|
42
|
+
|
|
43
|
+
# Returns the length of the Rio's String representation
|
|
44
|
+
#
|
|
45
|
+
# To get the size of the underlying file system object use Rio#size
|
|
46
|
+
def length() target.length end
|
|
47
|
+
|
|
48
|
+
# Equality - calls to_s on the other object and compares it with the value returned by Rio#to_s
|
|
49
|
+
def ==(other) target == other end
|
|
50
|
+
|
|
51
|
+
# Equality (for case statements) same as Rio#==
|
|
52
|
+
def ===(other) target === other end
|
|
53
|
+
|
|
54
|
+
# Rios are hashed based on their String representation
|
|
55
|
+
def hash() target.hash end
|
|
56
|
+
|
|
57
|
+
# Returns true if their String representations are eql?
|
|
58
|
+
def eql?(other) target.eql?(other) end
|
|
59
|
+
|
|
60
|
+
# Match - invokes other.=~, passing the value returned by Rio#to_s
|
|
61
|
+
def =~(other) target =~ other end
|
|
62
|
+
|
|
63
|
+
end
|
|
64
|
+
end
|
data/lib/rio/if/dir.rb
ADDED
|
@@ -0,0 +1,362 @@
|
|
|
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
|
+
# Calls Dir#chdir.
|
|
41
|
+
#
|
|
42
|
+
# Changes the current working directory of the process to the directory specified by the Rio.
|
|
43
|
+
# Raises a SystemCallError (probably Errno::ENOENT) if the target directory does not exist or
|
|
44
|
+
# if the Rio does not reference a directory.
|
|
45
|
+
#
|
|
46
|
+
# If a block is given changes to the directory specified by the rio for the length of the block
|
|
47
|
+
# and changes back outside the block
|
|
48
|
+
#
|
|
49
|
+
# Returns the Rio
|
|
50
|
+
#
|
|
51
|
+
# rio('/home').chdir # change the current working directory to /home
|
|
52
|
+
# # the working directory here is /home
|
|
53
|
+
# rio('/tmp/data/mydata').delete!.mkpath.chdir {
|
|
54
|
+
# # the working directory here is /tmp/data/mydata
|
|
55
|
+
# }
|
|
56
|
+
# # the working directory here is /home
|
|
57
|
+
#
|
|
58
|
+
def chdir(&block) target.chdir(&block) end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
# Grande Directory Selection Method
|
|
63
|
+
#
|
|
64
|
+
# Sets the rio to return directories. _args_ can be used to select which directories are returned.
|
|
65
|
+
# ario.files(*args) do |f|
|
|
66
|
+
# f.directory? #=> true
|
|
67
|
+
# end
|
|
68
|
+
# No aguments selects all directories.
|
|
69
|
+
# if _args_ are:
|
|
70
|
+
# Regexp:: selects matching directories
|
|
71
|
+
# glob:: selects matching directories
|
|
72
|
+
# Proc:: called for each directory. the directory is processed unless the proc returns false
|
|
73
|
+
# Symbol:: sent to each directory. Each directory is processed unless the symbol returns false
|
|
74
|
+
#
|
|
75
|
+
# If a block is given, behaves like <tt>ario.dirs(*args).each(&block)</tt>
|
|
76
|
+
#
|
|
77
|
+
# See also Rio#files, Rio#entries, Rio#nodirs
|
|
78
|
+
#
|
|
79
|
+
# rio('adir').dirs { |frio| ... } # process all directories in 'adir'
|
|
80
|
+
# rio('adir').all.dirs { |frio| ... } # same thing recursively
|
|
81
|
+
# rio('adir').dirs(/^\./) { |frio| ...} # process dot directories
|
|
82
|
+
# rio('adir').dirs[/^\./] # return an array of dot directories
|
|
83
|
+
# rio('adir').dirs[:symlink?] # an array of symlinks to directories
|
|
84
|
+
#
|
|
85
|
+
def dirs(*args,&block) target.dirs(*args,&block); self end
|
|
86
|
+
|
|
87
|
+
# Grande Directory Exclude Method
|
|
88
|
+
#
|
|
89
|
+
# If no args are provided selects anything but directories.
|
|
90
|
+
# ario.nodirs do |el|
|
|
91
|
+
# el.directory? #=> false
|
|
92
|
+
# end
|
|
93
|
+
# If args are provided, sets the rio to select directories as with Rio#dirs, but the arguments are
|
|
94
|
+
# used to determine which directories will *not* be processed
|
|
95
|
+
#
|
|
96
|
+
# If a block is given behaves like
|
|
97
|
+
# ario.nodirs(*args).each(&block)
|
|
98
|
+
#
|
|
99
|
+
# See Rio#dirs
|
|
100
|
+
#
|
|
101
|
+
# rio('adir').nodirs { |ent| ... } # iterate through everything except directories
|
|
102
|
+
# rio('adir').nodirs(/^\./) { |drio| ... } # iterate through directories, skipping dot directories
|
|
103
|
+
#
|
|
104
|
+
#
|
|
105
|
+
def nodirs(*args,&block) target.nodirs(*args,&block); self end
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
# Grande Directory Entry Selection Method
|
|
109
|
+
#
|
|
110
|
+
# No aguments selects all entries.
|
|
111
|
+
#
|
|
112
|
+
# if +args+ are:
|
|
113
|
+
# Regexp:: selects matching entries
|
|
114
|
+
# glob:: selects matching entries
|
|
115
|
+
# Proc:: called for each entry. the entry is processed unless the proc returns false
|
|
116
|
+
# Symbol:: sent to each entry. Each entry is processed unless the symbol returns false
|
|
117
|
+
#
|
|
118
|
+
# If a block is given, behaves like <tt>ario.etries(*args).each(&block)</tt>
|
|
119
|
+
#
|
|
120
|
+
# See also Rio#files, Rio#dirs, Rio#noentries
|
|
121
|
+
#
|
|
122
|
+
# rio('adir').entries { |frio| ... } # process all entries in 'adir'
|
|
123
|
+
# rio('adir').all.entries { |frio| ... } # same thing recursively
|
|
124
|
+
# rio('adir').entries(/^\./) { |frio| ...} # process entries starting with a dot
|
|
125
|
+
# rio('adir').entries[/^\./] # return an array of all entries starting with a dot
|
|
126
|
+
# rio('adir').entries[:symlink?] # an array of symlinks in 'adir'
|
|
127
|
+
#
|
|
128
|
+
def entries(*args,&block) target.entries(*args,&block); self end
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
# Grande File Selection Method
|
|
132
|
+
#
|
|
133
|
+
# Sets the rio to return files. +args+ can be used to select which files are returned.
|
|
134
|
+
# ario.files(*args) do |f|
|
|
135
|
+
# f.file? #=> true
|
|
136
|
+
# end
|
|
137
|
+
# No aguments selects all files.
|
|
138
|
+
#
|
|
139
|
+
# If +args+ are:
|
|
140
|
+
# Regexp:: selects matching files
|
|
141
|
+
# glob:: selects matching files
|
|
142
|
+
# Proc:: called for each file. the file is processed unless the proc returns false
|
|
143
|
+
# Symbol:: sent to each file. Each file is processed unless the symbol returns false
|
|
144
|
+
#
|
|
145
|
+
# If a block is given, behaves like <tt>ario.files(*args).each</tt>
|
|
146
|
+
#
|
|
147
|
+
# See also Rio#dirs, Rio#entries, Rio#nofiles
|
|
148
|
+
#
|
|
149
|
+
# rio('adir').files { |frio| ... } # process all files in 'adir'
|
|
150
|
+
# rio('adir').all.files { |frio| ... } # same thing recursively
|
|
151
|
+
# rio('adir').files('*.rb') { |frio| ...} # process .rb files
|
|
152
|
+
# rio('adir').files['*.rb'] # return an array of .rb files
|
|
153
|
+
# rio('adir').files[/\.rb$/] # same thing using a regular expression
|
|
154
|
+
# rio('adir').files[:symlink?] # an array of symlinks to files
|
|
155
|
+
#
|
|
156
|
+
# For Rios that refer to files, +files(*args)+ causes the file to be processed only if
|
|
157
|
+
# it meets the criteria specified by the args.
|
|
158
|
+
#
|
|
159
|
+
# rio('afile.z').files['*.z'] #=> [rio('afile.z')]
|
|
160
|
+
# rio('afile.q').files['*.z'] #=> []
|
|
161
|
+
#
|
|
162
|
+
# Example
|
|
163
|
+
#
|
|
164
|
+
# Problem:
|
|
165
|
+
#
|
|
166
|
+
# Need an array of all ruby programs in a directory and its subdirectories, skipping those in _subversion_ (.svn)
|
|
167
|
+
# directories. For the purposes of this problem, a Ruby program is defined as a file ending with .rb or a file
|
|
168
|
+
# that is executable and whose shebang line contains 'ruby'
|
|
169
|
+
#
|
|
170
|
+
# rio(path).norecurse('.svn').files['*.rb',proc{ |f| f.executable? and f[0] =~ /^#!.+ruby/ }]
|
|
171
|
+
#
|
|
172
|
+
# Explanation:
|
|
173
|
+
#
|
|
174
|
+
# Create a Rio for a directory
|
|
175
|
+
# rio(path)
|
|
176
|
+
# Specify that '.svn' directories should not be included in recursion.
|
|
177
|
+
# rio(path).norecurse('.svn')
|
|
178
|
+
# Select files
|
|
179
|
+
# rio(path).norecurse('.svn').files
|
|
180
|
+
# Limit to files ending with '.rb'
|
|
181
|
+
# rio(path).norecurse('.svn').files('*.rb')
|
|
182
|
+
# Also allow files that are both executable and whose first line is a shebang-ruby line
|
|
183
|
+
# rio(path).norecurse('.svn').files('*.rb',proc{ |f| f.executable? and f[0] =~ /^#!.+ruby/ })
|
|
184
|
+
# Return an array rather than iterating thru them
|
|
185
|
+
# rio(path).norecurse('.svn').files['*.rb',proc{ |f| f.executable? and f[0] =~ /^#!.+ruby/ }]
|
|
186
|
+
#
|
|
187
|
+
def files(*args,&block) target.files(*args,&block); self end
|
|
188
|
+
|
|
189
|
+
# Grande File Exclude Method
|
|
190
|
+
#
|
|
191
|
+
# If no args are provided selects anything but files.
|
|
192
|
+
# ario.nofiles do |el|
|
|
193
|
+
# el.file? #=> false
|
|
194
|
+
# end
|
|
195
|
+
# If args are provided, sets the rio to select files as with Rio#files, but the arguments are
|
|
196
|
+
# used to determine which files will *not* be processed
|
|
197
|
+
#
|
|
198
|
+
# If a block is given behaves like <tt>ario.nofiles(*args).each(&block)</tt>
|
|
199
|
+
#
|
|
200
|
+
# See Rio#files
|
|
201
|
+
#
|
|
202
|
+
# rio('adir').nofiles { |ent| ... } # iterate through everything except files
|
|
203
|
+
# rio('adir').nofiles(*~) { |frio| ... } # iterate through files, skipping those ending with a tilde
|
|
204
|
+
#
|
|
205
|
+
#
|
|
206
|
+
def nofiles(*args,&block) target.nofiles(*args,&block); self end
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
# Returns +true+ if the rio is in +all+ (recursive) mode. See Rio#all
|
|
210
|
+
#
|
|
211
|
+
# adir = rio('adir').all.dirs
|
|
212
|
+
# adir.all? # true
|
|
213
|
+
# adir.each do |subdir|
|
|
214
|
+
# subdir.all? # true
|
|
215
|
+
# end
|
|
216
|
+
#
|
|
217
|
+
# rio('adir').all? # false
|
|
218
|
+
#
|
|
219
|
+
def all?() target.all?() end
|
|
220
|
+
|
|
221
|
+
|
|
222
|
+
# Grande Directory Recursion Method
|
|
223
|
+
#
|
|
224
|
+
# Sets the Rio to all mode (recursive)
|
|
225
|
+
#
|
|
226
|
+
# When called with a block, behaves as if all.each(&block) had been called
|
|
227
|
+
#
|
|
228
|
+
# +all+ causes subsequent calls to +files+ or +dirs+ to be applied recursively
|
|
229
|
+
# to subdirectories
|
|
230
|
+
#
|
|
231
|
+
# rio('adir').all.files('*.[ch]').each { |file| ... } # process all c language source files in adir
|
|
232
|
+
# # and all subdirectories of adir
|
|
233
|
+
# rio('adir').all.files(/\.[ch]$/) { |file| ... } # same as above
|
|
234
|
+
# rio('adir').files("*.[ch]").all { |file| ... } # once again
|
|
235
|
+
# rio('adir').all.files["*.[ch]"] # same, but return an array instead of iterating
|
|
236
|
+
#
|
|
237
|
+
def all(arg=true,&block) target.all(arg,&block); self end
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
# Grande Directory Recursion Selection Method
|
|
241
|
+
#
|
|
242
|
+
# Sets the Rio to recurse into directories like Rio#all. If no args are provided behaves like Rio#all.
|
|
243
|
+
# If args are provided, they are processed like Rio#dirs, to select which subdirectories should
|
|
244
|
+
# be recursed into. Rio#recurse always implies Rio#all.
|
|
245
|
+
#
|
|
246
|
+
# +args+ may be one or more of:
|
|
247
|
+
# Regexp:: recurse into matching subdirectories
|
|
248
|
+
# glob:: recurse into matching subdirectories
|
|
249
|
+
# Proc:: called for each directory. The directory is recursed into unless the proc returns false
|
|
250
|
+
# Symbol:: sent to each directory. Each directory is recursed into unless the symbol returns false
|
|
251
|
+
#
|
|
252
|
+
# If a block is given, behaves like <tt>ario.recurse(*args).each(&block)</tt>
|
|
253
|
+
#
|
|
254
|
+
# See also Rio#norecurse, Rio#all, Rio#dirs
|
|
255
|
+
#
|
|
256
|
+
# rio('adir').all.recurse('test*') { |drio| ... } # process all entries and all entries in subdirectories
|
|
257
|
+
# # starting with 'test' -- recursively
|
|
258
|
+
#
|
|
259
|
+
def recurse(*args,&block) target.recurse(*args,&block); self end
|
|
260
|
+
|
|
261
|
+
|
|
262
|
+
# Grande Directory Recursion Exclude Method
|
|
263
|
+
#
|
|
264
|
+
# Sets the Rio to recurse into directories like Rio#all. If no args are provided, no
|
|
265
|
+
# directories will be recursed into. If args are provided, behaves like Rio#recurse, except
|
|
266
|
+
# that mathcing will *not* be recursed into
|
|
267
|
+
#
|
|
268
|
+
# rio('adir').norecurse('.svn') { |drio| ... } # recurse, skipping subversion directories
|
|
269
|
+
#
|
|
270
|
+
def norecurse(*args,&block) target.norecurse(*args,&block); self end
|
|
271
|
+
|
|
272
|
+
|
|
273
|
+
# Calls Find#find
|
|
274
|
+
#
|
|
275
|
+
# Uses Find#find to find all entries recursively for a Rio that
|
|
276
|
+
# specifies a directory. Note that there are other ways to recurse through
|
|
277
|
+
# a directory structure using a Rio. See Rio#each and Rio#all.
|
|
278
|
+
#
|
|
279
|
+
# Calls the block passing a Rio for each entry found. The Rio inherits
|
|
280
|
+
# attrubutes from the directory Rio.
|
|
281
|
+
#
|
|
282
|
+
# Returns itself
|
|
283
|
+
#
|
|
284
|
+
# rio('adir').find { |entrio| puts "#{entrio}: #{entrio.file?}" }
|
|
285
|
+
#
|
|
286
|
+
# rio('adir').chomp.find do |entrio|
|
|
287
|
+
# next unless entrio.file?
|
|
288
|
+
# lines = entrio[0..10] # lines are chomped because 'chomp' was inherited
|
|
289
|
+
# end
|
|
290
|
+
#
|
|
291
|
+
def find(*args,&block) target.find_entries(*args,&block); self end
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
# Calls Dir#glob
|
|
295
|
+
#
|
|
296
|
+
# Returns the filenames found by expanding the pattern given in string,
|
|
297
|
+
# either as an array or as parameters to the block. In both cases the filenames
|
|
298
|
+
# are expressed as a Rio.
|
|
299
|
+
# Note that this pattern is not a regexp (it�s closer to a shell glob).
|
|
300
|
+
# See File::fnmatch for details of file name matching and the meaning of the flags parameter.
|
|
301
|
+
#
|
|
302
|
+
#
|
|
303
|
+
def glob(string,*args,&block) target.glob(string,*args,&block) end
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
# Calls Dir#rmdir
|
|
307
|
+
#
|
|
308
|
+
# Deletes the directory referenced by the Rio.
|
|
309
|
+
# Raises a subclass of SystemCallError if the directory isn�t empty.
|
|
310
|
+
# Returns the Rio. If the directory does not exist, just returns the Rio.
|
|
311
|
+
#
|
|
312
|
+
# See also Rio#rmtree, Rio#delete, Rio#delete!
|
|
313
|
+
#
|
|
314
|
+
# rio('adir').rmdir # remove the empty directory 'adir'
|
|
315
|
+
#
|
|
316
|
+
def rmdir() target.rmdir(); self end
|
|
317
|
+
|
|
318
|
+
|
|
319
|
+
# Calls FileUtils#rmtree
|
|
320
|
+
#
|
|
321
|
+
# Removes a directory Rio recursively. Returns the Rio.
|
|
322
|
+
# If the directory does not exist, simply returns the Rio
|
|
323
|
+
#
|
|
324
|
+
# If called with a block, behaves as if rmtree.each(&block) had been called
|
|
325
|
+
#
|
|
326
|
+
# See also Rio#delete!
|
|
327
|
+
#
|
|
328
|
+
# rio('adir').rmtree # removes the directory 'adir' recursively
|
|
329
|
+
#
|
|
330
|
+
# # delete the directory 'adir', recreate it and then change to the new directory
|
|
331
|
+
# rio('adir/asubdir').rmtree.mkpath.chdir {
|
|
332
|
+
# ...
|
|
333
|
+
# }
|
|
334
|
+
#
|
|
335
|
+
#
|
|
336
|
+
def rmtree() target.rmtree(); self end
|
|
337
|
+
|
|
338
|
+
# Calls FileUtils#mkpath
|
|
339
|
+
#
|
|
340
|
+
# Makes a new directory named by the Rio and any directories in its path that do not exist.
|
|
341
|
+
#
|
|
342
|
+
# Returns the Rio. If the directory already exists, just returns the Rio.
|
|
343
|
+
#
|
|
344
|
+
# rio('adir/a/b').mkpath
|
|
345
|
+
def mkpath(&block) target.mkpath(&block); self end
|
|
346
|
+
|
|
347
|
+
|
|
348
|
+
# Calls FileUtils#mkdir
|
|
349
|
+
#
|
|
350
|
+
# Makes a new directory named by the Rio with permissions specified by the optional parameter.
|
|
351
|
+
# The permissions may be modified by the value of File::umask
|
|
352
|
+
#
|
|
353
|
+
# Returns the Rio. If the directory already exists, just returns the Rio.
|
|
354
|
+
#
|
|
355
|
+
# rio('adir').mkdir
|
|
356
|
+
def mkdir(*args,&block) target.mkdir(*args,&block); self end
|
|
357
|
+
|
|
358
|
+
|
|
359
|
+
|
|
360
|
+
end
|
|
361
|
+
end
|
|
362
|
+
|