# "require" with many files

**URL:** <https://www.ruby-forum.com/t/require-with-many-files/136142>\
**Category:** Ruby\
**Created:** [April 29, 2008, 10:59am UTC](https://www.ruby-forum.com/t/require-with-many-files/136142 "2008-04-29T10:59:31Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [April 29, 2008, 10:59am UTC](https://www.ruby-forum.com/t/require-with-many-files/136142/1 "2008-04-29T10:59:31Z")

</div>

Hi, is there any preferred way to load/require all the fiels in a  
directory?  
For example, my main file does:

require “header.rb”

and file “header.rb” must load all the related files contained in  
“headers/” directory. I do the following in “header.rb”:

headers\_path = File.dirname( **FILE** ) + ‘/headers’  
Dir.chdir(headers\_path)  
Dir["\*.rb"].each do |file|  
require “#{headers\_path}/#{file}”  
end

Is it enought ok or can it receive some Ruby’s magic? XD

Thanks for any suggestion.

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [April 29, 2008, 6:59pm UTC](https://www.ruby-forum.com/t/require-with-many-files/136142/2 "2008-04-29T18:59:25Z")

</div>

I’ve never seen anything else

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [April 29, 2008, 7:08pm UTC](https://www.ruby-forum.com/t/require-with-many-files/136142/3 "2008-04-29T19:08:22Z")

</div>

Iñaki Baz C. wrote:

> Dir.chdir(headers\_path) Dir["\*.rb"].each do |file|  
> require “#{headers\_path}/#{file}”  
> end
> 
> Is it enought ok or can it receive some Ruby’s magic? XD
> 
> Thanks for any suggestion.

You do use Ruby magic here ;-). The only thing I would suggest is that  
if you do not have to set the current directory to headers\_path for some  
other reason, use this variation:

Dir[File.join(File.dirname( **FILE** ), ‘headers’, “\*.rb”)].each do  
|file|  
require file  
end

Gennady.

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [April 29, 2008, 8:00pm UTC](https://www.ruby-forum.com/t/require-with-many-files/136142/4 "2008-04-29T20:00:29Z")

</div>

On Apr 29, 11:33 am, “ara.t.howard” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> glob = File.join( File.dirname( **FILE** ), ‘headers’, ‘\*.rb’ )
> 
> Dir.glob(glob){|lib| require lib}
> 
> is a bit shorter…

I seem to recall proposals for allowing something like “require header/  
\*” ala Java’s import (maybe I brought it up myself?) but I can’t  
remember what the arguments against it were.

Dan

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [April 29, 2008, 7:34pm UTC](https://www.ruby-forum.com/t/require-with-many-files/136142/5 "2008-04-29T19:34:41Z")

</div>

On Apr 29, 2008, at 2:58 AM, Iñaki Baz C. wrote:

> headers\_path = File.dirname( **FILE** ) + ‘/headers’  
> Dir.chdir(headers\_path)  
> Dir[“\*.rb”].each do |file|  
> require “#{headers\_path}/#{file}”  
> end
> 
> Is it enought ok or can it receive some Ruby’s magic? XD

glob = File.join( File.dirname( **FILE** ), ‘headers’, ‘\*.rb’ )

Dir.glob(glob){|lib| require lib}

is a bit shorter…

a @ [http://codeforpeople.com/](http://codeforpeople.com/)

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [April 29, 2008, 11:35pm UTC](https://www.ruby-forum.com/t/require-with-many-files/136142/6 "2008-04-29T23:35:39Z")

</div>

El Martes, 29 de Abril de 2008, Gennady B.  
escribió:

> You do use Ruby magic here ;-). The only thing I would suggest is that if  
> you do not have to set the current directory to headers\_path for some other  
> reason, use this variation:
> 
> Dir[File.join(File.dirname( **FILE** ), ‘headers’, “\*.rb”)].each do |file|  
> require file  
> end

The problem is that I need to load before some specifi files because  
have  
modules that others files require:

headers\_path = File.dirname( **FILE** ) + ‘/headers’  
Dir.chdir(headers\_path)

require “#{headers\_path}/header.rb”  
require “#{headers\_path}/modules.rb”

Dir[“hdr\_\*.rb”].each do |file|  
require “#{headers\_path}/#{file}”  
end

But ok, thanks a lot for all your suggestions 🙂

---

<div class="post-metadata">

**Author:** ![ISSSSaki\_Baz\_C](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/51bf81/32.png) [@ISSSSaki\_Baz\_C](https://www.ruby-forum.com/u/ISSSSaki_Baz_C)\
**Post date:** [May 3, 2008, 5:37pm UTC](https://www.ruby-forum.com/t/require-with-many-files/136142/7 "2008-05-03T17:37:26Z")

</div>

Iñaki Baz C. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> Dir[“\*.rb”].each do |file|  
> require “#{headers\_path}/#{file}”  
> end
> 
> Is it enought ok or can it receive some Ruby’s magic?

If you say

$: \<\< theDirectory

then you can just require the files by name, I believe… m.
