Cleanest/One-liner方式要求Ruby中的目录中的所有文件?

Lan*_*ard 21 ruby require

在创建gem时,我经常有这样的目录结构:

|--lib
    |-- helpers.rb
    `-- helpers
        |-- helper_a.rb
        `-- helper_b.rb
Run Code Online (Sandbox Code Playgroud)

在里面helpers.rb,我只是require在目录中的helpers文件.但我必须做这样的事情:

$:.push(File.dirname(__FILE__) + '/helpers')
require 'helper_a'
require 'helper_b'
Run Code Online (Sandbox Code Playgroud)

有没有办法制作这一行,所以我永远不必添加它?我刚才想出了这个:

dir = File.join(File.dirname(__FILE__), "helpers")
Dir.entries(dir)[2..-1].each { |file| require "#{dir}/#{file[0..-4]}" }
Run Code Online (Sandbox Code Playgroud)

但它是两条线而且丑陋.你做了什么光滑的技巧来使这个成为一个班轮?

sep*_*p2k 54

project_root = File.dirname(File.absolute_path(__FILE__))
Dir.glob(project_root + '/helpers/*') {|file| require file}
Run Code Online (Sandbox Code Playgroud)

或者打高尔夫球:

Dir.glob(project_root + '/helpers/*', &method(:require))
Run Code Online (Sandbox Code Playgroud)