There must be a better way -- requiring multiple files


#1

Hi all,

I want to require all ruby files from a “lib” directory. This is
what I did so far:

 lib_path = File.expand_path(__FILE__ + "/../../lib/")
 Dir.new(lib_path).entries.each { |f| require lib_path + '/' + f

if f =~ /.*.rb/ }

Is there an easier way?

Thanks!
–Dave.


#2

David Teare wrote:

Hi all,

I want to require all ruby files from a “lib” directory. This is
what I did so far:

 lib_path = File.expand_path(__FILE__ + "/../../lib/")
 Dir.new(lib_path).entries.each { |f| require lib_path + '/' + f

if f =~ /.*.rb/ }

Is there an easier way?

Dir[File.join(FILE, “…”, “…”, “lib”, “*.rb”)].each {|l| require l}

recursive:

Dir[File.join(FILE, “…”, “…”, “lib”, “**”, “*.rb”)].each {|l|
require l}

Kind regards

robert

#3

On Tuesday 22 November 2005 16:37, Robert K. wrote:
[…]

Dir[File.join(FILE, “…”, “…”, “lib”, “**”, “*.rb”)].each {|l|
require l}
[…]

A side note:

I have come to the conclusion that the following syntax makes
more sense for Dir[]/Dir.glob:

Dir["#{FILE}/…/…/lib/**/*.rb"]

(In other words, File.join doesn’t make sense here.)

Why?

  1. In my opinion, it is more readable
  2. After reading dir.c in Ruby’s sources, I would say
    that it is at least as portable as the File.join variant.
    Others more familiar with the Ruby source already said
    that Ruby uses slashes internally on all platforms.
  3. It’s more efficient.

Kind regards,
Stefan


#4

Stefan L. wrote:

that Ruby uses slashes internally on all platforms.
I think that all unix-influenced programs that I use under
windoze accept either slashes or backslashes.
These definitely do:
unzip, zip, awk, gawk, mawk, less, grep, sed, cat, vile, tail, diff,
strings


#5

Stefan L. wrote:

Dir["#{FILE}/…/…/lib/**/*.rb"]

(In other words, File.join doesn’t make sense here.)

Why?

  1. In my opinion, it is more readable

Yeah, probably.

  1. After reading dir.c in Ruby’s sources, I would say
    that it is at least as portable as the File.join variant.
    Others more familiar with the Ruby source already said
    that Ruby uses slashes internally on all platforms.

I’m a bit wary to rely on such knowledge about internals. I prefer to
stick with the interfaces.

But then again it might be a bit too much formalism in this case - and
especially for one shot scripts.

  1. It’s more efficient.

Yep, guess so.

Interesting points raised nevertheless.

Kind regards

robert