Class: Labelizor
- Inherits:
-
Object
- Object
- Labelizor
- Defined in:
- lib/clir/Labelizor.rb
Overview
Pour simplifier l’affichage de table à la console.
@usage
t = Labelizor.new(<params>)
t.w "<label>", "<valeur>", <options>
...
t.display # puts
NOTES
=====
Il y a des options très pratiques comme la propriété :if qui
permet de n'écrire la ligne que si la condition est vraie. Ça
permet de ne pas avoir d'identation dans la définition de la
table.
Au lieu de :
t.w "Mon label", "Ma valeur"
if cest_vrai
t.w "Autre label", "Autre valeur"
end
… on utilisera :
t.w "Mon label", "Ma valeur"
t.w "Autre label", "Autre valeur", if:cest_vrai
Instance Attribute Summary collapse
-
#config ⇒ Object
readonly
Returns the value of attribute config.
-
#lines ⇒ Object
readonly
Returns the value of attribute lines.
Instance Method Summary collapse
- #add_line(dline) ⇒ Object
- #defaultize_config(config) ⇒ Object
- #delimitor_char ⇒ Object
- #delimitor_color ⇒ Object
- #delimitor_size(value = nil) ⇒ Object
-
#display ⇒ Object
(also: #flush)
Méthode pour afficher la table.
-
#formate_value(val, params) ⇒ Object
Formater la valeur en fonction des paramètres.
- #indent(params = {}) ⇒ Object
-
#initialize(params = nil) ⇒ Labelizor
constructor
A new instance of Labelizor.
-
#label_width ⇒ Object
Calcul de la longueur du label.
- #reset ⇒ Object
- #selectable? ⇒ Boolean
-
#w(label, value = nil, params = nil) ⇒ Object
(also: #<<)
Pour écrire dans la table.
- #wait_for_item_chosen ⇒ Object
Constructor Details
#initialize(params = nil) ⇒ Labelizor
Returns a new instance of Labelizor.
57 58 59 60 |
# File 'lib/clir/Labelizor.rb', line 57 def initialize(params = nil) defaultize_config(params) reset end |
Instance Attribute Details
#config ⇒ Object (readonly)
Returns the value of attribute config.
37 38 39 |
# File 'lib/clir/Labelizor.rb', line 37 def config @config end |
#lines ⇒ Object (readonly)
Returns the value of attribute lines.
36 37 38 |
# File 'lib/clir/Labelizor.rb', line 36 def lines @lines end |
Instance Method Details
#add_line(dline) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/clir/Labelizor.rb', line 114 def add_line(dline) # # Si c'est une table "sélectionnable", il faut ajouter des # index pour choisir la valeur # if selectable? @values << dline[1].freeze dline[0] = "#{@values.count.to_s.rjust(3)}. #{dline[0]}" end # # Ajout de la ligne # @lines << dline end |
#defaultize_config(config) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/clir/Labelizor.rb', line 61 def defaultize_config(config) @config = config || {} @config.key?(:gutter) || @config.merge!(gutter: 4) @config.key?(:indentation) || @config.merge!(indentation: 2) @config.key?(:separator) || @config.merge!(separator: ' ') @config.key?(:delimitor_size) || @config.merge!(delimitor_size: nil) @config.key?(:delimitor_char) || @config.merge!(delimitor_char: '=') @config.key?(:title_delimitor) || @config.merge!(title_delimitor: '*') @config.key?(:delimitor_color) || @config.merge!(delimitor_color: nil) @config.key?(:titre_color) || @config.merge!(titre_color: :bleu) end |
#delimitor_char ⇒ Object
194 195 196 |
# File 'lib/clir/Labelizor.rb', line 194 def delimitor_char @delimitor_char || config[:delimitor_char] end |
#delimitor_color ⇒ Object
187 188 189 |
# File 'lib/clir/Labelizor.rb', line 187 def delimitor_color @delimitor_color ||= config[:delimitor_color] end |
#delimitor_size(value = nil) ⇒ Object
190 191 192 193 |
# File 'lib/clir/Labelizor.rb', line 190 def delimitor_size(value = nil) return value unless value.nil? @delimitor_size ||= config[:delimitor_size] || (label_width - 1) end |
#display ⇒ Object Also known as: flush
Méthode pour afficher la table
130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 |
# File 'lib/clir/Labelizor.rb', line 130 def display puts "\n" # # Écriture du titre (if any) # if @config[:titre] sep = @config[:title_delimitor] * (@config[:titre].length + 2) titre = ("#{indent + sep}\n#{indent + ' ' + @config[:titre]}\n#{indent + sep}") titre = titre.send(@config[:titre_color]) unless config[:titre_color].nil? puts titre end puts "\n" # # Écriture des lignes # lines.each do |lab, val, params| case lab when :titre then lab, val = [val,''] when :delimitor lab = delimitor_char * delimitor_size(val) val = nil else lab = "#{lab} ".ljust(label_width - 2, config[:separator]) end str = lab + ' ' + formate_value(val, params) str = str.send(params[:color]) if params[:color] idt = indent(params) str = idt + str.split("\n").join("\n#{idt}") puts str end puts "\n\n" if selectable? wait_for_item_chosen end reset end |
#formate_value(val, params) ⇒ Object
Formater la valeur en fonction des paramètres
210 211 212 213 214 215 |
# File 'lib/clir/Labelizor.rb', line 210 def formate_value(val, params) return '' if val.nil? val = €(val) if params[:euros] val = formate_date(val) if params[:date] return val.to_s end |
#indent(params = {}) ⇒ Object
198 199 200 201 202 203 204 205 206 |
# File 'lib/clir/Labelizor.rb', line 198 def indent(params = {}) @indent ||= ' ' * config[:indentation] case params[:indent] when 0 then '' when nil then @indent when Integer then @indent + ' ' * params[:indent] when String then @indent + params[:indent] end end |
#label_width ⇒ Object
Calcul de la longueur du label
219 220 221 222 223 224 225 226 |
# File 'lib/clir/Labelizor.rb', line 219 def label_width @label_width ||= begin maxw = 0; @lines.each do |dline| labl = dline[0].length maxw = labl if labl > maxw end;maxw + config[:gutter] end end |
#reset ⇒ Object
107 108 109 110 111 112 |
# File 'lib/clir/Labelizor.rb', line 107 def reset @label_width = nil @lines = [] # pour se servir encore de l'instance @indent = nil @values = [] # pour selectable end |
#selectable? ⇒ Boolean
228 229 230 |
# File 'lib/clir/Labelizor.rb', line 228 def selectable? :TRUE == @isselectable ||= true_or_false(@config[:selectable] == true) end |
#w(label, value = nil, params = nil) ⇒ Object Also known as: <<
Pour écrire dans la table
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/clir/Labelizor.rb', line 88 def w(label, value = nil, params = nil) params ||= {} return if params.key?(:if) && !params[:if] # # Traitement de valeur de +label+ spéciales # case label when :titre, :title value = "\n#{value}\n#{'-'*value.length}" add_line [:titre, value, params] when :delimitor params.merge!(color: delimitor_color) unless params.key?(:color) add_line([:delimitor, value, params]) else add_line([label || '', value || '', params]) end end |
#wait_for_item_chosen ⇒ Object
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 |
# File 'lib/clir/Labelizor.rb', line 168 def wait_for_item_chosen choix = nil nombre_choix = @values.count puts "\n" while choix.nil? STDOUT.write("\rMémoriser : ") choix = STDIN.getch.to_i if choix > 0 && choix <= nombre_choix break else STDOUT.write "\r #{choix} n'est pas compris entre 1 et #{nombre_choix}.".rouge choix = nil end end STDOUT.write("\r"+' '*80) clip @values[choix.to_i - 1] puts "\n\n" end |