Se você já usou app
o do rails console
, você deve saber que ele permite que você faça solicitações ao seu aplicativo da mesma forma que o seu navegador faria.
Por exemplo, acessar a página inicial é tão fácil quanto [1]:
app.get root_path
O básico
Agora, você pode até ver o corpo da resposta com app.response.body
. Mas e se a resposta se tornar muito grande para ser facilmente visualizada em seu terminal, ou se incluir alguma tag html? A leitura do console pode ser impossível.
Para aliviar sua dor, você pode definir um método que escreveria a resposta em um arquivo:
def write_response file_path = nil
file_path ||= "#{Rails.root}/tmp/response.#{response_type}"
File.open( file_path, 'w' ) { |file| file.write app.response.body }
end
A partir daqui, você só precisa abrir seu navegador para aquele arquivo e será como se você tivesse feito isso de verdade.
Não o defina sempre!
Não se esqueça de que você pode salvar métodos em seu shell! Adicionar as linhas acima ao seu .pryrc
permitirá que você acesse esse método sempre que iniciar o rails console
.
Indo além
É claro que, para páginas normais, isso não é de muito interesse, mas se seu aplicativo tiver uma API e você precisar se registrar aqui para emitir solicitações, você pode definir algo como o seguinte:
class ApiHelper
# give access to named routes
include Rails.application.routes.url_helpers
# if you login to your api via a token
attr_accessor :token
attr_reader :app
# be sure to share the same session of app!
def initialize(app)
@app = app
end
# login a user
def log user, password
@app.post api_v1_login_path, {
user: {
login: user.login,
password: password,
}
}
@token = JSON.parse(@app.response.body)["data"]["authentication_token"]
end
# write server response to file
def write_response file_path = nil
# return if no request has been made
return "No response from app... Did you issue one?" unless @app.response
# get response type (html, json, ...)
response_type = @app.response.content_type.to_s[/w+/(w+)/, 1]
# if no file_path has been supplied, write it to tmp
file_path ||= "#{Rails.root}/tmp/response.#{response_type}"
File.open( file_path, 'w' ) { |file| file.write @app.response.body }
# be nice and print the link pointing to the file
"file://#{file_path}"
end
Para usá-lo:
# instanciate a new ApiHelper
api = ApiHelper.new app
# log a user
api.log User.first, 'password'
# write response to a file readable by your browser
api.write_response
#=> "file:///home/coder/rails/project/tmp/response.json"
- Para acessar rotas nomeadas, você deve
include Rails.application.routes.url_helpers