web-dev-qa-db-fra.com

Formatage de la jolie empreinte de Ruby

Est-il possible de changer la largeur de prettyprint (require 'pp') utilise lors du formatage de la sortie? Par exemple:

"mooth"=>["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"]
"morth"=>["forth",
 "mirth",
 "month",
 "mooth",
 "morph",
 "mouth",
 "mowth",
 "north",
 "worth"]

Le premier tableau est imprimé en ligne car il tient dans la largeur de colonne que prettyprint autorise (79 caractères) ... le second est divisé en plusieurs lignes, car il ne le fait pas. Mais je ne trouve aucune méthode pour modifier la colonne sur laquelle ce comportement démarre.

pp dépend de PrettyPrint (qui permet d'autoriser différentes largeurs pour le tampon). Existe-t-il un moyen de modifier la largeur de colonne par défaut pour pp, sans la réécrire à partir de zéro (accéder directement à PrettyPrint)?

Sinon, existe-t-il un Ruby gem qui fournit cette fonctionnalité?

43
Myrddin Emrys
#!/usr/bin/Ruby1.8

require 'pp'
mooth = [
  "booth", "month", "mooch", "morth",
  "mouth", "mowth", "sooth", "tooth"
]
PP.pp(mooth, $>, 40)
# => ["booth",
# =>  "month",
# =>  "mooch",
# =>  "morth",
# =>  "mouth",
# =>  "mowth",
# =>  "sooth",
# =>  "tooth"]
PP.pp(mooth, $>, 79)
# => ["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"]

Pour modifier la valeur par défaut avec un patch singe:

#!/usr/bin/Ruby1.8

require 'pp'

class PP
  class << self
    alias_method :old_pp, :pp
    def pp(obj, out = $>, width = 40)
      old_pp(obj, out, width)
    end
  end
end

mooth = ["booth", "month", "mooch", "morth", "mouth", "mowth", "sooth", "tooth"]
pp(mooth)
# => ["booth",
# =>  "month",
# =>  "mooch",
# =>  "morth",
# =>  "mouth",
# =>  "mowth",
# =>  "sooth",
# =>  "tooth"]

Ces méthodes fonctionnent également en IRM 1.9.3

55
Wayne Conrad

Trouvé "ap" aka "Awesome_Print" également utile de git-repo

Code utilisé pour tester pp et ap:

require 'pp'
require 'ap' #requires gem install awesome_print 

data = [false, 42, %w{fourty two}, {:now => Time.now, :class => Time.now.class, :distance => 42e42}]
puts "Data displayed using pp command"
pp data

puts "Data displayed using ap command"
ap data

O/P de pp vs ap:

Data displayed using pp command
[false,
 42,
 ["fourty", "two"],
 {:now=>2015-09-29 22:39:13 +0800, :class=>Time, :distance=>4.2e+43}]

Data displayed using ap command
[
    [0] false,
    [1] 42,
    [2] [
        [0] "fourty",
        [1] "two"
    ],
    [3] {
             :now => 2015-09-29 22:39:13 +0800,
           :class => Time < Object,
        :distance => 4.2e+43
    }
]

Référence:

5
Abhijeet