2010-03-21 8 views
20

जब जवाहरात बनाने, मैं अक्सर इस तरह की एक निर्देशिका संरचना है:रूबी में निर्देशिका में सभी फ़ाइलों की आवश्यकता के लिए सबसे साफ/एक-लाइनर तरीका?

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

helpers.rb अंदर, मैं सिर्फ requirehelpers निर्देशिका में फ़ाइलों आईएनजी रहा हूँ। लेकिन मैं इस तरह काम करने के लिए है:

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

वहाँ तो मैं यह करने के लिए जोड़ने के लिए की आवश्यकता नहीं है कि एक पंक्ति बनाने के लिए एक तरीका है? मैं बस इस वास्तविक त्वरित के साथ आया:

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

लेकिन यह दो पंक्तियां और बदसूरत है। यह एक लाइनर बनाने के लिए आपने क्या सीधी चालें की हैं?

+1

डुप्लिकेट का उपयोग कर रहा हूँ कंप्यूटिंग की परेशानी को बचाने करता http://stackoverflow.com/questions/735073/best- रास्ते-से-आवश्यकता-सभी-फाइल-से-निर्देशिका-इन-रूबी - 'Dir ["/ path/to/directory/*। rb"] का उपयोग करें। प्रत्येक {| फ़ाइल | फ़ाइल की आवश्यकता है} ' –

+0

यहां तक ​​कि अच्छे, उस प्रश्न में उल्लिखित requ_all मणि का उपयोग करें। – clacke

उत्तर

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

या गोल्फ के लिए उसे कुछ अतिरिक्त:

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

हाँ, यह बीमार है। धन्यवाद दोस्त। –

+0

मैंने विधि # to_proc के बारे में सोचा नहीं होगा, अच्छा! – severin

+0

मुझे वाइल्डकार्ड को समझने की आवश्यकता होगी ... लेकिन +1 और उस समय के लिए धन्यवाद जब आपने मुझे बचाया है ...: डी – Stefan

0

हाय स्पष्ट तरीका मुझे पता चला है वाइल्ड कार्ड के साथ Dir.glob उपयोग करने के लिए है।

अपने rakefile में निम्नलिखित रखो:

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

यह एक का इलाज काम करना चाहिए।

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

`& विधि (: require_relative) चाल require_relative साथ काम नहीं करेंगे

+2

इसने आवश्यकता का उपयोग करने के बारे में सवाल का जवाब नहीं दिया। – phatmann

3

मैं require_relative पसंद है। मैं:

`require_relative': cannot infer basepath (LoadError) 

लेकिन यह project_root

मैं ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.5.0]

+0

संबंधित: https://bugs.ruby-lang.org/issues/4487 – quinn

0
# helpers.rb 
Dir[__dir__ + '/helpers/*'].each &method(:require) 
संबंधित मुद्दे

 संबंधित मुद्दे