Hi --

Here are a few more comments.

On Tue, 12 Aug 2008, Ben Aurel wrote:

> this is my solution to your inputs
>
> 1.) better errorhandling
>
> 2.) no more string methods in the class.
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>  1 #!/usr/bin/env ruby
>  2 # The Unix tool 'ls' implemented in ruby
>  3 class Ls
>  4   def initialize(path)

Conversion to conventional indentation for free :-)

>  5     if File.exists?(path) && File.directory?(path) && path!=nil

File.exists?(nil) will raise a TypeError, so you'll never get to the
final test. If you make it through the first two tests, the third test
is not necessary. So you can get rid of it, and decide whether you
want the nil error to trickle up. The path argument is required,
though, so it's not going to be nil just because someone forgot it; it
will only be nil if someone passes in nil.

You might even consider just storing the path, and then letting
whatever happens later happen -- like someone trying to access a
non-existent or restricted directory.

>  6       @path = path
>  7     else
>  8       raise ArgumentError, "Directory doesn't exists"
>  9     end
> 10   end
> 11   attr_accessor :path
> 12
> 13   def list_all_array(dir)
> 14     files_n_dirs = Array.new
> 15     Dir.foreach(path) do |entry|
> 16       if entry != "." &&  entry != ".."
> 17         files_n_dirs << entry
> 18       end
> 19     end

A slightly more straightforward way to handle that might be:
   next if ['.', '..'].include?(entry)
   files_n_dirs << entry

> 20     return files_n_dirs
> 21   end
> 22 end
> 23
> 24 dir = ARGV.shift
> 25 if dir == ['--help'] or dir == ['-h']
> 26   puts "Help: ls - list directories and files "
> 27 elsif dir
> 28   begin
> 29     ls = Ls.new(dir)
> 30     ls.list_all_array(dir).each do |i|
> 31       puts i
> 32     end

You can just do:

   puts ls.list_all_array(dir)


David

-- 
Rails training from David A. Black and Ruby Power and Light:
  *  Advancing With Rails August 18-21 Edison, NJ
  * Co-taught by D.A. Black and Erik Kastner
See http://www.rubypal.com for details and updates!