Class: TTY::Table::Border

Inherits:
Object
  • Object
show all
Includes:
Equatable, Unicode
Defined in:
lib/tty/table/border.rb,
lib/tty/table/border/null.rb,
lib/tty/table/border/ascii.rb,
lib/tty/table/border/unicode.rb,
lib/tty/table/border/row_line.rb

Overview

Abstract base class that is responsible for building the table border.

Direct Known Subclasses

ASCII, Null, Unicode

Defined Under Namespace

Classes: ASCII, Null, RowLine, Unicode

Constant Summary collapse

EMPTY_CHAR =
''.freeze
SPACE_CHAR =
' '.freeze
EACH_ROW =

Represent a separtor on each row

:each_row

Class Attribute Summary collapse

Instance Attribute Summary collapse

Attributes included from Equatable

#comparison_attrs

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Equatable

#attr_reader, included, #inherited

Methods included from Unicode

#as_unicode, #clean_utf8, #utf8?

Constructor Details

#initialize(column_widths, options = nil) ⇒ 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.

Instantiate a new object

Parameters:

  • column_widths (Array)

    the table column widths

  • options (BorderOptions) (defaults to: nil)


44
45
46
47
48
49
50
51
# File 'lib/tty/table/border.rb', line 44

def initialize(column_widths, options = nil)
  if self.class == Border
    raise NotImplementedError, "#{self} is an abstract class"
  else
    @widths = column_widths
    @border = TTY::Table::BorderOptions.from options
  end
end

Class Attribute Details

.charactersObject

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.

Store characters for border



31
32
33
# File 'lib/tty/table/border.rb', line 31

def characters
  @characters
end

Instance Attribute Details

#borderObject (readonly)

The table custom border characters



25
26
27
# File 'lib/tty/table/border.rb', line 25

def border
  @border
end

Class Method Details

.def_border(characters = (not_set=true), &block) ⇒ Hash

Define border characters

Parameters:

  • characters (Hash) (defaults to: (not_set=true))

    the border characters

Returns:

  • (Hash)


61
62
63
64
65
66
# File 'lib/tty/table/border.rb', line 61

def self.def_border(characters=(not_set=true), &block)
  return self.characters = characters unless not_set

  dsl = TTY::Table::BorderDSL.new(&block)
  self.characters = dsl.characters
end

.set_color(color, *strings) ⇒ Array[String]

Set color on characters

Parameters:

  • color (Symbol)
  • array (Array[String])

    of strings

Returns:

  • (Array[String])


100
101
102
# File 'lib/tty/table/border.rb', line 100

def self.set_color(color, *strings)
  strings.map { |string| TTY.terminal.color.set(string, color) }
end

Instance Method Details

#[](type) ⇒ String

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.

Retrive individula character by type

Parameters:

  • type (String)

    the character type

Returns:

  • (String)


76
77
78
79
80
# File 'lib/tty/table/border.rb', line 76

def [](type)
  characters = self.class.characters
  chars = border.nil? ? characters : characters.merge(border.characters)
  chars[type] || EMPTY_CHAR
end

#bottom_lineString

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.

A line spannig all columns marking bottom of a table.

Returns:

  • (String)


118
119
120
# File 'lib/tty/table/border.rb', line 118

def bottom_line
  (result = render(:bottom)).empty? ? nil : result
end

#color?Boolean

Check if border color is set

Returns:

  • (Boolean)


87
88
89
# File 'lib/tty/table/border.rb', line 87

def color?
  border && border.style
end

#row_line(row) ⇒ String

A line spanning all columns delemeting fields in a row.

Parameters:

Returns:

  • (String)


139
140
141
142
143
144
145
# File 'lib/tty/table/border.rb', line 139

def row_line(row)
  line = RowLine.new(self['left'], self['center'], self['right'])
  line.colorize(border.style) if color?

  result = row_heights(row, line)
  result.empty? ? EMPTY_CHAR : result
end

#separatorString

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.

A line spanning all columns delemeting rows in a table.

Returns:

  • (String)


127
128
129
# File 'lib/tty/table/border.rb', line 127

def separator
  (result = render(:mid)).empty? ? nil : result
end

#top_lineString

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.

A line spanning all columns marking top of a table.

Returns:

  • (String)


109
110
111
# File 'lib/tty/table/border.rb', line 109

def top_line
  (result = render(:top)).empty? ? nil : result
end