app/services/decidim/accountability/diff_renderer.rb in decidim-accountability-0.18.0 vs app/services/decidim/accountability/diff_renderer.rb in decidim-accountability-0.18.1

- old
+ new

@@ -1,88 +1,21 @@ # frozen_string_literal: true module Decidim module Accountability - class DiffRenderer - def initialize(version) - @version = version - end - - # Renders the diff of the given changeset. Takes into account translatable fields. - # - # Returns a Hash, where keys are the fields that have changed and values are an - # array, the first element being the previous value and the last being the new one. - def diff - version.changeset.inject({}) do |diff, (attribute, values)| - attribute = attribute.to_sym - type = attribute_types[attribute] - - if type.blank? - diff - else - parse_changeset(attribute, values, type, diff) - end - end - end - + class DiffRenderer < BaseDiffRenderer private - attr_reader :version - - # Lists which attributes will be diffable and how - # they should be rendered. + # Lists which attributes will be diffable and how they should be rendered. def attribute_types { start_date: :date, end_date: :date, description: :i18n_html, title: :i18n, decidim_scope_id: :scope, progress: :percentage } - end - - def parse_i18n_changeset(attribute, values, type, diff) - values.last.each_key do |locale, _value| - first_value = values.first.try(:[], locale) - last_value = values.last.try(:[], locale) - next if first_value == last_value - - attribute_locale = "#{attribute}_#{locale}".to_sym - diff.update( - attribute_locale => { - type: type, - label: generate_i18n_label(attribute, locale), - old_value: first_value, - new_value: last_value - } - ) - end - diff - end - - def parse_changeset(attribute, values, type, diff) - return parse_i18n_changeset(attribute, values, type, diff) if [:i18n, :i18n_html].include?(type) - - diff.update( - attribute => { - type: type, - label: I18n.t(attribute, scope: "activemodel.attributes.result"), - old_value: values[0], - new_value: values[1] - } - ) - end - - def generate_i18n_label(attribute, locale) - label = I18n.t(attribute, scope: "activemodel.attributes.result") - locale_name = if I18n.available_locales.include?(locale.to_sym) - I18n.t("locale.name", locale: locale) - else - locale - end - - "#{label} (#{locale_name})" end end end end