2009-11-25 11 views
5

मैं वर्तमान में सिनात्रा ऐप कुकम्बर के भीतर से एक सहायक विधि को बाहर करने के लिए संघर्ष कर रहा हूं।ककड़ी में सिनात्रा हेल्पर को दबाकर

मैं (कुकीज़) के द्वारा सरल सत्र प्रमाणीकरण के साथ एक सिनात्रा ऐप है और मैं अपने ककड़ी परिदृश्यों के लिए logged_in? सहायक विधि को छोटा द्वारा प्रमाणीकरण के चालू करना चाहते हैं। सत्रों से संबंधित सिनात्रा और ककड़ी के साथ एक समस्या प्रतीत होती है, इसलिए मैंने समस्या के आसपास काम करने के लिए मोचा का उपयोग करने के बारे में सोचा।

हालांकि मुझे नहीं पता कि मैं Sinatra::Application उदाहरण Given के भीतर से कैसे उपयोग कर सकता हूं- विधि को बाहर निकालने के लिए अवरोधित करें।

+0

इनमें से किसी के साथ पूरी तरह से अपरिचित होने के नाते, मैं बस आपको अपने प्रश्न शीर्षक पर बधाई देता हूं। – spender

+0

क्या मुझे इच्छित इरादे से बचने के लिए शीर्षक बदलना चाहिए? – Lennart

उत्तर

2

आप Sinatra::Application.class_eval

संपादित का उपयोग करके सही संदर्भ प्राप्त कर सकते हैं: पूरी जानकारी के लिए मूल रूप से पोस्ट का जवाब देखें।

+0

क्षमा करें, मुझे लगता है कि आपने मेरे प्रश्न को गलत समझा। लॉग_इन? विधि पहले से ही sinatra ऐप के भीतर काम करती है, लेकिन मैं इसे एकीकरण परीक्षण के लिए बाहर करना चाहता हूं (कुछ वर्कफ़्लो का परीक्षण करने के लिए कोई प्रमाणीकरण नहीं)। मुख्य समस्या यह है कि मुझे नहीं पता कि ककड़ी चरणों के भीतर से मेरे आवेदन के उदाहरण को कैसे पहुंचाया जाए। – Lennart

+0

मैं देखता हूं। मुझे लगता है कि अब मैं समझता हूँ। शायद सिनात्रा :: Application.class_eval {} –

+0

yup के साथ कुछ, यह काम करता है। धन्यवाद, मैं आपको उस संकेत के लिए प्रोप कैसे दे सकता हूं? मैंने जो कुछ किया है उसे स्पष्ट करने के लिए मैं अपने स्वयं के प्रश्न का उत्तर दूंगा। – Lennart

3

ऐसा लगता है जैसे मैं सीधे एक Before do ... end -block

तो मैं एक hooks.rbfeatures/support/ फ़ाइल मेरी logged_in? और current_user विधि को अधिलेखित करने में रखा के साथ समाप्त हो गया भीतर मेरे प्रमाणीकरण तंत्र ओवरराइड करने के लिए की जरूरत है।

Before do 
    MySinatraApplicationClass.class_eval do 
    helpers do 
     def logged_in? 
     return true 
     end 
     def current_user 
     # This returns a certain Username usually stored 
     # in the session, returning it like 
     # that prohibits different user logins, but for 
     # now this is enough for me 
     "Walter" 
     end 
    end 
    end 
end 

केवल एक चीज मैं की देखभाल करने के लिए किया था, कि आवेदन के भीतर कोई अन्य कार्रवाई सीधे session से पढ़ा बल्कि उन सहायकों का उपयोग करें।

अफसोस की बात है कि मुझे लगता है कि ककड़ी के माध्यम से सत्र आधारित सिनात्रा अनुप्रयोगों को संभालने का यह तरीका पहले से कहीं और वर्णित है और मैंने सोचा कि मेरी समस्या अलग थी