2014-02-25 28 views
0

我是Ruby的新手,我可以找到這個問題上的各種變化的答案,但不是我的問題本身的答案。Ruby,Sinatra,重寫/從一個單獨的文件擴展一個類來添加一個方法

我正在寫一個應用程序,它需要基本的身份驗證的細節,並使用它們來驗證用戶與第三方平臺,因此我需要能夠訪問密碼,以便通過它我也想能夠使用機架認證類

所有我想做的事情是這樣的:

require 'rack/auth/abstract/request' 
require 'rack/auth/basic' 

class AuthRequest < Rack::Auth::Basic::Request < Rack::Auth::AbstractRequest 
    def password 
     credentials[1] 
    end 
end 

如果我使用Request < Auth::AbstractRequest的IDE告訴我,我有undeclare不變,但由於它上面說,如果我完全限定它'錯誤的參數類型真(預期的類)(TypeError)'

我讀了包括this在內的各種文章,但我並不困惑,我認爲這個問題源自於我試圖從這個外部文件擴展一個子類,而不是它的根類。

什麼是正確的方法來做到這一點?

編輯 - 對我的要求更多一些的信息: 我此基礎上需要從西納特拉文檔此樣本。我想對於像provided?basic?的正派的@auth對象,但我不能簡單地做這樣@auth.credentials == ['admin', 'admin']一比較,我需要訪問密碼,這是不是在默認實現

helpers do 

    ... 

    def authorized? 
    @auth ||= Rack::Auth::Basic::Request.new(request.env) 
    @auth.provided? && @auth.basic? && @auth.credentials && @auth.credentials == ['admin', 'admin'] 
    end 

end 
+0

之前試圖覆蓋任何東西,我建議你閱讀有關約[傳承](HTTP的基礎知識:// ruby​​- Ruby中的doc.org/core-2.1.1/doc/syntax/modules_and_classes_rdoc.html#label-Defining+a+class)。你認爲'class AuthRequest toro2k

+0

這就是我上面解釋的 - 我的AuthRequest類應該繼承Request Class。你的鏈接似乎支持這個想法'類MySubclass

回答

0

授予我不你真的明白你期望表達class AuthRequest < Rack::Auth::Basic::Request < Rack::Auth::AbstractRequest的行爲,也許某種多重繼承?這裏

的問題是,作爲​​的Rack::Auth::AbstractRequest一個子類,表達Rack::Auth::Basic::Request < Rack::Auth::AbstractRequest計算結果爲true(見Module#<),這樣你的表達實際上是解釋爲class AuthRequest < true,那是沒有意義的,因此TypeError

如果我把你正在努力實現下面的代碼應該做的正確的:

class AuthRequest < Rack::Auth::Basic::Request 
    def password 
    credentials[1] 
    end 
end 
+0

好吧,我收到的第一個錯誤消息讓我覺得我需要包括整個層次結構 –

相關問題