Class: FastlaneCore::PrintTable

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

Class Method Summary collapse

Class Method Details

.collect_rows(options: nil, hide_keys: [], mask_keys: [], prefix: '', mask: '********') ⇒ Object



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
# File 'fastlane_core/lib/fastlane_core/print_table.rb', line 129

def collect_rows(options: nil, hide_keys: [], mask_keys: [], prefix: '', mask: '********')
  rows = []

  options.each do |key, value|
    prefixed_key = "#{prefix}#{key}"
    next if value.nil?
    next if value.to_s == ""
    next if hide_keys.include?(prefixed_key)
    value = mask if mask_keys.include?(prefixed_key)

    if value.respond_to?(:key)
      rows.concat(self.collect_rows(options: value, hide_keys: hide_keys, mask_keys: mask_keys, prefix: "#{prefix}#{key}.", mask: mask))
    else
      rows << [prefixed_key, value]
    end
  end
  rows
end

.colorize_array(array, colors) ⇒ Object



64
65
66
67
68
69
70
71
72
73
# File 'fastlane_core/lib/fastlane_core/print_table.rb', line 64

def colorize_array(array, colors)
  value = ""
  array.each do  |l|
    colored_line = l
    colored_line = "#{colors.first}#{l}#{colors.last}" if colors.length > 0
    value << colored_line
    value << "\n"
  end
  return value
end

This method prints out all the user inputs in a nice table. Useful to summarize the run You can pass an array to ‘hide_keys` if you don’t want certain elements to show up (symbols or strings) You can pass an array to ‘mask_keys` if you want to mask certain elements (symbols or strings)



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'fastlane_core/lib/fastlane_core/print_table.rb', line 26

def print_values(config: nil, title: nil, hide_keys: [], mask_keys: [], transform: :newline)
  require 'terminal-table'

  options = {}
  unless config.nil?
    if config.kind_of?(FastlaneCore::Configuration)
      # find sensitive options and mask them by default
      config.available_options.each do |config_item|
        if config_item.sensitive
          mask_keys << config_item.key.to_s
        end
      end
      options = config.values(ask: false)
    else
      options = config
    end
  end
  rows = self.collect_rows(options: options, hide_keys: hide_keys.map(&:to_s), mask_keys: mask_keys.map(&:to_s), prefix: '')

  params = {}

  if transform
    params[:rows] = transform_output(rows, transform: transform)
  else
    params[:rows] = rows
  end

  params[:title] = title.green if title

  unless FastlaneCore::Env.truthy?("FASTLANE_SKIP_ALL_LANE_SUMMARIES")
    puts("")
    puts(Terminal::Table.new(params))
    puts("")
  end

  return params
end

.should_transform?Boolean

Returns:



75
76
77
78
79
80
# File 'fastlane_core/lib/fastlane_core/print_table.rb', line 75

def should_transform?
  if FastlaneCore::Helper.ci? || FastlaneCore::Helper.test?
    return false
  end
  return !FastlaneCore::Env.truthy?("FL_SKIP_TABLE_TRANSFORM")
end

.transform_output(rows, transform: :newline) ⇒ Object



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# File 'fastlane_core/lib/fastlane_core/print_table.rb', line 105

def transform_output(rows, transform: :newline)
  return rows unless should_transform?

  require 'fastlane_core/string_filters'
  require 'tty-screen'

  number_of_cols = TTY::Screen.width

  col_count = rows.map(&:length).first || 1

  # -4 per column - as tt adds "| " and " |"
  terminal_table_padding = 4
  max_length = number_of_cols - (col_count * terminal_table_padding)

  max_value_length = (max_length / col_count) - 1

  return_array = rows.map do |row|
    row.map do |column|
      transform_row(column, transform, max_value_length)
    end
  end
  return return_array
end

.transform_row(column, transform, max_value_length) ⇒ Object



82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'fastlane_core/lib/fastlane_core/print_table.rb', line 82

def transform_row(column, transform, max_value_length)
  return column if column.nil? # we want to keep the nil and not convert it to a string
  return column if transform.nil?

  value = column.to_s.dup

  if transform == :truncate_middle
    return value.middle_truncate(max_value_length)
  elsif transform == :newline
    # remove all fixed newlines as it may mess up the output
    value.gsub!("\n", " ") if value.kind_of?(String)
    if value.length >= max_value_length
      colors = value.scan(/\e\[.*?m/)
      colors.each { |color| value.gsub!(color, '') }
      lines = value.wordwrap(max_value_length)
      return  colorize_array(lines, colors)
    end
  elsif transform
    UI.user_error!("Unknown transform value '#{transform}'")
  end
  return value
end