From 2924bf60862e642aa1cd19525af546988f984e80 Mon Sep 17 00:00:00 2001 From: Toks Date: Sat, 26 Oct 2013 00:38:45 -0400 Subject: [PATCH] Clean up pool version diffs Related to #1724 --- app/helpers/pool_versions_helper.rb | 19 +++++++++++-------- app/models/pool_version.rb | 19 +++++++++++++++++++ 2 files changed, 30 insertions(+), 8 deletions(-) diff --git a/app/helpers/pool_versions_helper.rb b/app/helpers/pool_versions_helper.rb index dfe665eb3..e80871825 100644 --- a/app/helpers/pool_versions_helper.rb +++ b/app/helpers/pool_versions_helper.rb @@ -1,14 +1,17 @@ module PoolVersionsHelper - def pool_version_diff(current) - prev = PoolVersion.where(["pool_id = ? and updated_at < ?", current.pool_id, current.updated_at]).order("updated_at desc").first + def pool_version_diff(pool_version) + html = "" - if prev.nil? - return current.post_id_array.map {|x| '' + x.to_s + ''}.join(" ").html_safe - end + html << pool_version.changes[:added_posts].map do |post_id| + '' + post_id.to_s + '' + end.join(" ") - added = current.post_id_array - prev.post_id_array - removed = prev.post_id_array - current.post_id_array + html << " " - (added.map {|x| '' + x.to_s + ''}.join(" ") + " " + removed.map {|x| '' + x.to_s + ''}.join(" ")).html_safe + html << pool_version.changes[:removed_posts].map do |post_id| + '' + post_id.to_s + '' + end.join(" ") + + return html.html_safe end end diff --git a/app/models/pool_version.rb b/app/models/pool_version.rb index c63a11207..341e4714b 100644 --- a/app/models/pool_version.rb +++ b/app/models/pool_version.rb @@ -49,4 +49,23 @@ class PoolVersion < ActiveRecord::Base def post_id_array @post_id_array ||= post_ids.scan(/\d+/).map(&:to_i) end + + def diff(version) + new_posts = post_id_array + old_posts = version.present? ? version.post_id_array : [] + + return { + :added_posts => new_posts - old_posts, + :removed_posts => old_posts - new_posts, + :unchanged_posts => new_posts & old_posts + } + end + + def changes + @changes ||= diff(previous) + end + + def previous + PoolVersion.where(["pool_id = ? and updated_at < ?", pool_id, updated_at]).order("updated_at desc").first + end end