class I18n::Tasks::Reports::Terminal

Public Instance Methods

check_normalized_results(non_normalized) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 96
def check_normalized_results(non_normalized)
  if non_normalized.empty?
    print_success 'All data is normalized'
    return
  end
  log_stderr Rainbow('The following data requires normalization:').yellow
  puts non_normalized
  log_stderr Rainbow('Run `i18n-tasks normalize` to fix').yellow
end
eq_base_keys(tree = task.eq_base_keys) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 62
def eq_base_keys(tree = task.eq_base_keys)
  keys = tree.root_key_value_data(true)
  if keys.present?
    print_title eq_base_title(keys)
    print_locale_key_value_data_table keys
  else
    print_info Rainbow('No translations are the same as base value').cyan
  end
end
forest_stats(forest, stats = task.forest_stats(forest)) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 76
def forest_stats(forest, stats = task.forest_stats(forest))
  text  = if stats[:locale_count] == 1
            I18n.t('i18n_tasks.data_stats.text_single_locale', **stats)
          else
            I18n.t('i18n_tasks.data_stats.text', **stats)
          end
  title = Rainbow(I18n.t('i18n_tasks.data_stats.title', **stats.slice(:locales))).bright
  print_info "#{Rainbow(title).cyan} #{Rainbow(text).cyan}"
end
inconsistent_interpolations(forest = task.inconsistent_interpolations) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 27
def inconsistent_interpolations(forest = task.inconsistent_interpolations)
  if forest.present?
    print_title inconsistent_interpolations_title(forest)
    show_tree(forest)
  else
    print_success I18n.t('i18n_tasks.inconsistent_interpolations.none')
  end
end
missing_keys(forest = task.missing_keys) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 9
def missing_keys(forest = task.missing_keys)
  forest = collapse_missing_tree! forest
  if forest.present?
    print_title missing_title(forest)
    print_table headings: [Rainbow(I18n.t('i18n_tasks.common.locale')).cyan.bright,
                           Rainbow(I18n.t('i18n_tasks.common.key')).cyan.bright,
                           I18n.t('i18n_tasks.missing.details_title')] do |t|
      t.rows = sort_by_attr!(forest_to_attr(forest)).map do |a|
        [{ value: Rainbow(format_locale(a[:locale])).cyan, alignment: :center },
         format_key(a[:key], a[:data]),
         missing_key_info(a)]
      end
    end
  else
    print_success I18n.t('i18n_tasks.missing.none')
  end
end
mv_results(results) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 86
def mv_results(results)
  results.each do |(from, to)|
    if to
      print_info "#{Rainbow(from).cyan} #{Rainbow('⮕').yellow.bright} #{Rainbow(to).cyan}"
    else
      print_info "#{Rainbow(from).red}#{Rainbow(' 🗑').red.bright}"
    end
  end
end
show_tree(tree) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 72
def show_tree(tree)
  print_locale_key_value_data_table tree.root_key_value_data(true)
end
unused_keys(tree = task.unused_keys) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 52
def unused_keys(tree = task.unused_keys)
  keys = tree.root_key_value_data(true)
  if keys.present?
    print_title unused_title(keys)
    print_locale_key_value_data_table keys
  else
    print_success I18n.t('i18n_tasks.unused.none')
  end
end
used_keys(used_tree = task.used_tree) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 36
def used_keys(used_tree = task.used_tree)
  # For the used tree we may have usage nodes that are not leaves as references.
  keys_nodes = used_tree.nodes.select { |node| node.data[:occurrences].present? }.map do |node|
    [node.full_key(root: false), node]
  end
  print_title used_title(keys_nodes, used_tree.first.root.data[:key_filter])
  # Group multiple nodes
  if keys_nodes.present?
    keys_nodes.sort! { |a, b| a[0] <=> b[0] }.each do |key, node|
      print_occurrences node, key
    end
  else
    print_error I18n.t('i18n_tasks.usages.none')
  end
end

Private Instance Methods

first_occurrence(leaf) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 204
def first_occurrence(leaf)
  # @type [I18n::Tasks::Scanners::KeyOccurrences]
  occurrences = leaf[:data][:occurrences]
  # @type [I18n::Tasks::Scanners::Occurrence]
  first = occurrences.first
  [
    Rainbow("#{first.path}:#{first.line_num}").green,
    ("(#{I18n.t 'i18n_tasks.common.n_more', count: occurrences.length - 1})" if occurrences.length > 1)
  ].compact.join(' ')
end
format_key(key, data) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 120
def format_key(key, data)
  if data[:ref_info]
    from, to = data[:ref_info]
    resolved = key[0...to.length]
    after    = key[to.length..-1]
    "  #{Rainbow(from).yellow}#{Rainbow(after).cyan}\n" \
    "#{Rainbow('⮕').yellow.bright} #{Rainbow(resolved).yellow.bright}"
  else
    Rainbow(key).cyan
  end
end
format_reference_desc(node_data) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 136
def format_reference_desc(node_data)
  return nil unless node_data

  case node_data[:ref_type]
  when :reference_usage
    Rainbow('(ref)').yellow.bright
  when :reference_usage_resolved
    Rainbow('(resolved ref)').yellow.bright
  when :reference_usage_key
    Rainbow('(ref key)').yellow.bright
  end
end
format_value(val) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 132
def format_value(val)
  val.is_a?(Symbol) ? "#{Rainbow('⮕ ').yellow.bright}#{Rainbow(val).yellow}" : val.to_s.strip
end
highlight_key(full_key, line, range = (0..-1)) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 215
def highlight_key(full_key, line, range = (0..-1))
  line.dup.tap do |s|
    s[range] = s[range].sub(full_key) do |m|
      highlight_string m
    end
  end
end
indent(txt, n = 2) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 190
def indent(txt, n = 2)
  txt.gsub(/^/, ' ' * n)
end
key_occurrence(full_key, occurrence) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 198
def key_occurrence(full_key, occurrence)
  location = Rainbow("#{occurrence.path}:#{occurrence.line_num}").green
  source   = highlight_key(occurrence.raw_key || full_key, occurrence.line, occurrence.line_pos..-1).strip
  "#{location} #{source}"
end
missing_key_info(leaf) click to toggle source
# File lib/i18n/tasks/reports/terminal.rb, line 108
def missing_key_info(leaf)
  case leaf[:type]
  when :missing_used
    first_occurrence leaf
  when :missing_plural
    leaf[:data][:missing_keys].join(', ')
  else
    "#{Rainbow(leaf[:data][:missing_diff_locale]).cyan} "\
    "#{format_value(leaf[:value].is_a?(String) ? leaf[:value].strip : leaf[:value])}"
  end
end
print_error(message) click to toggle source
print_info(message) click to toggle source
print_locale_key_value_data_table(locale_key_value_datas) click to toggle source
print_occurrences(node, full_key = node.full_key) click to toggle source
print_success(message) click to toggle source
print_table(opts, &block) click to toggle source
print_title(title) click to toggle source