2011-06-13 5 views
0

どうすればこのようにすることができますか?ルビーでカスタムゲッターを再利用する

def token 
    if authorized? 
    return t.token 
    else 
    raise Error('unauthorized!') 
    end 
end 

def secret 
    if authorized? 
    return t.secret 
    else 
    raise Error('unauthorized!') 
    end 
end 

現時点ではあまりにも多くの再利用と同じように感じます。

+3

3行目で 'token'を返しますが、このスコープではトークンはメソッド自体として存在しません。この場合、無限再帰が発生します。 9行目の 'secret 'も同じです。いくつかのコードを省略しましたか?全体のコードを持つことは、私たちが最良の答えを提供するのに役立ちます。 –

+0

@ Jordan:オリジナルの 'end'の欠如を考えれば、スニペットはコンパイルされないだろうと私は思った。 –

答えて

4

トークンまたは秘密のメソッドが呼び出される前に実行されるフィルタを追加します。

before_filter :check_authorization, :only => [ :token, :secret ] 

次にトークンと秘密はすでに:attr_accessorまたはそのような何かで定義されたモデルのプロパティである場合は、トークンを排除することができる

def check_authorization 
    if !authorized? 
     raise DropboxError('User is not authorized') 
    end 
end 

def token 
    @token 
end 

def secret 
    @secret 
end 

、ユーザーが許可されているかどうかを確認するメソッドを追加し、彼らは単純なゲッターであり論理がないので、秘密の方法は全く同じです。