rio 0.3.1 → 0.3.2
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/ChangeLog +140 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/doc/ANNOUNCE +87 -0
- data/doc/RELEASE_NOTES +7 -0
- data/doc/rdoc/classes/Kernel.html +9 -9
- data/doc/rdoc/classes/Kernel.src/{M000183.html → M000182.html} +0 -0
- data/doc/rdoc/classes/RIO.html +35 -0
- data/doc/rdoc/classes/RIO.src/M000001.html +4 -4
- data/doc/rdoc/classes/RIO.src/M000002.html +4 -4
- data/doc/rdoc/classes/RIO.src/M000003.html +4 -4
- data/doc/rdoc/classes/RIO/Doc/HOWTO.html +11 -7
- data/doc/rdoc/classes/RIO/Doc/INTRO.html +255 -36
- data/doc/rdoc/classes/RIO/Doc/SYNOPSIS.html +47 -17
- data/doc/rdoc/classes/RIO/Rio.html +1032 -1007
- data/doc/rdoc/classes/RIO/Rio.src/M000011.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000012.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000013.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000014.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000015.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000016.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000017.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000018.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000019.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000020.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000021.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000022.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000023.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000024.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000025.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000026.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000027.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000028.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000029.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000030.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000031.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000032.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000033.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000034.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000035.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000036.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000037.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000038.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000039.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000040.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000041.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000042.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000043.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000044.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000045.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000046.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000047.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000048.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000049.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000050.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000051.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000052.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000053.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000054.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000055.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000056.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000057.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000058.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000059.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000060.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000061.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000062.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000063.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000064.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000065.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000066.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000067.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000068.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000069.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000070.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000071.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000072.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000073.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000074.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000075.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000076.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000077.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000078.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000079.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000080.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000081.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000082.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000083.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000084.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000085.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000086.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000087.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000088.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000089.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000090.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000091.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000092.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000093.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000094.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000095.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000096.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000097.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000098.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000099.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000100.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000101.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000102.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000103.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000104.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000105.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000106.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000107.html +2 -2
- data/doc/rdoc/classes/RIO/Rio.src/M000108.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000109.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000110.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000111.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000112.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000113.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000114.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000115.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000116.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000117.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000118.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000119.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000120.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000121.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000122.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000123.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000124.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000125.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000126.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000127.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000128.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000129.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000130.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000131.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000132.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000133.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000134.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000135.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000136.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000137.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000138.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000139.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000140.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000141.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000142.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000143.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000144.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000145.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000146.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000147.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000148.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000149.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000150.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000151.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000152.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000153.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000154.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000155.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000156.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000157.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000158.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000159.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000160.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000161.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000162.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000163.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000164.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000165.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000166.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000167.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000168.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000169.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000170.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000171.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000172.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000173.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000174.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000175.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000176.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000177.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000178.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000179.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000180.html +3 -3
- data/doc/rdoc/classes/RIO/Rio.src/M000181.html +3 -3
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/lib/rio/constructor_rb.html +1 -1
- data/doc/rdoc/files/lib/rio/doc/HOWTO_rb.html +1 -1
- data/doc/rdoc/files/lib/rio/doc/INTRO_rb.html +1 -1
- data/doc/rdoc/files/lib/rio/doc/SYNOPSIS_rb.html +1 -1
- data/doc/rdoc/files/lib/rio/if/basic_rb.html +1 -1
- data/doc/rdoc/files/lib/rio/if/path_rb.html +1 -1
- data/doc/rdoc/files/lib/rio_rb.html +1 -1
- data/doc/rdoc/fr_method_index.html +154 -155
- data/ex/findinruby +7 -3
- data/ex/findruby +6 -2
- data/lib/rio.rb +1 -1
- data/lib/rio/argv.rb +4 -0
- data/lib/rio/constructor.rb +17 -0
- data/lib/rio/context.rb +1 -1
- data/lib/rio/context/dir.rb +1 -0
- data/lib/rio/context/methods.rb +3 -3
- data/lib/rio/dir.rb +2 -2
- data/lib/rio/doc/HOWTO.rb +11 -6
- data/lib/rio/doc/INTRO.rb +149 -12
- data/lib/rio/doc/SYNOPSIS.rb +26 -13
- data/lib/rio/factory.rb +13 -2
- data/lib/rio/grande.rb +25 -0
- data/lib/rio/if/basic.rb +1 -1
- data/lib/rio/if/path.rb +61 -35
- data/lib/rio/matchrecord.rb +20 -1
- data/lib/rio/ops/dir.rb +2 -3
- data/lib/rio/ops/path.rb +25 -11
- data/lib/rio/ops/stream/input.rb +6 -3
- data/lib/rio/rl/base.rb +3 -2
- data/lib/rio/rl/ioi.rb +2 -1
- data/lib/rio/rl/path.rb +18 -3
- data/lib/rio/rl/uri.rb +8 -4
- data/lib/rio/scheme/cmdio.rb +1 -1
- data/lib/rio/scheme/path.rb +1 -0
- data/lib/rio/scheme/stdio.rb +1 -1
- data/lib/rio/scheme/strio.rb +1 -1
- data/lib/rio/scheme/sysio.rb +1 -1
- data/lib/rio/scheme/tcp.rb +1 -0
- data/lib/rio/scheme/temp.rb +184 -0
- data/lib/rio/state.rb +17 -6
- data/lib/rio/stream.rb +1 -1
- data/lib/rio/stream/open.rb +1 -1
- data/lib/rio/tempdir.rb +132 -0
- data/lib/rio/version.rb +1 -1
- data/test/tc/all.rb +4 -0
- data/test/tc/copylines.rb +38 -32
- data/test/tc/riorl.rb +104 -0
- data/test/tc/temp.rb +155 -0
- data/test/tc/tempdir.rb +63 -0
- data/test/tc/tempfile.rb +38 -0
- metadata +10 -5
- data/doc/rdoc/classes/RIO/Rio.src/M000182.html +0 -16
- data/lib/rio/scheme/tempfile.rb +0 -104
|
@@ -119,7 +119,7 @@ Using a <a href="../Rio.html">Rio</a> can be described as having 3 steps:
|
|
|
119
119
|
</p>
|
|
120
120
|
<ul>
|
|
121
121
|
<li>Creating a <a href="../Rio.html">Rio</a> (using the constructor or as the
|
|
122
|
-
result of one of path manipulation methods)
|
|
122
|
+
result of one of the path manipulation methods)
|
|
123
123
|
|
|
124
124
|
</li>
|
|
125
125
|
<li>Configuring a <a href="../Rio.html">Rio</a>
|
|
@@ -269,9 +269,9 @@ to specify stdin or stdout in place of a file)
|
|
|
269
269
|
<p>
|
|
270
270
|
Just as a <a href="../Rio.html">Rio</a> that refers to a file, does not
|
|
271
271
|
know whether that file will be opened for reading or writing until an io
|
|
272
|
-
operation is specified, a
|
|
273
|
-
know whether it will connect to stdin or stdout until an
|
|
274
|
-
specified.
|
|
272
|
+
operation is specified, a <tt>stdio:</tt> <a href="../Rio.html">Rio</a>
|
|
273
|
+
does not know whether it will connect to stdin or stdout until an I/O
|
|
274
|
+
operation is specified.
|
|
275
275
|
</p>
|
|
276
276
|
<h5>Creating a <a href="../Rio.html">Rio</a> that refers to a clone of your programs stderr.</h5>
|
|
277
277
|
<p>
|
|
@@ -314,14 +314,45 @@ choosing
|
|
|
314
314
|
astring = ""
|
|
315
315
|
rio(?","")
|
|
316
316
|
</pre>
|
|
317
|
-
<h5>Creating a <a href="../Rio.html">Rio</a> that refers to a
|
|
317
|
+
<h5>Creating a <a href="../Rio.html">Rio</a> that refers to a Temporary object</h5>
|
|
318
318
|
<p>
|
|
319
319
|
<tt>rio(??)</tt> (mnemonic: ’?’ you don’t know its name)
|
|
320
320
|
</p>
|
|
321
|
+
<p>
|
|
322
|
+
To create a temporary object that will become a file or a directory,
|
|
323
|
+
depending on how you use it:
|
|
324
|
+
</p>
|
|
321
325
|
<pre>
|
|
322
326
|
rio(??)
|
|
323
327
|
rio(??,basename='rio',tmpdir=Dir::tmpdir)
|
|
324
328
|
</pre>
|
|
329
|
+
<p>
|
|
330
|
+
To force it to become a file
|
|
331
|
+
</p>
|
|
332
|
+
<pre>
|
|
333
|
+
rio(??).file
|
|
334
|
+
</pre>
|
|
335
|
+
<p>
|
|
336
|
+
or just write to it.
|
|
337
|
+
</p>
|
|
338
|
+
<p>
|
|
339
|
+
To force it to become a directory:
|
|
340
|
+
</p>
|
|
341
|
+
<pre>
|
|
342
|
+
rio(??).dir
|
|
343
|
+
</pre>
|
|
344
|
+
<p>
|
|
345
|
+
or
|
|
346
|
+
</p>
|
|
347
|
+
<pre>
|
|
348
|
+
rio(??).mkdir
|
|
349
|
+
</pre>
|
|
350
|
+
<p>
|
|
351
|
+
or
|
|
352
|
+
</p>
|
|
353
|
+
<pre>
|
|
354
|
+
rio(??).chdir
|
|
355
|
+
</pre>
|
|
325
356
|
<h5>Creating a <a href="../Rio.html">Rio</a> that refers to an arbitrary TCPSocket</h5>
|
|
326
357
|
<pre>
|
|
327
358
|
rio('tcp:',hostname,port)
|
|
@@ -476,7 +507,7 @@ href="../Rio.html#M000008">Rio#to_s</a>.
|
|
|
476
507
|
</pre>
|
|
477
508
|
<h4>Creating a <a href="../Rio.html">Rio</a> based on its relationship to another</h4>
|
|
478
509
|
<p>
|
|
479
|
-
<a href="../Rio.html#
|
|
510
|
+
<a href="../Rio.html#M000086">Rio#abs</a> creates a new rio whose path is
|
|
480
511
|
the absolute path of a <a href="../Rio.html">Rio</a>. If provided with an
|
|
481
512
|
argument, it uses that as the base path, otherwise it uses an internal base
|
|
482
513
|
path (usually the current working directory when it was created).
|
|
@@ -488,7 +519,7 @@ path (usually the current working directory when it was created).
|
|
|
488
519
|
end
|
|
489
520
|
</pre>
|
|
490
521
|
<p>
|
|
491
|
-
<a href="../Rio.html#
|
|
522
|
+
<a href="../Rio.html#M000087">Rio#rel</a> creates a new rio with a path
|
|
492
523
|
relative to a <a href="../Rio.html">Rio</a>.
|
|
493
524
|
</p>
|
|
494
525
|
<pre>
|
|
@@ -498,8 +529,8 @@ relative to a <a href="../Rio.html">Rio</a>.
|
|
|
498
529
|
rio('/tmp/b').rel('/tmp') #=> rio('b')
|
|
499
530
|
</pre>
|
|
500
531
|
<p>
|
|
501
|
-
<a href="../Rio.html#
|
|
502
|
-
href="../Rio.html#
|
|
532
|
+
<a href="../Rio.html#M000113">Rio#route_to</a> and <a
|
|
533
|
+
href="../Rio.html#M000112">Rio#route_from</a> creates a new rio with a path
|
|
503
534
|
representing the route to get to/from a <a href="../Rio.html">Rio</a>. They
|
|
504
535
|
are based on the methods of the same names in the URI class
|
|
505
536
|
</p>
|
|
@@ -728,7 +759,7 @@ be used for further I/O operations it is returned as a <a
|
|
|
728
759
|
href="../Rio.html">Rio</a>. For example: where File#dirname returns a
|
|
729
760
|
string, <a href="../Rio.html#M000093">Rio#dirname</a> returns a <a
|
|
730
761
|
href="../Rio.html">Rio</a>; where Dir#read returns a string representing a
|
|
731
|
-
directory entry, <a href="../Rio.html#
|
|
762
|
+
directory entry, <a href="../Rio.html#M000038">Rio#read</a> returns a <a
|
|
732
763
|
href="../Rio.html">Rio</a>.
|
|
733
764
|
</p>
|
|
734
765
|
<p>
|
|
@@ -771,7 +802,7 @@ FileTest.
|
|
|
771
802
|
<li><a href="../Rio.html">Rio</a> has its own <a
|
|
772
803
|
href="../Rio.html#M000092">Rio#basename</a>, <a
|
|
773
804
|
href="../Rio.html#M000100">Rio#join</a> and <a
|
|
774
|
-
href="../Rio.html#
|
|
805
|
+
href="../Rio.html#M000035">Rio#symlink</a>, which provide similar
|
|
775
806
|
functionality.
|
|
776
807
|
|
|
777
808
|
</li>
|
|
@@ -846,7 +877,7 @@ provided as instance methods.
|
|
|
846
877
|
|
|
847
878
|
</li>
|
|
848
879
|
<li><tt>chdir</tt> is provided as an instance method. <a
|
|
849
|
-
href="../Rio.html#
|
|
880
|
+
href="../Rio.html#M000017">Rio#chdir</a> returns a <a
|
|
850
881
|
href="../Rio.html">Rio</a> and passes a <a href="../Rio.html">Rio</a> to a
|
|
851
882
|
block if one is provided.
|
|
852
883
|
|
|
@@ -879,7 +910,7 @@ open-uri
|
|
|
879
910
|
</ul>
|
|
880
911
|
<h4>Grande operators</h4>
|
|
881
912
|
<p>
|
|
882
|
-
The primary grande operator is <a href="../Rio.html#
|
|
913
|
+
The primary grande operator is <a href="../Rio.html#M000045">Rio#each</a>.
|
|
883
914
|
<tt>each</tt> is used to iterate through Rios. When applied to a file it
|
|
884
915
|
iterates through records in the file. When applied to a directory it
|
|
885
916
|
iterates through the entries in the directory. Its behavior is modified by
|
|
@@ -973,12 +1004,12 @@ For example:
|
|
|
973
1004
|
<h3>Renaming and Moving</h3>
|
|
974
1005
|
<p>
|
|
975
1006
|
<a href="../Rio.html">Rio</a> provides two methods for directly renaming
|
|
976
|
-
objects on the filesystem: <a href="../Rio.html#
|
|
977
|
-
<a href="../Rio.html#
|
|
1007
|
+
objects on the filesystem: <a href="../Rio.html#M000037">Rio#rename</a> and
|
|
1008
|
+
<a href="../Rio.html#M000037">Rio#rename</a>!. Both of these use
|
|
978
1009
|
File#rename. The difference between them is the returned <a
|
|
979
|
-
href="../Rio.html">Rio</a>. <a href="../Rio.html#
|
|
1010
|
+
href="../Rio.html">Rio</a>. <a href="../Rio.html#M000037">Rio#rename</a>
|
|
980
1011
|
leaves the path of the <a href="../Rio.html">Rio</a> unchanged, while <a
|
|
981
|
-
href="../Rio.html#
|
|
1012
|
+
href="../Rio.html#M000037">Rio#rename</a>! changes the path of the <a
|
|
982
1013
|
href="../Rio.html">Rio</a> to refer to the renamed path.
|
|
983
1014
|
</p>
|
|
984
1015
|
<pre>
|
|
@@ -996,7 +1027,7 @@ href="../Rio.html#M000094">Rio#extname</a>= to rename an object on the
|
|
|
996
1027
|
filesystem when they are used to change a <a
|
|
997
1028
|
href="../Rio.html">Rio</a>’s path. A <a href="../Rio.html">Rio</a> is
|
|
998
1029
|
put in <tt>rename</tt> mode by calling <a
|
|
999
|
-
href="../Rio.html#
|
|
1030
|
+
href="../Rio.html#M000037">Rio#rename</a> with no arguments.
|
|
1000
1031
|
</p>
|
|
1001
1032
|
<pre>
|
|
1002
1033
|
rio('adir/afile.txt').rename.filename = 'bfile.rb' # adir/afile.txt => adir/bfile.rb
|
|
@@ -1017,42 +1048,42 @@ when iterating through that directory.
|
|
|
1017
1048
|
<h3>Deleting</h3>
|
|
1018
1049
|
<p>
|
|
1019
1050
|
The <a href="../Rio.html">Rio</a> methods for deleting filesystem objects
|
|
1020
|
-
are <a href="../Rio.html#
|
|
1021
|
-
href="../Rio.html#
|
|
1022
|
-
href="../Rio.html#
|
|
1023
|
-
href="../Rio.html#
|
|
1024
|
-
href="../Rio.html#
|
|
1051
|
+
are <a href="../Rio.html#M000033">Rio#rm</a>, <a
|
|
1052
|
+
href="../Rio.html#M000029">Rio#rmdir</a>, <a
|
|
1053
|
+
href="../Rio.html#M000030">Rio#rmtree</a>, <a
|
|
1054
|
+
href="../Rio.html#M000046">Rio#delete</a>, and <a
|
|
1055
|
+
href="../Rio.html#M000046">Rio#delete</a>!. <tt>rm</tt>, <tt>rmdir</tt> and
|
|
1025
1056
|
<tt>rmtree</tt> are passed the like named methods in the FileUtils module.
|
|
1026
|
-
<a href="../Rio.html#
|
|
1057
|
+
<a href="../Rio.html#M000046">Rio#delete</a> calls <tt>rmdir</tt> for
|
|
1027
1058
|
directories and <tt>rm</tt> for anything else, while <a
|
|
1028
|
-
href="../Rio.html#
|
|
1029
|
-
href="../Rio.html#
|
|
1059
|
+
href="../Rio.html#M000046">Rio#delete</a>! calls <a
|
|
1060
|
+
href="../Rio.html#M000030">Rio#rmtree</a> for directories.
|
|
1030
1061
|
</p>
|
|
1031
1062
|
<ul>
|
|
1032
1063
|
<li>To delete something only if it is not a directory use <a
|
|
1033
|
-
href="../Rio.html#
|
|
1064
|
+
href="../Rio.html#M000033">Rio#rm</a>
|
|
1034
1065
|
|
|
1035
1066
|
</li>
|
|
1036
1067
|
<li>To delete an empty directory use <a
|
|
1037
|
-
href="../Rio.html#
|
|
1068
|
+
href="../Rio.html#M000029">Rio#rmdir</a>
|
|
1038
1069
|
|
|
1039
1070
|
</li>
|
|
1040
1071
|
<li>To delete an entire directory tree use <a
|
|
1041
|
-
href="../Rio.html#
|
|
1072
|
+
href="../Rio.html#M000030">Rio#rmtree</a>
|
|
1042
1073
|
|
|
1043
1074
|
</li>
|
|
1044
1075
|
<li>To delete anything except a populated directory use <a
|
|
1045
|
-
href="../Rio.html#
|
|
1076
|
+
href="../Rio.html#M000046">Rio#delete</a>
|
|
1046
1077
|
|
|
1047
1078
|
</li>
|
|
1048
|
-
<li>To delete anything use <a href="../Rio.html#
|
|
1079
|
+
<li>To delete anything use <a href="../Rio.html#M000046">Rio#delete</a>!
|
|
1049
1080
|
|
|
1050
1081
|
</li>
|
|
1051
1082
|
</ul>
|
|
1052
1083
|
<p>
|
|
1053
1084
|
It is not an error to call any of the deleting methods on something that
|
|
1054
1085
|
does not exist. <a href="../Rio.html">Rio</a> provides Rio#exist? and <a
|
|
1055
|
-
href="../Rio.html#
|
|
1086
|
+
href="../Rio.html#M000035">Rio#symlink</a>? to check if something exists
|
|
1056
1087
|
(<tt>exist?</tt> returns false for symlinks to non-existant object even
|
|
1057
1088
|
though the symlink itself exists). The deleting methods’ purpose is
|
|
1058
1089
|
to make things not exist, so calling one of them on something that already
|
|
@@ -1060,14 +1091,202 @@ does not exist is considered a success.
|
|
|
1060
1091
|
</p>
|
|
1061
1092
|
<p>
|
|
1062
1093
|
To create a clean copy of a directory whether or not anything with that
|
|
1063
|
-
name exists
|
|
1094
|
+
name exists one might do this
|
|
1064
1095
|
</p>
|
|
1065
1096
|
<pre>
|
|
1066
|
-
|
|
1067
|
-
|
|
1068
|
-
|
|
1097
|
+
rio('adir').delete!.mkpath.chdir do
|
|
1098
|
+
# do something in adir
|
|
1099
|
+
end
|
|
1100
|
+
</pre>
|
|
1101
|
+
<hr size="1"></hr><h2>Miscellany</h2>
|
|
1102
|
+
<h4>Using Symbolic Links</h4>
|
|
1103
|
+
<p>
|
|
1104
|
+
To create a symbolic link (symlink) to the file-system entry refered to by
|
|
1105
|
+
a <a href="../Rio.html">Rio</a>, use <a
|
|
1106
|
+
href="../Rio.html#M000035">Rio#symlink</a>. <a
|
|
1107
|
+
href="../Rio.html#M000035">Rio#symlink</a> differs from File#symlink in
|
|
1108
|
+
that it calculates the path from the symlink location to the <a
|
|
1109
|
+
href="../Rio.html">Rio</a>’s position. So:
|
|
1110
|
+
</p>
|
|
1111
|
+
<pre>
|
|
1112
|
+
File#symlink('adir/afile','adir/alink')
|
|
1113
|
+
</pre>
|
|
1114
|
+
<p>
|
|
1115
|
+
creates a symlink in the directory ‘adir’ named
|
|
1116
|
+
‘alink’ which references ‘adir/afile’. From the
|
|
1117
|
+
perspective of ‘alink’, ‘adir/afile’ does not
|
|
1118
|
+
exist. While:
|
|
1119
|
+
</p>
|
|
1120
|
+
<pre>
|
|
1121
|
+
rio('adir/afile').symlink('adir/alink')
|
|
1122
|
+
</pre>
|
|
1123
|
+
<p>
|
|
1124
|
+
creates a symlink in the directory ‘adir’ named
|
|
1125
|
+
‘alink’ which references ‘afile’. This is the route
|
|
1126
|
+
to ‘adir/afile’ from the perspective of
|
|
1127
|
+
‘adir/alink’.
|
|
1128
|
+
</p>
|
|
1129
|
+
<p>
|
|
1130
|
+
Note that the return value from <tt>symlink</tt> is the calling <a
|
|
1131
|
+
href="../Rio.html">Rio</a> and not a <a href="../Rio.html">Rio</a> refering
|
|
1132
|
+
to the symlink. This is done for consistency with the rest of <a
|
|
1133
|
+
href="../Rio.html">Rio</a>.
|
|
1134
|
+
</p>
|
|
1135
|
+
<p>
|
|
1136
|
+
<a href="../Rio.html#M000035">Rio#symlink</a>? can be used to test if a
|
|
1137
|
+
file-system object is a symlink. A <a href="../Rio.html">Rio</a> is
|
|
1138
|
+
extended with <a href="../Rio.html#M000036">Rio#readlink</a>, and <a
|
|
1139
|
+
href="../Rio.html#M000161">Rio#lstat</a> only if <a
|
|
1140
|
+
href="../Rio.html#M000035">Rio#symlink</a>? returns true. So for
|
|
1141
|
+
non-symlinks, these will raise a NoMethodError. These are both passed to
|
|
1142
|
+
their counterparts in File. <a href="../Rio.html#M000036">Rio#readlink</a>
|
|
1143
|
+
returns a <a href="../Rio.html">Rio</a> refering to the result of
|
|
1144
|
+
File#readlink.
|
|
1145
|
+
</p>
|
|
1146
|
+
<h4>Using A <a href="../Rio.html">Rio</a> as an IO (or File or Dir)</h4>
|
|
1147
|
+
<p>
|
|
1148
|
+
<a href="../Rio.html">Rio</a> supports so much of IO’s interface that
|
|
1149
|
+
one might be tempted to pass it to a method that expects an IO. While <a
|
|
1150
|
+
href="../Rio.html">Rio</a> is not and is not intended to be a stand in for
|
|
1151
|
+
IO, this can work. It requires knowledge of every IO method that will be
|
|
1152
|
+
called, under any circumstances.
|
|
1153
|
+
</p>
|
|
1154
|
+
<p>
|
|
1155
|
+
Even in cases where <a href="../Rio.html">Rio</a> supports the required IO
|
|
1156
|
+
interface, A <a href="../Rio.html">Rio</a> feature that seems to cause the
|
|
1157
|
+
most incompatibility, is its automatic closing of files. To turn off all of
|
|
1158
|
+
<a href="../Rio.html">Rio</a>’s automatic closing use
|
|
1159
|
+
Rio#noautoclose.
|
|
1160
|
+
</p>
|
|
1161
|
+
<p>
|
|
1162
|
+
For example:
|
|
1163
|
+
</p>
|
|
1164
|
+
<pre>
|
|
1165
|
+
require 'yaml'
|
|
1166
|
+
yrio = rio('ran.yaml').delete!.noautoclose
|
|
1167
|
+
YAML.dump( ['badger', 'elephant', 'tiger'], yrio )
|
|
1168
|
+
obj = YAML::load( yrio ) #=> ["badger", "tiger", "elephant"]
|
|
1169
|
+
</pre>
|
|
1170
|
+
<h4>Automatic Closing of Files</h4>
|
|
1171
|
+
<p>
|
|
1172
|
+
<a href="../Rio.html">Rio</a> closes files automatically in three
|
|
1173
|
+
instances.
|
|
1174
|
+
</p>
|
|
1175
|
+
<p>
|
|
1176
|
+
When reading from an IO it is closed when the end of file is reached. While
|
|
1177
|
+
this is a reasonable thing to do in many cases, sometimes this is not
|
|
1178
|
+
desired. To turn <a href="../Rio.html">Rio</a>’s automatic closing on
|
|
1179
|
+
end of file use <a href="../Rio.html#M000069">Rio#nocloseoneof</a> (it can
|
|
1180
|
+
be turned back on via <a href="../Rio.html#M000068">Rio#closeoneof</a>)
|
|
1181
|
+
</p>
|
|
1182
|
+
<pre>
|
|
1183
|
+
ario = rio('afile').nocloseoneof
|
|
1184
|
+
lines = ario[]
|
|
1185
|
+
ario.closed? #=> false
|
|
1186
|
+
</pre>
|
|
1187
|
+
<p>
|
|
1188
|
+
Closing on end-of-file is necessary for many of <a
|
|
1189
|
+
href="../Rio.html">Rio</a>’s "one-liners", but has an
|
|
1190
|
+
implication that may be surprising at first. A <a
|
|
1191
|
+
href="../Rio.html">Rio</a> starts life as a path, not much more than a
|
|
1192
|
+
string. When one of its read methods is called it becomes an input stream.
|
|
1193
|
+
When the stream is closed, it becomes a path again. This means that when
|
|
1194
|
+
reading from a <a href="../Rio.html">Rio</a>, the end-of-file condition is
|
|
1195
|
+
seen only once before it becomes a path again, and will be reopened if
|
|
1196
|
+
another read operation is attempted.
|
|
1197
|
+
</p>
|
|
1198
|
+
<p>
|
|
1199
|
+
Another time a <a href="../Rio.html">Rio</a> will be closed atomatically is
|
|
1200
|
+
when writing to it with one of the copy operators (<tt><, <<,
|
|
1201
|
+
>, >></tt>). This behavior can be turned off with <a
|
|
1202
|
+
href="../Rio.html#M000072">Rio#nocloseoncopy</a>.
|
|
1203
|
+
</p>
|
|
1204
|
+
<p>
|
|
1205
|
+
To turn off both of thes types of automatic closing use Rio#noautoclose.
|
|
1206
|
+
</p>
|
|
1207
|
+
<p>
|
|
1208
|
+
The third instance when <a href="../Rio.html">Rio</a> will close a file
|
|
1209
|
+
automatically is when a file opened for one type of access receives a
|
|
1210
|
+
method which that access mode does not support. So, the code
|
|
1211
|
+
</p>
|
|
1212
|
+
<pre>
|
|
1213
|
+
rio('afile').puts("Hello World").gets
|
|
1214
|
+
</pre>
|
|
1215
|
+
<p>
|
|
1216
|
+
will open the file for write access when the <tt>puts</tt> method is
|
|
1217
|
+
received. When <tt>gets</tt> is called the file is closed and reopened with
|
|
1218
|
+
read access.
|
|
1219
|
+
</p>
|
|
1220
|
+
<h4>Explicit Closing of Files</h4>
|
|
1221
|
+
<p>
|
|
1222
|
+
<a href="../Rio.html">Rio</a> can not determine when the client is finished
|
|
1223
|
+
writing to it, as it does using <tt>eof</tt> on read. It is the
|
|
1224
|
+
author’s understanding that Ruby does not support a mechanism to have
|
|
1225
|
+
code run when there are no more references to it — that finalizers
|
|
1226
|
+
are not necessarily run immediatly upon an object’s reference count
|
|
1227
|
+
reaching 0. If this understanding is incorrect, some of <a
|
|
1228
|
+
href="../Rio.html">Rio</a>’s extranious ways of closing a file may be
|
|
1229
|
+
rethought.
|
|
1230
|
+
</p>
|
|
1231
|
+
<p>
|
|
1232
|
+
That being said, <a href="../Rio.html">Rio</a> support several ways to
|
|
1233
|
+
explicitly close a file. <a href="../Rio.html#M000141">Rio#close</a> will
|
|
1234
|
+
close any open <a href="../Rio.html">Rio</a>. The output methods <a
|
|
1235
|
+
href="../Rio.html#M000132">Rio#puts</a>!, <a
|
|
1236
|
+
href="../Rio.html#M000131">Rio#putc</a>!, <a
|
|
1237
|
+
href="../Rio.html#M000129">Rio#printf</a>!, <a
|
|
1238
|
+
href="../Rio.html#M000126">Rio#print</a>!, and <a
|
|
1239
|
+
href="../Rio.html#M000135">Rio#write</a>! behave as if their counterparts
|
|
1240
|
+
without the exclamation point had been called and then call <a
|
|
1241
|
+
href="../Rio.html#M000141">Rio#close</a> or Rio#close_write if the
|
|
1242
|
+
underlying IO object is opened for duplex access.
|
|
1243
|
+
</p>
|
|
1244
|
+
<h4>Open mode selection</h4>
|
|
1245
|
+
<p>
|
|
1246
|
+
A <a href="../Rio.html">Rio</a> is typically not explicitly opened. It
|
|
1247
|
+
opens a file automatically when an input or output methed is called. For
|
|
1248
|
+
output methods <a href="../Rio.html">Rio</a> opens a file with mode
|
|
1249
|
+
‘w’, and otherwise opens a file with mode ‘r’. This
|
|
1250
|
+
behavior can be modified using the tersely named methods <a
|
|
1251
|
+
href="../Rio.html#M000062">Rio#a</a>, <a
|
|
1252
|
+
href="../Rio.html#M000062">Rio#a</a>!, <a
|
|
1253
|
+
href="../Rio.html#M000064">Rio#r</a>, <a
|
|
1254
|
+
href="../Rio.html#M000064">Rio#r</a>!, <a
|
|
1255
|
+
href="../Rio.html#M000066">Rio#w</a>, and <a
|
|
1256
|
+
href="../Rio.html#M000066">Rio#w</a>!, which cause the <a
|
|
1257
|
+
href="../Rio.html">Rio</a> to use modes
|
|
1258
|
+
‘a’,’a+’,’r’,’r+’,’w’,and
|
|
1259
|
+
‘w+’ respectively.
|
|
1260
|
+
</p>
|
|
1261
|
+
<p>
|
|
1262
|
+
One way to append a string to a file and close it in one line is
|
|
1263
|
+
</p>
|
|
1264
|
+
<pre>
|
|
1265
|
+
rio('afile').a.puts!("Hello World")
|
|
1069
1266
|
</pre>
|
|
1070
1267
|
<p>
|
|
1268
|
+
Run a cmd that must be opened for read and write
|
|
1269
|
+
</p>
|
|
1270
|
+
<pre>
|
|
1271
|
+
ans = rio(?-,'cat').w!.puts!("Hello Kitty").readlines
|
|
1272
|
+
</pre>
|
|
1273
|
+
<p>
|
|
1274
|
+
The automatic selection of mode can be bypassed entirely using <a
|
|
1275
|
+
href="../Rio.html#M000139">Rio#mode</a> and <a
|
|
1276
|
+
href="../Rio.html#M000007">Rio#open</a>.
|
|
1277
|
+
</p>
|
|
1278
|
+
<p>
|
|
1279
|
+
If a mode is specified using <tt>mode</tt>, the file will still be opened
|
|
1280
|
+
automatically, but the mode specified in the <tt>mode</tt> method will be
|
|
1281
|
+
used regardless of whether it makes sense.
|
|
1282
|
+
</p>
|
|
1283
|
+
<p>
|
|
1284
|
+
A <a href="../Rio.html">Rio</a> can also be opened explicitly using <a
|
|
1285
|
+
href="../Rio.html#M000007">Rio#open</a>. <tt>open</tt> takes one parameter,
|
|
1286
|
+
a mode. This also will override all of <a
|
|
1287
|
+
href="../Rio.html">Rio</a>’s automatic mode selection.
|
|
1288
|
+
</p>
|
|
1289
|
+
<hr size="1"></hr><p>
|
|
1071
1290
|
See also:
|
|
1072
1291
|
</p>
|
|
1073
1292
|
<ul>
|
|
@@ -92,6 +92,12 @@ Copy a file into a string
|
|
|
92
92
|
rio('afile') > astring
|
|
93
93
|
</pre>
|
|
94
94
|
<p>
|
|
95
|
+
Copy a string into a file
|
|
96
|
+
</p>
|
|
97
|
+
<pre>
|
|
98
|
+
rio('afile') < astring
|
|
99
|
+
</pre>
|
|
100
|
+
<p>
|
|
95
101
|
Copy the chomped lines of a file into an array
|
|
96
102
|
</p>
|
|
97
103
|
<pre>
|
|
@@ -122,7 +128,7 @@ Copy a web page into a file
|
|
|
122
128
|
rio('http://rubydoc.org/') > rio('afile')
|
|
123
129
|
</pre>
|
|
124
130
|
<p>
|
|
125
|
-
Copy a file from a ftp server into a file
|
|
131
|
+
Copy a file from a ftp server into a local file
|
|
126
132
|
</p>
|
|
127
133
|
<pre>
|
|
128
134
|
rio('ftp://host/afile.gz') > rio('afile.gz')
|
|
@@ -134,16 +140,16 @@ Copy a gzipped file un-gzipping it
|
|
|
134
140
|
rio('afile.gz').gzip > rio('afile')
|
|
135
141
|
</pre>
|
|
136
142
|
<p>
|
|
137
|
-
Copy a
|
|
143
|
+
Copy a plain file, gzipping it
|
|
138
144
|
</p>
|
|
139
145
|
<pre>
|
|
140
|
-
rio('
|
|
146
|
+
rio('afile.gz').gzip < rio('afile')
|
|
141
147
|
</pre>
|
|
142
148
|
<p>
|
|
143
|
-
Copy a
|
|
149
|
+
Copy a file from a ftp server into a local file un-gzipping it
|
|
144
150
|
</p>
|
|
145
151
|
<pre>
|
|
146
|
-
rio('afile.gz').gzip &
|
|
152
|
+
rio('ftp://host/afile.gz').gzip > rio('afile')
|
|
147
153
|
</pre>
|
|
148
154
|
<p>
|
|
149
155
|
Iterate over the entries in a directory
|
|
@@ -164,6 +170,25 @@ Iterate over only the .rb files in a directory
|
|
|
164
170
|
rio('adir').files('*.rb') { |entrio| ... }
|
|
165
171
|
</pre>
|
|
166
172
|
<p>
|
|
173
|
+
Iterate over only the directories in a directory
|
|
174
|
+
</p>
|
|
175
|
+
<pre>
|
|
176
|
+
rio('adir').dirs { |entrio| ... }
|
|
177
|
+
</pre>
|
|
178
|
+
<p>
|
|
179
|
+
Iterate over only the <em>dot</em> files in a directory
|
|
180
|
+
</p>
|
|
181
|
+
<pre>
|
|
182
|
+
rio('adir').dirs(/^\./) { |entrio| ... }
|
|
183
|
+
</pre>
|
|
184
|
+
<p>
|
|
185
|
+
Iterate over the files in a directory and its subdirectories, skipping
|
|
186
|
+
’.svn’ and ‘CVS’ directories
|
|
187
|
+
</p>
|
|
188
|
+
<pre>
|
|
189
|
+
rio('adir').norecurse(/^\.svn$/,'CVS').files { |entrio| ... }
|
|
190
|
+
</pre>
|
|
191
|
+
<p>
|
|
167
192
|
Create an array of the .rb entries in a directory
|
|
168
193
|
</p>
|
|
169
194
|
<pre>
|
|
@@ -188,8 +213,7 @@ Create an array of the .rb files in a directory and its subdirectories
|
|
|
188
213
|
anarray = rio('adir').all.files['*.rb']
|
|
189
214
|
</pre>
|
|
190
215
|
<p>
|
|
191
|
-
Copy an entire directory structure
|
|
192
|
-
and its subdirectories into another directory
|
|
216
|
+
Copy an entire directory structure and the .rb files within it
|
|
193
217
|
</p>
|
|
194
218
|
<pre>
|
|
195
219
|
rio('adir').dirs.files('*.rb') > rio('another_directory')
|
|
@@ -231,22 +255,29 @@ Copy the first 10 lines of a file to stdout
|
|
|
231
255
|
rio('afile').lines(0..9) > rio(?-)
|
|
232
256
|
</pre>
|
|
233
257
|
<p>
|
|
234
|
-
Copy the first 10 lines of a gzipped file to stdout
|
|
258
|
+
Copy the first 10 lines of a gzipped file on an ftp server to stdout
|
|
235
259
|
</p>
|
|
236
260
|
<pre>
|
|
237
|
-
rio('afile.gz').gzip.lines(0..9) > rio(?-)
|
|
261
|
+
rio('ftp://host/afile.gz').gzip.lines(0..9) > rio(?-)
|
|
238
262
|
</pre>
|
|
239
263
|
<p>
|
|
240
|
-
|
|
264
|
+
Put the first 100 chomped lines of a gzipped file into an array
|
|
241
265
|
</p>
|
|
242
266
|
<pre>
|
|
243
|
-
rio('
|
|
267
|
+
anarray = rio('afile.gz').chomp.gzip[0...100]
|
|
244
268
|
</pre>
|
|
245
269
|
<p>
|
|
246
|
-
Put
|
|
270
|
+
Put chomped lines that start with ‘<a
|
|
271
|
+
href="../Rio.html">Rio</a>’ into an array
|
|
272
|
+
</p>
|
|
273
|
+
<pre>
|
|
274
|
+
anarray = rio('afile').chomp[/^Rio/]
|
|
275
|
+
</pre>
|
|
276
|
+
<p>
|
|
277
|
+
Iterate over the non-empty, non-comment chomped lines of a file
|
|
247
278
|
</p>
|
|
248
279
|
<pre>
|
|
249
|
-
|
|
280
|
+
rio('afile').chomp.nolines(:empty?,/^\s*#/) { |line| ... }
|
|
250
281
|
</pre>
|
|
251
282
|
<p>
|
|
252
283
|
Copy the output of th ps command into an array, skipping the header line
|
|
@@ -262,9 +293,8 @@ Prompt for input and return what was typed
|
|
|
262
293
|
ans = rio(?-).print("Type Something: ").chomp.gets
|
|
263
294
|
</pre>
|
|
264
295
|
<p>
|
|
265
|
-
Change the extension of all files
|
|
266
|
-
|
|
267
|
-
’.html’
|
|
296
|
+
Change the extension of all .htm files in a directory and its
|
|
297
|
+
subdirectories to .html
|
|
268
298
|
</p>
|
|
269
299
|
<pre>
|
|
270
300
|
rio('adir').rename.all.files('*.htm') do |htmfile|
|
|
@@ -276,7 +306,7 @@ Create a symbolic link ‘asymlink’ in ‘adir’ which
|
|
|
276
306
|
refers to ‘adir/afile‘
|
|
277
307
|
</p>
|
|
278
308
|
<pre>
|
|
279
|
-
rio('adir/afile').
|
|
309
|
+
rio('adir/afile').symlink('adir/asymlink')
|
|
280
310
|
</pre>
|
|
281
311
|
<h3>SUGGESTED READING</h3>
|
|
282
312
|
<ul>
|