Class: Tabular::Column

Inherits:
Object
  • Object
show all
Includes:
Blank
Defined in:
lib/tabular/column.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Blank

#is_blank?

Constructor Details

#initialize(table, columns, key = nil, columns_map = {}) ⇒ Column

table – parent Table column – parent Columns key is normalized to a downcase, underscored symbol



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/tabular/column.rb', line 10

def initialize(table, columns, key = nil, columns_map = {})
  @columns = columns
  @table = table

  key = symbolize(key)
  columns_map = columns_map || {}
  map_for_key = columns_map[key]

  @column_type = :string
  case map_for_key
  when nil
    @key = key
    @column_type = :date if key == :date
  when Symbol
    @key = map_for_key
    @column_type = :date if key == :date
  when Hash
    @key = key
    @column_type = map_for_key[:column_type]
  else
    raise "Expected Symbol or Hash, but was #{map_for_key.class}"
  end
end

Instance Attribute Details

#column_typeObject (readonly)

Returns the value of attribute column_type.



5
6
7
# File 'lib/tabular/column.rb', line 5

def column_type
  @column_type
end

#keyObject (readonly)

Returns the value of attribute key.



5
6
7
# File 'lib/tabular/column.rb', line 5

def key
  @key
end

Instance Method Details

#cellsObject

All cells value under this Column



39
40
41
# File 'lib/tabular/column.rb', line 39

def cells
  rows.map { |r| r[key] }
end

#inspectObject



72
73
74
# File 'lib/tabular/column.rb', line 72

def inspect
  "#<Tabular::Column #{key} #{column_type}>"
end

#maxObject

Maximum value for cells in the Column. Determine with Ruby #max



44
45
46
# File 'lib/tabular/column.rb', line 44

def max
  cells.compact.max
end

#precisionObject

Number of zeros to the right of the decimal point. Useful for formtting time data.



49
50
51
# File 'lib/tabular/column.rb', line 49

def precision
  @precision ||= cells.map(&:to_f).map {|n| n.round(3) }.map {|n| n.to_s.split(".").last.gsub(/0+$/, "").length }.max
end

#renderObject

Human-friendly header string. Delegate to renderer‘s render_header method.



59
60
61
# File 'lib/tabular/column.rb', line 59

def render
  renderer.render_header self
end

#rendererObject

Renderer



64
65
66
# File 'lib/tabular/column.rb', line 64

def renderer
  @columns.renderer(key)
end

#rowsObject



34
35
36
# File 'lib/tabular/column.rb', line 34

def rows
  @table.rows
end

#to_sObject



76
77
78
# File 'lib/tabular/column.rb', line 76

def to_s
  key.to_s
end

#to_space_delimitedObject



68
69
70
# File 'lib/tabular/column.rb', line 68

def to_space_delimited
  to_s.ljust width
end

#widthObject

Widest string in column



54
55
56
# File 'lib/tabular/column.rb', line 54

def width
  @width ||= (cells.map(&:to_s) << to_s).map(&:size).max
end