Eu tenho um grande hash com matrizes e hashes aninhados. Gostaria simplesmente de imprimi-lo para que fique 'legível' para o usuário.
Eu gostaria que fosse algo como to_yaml - isso é bem legível - mas ainda parece muito tecnológico.
Por fim, serão os usuários finais que precisam ler esses blocos de dados para que sejam formatados de maneira limpa.
Alguma sugestão?
ruby
ruby-on-rails-3
Adam O'Connor
fonte
fonte
Respostas:
Use
pp
se você precisar de uma solução integrada e apenas desejar quebras de linha razoáveis.Use awesome_print se você pode instalar uma jóia. (Dependendo dos usuários, convém usar a
index:false
opção para desativar a exibição dos índices da matriz.)fonte
Se você possui JSON, eu recomendo,
JSON.pretty_generate(hash)
porque é mais simples que awesome_print , fica ótimo em umapre
tag e facilita a cópia de uma página da web. (Veja também: Como posso "formatar" minha saída JSON em Ruby on Rails? )fonte
puts JSON.pretty_generate(hash)
Outra solução que funciona melhor para mim do que
pp
ouawesome_print
:fonte
Pry::ColorPrinter.pp(obj)
grava no padrão, mas pode usar parâmetros adicionais, incluindo o destino. ComoPry::ColorPrinter.pp(obj, a_logger)
Se você não possui nenhuma ação sofisticada de gemas, mas possui JSON, esta linha de CLI funcionará em um hash:
puts JSON.pretty_generate(my_hash).gsub(":", " =>")
fonte
Use as respostas acima se estiver imprimindo para os usuários.
Se você quiser imprimi-lo apenas no console, sugiro usar a alavanca de alavanca em vez do irb. Além da impressão bonita, o alavanca também possui muitos outros recursos (confira o railscast abaixo)
E verifique este railscast:
http://railscasts.com/episodes/280-pry-with-rails
fonte
Fácil de fazer com o json, se você confiar que suas chaves são saudáveis:
fonte
Usando o Pry, você só precisa adicionar o seguinte código ao seu ~ / .pryrc:
fonte
De todas as gemas que tentei, a
show_data
gem funcionou melhor para mim, agora a uso extensivamente para registrar hashes de params no Rails praticamente o tempo todofonte
Para hashes aninhados grandes, esse script pode ser útil para você. Ele imprime um hash aninhado em uma boa sintaxe semelhante a python, com apenas recuos para facilitar a cópia.
Exemplo de uso:
O valor retornado é a contagem (3) de todos os valores de nível final do hash aninhado.
fonte
Aqui está outra abordagem usando json e rouge:
(analisa a resposta de, por exemplo
RestClient
)fonte
No Rails
Se você precisar
inspect
nos objetos no Hashinspect
método em seus objetos como deveria... então isso funciona muito bem! (E fica melhor, quanto maior e mais aninhado for o objeto Hash.)
Por exemplo:
pretty_inspect
vem do PrettyPrint , que os trilhos incluem por padrão. Portanto, não há necessidade de gemas nem conversão para JSON.Não nos trilhos
Se você não está no Rails ou se o acima falhar por algum motivo, tente usar
require "pp"
primeiro. Por exemplo:Um exemplo completo
Big ol'
pretty_inspect
ed exemplo Hash do meu projeto com o texto específico do projeto de meus objetos inspecionados editados:fonte
Em Rails, matrizes e hashes no Ruby possuem funções to_json internas. Eu usaria JSON apenas porque é muito legível em um navegador da web, por exemplo, Google Chrome.
Dito isto, se você está preocupado com a aparência muito "tecnológica", provavelmente deve escrever sua própria função que substitui os chavetas e chavetas nos seus hashes e matrizes por espaços em branco e outros caracteres.
Procure a função gsub para uma maneira muito boa de fazer isso. Continue brincando com diferentes personagens e diferentes quantidades de espaço em branco até encontrar algo que pareça atraente. http://ruby-doc.org/core-1.9.3/String.html#method-i-gsub
fonte
{"programming_language":{"ruby":{},"python":{}}}