Есть ли способ реорганизовать это в Elixir, чтобы сделать его более читаемым?Как избежать вложенных операторов if в Elixir?
def validate(params) do
Repo.start_link
if validate_oauth_params(params) === true do
oauth_client = Repo.get_by(OauthClient, random_id: params["client_id"], secret: params["secret"])
if oauth_client != nil do
allowed_grant_types = Poison.Parser.parse!(oauth_client.allowed_grant_types)
if Map.has_key?(allowed_grant_types, params["grant_type"]) do
case params["grant_type"] do
"password" ->
process_password_grant(params, oauth_client)
"refresh_token" ->
process_refresh_token_grant(params["refresh_token"], oauth_client)
"client_credentials" ->
process_client_credentials_grant(oauth_client)
nil ->
%{message: "Invalid oauth credentials", code: 400}
end
end
else
%{message: "Invalid oauth credentials", code: 400}
end
else
%{message: "Invalid oauth credentials", code: 400}
end
end
Что это за эликсир, потому что этот код выглядит как PHP. Я этого не писал.
Разложить код на подфункции. У меня нет времени прямо сейчас, чтобы переписать этот код, но отрисуйте самую внутреннюю 'if' в отдельную функцию и, возможно, аналогично с другим' if''s –
, ваш разработчик должен принять это замечательное руководство по началу работы, понять по крайней мере, ключевые моменты: http://elixir-lang.org/getting-started/introduction.html – webdeb
Похоже, что этот вопрос будет больше дома на бирже обзора кода –