Class: TTY::Table
- Inherits:
-
Object
- Object
- TTY::Table
- Extended by:
- Forwardable
- Includes:
- Comparable, Enumerable, Conversion, Equatable, Validatable
- Defined in:
- lib/tty/table.rb,
lib/tty/table/row.rb,
lib/tty/table/error.rb,
lib/tty/table/field.rb,
lib/tty/table/border.rb,
lib/tty/table/header.rb,
lib/tty/table/renderer.rb,
lib/tty/table/border_dsl.rb,
lib/tty/table/column_set.rb,
lib/tty/table/operations.rb,
lib/tty/table/border/null.rb,
lib/tty/table/orientation.rb,
lib/tty/table/validatable.rb,
lib/tty/table/border/ascii.rb,
lib/tty/table/border/unicode.rb,
lib/tty/table/border_options.rb,
lib/tty/table/renderer/ascii.rb,
lib/tty/table/renderer/basic.rb,
lib/tty/table/renderer/color.rb,
lib/tty/table/transformation.rb,
lib/tty/table/border/row_line.rb,
lib/tty/table/operation/escape.rb,
lib/tty/table/operation/filter.rb,
lib/tty/table/renderer/unicode.rb,
lib/tty/table/operation/wrapped.rb,
lib/tty/table/operation/alignment.rb,
lib/tty/table/operation/truncation.rb,
lib/tty/table/orientation/vertical.rb,
lib/tty/table/orientation/horizontal.rb,
lib/tty/table/operation/alignment_set.rb
Overview
A core class intended for storing data in a structured, tabular form. Once the data is stored in a TTY::Table various operations can be performed before the information is dumped into a stdout.
Defined Under Namespace
Modules: Operation, Validatable Classes: Border, BorderDSL, BorderOptions, ColumnSet, DimensionMismatchError, Field, Header, Operations, Orientation, Renderer, Row, Transformation, TupleMissing
Constant Summary
Constants included from Validatable
Instance Attribute Summary collapse
-
#header ⇒ Enumerable
readonly
The table header.
-
#orientation ⇒ Object
The table orientation out of :horizontal and :vertical.
-
#rows ⇒ Enumerable
readonly
private
The table rows.
Attributes included from Equatable
Class Method Summary collapse
-
.[](*rows) ⇒ Object
Create a new Table where each argument is a row.
-
.new(*args, &block) ⇒ Object
Instantiate a new Table.
Instance Method Summary collapse
-
#<<(row) ⇒ self
Add row to table.
-
#[](i, j = false) ⇒ Object
(also: #at, #element, #component)
Lookup element of the table given a row(i) and column(j).
-
#[]=(i, j, val) ⇒ Object
private
Set table value at row(i) and column(j).
-
#coerce(rows) ⇒ Array
Coerce an Enumerable into a Table This coercion mechanism is used by Table to handle Enumerable types and force them into array type.
-
#column(index) { ... } ⇒ self
Return a column number at the index of the table as an Array.
-
#column_size ⇒ Integer
Return the number of columns.
-
#data ⇒ Array
Provides access to all table data.
-
#each {|Array[Array]| ... } ⇒ self
Iterate over each tuple in the set.
-
#each_with_index ⇒ Object
Iterate over each element yielding in addition row and column index.
-
#empty? ⇒ Boolean
Return true if this is an empty table, i.e.
-
#initialize(options = {}, &block) ⇒ TTY::Table
constructor
private
Initialize a Table.
-
#render(*args) {|renderer| ... } ⇒ String
Render a given table.
-
#render_with(border_class, renderer_type = (not_set=true), options = {}) {|renderer| ... } ⇒ String
Render a given table using custom border class.
-
#rotate ⇒ self
private
Rotate the table between vertical and horizontal orientation.
-
#rotate_horizontal ⇒ Object
private
Rotate the table horizontally.
-
#rotate_vertical ⇒ Object
private
Rotate the table vertically.
-
#rotated? ⇒ Boolean
Marks this table as rotated.
-
#row(index) { ... } ⇒ self
Return a row number at the index of the table as an Array.
-
#row_size ⇒ Integer
Return the number of rows.
-
#size ⇒ Array
Return the number of rows and columns.
-
#to_header(row) ⇒ TTY::Table::Header
private
Convert an Array row into Header.
-
#to_row(row, header = nil) ⇒ TTY::Table::Row
private
Convert an Array row into Row.
-
#to_s ⇒ String
Return string representation of table using basic renderer.
-
#width ⇒ Integer
Check table width.
Methods included from Validatable
#assert_matching_widths, #assert_row_sizes, #assert_string_values, #validate_options!, #validate_rendering_options!
Methods included from Equatable
#attr_reader, included, #inherited
Methods included from Conversion
Constructor Details
#initialize(options = {}, &block) ⇒ TTY::Table
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Initialize a Table
99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/tty/table.rb', line 99 def initialize(={}, &block) @header = (value = [:header]) ? Header.new(value) : nil @rows = coerce(.fetch(:rows) { Row.new([]) }) @orientation = Orientation.coerce(.fetch(:orientation) { :horizontal }) @rotated = false # TODO: assert that row_size is the same as column widths & aligns assert_row_sizes @rows @orientation.transform(self) yield_or_eval(&block) if block_given? end |
Instance Attribute Details
#header ⇒ Enumerable (readonly)
The table header
25 26 27 |
# File 'lib/tty/table.rb', line 25 def header @header end |
#orientation ⇒ Object
The table orientation out of :horizontal and :vertical
40 41 42 |
# File 'lib/tty/table.rb', line 40 def orientation @orientation end |
#rows ⇒ Enumerable (readonly)
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
The table rows
32 33 34 |
# File 'lib/tty/table.rb', line 32 def rows @rows end |
Class Method Details
.[](*rows) ⇒ Object
Create a new Table where each argument is a row
52 53 54 |
# File 'lib/tty/table.rb', line 52 def self.[](*rows) self.new(rows: rows) end |
.new(*args, &block) ⇒ Object
Instantiate a new Table
76 77 78 79 80 81 82 83 |
# File 'lib/tty/table.rb', line 76 def self.new(*args, &block) = Utils.(args) if args.size.nonzero? super(Transformation.extract_tuples(args).merge(), &block) else super(, &block) end end |
Instance Method Details
#<<(row) ⇒ self
Add row to table
257 258 259 260 261 262 |
# File 'lib/tty/table.rb', line 257 def <<(row) rows_copy = rows.dup assert_row_sizes rows_copy << row rows << to_row(row) self end |
#[](i, j = false) ⇒ Object Also known as: at, element, component
Lookup element of the table given a row(i) and column(j)
173 174 175 176 177 178 179 180 |
# File 'lib/tty/table.rb', line 173 def [](i, j=false) return row(i) unless j if i >= 0 && j >= 0 rows.fetch(i) { return nil }[j] else raise TTY::Table::TupleMissing.new(i,j) end end |
#[]=(i, j, val) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Set table value at row(i) and column(j)
188 189 190 |
# File 'lib/tty/table.rb', line 188 def []=(i, j, val) @rows[i][j] = val end |
#coerce(rows) ⇒ Array
Coerce an Enumerable into a Table This coercion mechanism is used by Table to handle Enumerable types and force them into array type.
430 431 432 433 |
# File 'lib/tty/table.rb', line 430 def coerce(rows) rows = convert_to_array(rows) rows.map { |row| to_row(row, header) } end |
#column(index) { ... } ⇒ self
Return a column number at the index of the table as an Array. If the table has a header then column can be searched by header name. When a block is given, the elements of that Array are iterated over.
239 240 241 242 243 244 245 246 247 248 |
# File 'lib/tty/table.rb', line 239 def column(index) index_unknown = index.is_a?(Integer) && (index >= column_size || index < 0) if block_given? return self if index_unknown rows.map { |row| yield row[index] } else return nil if index_unknown rows.map { |row| row[index] }.compact end end |
#column_size ⇒ Integer
Return the number of columns
316 317 318 319 |
# File 'lib/tty/table.rb', line 316 def column_size return rows[0].size if rows.size > 0 return 0 end |
#data ⇒ Array
Provides access to all table data
116 117 118 |
# File 'lib/tty/table.rb', line 116 def data (header && !header.empty?) ? [header] + rows : rows end |
#each {|Array[Array]| ... } ⇒ self
Iterate over each tuple in the set
275 276 277 278 279 |
# File 'lib/tty/table.rb', line 275 def each return to_enum unless block_given? data.each { |row| yield row } self end |
#each_with_index ⇒ Object
Iterate over each element yielding in addition row and column index
290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 |
# File 'lib/tty/table.rb', line 290 def each_with_index return to_enum unless block_given? start_index = 0 if header && !header.empty? header.attributes.each_with_index do |el, col_index| yield el, 0, col_index end start_index = 1 end rows.each_with_index do |row, row_index| row.fields.each_with_index do |el, col_index| yield el, row_index + start_index, col_index end end self end |
#empty? ⇒ Boolean
Return true if this is an empty table, i.e. if the number of rows or the number of columns is 0
360 361 362 |
# File 'lib/tty/table.rb', line 360 def empty? column_size == 0 || row_size == 0 end |
#render(*args) {|renderer| ... } ⇒ String
Render a given table. This method takes options which will be passed to the renderer prior to rendering, which allows the caller to set any table rendering variables.
390 391 392 |
# File 'lib/tty/table.rb', line 390 def render(*args, &block) render_with(nil, *args, &block) end |
#render_with(border_class, renderer_type = (not_set=true), options = {}) {|renderer| ... } ⇒ String
Render a given table using custom border class.
408 409 410 411 412 413 414 415 416 417 418 |
# File 'lib/tty/table.rb', line 408 def render_with(border_class, renderer_type=(not_set=true), ={}, &block) unless not_set if renderer_type.respond_to?(:to_hash) = renderer_type else [:renderer] = renderer_type end end Renderer.render_with(border_class, self, , &block) end |
#rotate ⇒ self
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Rotate the table between vertical and horizontal orientation
143 144 145 146 |
# File 'lib/tty/table.rb', line 143 def rotate orientation.transform(self) self end |
#rotate_horizontal ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Rotate the table horizontally
160 161 162 163 164 165 166 167 168 |
# File 'lib/tty/table.rb', line 160 def rotate_horizontal transposed = rows.transpose if header && header.empty? @header = transposed[0] @rows = transposed[1..-1].map { |row| to_row(row, @header) } elsif rotated? @rows = transposed.map { |row| to_row(row) } end end |
#rotate_vertical ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Rotate the table vertically
151 152 153 154 155 |
# File 'lib/tty/table.rb', line 151 def rotate_vertical @rows = ([header].compact + rows).transpose.map { |row| to_row(row) } @header = [] if header @rotated = true end |
#rotated? ⇒ Boolean
Marks this table as rotated
134 135 136 |
# File 'lib/tty/table.rb', line 134 def rotated? @rotated end |
#row(index) { ... } ⇒ self
Return a row number at the index of the table as an Array. When a block is given, the elements of that Array are iterated over.
209 210 211 212 213 214 215 216 |
# File 'lib/tty/table.rb', line 209 def row(index, &block) if block_given? rows.fetch(index) { return self }.each(&block) self else rows.fetch(index) { return nil } end end |
#row_size ⇒ Integer
Return the number of rows
329 330 331 |
# File 'lib/tty/table.rb', line 329 def row_size rows.size end |
#size ⇒ Array
Return the number of rows and columns
341 342 343 |
# File 'lib/tty/table.rb', line 341 def size [row_size, column_size] end |
#to_header(row) ⇒ TTY::Table::Header
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Convert an Array row into Header
14 15 16 |
# File 'lib/tty/table/header.rb', line 14 def to_header(row) Header.new(row) end |
#to_row(row, header = nil) ⇒ TTY::Table::Row
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Convert an Array row into Row
13 14 15 |
# File 'lib/tty/table/row.rb', line 13 def to_row(row, header=nil) Row.new(row, header) end |
#to_s ⇒ String
Return string representation of table using basic renderer.
369 370 371 |
# File 'lib/tty/table.rb', line 369 def to_s render(:basic) end |