Class: Clir::Table
- Inherits:
-
Object
- Object
- Clir::Table
- Defined in:
- lib/clir/Table.rb
Instance Attribute Summary collapse
-
#column_count ⇒ Object
readonly
Returns the value of attribute column_count.
-
#params ⇒ Object
readonly
Returns the value of attribute params.
Instance Method Summary collapse
- #add(ary) ⇒ Object (also: #<<)
-
#add_header_lines ⇒ Object
Building header.
- #align ⇒ Object
- #char_separator ⇒ Object
-
#colonne_aligns ⇒ Object
Alignement des colonnes.
- #colonnes_totaux ⇒ Object
- #display ⇒ Object
- #gutter ⇒ Object
- #gutter_width ⇒ Object
- #indent ⇒ Object
-
#initialize(params = nil) ⇒ Table
constructor
Instanciation.
- #max_widths ⇒ Object
- #separation ⇒ Object
- #table_width ⇒ Object
- #traite_colonnes(cols, for_header = false) ⇒ Object
- #traite_titre ⇒ Object
Constructor Details
#initialize(params = nil) ⇒ Table
Instanciation
:colonnes_totaux {Hash} Table des indices (1-start) des
colonnes dont il faut faire la somme.
Avec en clé l'indice réel de la colonne et
en valeur soit nil pour un nombre normal,
soit :euros pour une somme financière.
Si cette donnée est définie, une nouvelle
ligne sera ajoutée au bout du tableau avec
la somme de cette colonne.
:header {Array} Entête, nom de chaque colonne. On peut
utiliser les retours de chariot pour faire deux
lignes.
:gutter {Integer} Goutière entre chaque colonne. 4 par défaut
:indent {Integer} Indentation initiale, en nombre d'espaces
:char_separator {String} La caractère pour faire les lignes
horizontales de séparation. Une étoile par
défaut.
82 83 84 85 86 |
# File 'lib/clir/Table.rb', line 82 def initialize(params = nil) @params = params || {} @lines = [] add_header_lines end |
Instance Attribute Details
#column_count ⇒ Object (readonly)
Returns the value of attribute column_count.
38 39 40 |
# File 'lib/clir/Table.rb', line 38 def column_count @column_count end |
#params ⇒ Object (readonly)
Returns the value of attribute params.
36 37 38 |
# File 'lib/clir/Table.rb', line 36 def params @params end |
Instance Method Details
#add(ary) ⇒ Object Also known as: <<
161 162 163 |
# File 'lib/clir/Table.rb', line 161 def add(ary) @lines << ary end |
#add_header_lines ⇒ Object
Building header
On part toujours du principe qu’il y a deux lignes, et si l’une est vide, on n’en met qu’une seule.
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 |
# File 'lib/clir/Table.rb', line 170 def add_header_lines @header_lines = [] return if params[:header].nil? two_lines = false line1 = [] line2 = [] params[:header].each do |lib| lib1, lib2 = if lib.match?("\n") two_lines = true lib.split("\n") else ['', lib] end line1 << lib1 line2 << lib2 end @column_count = line2.count @header_lines << line1 if two_lines @header_lines << line2 @header_lines << :separation end |
#align ⇒ Object
217 218 219 |
# File 'lib/clir/Table.rb', line 217 def align @align ||= params[:align] end |
#char_separator ⇒ Object
201 202 203 |
# File 'lib/clir/Table.rb', line 201 def char_separator @char_separator ||= params[:char_separator] || '*' end |
#colonne_aligns ⇒ Object
Alignement des colonnes
230 231 232 |
# File 'lib/clir/Table.rb', line 230 def colonne_aligns @colonne_aligns end |
#colonnes_totaux ⇒ Object
225 226 227 |
# File 'lib/clir/Table.rb', line 225 def colonnes_totaux @colonnes_totaux ||= params[:colonnes_totaux] end |
#display ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'lib/clir/Table.rb', line 88 def display # # On définit l'alignement de chaque colonne # define_colonnes_align # # On fait les totaux des colonnes désignées # formate_cells_totaux unless colonnes_totaux.nil? # # On mesure les largeurs des colonnes # calc_column_widths # # On ajoute une séparation à la toute fin # add(separation) # # Séparation toujours # puts "\n\n" # # Écriture du titre (if any) # traite_titre if @params[:title] # # Boucle sur chaque ligne d'entête # @header_lines.each do |cols| traite_colonnes( cols, is_header = true ) end # # Boucle sur chaque ligne de données # @lines.each do |cols| traite_colonnes( cols, is_header = false) end puts "\n\n" end |
#gutter ⇒ Object
205 206 207 |
# File 'lib/clir/Table.rb', line 205 def gutter @gutter ||= ' ' * gutter_width end |
#gutter_width ⇒ Object
209 210 211 |
# File 'lib/clir/Table.rb', line 209 def gutter_width @gutter_width ||= params[:gutter] || 4 end |
#indent ⇒ Object
213 214 215 |
# File 'lib/clir/Table.rb', line 213 def indent @indent ||= ' ' * (params[:indent] || 2) end |
#max_widths ⇒ Object
221 222 223 |
# File 'lib/clir/Table.rb', line 221 def max_widths @max_widths ||= params[:max_widths] end |
#separation ⇒ Object
197 198 199 |
# File 'lib/clir/Table.rb', line 197 def separation @separation ||= char_separator * (table_width + 4) end |
#table_width ⇒ Object
193 194 195 |
# File 'lib/clir/Table.rb', line 193 def table_width @table_width ||= @column_widths.sum + (gutter_width * (column_count - 1)) end |
#traite_colonnes(cols, for_header = false) ⇒ Object
139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 |
# File 'lib/clir/Table.rb', line 139 def traite_colonnes(cols, for_header = false) line = case cols when Array ' ' + cols.collect.with_index do |col, idx| alignment = for_header ? :ljust : colonne_aligns[idx] col = col.to_s if col.length > @column_widths[idx] col[0...(@column_widths[idx] - 1)] + '…' else col.to_s.send(alignment, @column_widths[idx]) end end.join(gutter) + ' ' when :separation then separation when String then cols end # # Écriture de la ligne # puts indent + line end |
#traite_titre ⇒ Object
135 136 137 |
# File 'lib/clir/Table.rb', line 135 def traite_titre puts "#{indent}#{char_separator} #{params[:title].upcase} #{char_separator}\n#{indent}#{separation}" end |