22 Stimmen

Cleanest/One-liner Weg, um alle Dateien im Verzeichnis in Ruby erfordern?

Bei der Erstellung von Edelsteinen verwende ich oft eine Verzeichnisstruktur wie diese:

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

Im Inneren der helpers.rb Ich bin nur require -Einstellung der Dateien im helpers Verzeichnis. Aber ich muss Dinge wie diese tun:

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

Gibt es eine Möglichkeit, diese eine Zeile so zu gestalten, dass ich sie nie ergänzen muss? Ich habe mir das gerade schnell ausgedacht:

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

Aber es ist zweizeilig und hässlich. Welche raffinierten Tricks haben Sie angewandt, um daraus einen Einzeiler zu machen?

57voto

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

Oder um es ein bisschen mehr zu golfen:

Dir.glob(project_root + '/helpers/*', &method(:require))

3voto

pedz Punkte 2061

Ich mag require_relative:

Dir.glob('lib/**/*.rb') { |f| require_relative f }

Der `&method(:require_relative) Trick funktioniert nicht mit require_relative. Ich erhalte:

`require_relative': cannot infer basepath (LoadError)

Aber es erspart Ihnen die Mühe des Rechnens project_root

Ich benutze ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.5.0]

1voto

Lev Lukomsky Punkte 5982
# helpers.rb
Dir[__dir__ + '/helpers/*'].each &method(:require)

0voto

WebDevMonk Punkte 11

Hallo, der sauberste Weg, den ich entdeckt habe, ist die Verwendung von Dir.glob mit Platzhaltern.

Fügen Sie das Folgende in Ihr Rakefile ein:

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

Das sollte gut funktionieren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X