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

Ruby Gems को समझें: वे कैसे काम करते हैं और वे क्यों मायने रखते हैं

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

आप निश्चित रूप से अपने जेमफाइल में जेम्स जोड़ सकते हैं और वास्तव में यह समझे बिना उनकी उपयोगिता का पूरा लाभ उठा सकते हैं कि वे कैसे काम करते हैं, लेकिन क्या आप कभी उत्सुक हुए हैं कि यह सब कैसे वायर्ड अप हो जाता है?

यहाँ हम रयान बेट्स के CanCan प्राधिकरण जेम पर करीब से नज़र डालेंगे और निम्नलिखित प्रश्नों का उत्तर देंगे (जो, यदि अधिक व्यापक रूप से पूछे जाएं, तो किसी भी जेम पर लागू हो सकते हैं):

  1. CanCan का कोड कहाँ संग्रहीत होता है?

  2. `can?` मेथड कहाँ परिभाषित है?

  3. Rails CanCan के कोड को कब/कहाँ/कैसे लोड करता है?

सबसे पहले, मेरे जेमफाइल में CanCan है और मैं `bundle install` करता हूँ:

# Gemfile gem "cancan", "~> 1.6.10"``` $ bundle install 

Bundler के साथ वास्तव में यह देखना आसान है कि कोई विशेष जेम कहाँ रहता है। बस `bundle show` का उपयोग करें:

$ bundle show cancan /Users/jasonswett/.rvm/gems/ruby-2.0.0-p0/gems/cancan-1.6.10 

यह प्रश्न #1 का ख्याल रखता है। अब `can?` कहाँ परिभाषित है?

$ cd /Users/jasonswett/.rvm/gems/ruby-2.0.0-p0/gems/cancan-1.6.10 $ grep -r 'def can?' * lib/cancan/ability.rb: def can?(action, subject, *extra_args) lib/cancan/controller_additions.rb: def can?(*args) 

ऐसा लगता है कि वास्तव में दो अलग-अलग `can?` फ़ंक्शन हैं। जिसमें हम रुचि रखते हैं वह `lib/cancan/ability.rb` में है।

# lib/cancan/ability.rb def can?(action, subject, *extra_args) match = relevant_rules_for_match(action, subject).detect do |rule| rule.matches_conditions?(action, subject, extra_args) end match ? match.base_behavior : false end 

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

अब जब हम जानते हैं कि जेम का कोड कहां रखा जाता है और इसमें कैसे जाना है, तो Rails को जेम के बारे में कैसे पता चलता है, और यह जेम का कोड कब लोड करता है?

यह Rails इनिशियलाइज़ेशन दस्तावेज़ीकरण के एक निश्चित अनुभाग में शामिल है। यहाँ प्रासंगिक भाग है:

एक मानक Rails एप्लिकेशन में, एक जेमफाइल होता है जो एप्लिकेशन की सभी निर्भरताओं की घोषणा करता है। config/boot.rb ENV['BUNDLE_GEMFILE'] को इस फ़ाइल के स्थान पर सेट करता है। यदि जेमफाइल मौजूद है, तो bundler/setup की आवश्यकता होती है।

यह इनिशियलाइज़ेशन प्रक्रिया में जल्दी होता है: सटीक होने के लिए दूसरा चरण। यह समझ में आता है चूंकि यदि आपका प्रोजेक्ट एक निश्चित जेम पर निर्भर करता है, तो कौन जानता है कि आप इसे कहां संदर्भित कर सकते हैं। इसे जल्द से जल्द लोड करना बेहतर है ताकि इसका कोड कहीं भी उपयोग किया जा सके।


  1. रूबी मैट्रिक्स को समझना: परिभाषा, अनुप्रयोग और उन्हें कैसे बनाएं रूबी मैट्रिक्स को समझना: परिभाषा, अनुप्रयोग और उन्हें कैसे बनाएं

    मैट्रिक्स एक 2D (2-डायमेंशनल) ऐरे है जिसका उपयोग स्प्रेडशीट जैसे डेटा को स्टोर और काम करने के लिए किया जा सकता है। इनका उपयोग किया जा सकता है: टेबल गेम में बोर्ड को दर्शाना (शतरंज, चेकर्स, आदि) आंकड़े और डेटा विश्लेषण प्लॉट्स और ग्राफ़ उत्पन्न करना क्योंकि यह एक शक्तिशाली डेटा संरचना है इसलिए इसका

  1. रूबी में AASM के साथ स्टेट मशीन्स में महारत हासिल करें: एक व्यावहारिक गाइड रूबी में AASM के साथ स्टेट मशीन्स में महारत हासिल करें: एक व्यावहारिक गाइड

    आज आप स्टेट मशीन्स के बारे में सीखेंगे, वे कैसे काम करते हैं और AASM जेम के साथ अपने रूबी प्रोजेक्ट्स में उनका उपयोग कैसे करें। अब: एक ट्रैफिक लाइट की कल्पना करें... यह लाल, हरा या पीला हो सकता है। जब यह रंग बदलता है, तो अगला रंग वर्तमान पर आधारित होता है। मान लें कि यह वह प्रकार है जो नेत्रहीन लोग

  1. रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है रूबी 2.6 में MJIT को समझना: जस्ट-इन-टाइम कंपाइलर प्रदर्शन को कैसे बढ़ाता है

    रूबी का प्रदर्शन संस्करण दर संस्करण बहुत सुधर रहा है… और रूबी विकास टीम रूबी को और भी तेज़ बनाने के लिए हर संभव प्रयास कर रही है! इन प्रयासों में से एक 3×3 प्रोजेक्ट है। लक्ष्य? रूबी 3.0, रूबी 2.0 से 3 गुना तेज़ होगा। इस प्रोजेक्ट का हिस्सा नया MJIT कंपाइलर है, जो इस लेख का विषय है। MJIT समझाया गया