21

gem を作成するとき、私はよく次のようなディレクトリ構造を持っています。

|--lib
    |-- helpers.rb
    `-- helpers
        |-- helper_a.rb
        `-- helper_b.rb

内では、ディレクトリ内のファイルを -ing してhelpers.rbいるだけです。しかし、私は次のようなことをしなければなりません:requirehelpers

$:.push(File.dirname(__FILE__) + '/helpers')
require 'helper_a'
require 'helper_b'

その1行を追加する必要がないようにする方法はありますか? 私はこれを本当に素早く思いついた:

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

しかし、それは2行で醜いです。これをワンライナーにするために、どのような巧妙なトリックを行いましたか?

4

4 に答える 4

56
project_root = File.dirname(File.absolute_path(__FILE__))
Dir.glob(project_root + '/helpers/*') {|file| require file}

または、もう少しゴルフをするには:

Dir.glob(project_root + '/helpers/*', &method(:require))
于 2010-03-21T19:13:50.267 に答える
1
# helpers.rb
Dir[__dir__ + '/helpers/*'].each &method(:require)
于 2017-03-08T14:03:22.117 に答える
0

こんにちは、私が発見した最もクリーンな方法は、ワイルドカードで Dir.glob を使用することです。

以下を rakefile に入れます。

gem.files = Dir.glob('lib/**/ *.rb')

それは御馳走になるはずです。

于 2011-12-31T16:56:14.530 に答える