Class: Locd::CLI::Table

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/locd/cli/table.rb

Defined Under Namespace

Classes: Column

Constant Summary collapse

SUPERSCRIPT_NUMBERS =

Unicode superscript number to use as references for columns with descriptions.

Returns:

  • (Array<String>)
[
  "\u2070",
  "\u00B9",
  "\u00B2",
  "\u00B3",
  "\u2070",
  "\u2074",
  "\u2075",
  "\u2076",
  "\u2077",
  "\u2078",
  "\u2079",
].freeze
NULL =
''

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeTable

.build



84
85
86
87
# File 'lib/locd/cli/table.rb', line 84

def initialize
  @columns = []
  @rows = []
end

Class Method Details

.build(&block) ⇒ return_type

TODO:

Document build method.

Returns @todo Document return value.

Parameters:

  • arg_name (type)

    @todo Add name param description.

Returns:

  • (return_type)

    @todo Document return value.



80
81
82
# File 'lib/locd/cli/table.rb', line 80

def self.build &block
  new.tap &block
end

Instance Method Details

#column(*args, &getter) ⇒ Object Also known as: col



97
98
99
# File 'lib/locd/cli/table.rb', line 97

def column *args, &getter
  @columns << Column.new( *args, &getter )
end

#each(&block) ⇒ Object



89
90
91
# File 'lib/locd/cli/table.rb', line 89

def each &block
  @rows.each &block
end

#each_index(&block) ⇒ Object



93
94
95
# File 'lib/locd/cli/table.rb', line 93

def each_index &block
  @rows.each_index &block
end

to_a



149
150
151
152
153
154
# File 'lib/locd/cli/table.rb', line 149

def footer
  NULL + " Null\n" +
  @columns.select { |col| col.desc }.each_with_index.map { |col, index|
    "#{ SUPERSCRIPT_NUMBERS[index + 1] } #{ col.desc }"
  }.join( "\n" )
end

#rows(entries = nil) ⇒ Object



104
105
106
107
108
109
110
# File 'lib/locd/cli/table.rb', line 104

def rows entries = nil
  unless entries.nil?
    @rows = entries.to_a
  end
  
  @rows
end

#to_a(header: true, col_desc_refs: true) ⇒ Object



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/locd/cli/table.rb', line 113

def to_a header: true, col_desc_refs: true
  [].tap do |array|
  
    if header
      desc_ref_index = 0
      array << @columns.map { |column|
        if column.desc && col_desc_refs
          desc_ref_index += 1
          "#{ column.name }#{ SUPERSCRIPT_NUMBERS[desc_ref_index] }"
        else
          column.name
        end
      }
    end
      
    @rows.each do |row|
      values = if NRSER.array_like? row
        row.to_a
      else
        @columns.map do |column|
          column.getter.call( row )
        end
      end
      
      array << values.map { |value|
        if value.nil?
          NULL
        else
          value.to_s
        end
      }
    end
  
  end
end