Class: TTY::Table
- Inherits:
-
Object
- Object
- TTY::Table
- Extended by:
- Forwardable
- Includes:
- Comparable, Enumerable, 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/padder.rb,
lib/tty/table/columns.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/indentation.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/padding.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, Columns, DimensionMismatchError, Field, Header, Indentation, Operations, Orientation, Padder, Renderer, Row, Transformation, TupleMissing
Instance Attribute Summary collapse
-
#header ⇒ Enumerable
readonly
The table header.
-
#orientation ⇒ Object
The table orientation out of :horizontal and :vertical.
-
#original_columns ⇒ Object
readonly
The table original column count.
-
#original_rows ⇒ Object
readonly
The table original row count.
-
#rows ⇒ Enumerable
readonly
private
The table rows.
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.
-
#[](row_index, column_index = false) ⇒ Object
(also: #at, #element, #component)
Lookup element of the table given a row(i) and column(j).
-
#[]=(row_index, column_index, 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.
-
#renderer(type = :basic, options = {}) ⇒ Object
Return renderer for this table.
-
#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_row_sizes, #assert_table_type, #validate_options!
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
111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/tty/table.rb', line 111 def initialize( = {}, &block) @array_converter = Conversion::ArrayConverter.new @header = (value = [:header]) ? Header.new(value) : nil @rows = coerce(.fetch(:rows) { Row.new([]) }) @rotated = false self.orientation = .fetch(:orientation) { :horizontal } assert_row_sizes @rows orientation.transform(self) yield_or_eval(&block) if block_given? end |
Instance Attribute Details
#header ⇒ Enumerable (readonly)
The table header
23 24 25 |
# File 'lib/tty/table.rb', line 23 def header @header end |
#orientation ⇒ Object
The table orientation out of :horizontal and :vertical
38 39 40 |
# File 'lib/tty/table.rb', line 38 def orientation @orientation end |
#original_columns ⇒ Object (readonly)
The table original column count
52 53 54 |
# File 'lib/tty/table.rb', line 52 def original_columns @original_columns end |
#original_rows ⇒ Object (readonly)
The table original row count
45 46 47 |
# File 'lib/tty/table.rb', line 45 def original_rows @original_rows 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
30 31 32 |
# File 'lib/tty/table.rb', line 30 def rows @rows end |
Class Method Details
.[](*rows) ⇒ Object
Create a new Table where each argument is a row
64 65 66 |
# File 'lib/tty/table.rb', line 64 def self.[](*rows) new(rows: rows) end |
.new(*args, &block) ⇒ Object
Instantiate a new Table
88 89 90 91 92 93 94 95 |
# File 'lib/tty/table.rb', line 88 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
274 275 276 277 278 279 |
# File 'lib/tty/table.rb', line 274 def <<(row) rows_copy = rows.dup assert_row_sizes rows_copy << row rows << to_row(row) self end |
#[](row_index, column_index = false) ⇒ Object Also known as: at, element, component
Lookup element of the table given a row(i) and column(j)
190 191 192 193 194 195 196 197 |
# File 'lib/tty/table.rb', line 190 def [](row_index, column_index = false) return row(row_index) unless column_index if row_index >= 0 && column_index >= 0 rows.fetch(row_index) { return nil }[column_index] else fail TTY::Table::TupleMissing.new(row_index, column_index) end end |
#[]=(row_index, column_index, 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)
205 206 207 |
# File 'lib/tty/table.rb', line 205 def []=(row_index, column_index, val) @rows[row_index][column_index] = 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.
459 460 461 462 |
# File 'lib/tty/table.rb', line 459 def coerce(rows) rows = @array_converter.convert(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.
256 257 258 259 260 261 262 263 264 265 |
# File 'lib/tty/table.rb', line 256 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
TODO: renmae to columns_size
334 335 336 |
# File 'lib/tty/table.rb', line 334 def column_size rows.size > 0 ? rows[0].size : 0 end |
#data ⇒ Array
Provides access to all table data
130 131 132 |
# File 'lib/tty/table.rb', line 130 def data (header && !header.empty?) ? [header] + rows : rows end |
#each {|Array[Array]| ... } ⇒ self
Iterate over each tuple in the set
292 293 294 295 296 |
# File 'lib/tty/table.rb', line 292 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
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 |
# File 'lib/tty/table.rb', line 307 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
377 378 379 |
# File 'lib/tty/table.rb', line 377 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.
419 420 421 |
# File 'lib/tty/table.rb', line 419 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.
437 438 439 440 441 442 443 444 445 446 447 |
# File 'lib/tty/table.rb', line 437 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 |
#renderer(type = :basic, options = {}) ⇒ Object
Return renderer for this table
398 399 400 |
# File 'lib/tty/table.rb', line 398 def renderer(type = :basic, = {}) @renderer ||= Renderer.select(type).new(self, ) 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
157 158 159 160 |
# File 'lib/tty/table.rb', line 157 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
176 177 178 179 180 181 182 183 184 185 |
# File 'lib/tty/table.rb', line 176 def rotate_horizontal return unless rotated? head, body = orientation.slice(self) if header && header.empty? @header = head[0] @rows = body.map { |row| to_row(row, @header) } else @rows = body.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
165 166 167 168 169 170 171 |
# File 'lib/tty/table.rb', line 165 def rotate_vertical @original_columns = column_size @original_rows = row_size @rows = orientation.slice(self) @header = [] if header @rotated = true end |
#rotated? ⇒ Boolean
Marks this table as rotated
148 149 150 |
# File 'lib/tty/table.rb', line 148 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.
226 227 228 229 230 231 232 233 |
# File 'lib/tty/table.rb', line 226 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
346 347 348 |
# File 'lib/tty/table.rb', line 346 def row_size rows.size end |
#size ⇒ Array
Return the number of rows and columns
358 359 360 |
# File 'lib/tty/table.rb', line 358 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
13 14 15 |
# File 'lib/tty/table/header.rb', line 13 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
12 13 14 |
# File 'lib/tty/table/row.rb', line 12 def to_row(row, header = nil) Row.new(row, header) end |
#to_s ⇒ String
Return string representation of table using basic renderer.
386 387 388 |
# File 'lib/tty/table.rb', line 386 def to_s render(:basic) end |