Não tenho certeza se vale a pena mencionar, mas fiquei preso nisso hoje ao analisar as respostas dos métodos create_topic e edit_post da gem.
create_topic chama o método post. Esse método retorna response.body ou levanta um DiscourseApi::Error:
def post(path, params = {})
response = request(:post, path, params)
case response.status
when 200, 201, 204
response.body
else
raise DiscourseApi::Error, response.body
end
end
edit_post chama o método put. Esse método retorna um objeto Faraday::Env:
#<struct Faraday::Env method=:put, request_body="post%5Braw%5D=It%27s+a+minor+thing%2C+but+it+comes+up+a+lot.+I%27ll+do+some+tests....
Para aplicativos que usam a gem, isso significa que as respostas retornadas das requisições post e put precisam ser tratadas de forma diferente. Para lidar com uma requisição put, o aplicativo que está fazendo a requisição tem que fazer algo como o que a gem de API está fazendo para requisições post:
def update_topic_from_note(markdown:, post_id:)
response = @client.edit_post(post_id, markdown)
case response.status
when 200, 201, 204
response.body
else
# ...
Não é o fim do mundo, mas foi surpreendente. Sei que é difícil fazer alterações no código da API.