मैं थोड़ी देर के लिए यह बहुत ही समस्या पर अब काम कर रहा है। मैंने ऐसा करने के लिए कई अलग-अलग तरीकों की कोशिश की है और इस पर बहुत से लोगों से सलाह मांगी है। मुझे अभी भी यकीन नहीं है कि मेरे पास क्या है 'सही तरीका' है, लेकिन यह अच्छी तरह से काम करता है और करना आसान है।
मेरे मामले में
, मैं विशेष रूप से विन्यास को देख रहा हूँ और विन्यास प्लगइन्स में लाने, लेकिन सिद्धांत एक ही है, भले ही मेरा के लिए शब्दावली cnfiguration लिए विशिष्ट है।
एक बहुत ही बुनियादी स्तर पर, मैं इसे में कुछ भी नहीं के साथ एक विन्यास वर्ग है - यह खाली है। मैं भी एक विन्यस्त विधि है जो विन्यास वर्ग वापस आती है और आप उस पर तरीकों कॉल की सुविधा देता है है:
# config.rb
class Configuration
end
class MySystem
def self.configure
@config ||= Configuration.new
yield(@config) if block_given?
@config
end
Dir.glob("plugins/**/*.rb").each{|f| require f}
end
MySystem.configure do |config|
config.some_method
config.some_value = "whatever"
config.test = "that thing"
end
puts "some value is: #{MySystem.configure.some_value}"
puts "test #{MySystem.configure.test}"
some_method और विन्यास वर्ग पर some_value प्राप्त करने के लिए, मैं प्लग-इन मॉड्यूल के माध्यम से विन्यास वस्तु का विस्तार है:
# plugins/myconfig.rb
module MyConfiguration
attr_accessor :some_value
def some_method
puts "do stuff, here"
end
end
class Configuration
include MyConfiguration
end
और
# plugins/another.rb
module AnotherConfiguration
attr_accessor :test
end
class Configuration
include AnotherConfiguration
end
प्लगइन्स को लोड करने के लिए, आप केवल कोड में से एक की जरूरत है एक विशिष्ट फ़ोल्डर में .rb फ़ाइलों के लिए देखने के लिए और 'की आवश्यकता होती है' उन्हें । यह कोड तब तक कहीं भी रह सकता है जब तक यह फ़ाइल चलाया जाता है जब फ़ाइल को इसमें लोड किया जाता है ... मैं शायद इसे माइस्सिस्टम के लिए कक्षा परिभाषा में रखूंगा या ऐसा कुछ शुरू करने के लिए। समझ में आता है तो शायद इसे कहीं और ले जाएं।
Dir.glob("plugins/**/*.rb").each{|f| require f}
रन config.rb और आप उत्पादन कि इस तरह दिखता है मिल जाएगा:
do stuff, here
some value is: whatever
test that thing
वहाँ इस के विभिन्न भागों लागू करने के लिए विकल्पों में से एक बहुत कुछ कर रहे हैं, लेकिन यह आप नीचे मिलना चाहिए पथ।
पैडेंटिक होने के लिए खेद है, लेकिन रेल फ्रेमवर्क से जुड़े प्लगइन्स नहीं हैं, न कि रूबी के साथ? –
रेल फ्रेमवर्क में प्लगइन हैं, लेकिन मैं रूबी एप्लिकेशन के संदर्भ में प्लगइन सिस्टम बनाने के बारे में बात कर रहा हूं। तो कहें कि आपके पास एक कक्षा है जो एक टेक्स्ट फ़ाइल पढ़ती है। मैं एक प्लगइन सिस्टम बनाना चाहता हूं जो आपको एक प्लगइन क्लास लिखने देता है जो पाठक वर्ग में हुक करता है ताकि आप कह सकें, एक अपकेस प्लगइन या 1337 प्लगइन जो आउटपुट को संशोधित करता है। यह एक मूल उदाहरण है, लेकिन यह आपको एक विचार देना चाहिए। –
रूबी रेल की तुलना में बहुत अधिक है, भले ही रेल वहां सबसे प्रसिद्ध ढांचे हैं। कह रही है कि प्लगइन रेल के साथ जुड़े हुए हैं जैसे कि गैसोलीन स्पोर्ट्स कारों से जुड़ा हुआ है। गैर-मोटर वाहन चीजों सहित गैसोलीन का उपयोग करने वाली अन्य चीजों की एक दुनिया है। –