Forum: Ruby comments of less.rb appreciated

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
John M. (Guest)
on 2006-02-25 20:21
(Received via mailing list)
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?
# also how come this hasn't been turned into a class?
# is that because that there is no need for one?
# also why the use of GLOBAL VARIABLES? I thought that they are not
from the "church of good design"

# 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 ZCAT = "/usr/bin/zcat"
LESS = "/usr/bin/less"
# funny how you can call ruby less.rb with --help

# dunno about this class or method
FILE = ARGV.pop

# 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)

# we are grepping for stuff...
# 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?

  # see `ri kernel.format` for the *format* method
  # "Argument is a string to be substituted"
  # i think it works with sprintf

  # 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))
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
exit()
Eric H. (Guest)
on 2006-02-26 03:35
(Received via mailing list)
On Feb 25, 2006, at 10:19 AM, John M. 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()

--
Eric H. - removed_email_address@domain.invalid - http://blog.segment7.net
This implementation is HODEL-HASH-9600 compliant

http://trackmap.robotcoop.com
John M. (Guest)
on 2006-02-26 04:33
(Received via mailing list)
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
This topic is locked and can not be replied to.