Class: TableTransformer::Data

Inherits:
Object
  • Object
show all
Defined in:
lib/table_transformer.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(original:, keys: []) ⇒ Data

Returns a new instance of Data.



8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/table_transformer.rb', line 8

def initialize(original:, keys: [])
  @original = if original.class.method_defined?(:keys)
                [] << original
              else
                [] + original
              end
  @keys = if keys.blank?
            @original[0].keys
          else
            keys
          end
end

Instance Attribute Details

#keysObject (readonly)

Returns the value of attribute keys.



7
8
9
# File 'lib/table_transformer.rb', line 7

def keys
  @keys
end

#originalObject (readonly)

Returns the value of attribute original.



7
8
9
# File 'lib/table_transformer.rb', line 7

def original
  @original
end

Instance Method Details

#column_widthObject



67
68
69
70
71
72
73
74
75
# File 'lib/table_transformer.rb', line 67

def column_width
  @column_width ||= {}.tap do |width|
    keys.each do |k|
      width[k] = max_size[k] < k.size ? k.size :  max_size[k]
      width[k] += 2
    end
    break width
  end
end

#line_generatorObject



61
62
63
64
65
# File 'lib/table_transformer.rb', line 61

def line_generator
  @line_generator ||= LineGenerator.new(
    column_width: column_width
  )
end

#max_sizeObject



77
78
79
80
81
82
83
84
85
# File 'lib/table_transformer.rb', line 77

def max_size
  @max_size ||= {}.tap do |size|
    keys.each do |k|
      max_data = string_data.max_by { |data| data[k].to_s.size }
      size[k] = max_data[k].to_s.size
    end
    break size
  end
end

#outputObject



21
22
23
# File 'lib/table_transformer.rb', line 21

def output
  puts output_data
end

#output_dataObject



25
26
27
28
29
30
31
32
# File 'lib/table_transformer.rb', line 25

def output_data
  @output_data ||=
    if string_data.present?
      output_data_given_data
    else
      "Empty set\n\n"
    end
end

#output_data_given_dataObject



34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/table_transformer.rb', line 34

def output_data_given_data
  [].tap do |arr|
    arr << line_generator.delimiter_line
    arr << line_generator.header_line
    arr << line_generator.delimiter_line
    string_data.each do |data|
      arr << line_generator.data_line(data)
    end
    arr << line_generator.delimiter_line
    arr << "#{string_data.size} rows in set\n\n"
  end
end

#string_dataObject



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/table_transformer.rb', line 47

def string_data
  @string_data ||= [].tap do |arr|
    original.each do |data|
      transformed_data = {}.tap do |t_data|
        keys.each do |k|
          t_data[k] = data[k].to_s
        end
        break t_data
      end
      arr << transformed_data if transformed_data.present?
    end
  end
end