Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

अपने कोड को रूबी जेम में कैसे बदलें: चरण-दर-चरण मार्गदर्शिका

क्या आपका गिटहब कंट्रीब्यूशन चार्ट ठोस ग्रे है? आप इस पर काम करने के लिए एक ओपन सोर्स प्रोजेक्ट का उपयोग कर सकते हैं। लेकिन आपको इसे स्क्रैच से शुरू करने की ज़रूरत नहीं है। एक उपयोगी साइड प्रोजेक्ट बनाने का सबसे आसान तरीका है इसे उस ऐप से निकालना जिसे आप पहले से बना रहे हैं। इसी तरह रेल्स का जन्म हुआ था!

लेकिन आप कैसे जानते हैं कि क्या निकालना है? और अपने वर्कफ्लो को नष्ट किए बिना इसे जेम में कैसे बदलें?

वह कोड ढूंढें जिसे आप निकालना चाहते हैं।

आपके ऐप में कहीं गहरे में कुछ कोड है जो वहां नहीं होना चाहिए। ऐसा कोड जिसे अपना काम करने के लिए आपके ऐप की ज़रूरत नहीं है। वह कहां है?

कभी-कभी, आपको बस अनुमान लगाना होगा। लेकिन मैं अक्सर उन्हीं कुछ जगहों पर निकालने योग्य कोड ढूंढता हूं:

  • वैलिडेशन्स

    क्या आपने अपने एट्रिब्यूट्स के लिए कोई कस्टम वैलिडेशन लिखे हैं? वे बेहतरीन जेम्स बन सकते हैं।

  • रेल्स में आपके द्वारा किए गए परिवर्तन

    कभी-कभी, आपको टेस्ट्स में कमिट हुक काम करने के लिए या ब्लैंक एट्रिब्यूट्स को डेटाबेस में NULL में बदलने के लिए रेल्स के साथ छेड़छाड़ करनी पड़ती है। जब भी मैंने इस तरह के लॉजिक को जेम में स्थानांतरित किया है, यह अधिक स्थिर और समझने में आसान हो गया है।

  • नॉन-एक्टिवरिकॉर्ड मॉडल्स

    क्या आप इतना ईमेल एड्रेस या फोन नंबर पार्सिंग करते हैं कि आपने इसे अपनी खुद की क्लास में स्थानांतरित कर दिया? ये क्लासेस अक्सर अन्य ऐप्स में उपयोगी होती हैं, और इन्हें जेम में बदलना काफी आसान होता है।

  • मॉक ऑब्जेक्ट्स और कस्टम एसर्शन

    आप कस्टम एसर्शन का उपयोग करके अधिक पठनीय टेस्ट लिख सकते हैं। और एक बार जब आपके पास किसी लाइब्रेरी या पैटर्न के लिए कुछ अच्छे कस्टम एसर्शन लिखे जाते हैं, तो वे उस लाइब्रेरी या पैटर्न का उपयोग करने वाले किसी अन्य व्यक्ति के लिए मददगार होते हैं।

आपको बड़ा सोचने की ज़रूरत नहीं है। मेरे कुछ पसंदीदा जेम्स सिर्फ एक फाइल हैं!

और अगर आप अभी भी तय नहीं कर पा रहे हैं कि क्या निकालना है, तो प्रेरणा के लिए RubyToolbox पर कैटेगरी लिस्ट ब्राउज़ करें।

अपने कोड को जेम-जैसी डायरेक्टरी में रखें

एक बार जब आप जान जाते हैं कि किस कोड को जेम में बदलना है, तो उस कोड को इधर-उधर घुमाएं ताकि वह आपके ऐप के अंदर जेम-जैसी संरचना में फिट हो जाए।

रेल्स ऐप्स में, मैं lib/ को जेम स्टेजिंग एरिया के रूप में उपयोग करता हूं। lib/ वह जगह है जहां मैं कोड डालता हूं जिसमें अपना खुद का जेम बनने की क्षमता होती है। इसलिए, यदि आप "json_api_client" नामक एक जेम बना रहे हैं, तो आपके रेल्स ऐप की lib/ डायरेक्टरी इस तरह दिख सकती है:

... my_rails_app/lib/json_api_client.rb
my_rails_app/lib/json_api_client/associations.rb
my_rails_app/lib/json_api_client/connection.rb
...

