exe/wca_i18n in wca_i18n-0.3.0 vs exe/wca_i18n in wca_i18n-0.4.0

- old
+ new

@@ -1,9 +1,10 @@ #!/usr/bin/env ruby require 'optparse' require 'wca_i18n' +require 'colorize' def main verbose = false OptionParser.new do |opts| opts.banner = "Usage: #{__FILE__} [options] <base_translation_file> <translation_files>" @@ -20,38 +21,50 @@ throw "Please pass a list of translation_files" unless translation_files base_translation = load_translation(base_translation_file) translations = translation_files.map { |f| load_translation(f) }.reject { |t| t.locale == base_translation.locale } - compare_base_with_translations(base_translation, translations.sort_by!(&:locale), verbose) + perfect = compare_base_with_translations(base_translation, translations.sort_by!(&:locale), verbose) + exit (perfect ? 0 : 1) end def load_translation(filename) locale = File.basename(filename, ".*") WcaI18n::Translation.new(locale, File.read(filename)) end def compare_base_with_translations(base_translation, translations, verbose) + total_issue_count = 0 translations.each do |translation| diff = translation.compare_to(base_translation) - puts "#{translation.locale}:#{indent(format_diff(diff, verbose), 1)}" + translation_issue_count = diff.values.map(&:length).sum + total_issue_count += translation_issue_count + + prefix = (translation_issue_count == 0 ? "✔".green : "✗".red) + puts "#{prefix} #{translation.locale}:#{indent(format_diff(diff, verbose), 1)}" end + + total_issue_count == 0 end def format_diff(diff, verbose=false) types = [:missing, :outdated, :unused] + total = diff.values.map(&:length).sum - pretty_counts = types.map do |type| - contexts = diff[type] - pretty = "#{contexts.length} #{type.to_s}" - pretty += ":\n" + indent(format_contexts(contexts), 1) if verbose - pretty - end - - if verbose - "\n" + pretty_counts.join("\n") + if total == 0 + "Up to date" + elsif verbose + pretty_counts = types.map do |type| + contexts = diff[type] + pretty = "• #{contexts.length} #{type.to_s}" + if contexts.length > 0 + pretty += ":\n#{indent(format_contexts(contexts), 1)}" + end + pretty + end + "#{total} total\n" + pretty_counts.join("\n") else - total = diff.values.map(&:length).sum + pretty_counts = types.map { |type| "#{diff[type].length} #{type.to_s}" } "#{total} total = #{pretty_counts.join(" + ")}" end end def format_contexts(contexts)