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/cxdir.rb
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
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
|
+
module CxDir #:nodoc: all
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def _ss_keys() Cx::SS::ENTRY_KEYS + Cx::SS::STREAM_KEYS end
|
|
43
|
+
CX_ALL_SKIP_KEYS = ['retrystate']
|
|
44
|
+
def _add_recurse_iter_cx(ario)
|
|
45
|
+
new_cx = ario.cx
|
|
46
|
+
cx.keys.reject { |k| CX_ALL_SKIP_KEYS.include?(k) }.each { |k|
|
|
47
|
+
new_cx.set_(k,cx[k])
|
|
48
|
+
}
|
|
49
|
+
ario.cx = new_cx
|
|
50
|
+
ario
|
|
51
|
+
end
|
|
52
|
+
def _add_cx(ario,keys)
|
|
53
|
+
new_cx = ario.cx
|
|
54
|
+
keys.each {|k|
|
|
55
|
+
next unless cx.has_key?(k)
|
|
56
|
+
new_cx.set_(k,cx[k])
|
|
57
|
+
}
|
|
58
|
+
ario.cx = new_cx
|
|
59
|
+
end
|
|
60
|
+
CX_DIR_ITER_KEYS = %w[sel nosel]
|
|
61
|
+
CX_STREAM_ITER_KEYS = %w[stream_rectype stream_itertype stream_sel stream_nosel]
|
|
62
|
+
def _add_iter_cx(ario)
|
|
63
|
+
if nostreamenum?
|
|
64
|
+
_add_cx(ario,CX_DIR_ITER_KEYS)
|
|
65
|
+
end
|
|
66
|
+
_add_stream_iter_cx(ario)
|
|
67
|
+
end
|
|
68
|
+
def _add_stream_iter_cx(ario)
|
|
69
|
+
_add_cx(ario,CX_STREAM_ITER_KEYS)
|
|
70
|
+
new_cx = ario.cx
|
|
71
|
+
if stream_iter?
|
|
72
|
+
new_cx.set_('ss_args',cx['ss_args']) if cx.has_key?('ss_args')
|
|
73
|
+
new_cx.set_('ss_type',cx['ss_type']) if cx.has_key?('ss_type')
|
|
74
|
+
end
|
|
75
|
+
ario.cx = new_cx
|
|
76
|
+
ario
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
end
|
data/lib/rio/dir.rb
ADDED
|
@@ -0,0 +1,145 @@
|
|
|
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/ops/path'
|
|
39
|
+
require 'rio/ops/dir'
|
|
40
|
+
require 'rio/filter/closeoneof'
|
|
41
|
+
require 'rio/ioh'
|
|
42
|
+
module RIO
|
|
43
|
+
module Dir #:nodoc: all
|
|
44
|
+
class Base < State::Base
|
|
45
|
+
include Ops::Path::Str
|
|
46
|
+
def self.copy_(src,dst)
|
|
47
|
+
Impl::U.cp_r(src,dst)
|
|
48
|
+
end
|
|
49
|
+
def open?() !ioh.nil? end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
class NonExisting < Base
|
|
53
|
+
include Ops::Dir::NonExisting
|
|
54
|
+
def check?() not self.exist? end
|
|
55
|
+
def when_missing(sym,*args) gofigure(sym,*args) end
|
|
56
|
+
end # class EDir
|
|
57
|
+
|
|
58
|
+
class Existing < Base
|
|
59
|
+
include Ops::Dir::Existing
|
|
60
|
+
|
|
61
|
+
def check?() self.directory? end
|
|
62
|
+
def when_missing(sym,*args) dopen() end
|
|
63
|
+
def dopen()
|
|
64
|
+
self.rl = RIO::Dir::RL.new(self.to_uri)
|
|
65
|
+
become 'Dir::Open'
|
|
66
|
+
end
|
|
67
|
+
end # class EDir
|
|
68
|
+
class Open < Base
|
|
69
|
+
def check?() true end
|
|
70
|
+
def open(m=nil,*args)
|
|
71
|
+
open_(*args)
|
|
72
|
+
end
|
|
73
|
+
def open_()
|
|
74
|
+
unless open?
|
|
75
|
+
ios = self.rl.open()
|
|
76
|
+
self.ioh = IOH::Dir.new(ios)
|
|
77
|
+
# self.ioh = self.rl.open()
|
|
78
|
+
end
|
|
79
|
+
self
|
|
80
|
+
end
|
|
81
|
+
def when_missing(sym,*args)
|
|
82
|
+
nobj = open_.dstream()
|
|
83
|
+
return nobj unless nobj.nil?
|
|
84
|
+
gofigure(sym,*args)
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
def dstream()
|
|
88
|
+
cl = 'Dir::Stream'
|
|
89
|
+
#p "LOOP: retry: #{cx['retrystate'].inspect} => #{cl}"
|
|
90
|
+
return nil if cx['retrystate'] == cl
|
|
91
|
+
cx['retrystate'] = cl
|
|
92
|
+
|
|
93
|
+
become(cl)
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
class Stream < Base
|
|
97
|
+
include Ops::Dir::Stream
|
|
98
|
+
def check?() open? end
|
|
99
|
+
def when_missing(sym,*args)
|
|
100
|
+
#p callstr('when_missing',sym,*args)
|
|
101
|
+
retryreset()
|
|
102
|
+
end
|
|
103
|
+
def base_state() 'Dir::Close' end
|
|
104
|
+
|
|
105
|
+
def reset()
|
|
106
|
+
self.close.softreset()
|
|
107
|
+
end
|
|
108
|
+
alias :copyclose :reset
|
|
109
|
+
end
|
|
110
|
+
class Close < Base
|
|
111
|
+
def close()
|
|
112
|
+
#p callstr('close')+" mode='#{mode?}' ioh=#{self.ioh} open?=#{open?}"
|
|
113
|
+
return self unless self.open?
|
|
114
|
+
self.close_
|
|
115
|
+
cx['retrystate'] = nil
|
|
116
|
+
self
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def close_()
|
|
120
|
+
#p callstr('close_')+" ioh=#{self.ioh} open?=#{open?}"
|
|
121
|
+
return self unless self.open?
|
|
122
|
+
self.clear_selection
|
|
123
|
+
self.ioh.close
|
|
124
|
+
self.ioh = nil
|
|
125
|
+
self.rl.close
|
|
126
|
+
self
|
|
127
|
+
end
|
|
128
|
+
protected :close_
|
|
129
|
+
|
|
130
|
+
def clear_selection()
|
|
131
|
+
cx.delete('sel')
|
|
132
|
+
cx.delete('nosel')
|
|
133
|
+
cx.delete('nostreamenum')
|
|
134
|
+
self
|
|
135
|
+
end
|
|
136
|
+
|
|
137
|
+
def check?() true end
|
|
138
|
+
def when_missing(sym,*args)
|
|
139
|
+
# p callstr('when_missing',sym,*args)
|
|
140
|
+
self.close_.retryreset()
|
|
141
|
+
end
|
|
142
|
+
end
|
|
143
|
+
end
|
|
144
|
+
|
|
145
|
+
end # module RIO
|
data/lib/rio/doc.rb
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
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'
|
|
39
|
+
module RIO
|
|
40
|
+
TITLE = "Rio"
|
|
41
|
+
SUMMARY = "Rio - Ruby I/O Comfort Class"
|
|
42
|
+
DESCRIPTION = "Rio is a convenience class wrapping much of the functionality of " +
|
|
43
|
+
"IO, File, Dir, Pathname, FileUtils, Tempfile, StringIO, OpenURI, Zlib, and CSV.
|
|
44
|
+
"
|
|
45
|
+
end
|
|
@@ -0,0 +1,691 @@
|
|
|
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
|
+
module Doc #:doc:
|
|
40
|
+
=begin rdoc
|
|
41
|
+
|
|
42
|
+
= Rio - Ruby I/O Comfort Class
|
|
43
|
+
|
|
44
|
+
Rio is a convenience class wrapping much of the functionality of
|
|
45
|
+
IO, File, Dir, Pathname, FileUtils, Tempfile, StringIO, OpenURI, Zlib, and CSV.
|
|
46
|
+
|
|
47
|
+
== HOWTO...
|
|
48
|
+
|
|
49
|
+
=== Read a single file
|
|
50
|
+
ario = rio('afile')
|
|
51
|
+
string = ""
|
|
52
|
+
array = []
|
|
53
|
+
|
|
54
|
+
* Read a file into a string.
|
|
55
|
+
# method 1
|
|
56
|
+
string = ario.slurp
|
|
57
|
+
# method 2
|
|
58
|
+
ario > string
|
|
59
|
+
|
|
60
|
+
* Append a file onto a string.
|
|
61
|
+
# method 1
|
|
62
|
+
ario >> string
|
|
63
|
+
# method 2
|
|
64
|
+
string += ario.slurp
|
|
65
|
+
|
|
66
|
+
* Read lines of a file into an array
|
|
67
|
+
# method 1
|
|
68
|
+
array = ario[]
|
|
69
|
+
# method 2
|
|
70
|
+
ario > array
|
|
71
|
+
# method 3
|
|
72
|
+
array = ario.to_a
|
|
73
|
+
# method 4
|
|
74
|
+
array = ario.readlines
|
|
75
|
+
|
|
76
|
+
* Append lines of a file into an array
|
|
77
|
+
# method 1
|
|
78
|
+
ario >> array
|
|
79
|
+
# method 2
|
|
80
|
+
array += ario.lines[]
|
|
81
|
+
|
|
82
|
+
* Read the first 10 lines of a file into an array
|
|
83
|
+
# method 1
|
|
84
|
+
array = ario[0...10]
|
|
85
|
+
# method 2
|
|
86
|
+
array = ario.lines[0...10]
|
|
87
|
+
# method 3
|
|
88
|
+
ario.lines(0...10) > array
|
|
89
|
+
|
|
90
|
+
* Read lines of a file into an array, with each line chomped
|
|
91
|
+
# method 1
|
|
92
|
+
array = ario.chomp[]
|
|
93
|
+
# method 2
|
|
94
|
+
array = ario.chomp.lines[]
|
|
95
|
+
# method 3
|
|
96
|
+
ario.chomp > array
|
|
97
|
+
|
|
98
|
+
* Append the first 10 lines of a file into an array, with each line chomped
|
|
99
|
+
# method 1
|
|
100
|
+
array += ario.chomp.lines[0...10]
|
|
101
|
+
# method 2
|
|
102
|
+
ario.chomp.lines(0...10) >> array
|
|
103
|
+
|
|
104
|
+
* Read all lines starting with 'require' into an array, with each line chomped
|
|
105
|
+
# method 1
|
|
106
|
+
array = ario.chomp.lines(/^\s*require/)
|
|
107
|
+
# method 2
|
|
108
|
+
ario.chomp.lines(/^\s*require/) > array
|
|
109
|
+
|
|
110
|
+
* Read a gzipped file into a string
|
|
111
|
+
# method 1
|
|
112
|
+
rio('afile.gz').gzip > string
|
|
113
|
+
# method 2
|
|
114
|
+
string = rio('afile.gz').gzip.slurp
|
|
115
|
+
|
|
116
|
+
* Append a gzipped file into a string
|
|
117
|
+
# method 1
|
|
118
|
+
rio('afile.gz').gzip >> string
|
|
119
|
+
# method 2
|
|
120
|
+
string += rio('afile.gz').gzip.slurp
|
|
121
|
+
|
|
122
|
+
* Iterate through all the lines of a file
|
|
123
|
+
# method 1
|
|
124
|
+
rio('afile').lines { |line| ... }
|
|
125
|
+
# method 2
|
|
126
|
+
rio('afile').each { |line| ... }
|
|
127
|
+
# method 3
|
|
128
|
+
rio('afile').each_line { |line| ... }
|
|
129
|
+
|
|
130
|
+
|
|
131
|
+
* Iterate through the lines of a gzipped file
|
|
132
|
+
rio('afile.gz').gzip { |line| ... }
|
|
133
|
+
|
|
134
|
+
* Iterate through all non-empty lines of a gzipped file, with each line chomped
|
|
135
|
+
rio('afile.gz').gzip.chomp.nolines(:empty?) { |line| ... }
|
|
136
|
+
|
|
137
|
+
* Iterate through the first 100 lines of a file
|
|
138
|
+
# method 1
|
|
139
|
+
rio('afile').lines(0...100) { |line| ... }
|
|
140
|
+
|
|
141
|
+
* Iterate through the first line and all ruby comment lines in a gzipped file
|
|
142
|
+
rio('afile.rb.gz').gzip.lines(0,/^\s*#/) { |line| ... }
|
|
143
|
+
|
|
144
|
+
* Iterate through the lines of a ruby file that are neither empty nor comments, with all lines chomped
|
|
145
|
+
rio('afile.rb.gz').chomp.nolines(/^\s*#/,:empty?) { |line| ... }
|
|
146
|
+
|
|
147
|
+
* Read all the comment lines from a ruby file into an array with all lines chomped
|
|
148
|
+
# method 1
|
|
149
|
+
array = rio('afile.rb').chomp.lines[/^\s*#/]
|
|
150
|
+
# method 2
|
|
151
|
+
rio('afile.rb').chomp.lines(/^\s*#/) > array
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
* Read lines of a file into an array, with each line chomped, skipping any lines longer than 1024 chars
|
|
155
|
+
# method 1
|
|
156
|
+
ario.chomp.lines(proc{ |line| line.length <= 1024}) > array
|
|
157
|
+
# method 2
|
|
158
|
+
array = ario.chomp.nolines[proc{ |line| line.length > 1024}]
|
|
159
|
+
# method 3
|
|
160
|
+
array = ario.chomp.lines(proc{ |line| line.length <= 1024}).to_a
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
=== Write to a single file
|
|
165
|
+
|
|
166
|
+
ario = rio('afile')
|
|
167
|
+
string = "A String\n"
|
|
168
|
+
array = ["Line 0\n","Line 1\n"]
|
|
169
|
+
|
|
170
|
+
* Write a string to a file, leaving the Rio open
|
|
171
|
+
# method 1
|
|
172
|
+
ario.puts(string)
|
|
173
|
+
# method 2
|
|
174
|
+
ario.print(string)
|
|
175
|
+
# method 3
|
|
176
|
+
ario.noclose < string
|
|
177
|
+
|
|
178
|
+
* Write a string to a file and close the file
|
|
179
|
+
# method 1
|
|
180
|
+
rio('afile') < string
|
|
181
|
+
# method 2
|
|
182
|
+
ario.print!(string)
|
|
183
|
+
# method 3
|
|
184
|
+
ario.print(string).close
|
|
185
|
+
|
|
186
|
+
* Append a string to a file, leaving the Rio open
|
|
187
|
+
# method 1
|
|
188
|
+
ario.a.puts(string)
|
|
189
|
+
# method 2
|
|
190
|
+
ario.a.print(string)
|
|
191
|
+
# method 3
|
|
192
|
+
ario.noclose << string
|
|
193
|
+
|
|
194
|
+
* Append a string to a file and close the file
|
|
195
|
+
# method 1
|
|
196
|
+
rio('afile') << string
|
|
197
|
+
# method 2
|
|
198
|
+
rio('afile').a.print!(string)
|
|
199
|
+
# method 3
|
|
200
|
+
rio('afile').a.print(string).close
|
|
201
|
+
|
|
202
|
+
* Write an array to a file, leaving the Rio open
|
|
203
|
+
# method 1
|
|
204
|
+
ario = rio('afile').nocloseoncopy
|
|
205
|
+
ario << array
|
|
206
|
+
# method 2
|
|
207
|
+
ario.noclose < array
|
|
208
|
+
|
|
209
|
+
* Write an array to a file and close the file
|
|
210
|
+
# method 1
|
|
211
|
+
rio('afile') < array
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
=== Select records
|
|
217
|
+
ario = rio('afile')
|
|
218
|
+
string = ""
|
|
219
|
+
array = []
|
|
220
|
+
|
|
221
|
+
* Put lines one thru ten and line 100 into an array
|
|
222
|
+
# method 1
|
|
223
|
+
array = ario[0..9,99]
|
|
224
|
+
# method 2
|
|
225
|
+
array = ario[0...10,99..99]
|
|
226
|
+
# method 3
|
|
227
|
+
ario(0..9,99) > array
|
|
228
|
+
|
|
229
|
+
* Put lines one thru ten,line 100 and lines starting with 'zippy' into an array
|
|
230
|
+
# method 1
|
|
231
|
+
array = ario[0..9,99,/^zippy/]
|
|
232
|
+
# method 2
|
|
233
|
+
array = ario[0...10,99..99,/^zippy/]
|
|
234
|
+
# method 3
|
|
235
|
+
ario(0..9,99,/^zippy/) > array
|
|
236
|
+
|
|
237
|
+
* Put lines that are longer than 128 bytes into an array
|
|
238
|
+
# method 1
|
|
239
|
+
array = ario[proc{ |l| l.length > 128}]
|
|
240
|
+
# method 2
|
|
241
|
+
array = ario.lines[proc{ |l| l.length > 128}]
|
|
242
|
+
# method 3
|
|
243
|
+
array = ario.nolines[proc{ |l| l.length <= 128}]
|
|
244
|
+
|
|
245
|
+
* Copy all lines that do not start with 'zippy' into another file
|
|
246
|
+
# method 1
|
|
247
|
+
ario.nolines(/^zippy/) > rio('another_file')
|
|
248
|
+
# method 2
|
|
249
|
+
ario.lines.nolines(/^zippy/) > rio('another_file')
|
|
250
|
+
# method 3
|
|
251
|
+
rio('another_file') < ario.nolines(/^zippy/)
|
|
252
|
+
|
|
253
|
+
* Copy the first 10 lines and lines starting with 'zippy', but exclude any lines longer than 128 bytes
|
|
254
|
+
# method 1
|
|
255
|
+
ario.lines(0...10,/^zippy/).nolines(proc{ |l| l.length > 128}] > rio('another_file')
|
|
256
|
+
# method 2
|
|
257
|
+
rio('another_file') < ario.lines(0...10,/^zippy/).nolines(proc{ |l| l.length > 128})
|
|
258
|
+
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
=== Select directory entries
|
|
264
|
+
ario = rio('adir')
|
|
265
|
+
string = ""
|
|
266
|
+
array = []
|
|
267
|
+
|
|
268
|
+
* Put all entries with the extension '.txt' into an array
|
|
269
|
+
# method 1
|
|
270
|
+
array = ario['*.txt']
|
|
271
|
+
# method 2
|
|
272
|
+
array = ario[/\.txt/]
|
|
273
|
+
# method 3
|
|
274
|
+
array = ario.entries['*.txt']
|
|
275
|
+
|
|
276
|
+
* Put all files with the extension '.txt' into an array
|
|
277
|
+
# method 1
|
|
278
|
+
array = ario.files['*.txt']
|
|
279
|
+
# method 2
|
|
280
|
+
array = ario.files[/\.txt/]
|
|
281
|
+
# method 3
|
|
282
|
+
array = ario.files['*.txt']
|
|
283
|
+
|
|
284
|
+
* Put all entries with the extension '.txt' into an array, including those in subdirectories
|
|
285
|
+
# method 1
|
|
286
|
+
array = ario.all['*.txt']
|
|
287
|
+
# method 2
|
|
288
|
+
array = ario.all[/\.txt/]
|
|
289
|
+
# method 3
|
|
290
|
+
array = ario.all.entries['*.txt']
|
|
291
|
+
|
|
292
|
+
* Put all entries with the extension '.txt' into an array, including those in subdirectories, except those
|
|
293
|
+
in subdirectories name '.svn'
|
|
294
|
+
# method 1
|
|
295
|
+
array = ario.norecurse('.svn').all['*.txt']
|
|
296
|
+
# method 2
|
|
297
|
+
array = ario.norecurse(/^\.svn$/).all[/\.txt/]
|
|
298
|
+
# method 3
|
|
299
|
+
array = ario.norecurse('.svn').entries['*.txt']
|
|
300
|
+
# method 4
|
|
301
|
+
array = ario.entries('*.txt').norecurse('.svn').to_a
|
|
302
|
+
# method 5
|
|
303
|
+
array = ario.norecurse('.svn')['*.txt']
|
|
304
|
+
|
|
305
|
+
* Iterate through all ruby files in a directory structure except those in the '.svn' and 'pkg' directories
|
|
306
|
+
# method 1
|
|
307
|
+
ario.norecurse('.svn','pkg').files('*.rb',proc{ |f| f.executable? and f[0] =~ /^#!.+ruby/ }) { |f| ... }
|
|
308
|
+
|
|
309
|
+
* Put all files excluding those that are symlinks to files in an array
|
|
310
|
+
# method 1
|
|
311
|
+
array = ario.nofiles[:symlink?]
|
|
312
|
+
# method 2
|
|
313
|
+
array = ario.nofiles(:symlink?).files[]
|
|
314
|
+
# method 3
|
|
315
|
+
array = ario.nofiles(:symlink?).to_a
|
|
316
|
+
# method 4
|
|
317
|
+
array = ario.files.nofiles[:symlink?]
|
|
318
|
+
|
|
319
|
+
* Put all entries that are not files (or symlinks to files) into an array
|
|
320
|
+
# method 1
|
|
321
|
+
array = ario.nofiles[]
|
|
322
|
+
# method 2
|
|
323
|
+
array = ario.nofiles.to_a
|
|
324
|
+
|
|
325
|
+
* Put all entries that are symlinks to files into an array
|
|
326
|
+
# method 1
|
|
327
|
+
array = ario.files[proc{|f| f.file? and f.symlink?}]
|
|
328
|
+
# method 2
|
|
329
|
+
array = ario.files(proc{|f| f.file? and f.symlink?}).to_a
|
|
330
|
+
|
|
331
|
+
* Put all directories except those named '.svn' into an array
|
|
332
|
+
# method 1
|
|
333
|
+
array = ario.nodirs['.svn']
|
|
334
|
+
# method 2
|
|
335
|
+
array = ario.nodirs[/^\.svn/]
|
|
336
|
+
# method 3
|
|
337
|
+
array = ario.nodirs('.svn').to_a
|
|
338
|
+
# method 4
|
|
339
|
+
array = ario.nodirs('.svn').dirs[]
|
|
340
|
+
# method 5
|
|
341
|
+
array = ario.nodirs('.svn')[]
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
---
|
|
345
|
+
|
|
346
|
+
=== Read and writing files
|
|
347
|
+
ario = rio('afile')
|
|
348
|
+
string = ""
|
|
349
|
+
array = []
|
|
350
|
+
|
|
351
|
+
* Copy the contents of one file into another file
|
|
352
|
+
# method 1
|
|
353
|
+
rio('srcfile') > rio('dstfile')
|
|
354
|
+
# method 2
|
|
355
|
+
rio('dstfile') < rio('srcfile')
|
|
356
|
+
# method 3
|
|
357
|
+
rip('dstfile').print!(rio('srcfile').slurp)
|
|
358
|
+
|
|
359
|
+
* Append the contents of one file to another file
|
|
360
|
+
# method 1
|
|
361
|
+
rio('srcfile') >> rio('dstfile')
|
|
362
|
+
# method 2
|
|
363
|
+
rio('dstfile') << rio('srcfile')
|
|
364
|
+
# method 3
|
|
365
|
+
rip('dstfile').a.print!(rio('srcfile').slurp)
|
|
366
|
+
|
|
367
|
+
* Copy the first 10 lines of one file to another file
|
|
368
|
+
# method 1
|
|
369
|
+
rio('srcfile').lines(0...10) > rio('dstfile')
|
|
370
|
+
# method 2
|
|
371
|
+
rio('dstfile') < rio('srcfile').lines(0...10)
|
|
372
|
+
# method 3
|
|
373
|
+
rio('dstfile') < rio('srcfile').lines[0...10]
|
|
374
|
+
|
|
375
|
+
* Concatenate several files into one
|
|
376
|
+
# method 1
|
|
377
|
+
rio('dstfile') < [ rio('src1'), rio('src2'), rio('src3') ]
|
|
378
|
+
# method 2
|
|
379
|
+
rio('dstfile') < rio('src1') << rio('src2') << rio('src3')
|
|
380
|
+
|
|
381
|
+
* Copy a web page into a file
|
|
382
|
+
# method 1
|
|
383
|
+
rio('http://ruby-doc.org/') > rio('afile')
|
|
384
|
+
# method 2
|
|
385
|
+
rio('afile') < rio('http://ruby-doc.org/')
|
|
386
|
+
# method 3
|
|
387
|
+
rio('afile').print!(rio('http://ruby-doc.org/').slurp)
|
|
388
|
+
|
|
389
|
+
* Append the output of the daytime server running on the localhost to a file
|
|
390
|
+
# method 1
|
|
391
|
+
rio("tcp://localhost:daytime") >> rio('afile')
|
|
392
|
+
# method 2
|
|
393
|
+
rio("tcp:",'localhost','daytime') >> rio('afile')
|
|
394
|
+
# method 3
|
|
395
|
+
rio('afile') << rio("tcp://:daytime")
|
|
396
|
+
# method 4
|
|
397
|
+
rio('afile') << rio("tcp://:13")
|
|
398
|
+
|
|
399
|
+
* Copy the first line and all lines containing 'http:' to a file
|
|
400
|
+
# method 1
|
|
401
|
+
rio('srcfile').lines(0,/http:/) > rio('dstfile')
|
|
402
|
+
# method 2
|
|
403
|
+
rio('dstfile') < rio('srcfile').lines(0,/http:/)
|
|
404
|
+
# method 3
|
|
405
|
+
rio('dstfile') < rio('srcfile').lines[0,/http:/]
|
|
406
|
+
# method 4
|
|
407
|
+
|
|
408
|
+
* Create a gzipped copy of a file
|
|
409
|
+
# method 1
|
|
410
|
+
rio('afile') > rio('afile.gz').gzip
|
|
411
|
+
# method 2
|
|
412
|
+
rio('afile.gz').gzip < rio('afile')
|
|
413
|
+
# method 3
|
|
414
|
+
rio('afile.gz').gzip.print!( rio('afile').slurp )
|
|
415
|
+
|
|
416
|
+
* Create an ungzipped copy of a gzipped file
|
|
417
|
+
# method 1
|
|
418
|
+
rio('afile') < rio('afile.gz').gzip
|
|
419
|
+
# method 2
|
|
420
|
+
rio('afile.gz').gzip > rio('afile')
|
|
421
|
+
# method 3
|
|
422
|
+
rio('afile').print!( rio('afile.gz').gzip.slurp )
|
|
423
|
+
|
|
424
|
+
* Copy the first 100 lines of gzipped file on a webserver into a local file
|
|
425
|
+
# method 1
|
|
426
|
+
rio('http://aserver/afile.gz').gzip.lines(0...100) > rio('afile')
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
* Create a file composed of a header from another file, the output of the 'ps' command, some text and
|
|
430
|
+
its creation time pulled from the daytime server running on your localhost
|
|
431
|
+
# method 1
|
|
432
|
+
rio('out') < [ rio('header'), rio(?-,'ps'), "Created on ", rio('tcp://:daytime') ]
|
|
433
|
+
# method 2
|
|
434
|
+
rio('out') < rio('header') << rio(?-,'ps') << "Created on: " << rio("tcp://:daytime")
|
|
435
|
+
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
=== Reading multiple files
|
|
440
|
+
ario = rio('adir')
|
|
441
|
+
string = ""
|
|
442
|
+
array = []
|
|
443
|
+
|
|
444
|
+
* Count the lines of code in a directory tree of ruby source files
|
|
445
|
+
# method 1
|
|
446
|
+
cnt = ario.all.files('*.rb').chomp.nolines(/^\s*#/,/^\s*$/).inject(0) { |sum,l| sum += 1 }
|
|
447
|
+
# method 2
|
|
448
|
+
cnt = ario.all.files('*.rb').chomp.nolines[/^\s*#/,/^\s*$/].size
|
|
449
|
+
|
|
450
|
+
* Concatanate the contents of all .txt files in a directory into an array
|
|
451
|
+
# method 1
|
|
452
|
+
array = ario.lines.files['*.txt']
|
|
453
|
+
# method 2
|
|
454
|
+
array = ario.files('*.txt').lines[]
|
|
455
|
+
# method 3
|
|
456
|
+
ario.files('*.txt').lines > array
|
|
457
|
+
|
|
458
|
+
* Concatanate the first line of all .txt files in a directory into an array
|
|
459
|
+
# method 1
|
|
460
|
+
array = ario.lines(0).files['*.txt']
|
|
461
|
+
# method 2
|
|
462
|
+
array = ario.files('*.txt').lines[0]
|
|
463
|
+
# method 3
|
|
464
|
+
ario.files('*.txt').lines(0) > array
|
|
465
|
+
|
|
466
|
+
* Copy all .txt files (but only their first ten lines) in a directory into another directiory
|
|
467
|
+
# method 1
|
|
468
|
+
ario.files('*.txt').lines(0...10) > rio('another_dir')
|
|
469
|
+
|
|
470
|
+
---
|
|
471
|
+
|
|
472
|
+
=== Read and write using Standard IO
|
|
473
|
+
string = ""
|
|
474
|
+
array = []
|
|
475
|
+
|
|
476
|
+
* Prompt for input and return what was typed
|
|
477
|
+
# method 1
|
|
478
|
+
ans = rio(?-).chomp.print("Type Something: ").gets
|
|
479
|
+
# method 2
|
|
480
|
+
stdio = rio(?-).chomp
|
|
481
|
+
ans = stdio.print("Type Something: ").gets
|
|
482
|
+
|
|
483
|
+
* Create a Rio tied to stdin or stdout, depending on how it is used
|
|
484
|
+
stdio = rio(?-)
|
|
485
|
+
|
|
486
|
+
* Create a Rio tied to stderr
|
|
487
|
+
stderr = rio(?=)
|
|
488
|
+
|
|
489
|
+
* Write a string to stdout
|
|
490
|
+
# method 1
|
|
491
|
+
rio(?-).puts("Hello World")
|
|
492
|
+
# method 2
|
|
493
|
+
rio(?-) << "Hello World\n"
|
|
494
|
+
# method 3
|
|
495
|
+
rio(?-) < "Hello World\n"
|
|
496
|
+
|
|
497
|
+
* Read a string from stdin with the input chomped
|
|
498
|
+
# method 1
|
|
499
|
+
ans = rio(?-).chomp.gets
|
|
500
|
+
# method 2
|
|
501
|
+
stdio = rio(?-).chomp
|
|
502
|
+
ans = stdio.gets
|
|
503
|
+
|
|
504
|
+
* Read from stdin until end of file with the result going into a string
|
|
505
|
+
# method 1
|
|
506
|
+
rio(?-) >> string
|
|
507
|
+
# method 2
|
|
508
|
+
rio(?-) > string
|
|
509
|
+
|
|
510
|
+
* Read from stdin until end of file with the chomped lines going into an array
|
|
511
|
+
# method 1
|
|
512
|
+
rio(?-).chomp >> array
|
|
513
|
+
# method 2
|
|
514
|
+
rio(?-).chomp > array
|
|
515
|
+
|
|
516
|
+
* Read from stdin until end of file with the result going into a file
|
|
517
|
+
# method 1
|
|
518
|
+
rio(?-) > rio('afile')
|
|
519
|
+
# method 2
|
|
520
|
+
rio('afile') < rio(?-)
|
|
521
|
+
|
|
522
|
+
* Read from stdin until end of file with the result appended to a file
|
|
523
|
+
# method 1
|
|
524
|
+
rio(?-) >> rio('afile')
|
|
525
|
+
# method 2
|
|
526
|
+
rio('afile') << rio(?-)
|
|
527
|
+
|
|
528
|
+
* Write a message to stderr
|
|
529
|
+
# method 1
|
|
530
|
+
rio(?=).puts("Hello Error")
|
|
531
|
+
# method 2
|
|
532
|
+
rio(?=) << "Hello Error\n"
|
|
533
|
+
# method 3
|
|
534
|
+
rio(?=) < "Hello Error\n"
|
|
535
|
+
|
|
536
|
+
* Dump a file to stdout
|
|
537
|
+
# method 1
|
|
538
|
+
rio(?-) << rio('afile')
|
|
539
|
+
# method 2
|
|
540
|
+
rio('afile') >> rio(?-)
|
|
541
|
+
# method 3
|
|
542
|
+
rio('afile') > rio(?-)
|
|
543
|
+
# method 4
|
|
544
|
+
rio(?-) < rio('afile')
|
|
545
|
+
# method 5
|
|
546
|
+
rio(?-).print(rio('afile').slurp)
|
|
547
|
+
|
|
548
|
+
* Emulate a simplified unix 'head' command which reads from stdin and writes the first 10 lines to stdout
|
|
549
|
+
# method 1
|
|
550
|
+
rio(?-).lines(0..9) > rio(?-)
|
|
551
|
+
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
=== Reading and writing from processes as one might do with popen
|
|
555
|
+
|
|
556
|
+
* Read the output of the 'ps' command into an array without the header line or the line representing
|
|
557
|
+
the 'ps' command itself
|
|
558
|
+
ps = rio(?-,'ps -a').nolines[0,/ps$/]
|
|
559
|
+
|
|
560
|
+
* Run an external program, copying its input from one location and its output from another,
|
|
561
|
+
and make it look very much like a shell command.
|
|
562
|
+
# method 1
|
|
563
|
+
ans = ""
|
|
564
|
+
cat = rio(?-,'cat').w!
|
|
565
|
+
cat <"Hello Kitty\n" >ans
|
|
566
|
+
|
|
567
|
+
---
|
|
568
|
+
|
|
569
|
+
=== Renaming and moving files
|
|
570
|
+
string = ""
|
|
571
|
+
array = []
|
|
572
|
+
|
|
573
|
+
* Rename the file 'a' to 'b'
|
|
574
|
+
# method 1
|
|
575
|
+
rio('a').rename('b')
|
|
576
|
+
# method 2
|
|
577
|
+
rio('a').rename.filename = 'b'
|
|
578
|
+
|
|
579
|
+
* Rename a file and leave the Rio referencing the files old name
|
|
580
|
+
ario = rio('a')
|
|
581
|
+
# method 1
|
|
582
|
+
ario.rename('b')
|
|
583
|
+
|
|
584
|
+
* Rename a file and change the Rio to reference the new file name
|
|
585
|
+
ario = rio('a')
|
|
586
|
+
# method 1
|
|
587
|
+
ario.rename!('b')
|
|
588
|
+
|
|
589
|
+
* Rename the file 'index.htm' to 'index.html'
|
|
590
|
+
# method 1
|
|
591
|
+
rio('index.htm').rename('index.html')
|
|
592
|
+
# method 2
|
|
593
|
+
rio('index.htm').rename.extname = '.html'
|
|
594
|
+
|
|
595
|
+
* Rename the file 'index.html' to 'welcome.html'
|
|
596
|
+
# method 1
|
|
597
|
+
rio('index.html').rename('welecome.html')
|
|
598
|
+
# method 2
|
|
599
|
+
rio('index.htm').rename.basename = 'welcome'
|
|
600
|
+
|
|
601
|
+
* Move a file from directory 'src' to directory 'dst'
|
|
602
|
+
# method 1
|
|
603
|
+
rio('src/afile').rename('dst/afile')
|
|
604
|
+
# method 2
|
|
605
|
+
rio('src/afile').rename.dirname = 'dst'
|
|
606
|
+
|
|
607
|
+
* Change a file to have the extension '.html' leaving the rest of it as is
|
|
608
|
+
# method 1
|
|
609
|
+
ario.rename.extname = '.html'
|
|
610
|
+
|
|
611
|
+
* Change a files basename to 'zippy' without changing its extension
|
|
612
|
+
# method 1
|
|
613
|
+
ario.rename.basename = 'zippy'
|
|
614
|
+
|
|
615
|
+
* Change a file ending with '.tar.gz' to end with '.tgz'
|
|
616
|
+
# method 1
|
|
617
|
+
ario.rename.ext('.tar.gz').extname = '.tgz'
|
|
618
|
+
|
|
619
|
+
* Change the extension of all files with the extension '.htm' in a directory to have the
|
|
620
|
+
extension '.html'
|
|
621
|
+
# method 1
|
|
622
|
+
rio('adir').rename.files('*.htm') do |htmfile|
|
|
623
|
+
htmlfile.extname = '.html'
|
|
624
|
+
end
|
|
625
|
+
# method 2
|
|
626
|
+
rio('adir').files('*.htm') do |htmfile|
|
|
627
|
+
htmlfile.rename.extname = '.html'
|
|
628
|
+
end
|
|
629
|
+
|
|
630
|
+
* Change the extension of all files with the extension '.htm' in a directory and its
|
|
631
|
+
subdirectories to have the extension '.html'
|
|
632
|
+
# method 1
|
|
633
|
+
rio('adir').rename.all.files('*.htm') do |htmfile|
|
|
634
|
+
htmfile.extname = '.html'
|
|
635
|
+
end
|
|
636
|
+
# method 2
|
|
637
|
+
rio('adir').all.files('*.htm') do |htmfile|
|
|
638
|
+
htmfile.rename.extname = '.html'
|
|
639
|
+
end
|
|
640
|
+
|
|
641
|
+
---
|
|
642
|
+
|
|
643
|
+
=== Manipulate a Rio's path
|
|
644
|
+
string = ""
|
|
645
|
+
array = []
|
|
646
|
+
|
|
647
|
+
* Create a Rio with an additional subdirectory appended
|
|
648
|
+
ap = rio('adir')
|
|
649
|
+
# method 1
|
|
650
|
+
ap /= 'subdirectory'
|
|
651
|
+
# method 2
|
|
652
|
+
ap = ap.join('subdirectory')
|
|
653
|
+
# method 3
|
|
654
|
+
ap = rio(ap,'subdirectory')
|
|
655
|
+
# method 4
|
|
656
|
+
|
|
657
|
+
* Create a Rio from an array of subdirectories
|
|
658
|
+
dirs = ['adir','subdir1','subdir2']
|
|
659
|
+
# method 1
|
|
660
|
+
ario = rio(dirs)
|
|
661
|
+
|
|
662
|
+
* Create an array of subdirectories from a Rio
|
|
663
|
+
# method 1
|
|
664
|
+
anarray = rio('adir/subdir1/subdir2').split
|
|
665
|
+
|
|
666
|
+
* Append a string to a path
|
|
667
|
+
# method 1
|
|
668
|
+
ario = rio('apath') + astring
|
|
669
|
+
# method 2
|
|
670
|
+
ario = rio('apath')
|
|
671
|
+
ario += astring
|
|
672
|
+
|
|
673
|
+
* create a directory 'links' with a symlink pointing to each .rb file in directory 'lib' (including subdirectories)
|
|
674
|
+
lib = rio('lib')
|
|
675
|
+
links = rio('links').delete!.mkdir
|
|
676
|
+
lib.all.files("*.rb") do |f|
|
|
677
|
+
f.symlink( f.dirname.sub(/^#{lib}/,links).mkdir )
|
|
678
|
+
end
|
|
679
|
+
|
|
680
|
+
----
|
|
681
|
+
|
|
682
|
+
Suggested Reading
|
|
683
|
+
* RIO::Doc::SYNOPSIS
|
|
684
|
+
* RIO::Doc::INTRO
|
|
685
|
+
* RIO::Rio
|
|
686
|
+
|
|
687
|
+
=end
|
|
688
|
+
module HOWTO
|
|
689
|
+
end
|
|
690
|
+
end
|
|
691
|
+
end
|