अधिकांश जेम्स में lib/ के तहत जेम के नाम पर एक फाइल होती है (lib/json_api_client.rb), और उसी नाम की डायरेक्टरी में कई फाइलें होती हैं (सब कुछ lib/json_api_client/ के तहत)। इसलिए, वही संरचना लें और इसे अपने रेल्स ऐप के अंदर मिलाएं। इससे बाद में कोड को जेम में स्थानांतरित करना बहुत आसान हो जाएगा।

अगर आप इस बारे में भ्रमित हैं कि जेम लेआउट कैसा दिखता है, तो गिटहब पर अपने कुछ पसंदीदा जेम्स के सोर्स को देखें। आप पैटर्न को बहुत जल्दी समझ जाएंगे।

टेस्ट्स का क्या?

मैं lib/ की संरचना को test/unit/ के अंदर फॉलो करता था:

... my_rails_app/test/unit/json_api_client_test.rb
my_rails_app/test/unit/json_api_client/associations_test.rb
my_rails_app/test/unit/json_api_client/connection_test.rb
...

यह ठीक काम करता था, भले ही मॉडल्स और लाइब्रेरीज को एक ही फोल्डर में रखना थोड़ा गड़बड़ हो जाता था।

अब, हालांकि, रेल्स test/unit/ के बजाय test/models/ का उपयोग करता है। और अपने lib/ टेस्ट्स को test/models/ के अंदर स्टोर करना बिल्कुल भी समझ में नहीं आता। मैंने अभी तक इसके लिए कोई कन्वेंशन तय नहीं किया है। क्या आपके पास कोई सुझाव है?

निर्भरताओं को तोड़ें

एक बार जब आपका कोड जेम के अंदर होता है, तो यह आपके ऐप पर निर्भर नहीं रह पाएगा। इसका मतलब है कि आपको lib/ में रखे गए कोड को देखना होगा, और उन जगहों को ढूंढना होगा जहां यह आपके ऐप के लिए विशिष्ट क्लासेस, ऑब्जेक्ट्स, या व्यवहार पर निर्भर करता है।

यदि आपको इनमें से कोई निर्भरता मिलती है, तो आपको उन्हें तोड़ना होगा। निर्भरताओं को कैसे तोड़ें (या इंजेक्ट करें) इस पर बहुत सारे बेहतरीन लेखन हैं, इसलिए मैं अभी उसमें नहीं जाऊंगा।

एक जेम बनाएं

मैं अपने जेम्स बनाने के लिए bundle gem का उपयोग करता हूं। विशेष रूप से, bulk_cache_fetcher नामक जेम बनाने के लिए:

bundle gem bulk_cache_fetcher -t minitest

-t फ्लैग जेम के Rakefile में कुछ टेस्ट हेल्पर फाइल्स और टेस्ट टास्क जोड़ता है।

अब आपको कुछ हाउसकीपिंग करनी होगी, जैसे .gemspec भरना, README लिखना, LICENSE चुनना, वह सब सामान।

और फिर, चूंकि आपके पास पहले से ही आपके रेल्स ऐप के lib/ फोल्डर में आपके जेम का कोड है, आप बस उस कोड और उसके टेस्ट्स को अपने नए जेम के lib/ और test/ फोल्डर्स में ले जा सकते हैं।

बहुत बार, ऐसी चीजें होंगी जो आपसे छूट गईं या जिनके बारे में आप भूल गए, या कोड जो आपके ऐप के बारे में ऐसी चीजें मानता है जो जेम के अंदर सच नहीं हैं। इसलिए, आगे बढ़ने से पहले, अपने जेम में स्थानांतरित किए गए टेस्ट्स चलाएं, और सुनिश्चित करें कि वे सभी पास होते हैं।

अपने ऐप में अपने नए जेम का उपयोग करें

अब आपके पास एक जेम है, आप इसका उपयोग करना चाहते हैं, है ना? लेकिन अपने रेल्स ऐप के अंदर अपने जेम में परिवर्तनों का परीक्षण करना जल्दी से कष्टप्रद हो सकता है। आपको करना होगा:

  1. अपने जेम में परिवर्तन करें
  2. जेम बनाएं
  3. अपने सिस्टम से जेम के सभी निशान हटाएं, या संस्करण अपडेट करें
  4. जेम इंस्टॉल करें
  5. अपना सर्वर रीस्टार्ट करें

यह बहुत भयानक है। सौभाग्य से, बंडलर आपको एक आसान तरीका देता है। मान लें कि आपने अपना जेम ~/Source/bulk_cache_fetcher में बनाया है। जब आप जेम परिवर्तनों का परीक्षण कर रहे हों, तो आप अपने रेल्स ऐप के Gemfile में यह लिख सकते हैं:

