Сейчас у меня есть код, который выглядит следующим образом:Более короткий код, предотвратить дублируется вызов,
def work_with_access_token_or_request_one
if is_valid_access_token?(params[:code])
request_client_with_access_token(params[:code])
else
request_access_token!
end
end
В этом методе я первый чек если код я получаю в Params является действительным. Если нет, прошу.
Моя проблема в том, что сейчас метод get_access_token
является вызывается дважды. Однажды, когда я проверяю, является ли access_token действительным, и в другое время, когда я запрашиваю клиента.
def get_access_token(code)
return Okto.request_access_token_from_code(code)
end
Я должен сделать это, потому что выход get_access_token(code)
возвращается при успешном {access_code: 89283}
или если произошла ошибка {error: "not valid"}
def is_valid_access_token?(code)
result = get_access_token(code)
return result[:access_code]
end
def request_client_with_access_token(code)
result = get_access_token(code)
client = Okto.get_client_from_access_code(result[:acess_code])
end
Как я могу переписать свой код в work_with_access_token_or_request_one
так, что только один раз методом get_access_token
называется? Thanks
Являются ли 'code' и' get_access_token (code) 'логически эквивалентными? Если они тогда, то все, что работает с «кодом», также должно работать, если задано 'get_access_token (code)'. Затем вы можете использовать патч обезьяны в методе 'code.to_access_token', который бы вызывал' get_access_token (self) 'на код и просто« возвращал себя »при вызове маркера доступа. Затем коды могут кэшировать маркер внутри (или вызывающий может вызвать 'to_access_token'), и эти два метода просто скажут« result = code.to_access_token »и не заботятся о том, что им дано. Может быть, уродливый, если все это просто строки и хэши. –
SO читатели в основном взрослые, поэтому вам не нужно смело смотреть на определенные слова и фразы. –