class AdLocalize::Mappers::ValueRangeToWording
Public Instance Methods
map(value_range:)
click to toggle source
# File lib/ad_localize/mappers/value_range_to_wording.rb, line 4 def map(value_range:) values = value_range.values analyze_header(first_row: values.first) return unless valid_header? translations = map_rows(values: values) locale_wordings = translations.group_by(&:locale).map do |locale, group| Entities::LocaleWording.new(locale: locale, translations: group) end Entities::Wording.new(locale_wordings: locale_wordings, default_locale: @locale_mapping.keys.first) end
Private Instance Methods
analyze_header(first_row:)
click to toggle source
# File lib/ad_localize/mappers/value_range_to_wording.rb, line 34 def analyze_header(first_row:) @header = first_row @key_index = first_row.index(Constant::CSV_WORDING_KEYS_COLUMN) @locale_mapping = {} first_row[@key_index.succ..-1].each_index do |relative_index| absolute_index = @key_index.succ + relative_index next if first_row[absolute_index].blank? || first_row[absolute_index].include?(Constant::COMMENT_KEY_COLUMN_IDENTIFIER) @locale_mapping[first_row[absolute_index]] = { key_index: absolute_index } comment_column_name = "#{Constant::COMMENT_KEY_COLUMN_IDENTIFIER} #{first_row[absolute_index]}" @locale_mapping[first_row[absolute_index]][:comment_index] = first_row.index(comment_column_name) end end
map_row(row:)
click to toggle source
# File lib/ad_localize/mappers/value_range_to_wording.rb, line 47 def map_row(row:) csv_wording_key = row[@key_index] return if csv_wording_key.blank? key = Entities::Key.new(label: csv_wording_key) @locale_mapping.map do |locale, index_mapping| comment = index_mapping[:comment_index].nil? ? nil : row[index_mapping[:comment_index]] Entities::Translation.new( locale: locale, key: key, value: row[index_mapping[:key_index]], comment: comment ) end end
map_rows(values:)
click to toggle source
# File lib/ad_localize/mappers/value_range_to_wording.rb, line 18 def map_rows(values:) translations = [] validator = Validators::KeyValidator.new values[1..-1].each do |row| row_translations = map_row(row: row) next if row_translations.blank? current_key = row_translations.first.key next if validator.has_warnings?(current_key) translations.concat(row_translations) end translations end
valid_header?()
click to toggle source
# File lib/ad_localize/mappers/value_range_to_wording.rb, line 62 def valid_header? @key_index.present? || @locale_mapping.keys.size.positive? end