Gemfile
gem "bulk_cache_fetcher", path: "~/Source/bulk_cache_fetcher"

अब, bundle install चलाएं, और आप अपने जेम में परिवर्तन कर पाएंगे जैसे कि वह कोड अभी भी आपके ऐप के lib/ फोल्डर में रहता हो।

एक आखिरी बात: अपने कोड को चेक इन करने से पहले path: को हटाना सुनिश्चित करें! वह पथ अन्य सिस्टम पर सही जगह पर इंगित नहीं कर सकता है, इसलिए संभावना है कि यह आपकी मशीन के अलावा कहीं भी काम नहीं करेगा।

बनाएं, शिप करें, और आनंद लें!

एक बार जब आपका जेम तैयार हो जाता है, तो आप इसे दुनिया में भेज सकते हैं।

इसलिए, यदि आपने अभी तक नहीं किया है तो RubyGems पर एक अकाउंट के लिए साइन अप करें, अपने परिवर्तनों को चेक इन करें, और rake release चलाएं। बधाई हो, अब आप एक जेम लेखक हैं! और एक बार जब आप उस जेम को गिटहब पर पुश कर देते हैं, तो आपको दिन के लिए अपना अच्छा हरा वर्ग मिल जाएगा।

क्या आपके अपने ऐप्स के कुछ हिस्से ऐसे लगते हैं जिन्हें निकाला जा सकता है? कुछ ऐसा जो आपको लगता है कि एक अच्छा जेम बना सकता है? मुझे इसके बारे में सुनना अच्छा लगेगा - बस नीचे एक कमेंट छोड़ दें।

और अगर आप रूबी जेम्स बनाने, प्रबंधित करने और बनाए रखने के बारे में बहुत कुछ सीखना चाहते हैं, मैं ब्रैंडन हिल्कर्ट की "Build a Ruby Gem" की अत्यधिक अनुशंसा करता हूं। उसकी किताब जिस प्रक्रिया का पालन करती है वह इस प्रक्रिया के बहुत करीब है, और यह बहुत कुछ कवर करती है।

  1. अपने रूबी कोड को उन्नत करें: क्लीनर OOP डिज़ाइन के लिए सामंजस्य और कपलिंग में महारत हासिल करें अपने रूबी कोड को उन्नत करें: क्लीनर OOP डिज़ाइन के लिए सामंजस्य और कपलिंग में महारत हासिल करें

    सामंजस्य (Cohesion) और कपलिंग (Coupling) दो सबसे महत्वपूर्ण ऑब्जेक्ट-ओरिएंटेड सिद्धांत हैं। सामंजस्य एक क्लास के अंदर सभी मेथड्स के बीच संबंध के बारे में है। क्या वे इंस्टेंस वेरिएबल्स और पैरामीटर्स के उसी सेट का उपयोग कर रहे हैं, सभी एक ही लक्ष्य की ओर मिलकर काम कर रहे हैं? या हर मेथड एक-दूसरे से अ

  1. रूबी में फंक्शनल प्रोग्रामिंग में महारत: एक पूर्ण गाइड रूबी में फंक्शनल प्रोग्रामिंग में महारत: एक पूर्ण गाइड

    शायद आपने अभी फंक्शनल प्रोग्रामिंग के बारे में सुना है और आपके कुछ सवाल हैं। जैसे… फंक्शनल प्रोग्रामिंग वास्तव में क्या है? यह ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग से कैसे तुलना करता है? क्या आपको रूबी में फंक्शनल प्रोग्रामिंग का उपयोग करना चाहिए? मैं इन सवालों का जवाब दूंगा ताकि आप बेहतर ढंग से समझ सके

  1. रूबी में स्टैटिक एनालिसिस में महारत: पार्सर जेम के साथ मेथड्स और पैरामीटर्स निकालें रूबी में स्टैटिक एनालिसिस में महारत: पार्सर जेम के साथ मेथड्स और पैरामीटर्स निकालें

    मान लीजिए कि आप अपने सोर्स कोड को पार्स करके अपने सभी मेथड्स ढूंढना चाहते हैं, वे कहां परिभाषित हैं और वे कौन से तर्क लेते हैं। आप यह कैसे कर सकते हैं? आपका पहला विचार इसके लिए एक रेगेक्स लिखना हो सकता है… लेकिन क्या कोई बेहतर तरीका है? हाँ! स्टैटिक एनालिसिस एक तकनीक है जिसका उपयोग आप तब कर सकते है