lib/i18n/tasks/missing_keys.rb in i18n-tasks-0.6.3 vs lib/i18n/tasks/missing_keys.rb in i18n-tasks-0.7.0

- old
+ new

@@ -1,99 +1,98 @@ # coding: utf-8 module I18n::Tasks module MissingKeys + + MISSING_TYPES = { + used: {glyph: '✗', summary: 'used in code but missing from base locale'}, + diff: {glyph: '∅', summary: 'translated in one locale but not in the other'} + } + + def self.missing_keys_types + @missing_keys_types ||= MISSING_TYPES.keys + end + def missing_keys_types - @missing_keys_types ||= [:used, :diff] + MissingKeys.missing_keys_types end - # @param [:missing_used, :missing_diff] type (default nil) + # @param [:missing_used, :missing_diff] types (default nil) # @return [Siblings] def missing_keys(opts = {}) - locales = Array(opts[:locales]).presence || self.locales - types = (Array(opts[:types]).presence || missing_keys_types).map(&:to_s) - validate_missing_types! types + locales = opts[:locales].presence || self.locales + types = opts[:types].presence || missing_keys_types base = opts[:base_locale] || base_locale - tree = Data::Tree::Siblings.new - - types.each do |type| - tree.merge! send(:"missing_#{type}_forest", locales, base) + types.inject(empty_forest) do |f, type| + f.merge! send(:"missing_#{type}_forest", locales, base) end - tree end def eq_base_keys(opts = {}) locales = Array(opts[:locales]).presence || self.locales - (locales - [base_locale]).inject(Data::Tree::Siblings.new) { |tree, locale| + (locales - [base_locale]).inject(empty_forest) { |tree, locale| tree.merge! equal_values_tree(locale, base_locale) } end def missing_diff_forest(locales, base = base_locale) - tree = Data::Tree::Siblings.new + tree = empty_forest # present in base but not locale (locales - [base]).each { |locale| tree.merge! missing_diff_tree(locale, base) } if locales.include?(base) # present in locale but not base (self.locales - [base]).each { |locale| - tree.merge! missing_diff_tree(base, locale).set_root_key(base) + tree.merge! missing_diff_tree(base, locale) } end tree end def missing_used_forest(locales, base = base_locale) if locales.include?(base) missing_used_tree(base) else - Data::Tree::Siblings.new + empty_forest end end - def missing_tree(locale, compared_to, collapse_plural = true) + def missing_tree(locale, compared_to) if locale == compared_to missing_used_tree locale else - missing_diff_tree locale, compared_to, collapse_plural + missing_diff_tree locale, compared_to end end # keys present in compared_to, but not in locale - def missing_diff_tree(locale, compared_to = base_locale, collapse_plural = true) + def missing_diff_tree(locale, compared_to = base_locale) data[compared_to].select_keys { |key, _node| - locale_key_missing?(locale, key) - }.set_root_key(locale, type: :missing_diff).tap { |t| collapse_plural_nodes!(t) if collapse_plural } + locale_key_missing? locale, depluralize_key(key, locale) + }.set_root_key!(locale, type: :missing_diff).keys { |_key, node| + if node.data.key?(:path) + # change path and locale to base + node.data.update path: LocalePathname.replace_locale(node.data[:path], node.data[:locale], locale), locale: locale + end + } end # keys used in the code missing translations in locale def missing_used_tree(locale) used_tree(strict: true).select_keys { |key, _node| locale_key_missing?(locale, key) - }.set_root_key(locale, type: :missing_used) + }.set_root_key!(locale, type: :missing_used) end def equal_values_tree(locale, compare_to = base_locale) base = data[compare_to].first.children data[locale].select_keys(root: false) { |key, node| other_node = base[key] other_node && node.value == other_node.value && !ignore_key?(key, :eq_base, locale) - }.set_root_key(locale, type: :eq_base) + }.set_root_key!(locale, type: :eq_base) end def locale_key_missing?(locale, key) !key_value?(key, locale) && !ignore_key?(key, :missing) - end - - private - - def validate_missing_types!(types) - valid_types = missing_keys_types.map(&:to_s) - types = types.map(&:to_s) - invalid_types = types - valid_types - if invalid_types.present? - raise CommandError.new("Unknown types: #{invalid_types * ', '}. Valid types are: #{valid_types * ', '}.") - end - true end end end