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

आपका पहला रूबी रत्न निकालने के लिए एक गाइड

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

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

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

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

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

  • सत्यापन

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

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

    डेटाबेस में 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/ के अंतर्गत सब कुछ) ) तो, वही संरचना लें और इसे अपने रेल ऐप के अंदर मिलाएं। इससे बाद में कोड को मणि में स्थानांतरित करना बहुत आसान हो जाएगा।

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

परीक्षणों के बारे में क्या?

मैं lib/ follow का पालन करता था 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/models/ का उपयोग करती है test/unit/ . के बजाय . और आपका lib/ स्टोर कर रहा है test/models/ . के अंदर परीक्षण पूरी तरह से समझ में नहीं आता है। मैंने वास्तव में अभी तक इसके लिए एक सम्मेलन पर फैसला नहीं किया है। क्या आपके पास कोई सुझाव है?

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

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

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

एक रत्न बनाएं

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

bundle gem bulk_cache_fetcher -t minitest

-t कुछ परीक्षण सहायक फ़ाइलें और परीक्षण कार्यों को रत्न के Rakefile . में जोड़ता है ।

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

और फिर, चूंकि आपके पास पहले से ही आपके रत्न का कोड आपके रेल ऐप के 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 चलाएँ। . बधाई हो, अब आप एक रत्न लेखक हैं! और एक बार जब आप उस मणि को जीथब में धकेल देते हैं, तो आपको दिन के लिए अपना अच्छा हरा वर्ग मिल जाएगा।

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

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


  1. मौलिक OOP सिद्धांतों के साथ अपने रूबी कोड को नाटकीय रूप से कैसे सुधारें

    दो सबसे महत्वपूर्ण वस्तु-उन्मुख सिद्धांत सामंजस्य और युग्मन हैं। सामंजस्य एक वर्ग के अंदर सभी विधियों के बीच संबंध के बारे में है। क्या वे आवृत्ति चर और पैरामीटर के समान सेट का उपयोग कर रहे हैं, सभी एक ही लक्ष्य की दिशा में एक साथ काम कर रहे हैं ? या क्या हर तरीका एक दूसरे से अलग महसूस करता है? यु

  1. रूबी में कार्यात्मक प्रोग्रामिंग (पूर्ण गाइड)

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

  1. रूबी में स्थैतिक विश्लेषण

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