John Maclean
2/26/2006 2:30:00 AM
Thanks for that reply. YANGNI's made my day. I'll keep things as
simple as poss from now on...
On Sun, 26 Feb 2006 10:34:03 +0900 Eric
Hodel <drbrain@segment7.net> wrote:
>
> On Feb 25, 2006, at 10:19 AM, John Maclean wrote:
>
> > I've had a look at /usr/share/doc/ruby-1.8.4/sample/less.rb and made
> > some comments on the processes where I could. It came with my repos
> > installation of Ruby. Can someone point me in the right direction
> > here,
> > as there a a number of things that I'm not familar with or
> > understand....
> >
> > #!/usr/bin/ruby
> > there isn't a single def foo ... end method here - why?
>
> YAGNI
>
> > also how come this hasn't been turned into a class?
>
> YAGNI
>
> > is that because that there is no need for one?
>
> Yes.
>
> > also why the use of GLOBAL VARIABLES? I thought that they are not
> > from the "church of good design"
>
> There are no global variables in less.rb. Global variables start
> with a $.
>
> > gobal vars to hard-code where these programs are... assuming a
> > Unix- based system it was weired because the path was initially set
> > to / usr/local/bin/ which did not work i personally think it's
> > better to use a ruby equivalent of `which less` to find out where
> > the command is rather than hard coding it in this way
>
> This is in sample/, so they may or may not work out of the box.
> less.rb isn't installed anywhere on your system, so YMMV.
>
> Also, less.rb won't work when the PATH env var is empty if you use
> which (think cron).
>
> > ZCAT = "/usr/bin/zcat"
> > LESS = "/usr/bin/less"
> >
> > funny how you can call ruby less.rb with --help
>
> Why? It follows logically from the implementation.
>
> > # dunno about this class or method
> > FILE = ARGV.pop
>
> ARGV is the command line argument Array.
>
> > # ah, i think that this may be exception handling.
> > # if no arguments from command line *OPTION* is zero
> > # otherwise out an empty string at the end of the filename??
> > OPTION = (if ARGV.length == 0; "" else ARGV.join(" "); end)
>
> If there are options after removing the filename join them with
> spaces. Otherwise use an empty string. No exception handling,
> exceptions involve begin/rescue/ensure/raise.
>
> > # we are grepping for stuff...
>
> matching, not grepping.
>
> > # a file that ends in Z or gz - these are compressed files
> > if FILE =~ /\.(Z|gz)$/
> >
> > # what is *%s*?
> > # - is it a string that we come across when we are grepping
> > through
> > the files?
>
> The string printf format variable.
>
> > # see `ri kernel.format` for the *format* method
> > # "Argument is a string to be substituted"
> > # i think it works with sprintf
>
> Correct.
>
> > # run zcat on a compressed file _first_ then view it with less
> > exec(format("%s %s | %s %s", ZCAT, FILE, LESS, OPTION))
> > # otherwise there *is* no compressed file and we treat it
> > differently
> > elsif FILE == nil
> > #
> > exec(format("%s %s", LESS, OPTION))
>
> This is why less.rb --help works.
>
> > else
> > print(format("%s %s %s", LESS, OPTION, FILE), "\n")
> > exec(format("%s %s %s", LESS, OPTION, FILE))
> > end
> > # end the `less`ing. i dont know why the use of the empty brackets
>
> Differences in style.
>
> > exit()
>
--
John Maclean
MSc (DIC)
07739 171 531