From: nobu@... Date: 2018-09-09T04:33:33+00:00 Subject: [ruby-core:88913] [Ruby trunk Feature#14927] Loading multiple files at once Issue #14927 has been updated by nobu (Nobuyoshi Nakada). shevegen (Robert A. Heiler) wrote: > In the event that the project may be relocated, here is the > copy/paste outcome of that code: > > require "fpm/namespace" > > require "fpm/package" > require "fpm/package/dir" > require "fpm/package/gem" > require "fpm/package/deb" > require "fpm/package/npm" > require "fpm/package/rpm" > require "fpm/package/tar" > require "fpm/package/cpan" > require "fpm/package/pear" > require "fpm/package/empty" > require "fpm/package/puppet" > require "fpm/package/python" > require "fpm/package/osxpkg" > require "fpm/package/solaris" > require "fpm/package/p5p" > require "fpm/package/pkgin" > require "fpm/package/freebsd" > require "fpm/package/apk" Doesn't the order matter? ---------------------------------------- Feature #14927: Loading multiple files at once https://bugs.ruby-lang.org/issues/14927#change-73950 * Author: deneb (S��bastien Durand) * Status: Open * Priority: Normal * Assignee: * Target version: ---------------------------------------- Just a proof concept I wanted to share. Maybe it could be useful? Say you want to load all the .rb files in your lib directory: ~~~ ruby Dir['lib/**/*.rb'].each { |file| load(file) } ~~~ This approach may not work if your files have dependencies like that: ~~~ ruby # lib/foo.rb class Foo < Bar end ~~~ ~~~ ruby # lib/bar.rb class Bar end ~~~ Foo class needs Bar class. You will get a NameError (uninitialized constant Bar). So in my personal projects, I use this algorithm to load all my files and to automatically take care of dependencies (class/include): ~~~ ruby def boot(files) i = 0 while i < files.length begin load(files[i]) rescue NameError i += 1 else while i > 0 files.push(files.shift) i -= 1 end files.shift end end end ~~~ ~~~ ruby boot Dir['lib/**/*.rb'] # It works! foo.rb and bar.rb are properly loaded. ~~~ My point is: it would be cool if Kernel#load could receive an array of filenames (to load all these files in the proper order). So we could load all our libs with just a single line: ~~~ ruby load Dir['{path1,path2}/**/*.rb'] ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: