Forum: Ruby There must be a better way -- requiring multiple files

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.
dteare (Guest)
on 2005-11-22 17:34
(Received via mailing list)
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.
bob.news (Guest)
on 2005-11-22 17:38
(Received via mailing list)
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
langstefan (Guest)
on 2005-11-22 18:10
(Received via mailing list)
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
bob.news (Guest)
on 2005-11-22 18:58
(Received via mailing list)
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.

> 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
w_a_x_man (Guest)
on 2005-11-22 21:59
(Received via mailing list)
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
This topic is locked and can not be replied to.