There must be a better way -- requiring multiple files

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.

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

[...]

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

···

On Tuesday 22 November 2005 16:37, Robert Klemme wrote:

Stefan Lang 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

Yeah, probably.

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.

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.

3) It's more efficient.

Yep, guess so.

Interesting points raised nevertheless.

Kind regards

    robert

···

On Tuesday 22 November 2005 16:37, Robert Klemme wrote:

Stefan Lang wrote:

···

On Tuesday 22 November 2005 16:37, Robert Klemme 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.

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