From 028aa31232ce6ca8c244703edd6ce179e010a097 Mon Sep 17 00:00:00 2001 From: Vladimir Krylov Date: Tue, 22 Mar 2016 15:17:36 +0200 Subject: [PATCH] Story#115762063 - all contacts are using the same versions logic --- app/models/concerns/versions.rb | 18 ++++++++++++++++++ app/views/admin/domain_versions/_version.haml | 13 ++++++------- 2 files changed, 24 insertions(+), 7 deletions(-) diff --git a/app/models/concerns/versions.rb b/app/models/concerns/versions.rb index 768cf021e..9af2b3640 100644 --- a/app/models/concerns/versions.rb +++ b/app/models/concerns/versions.rb @@ -55,4 +55,22 @@ module Versions domains.each(&:touch_with_version) end end + + module ClassMethods + def all_versions_for(ids, time) + ver_klass = paper_trail_version_class + from_history = ver_klass.where(item_id: ids). + order(:item_id). + preceding(time + 1, true). + select("distinct on (item_id) #{ver_klass.table_name}.*"). + map do |ver| + o = new(ver.object) + ver.object_changes.to_h.each { |k, v| o[k]=v[-1] } + o + end + not_in_history = where(id: (ids - from_history.map(&:id))) + + from_history + not_in_history + end + end end diff --git a/app/views/admin/domain_versions/_version.haml b/app/views/admin/domain_versions/_version.haml index 53d97059e..47a2e597b 100644 --- a/app/views/admin/domain_versions/_version.haml +++ b/app/views/admin/domain_versions/_version.haml @@ -6,11 +6,10 @@ - if domain.present? - if version # normal history - children = HashWithIndifferentAccess.new(version.children) - - nameservers = NameserverVersion.where(item_id: children[:nameservers]).order(:item_id).preceding(version.created_at + 1, true).select("distinct on (item_id) #{NameserverVersion.table_name}.*").map{|ver| o=Nameserver.new(ver.object); ver.object_changes.to_h.each{|k,v| o[k]=v[-1] };o } - -#- nameservers = children[:nameservers].map{|id| Nameserver.new(id: id).safe_version_at(version.created_at)} - - tech_contacts = Contact.where(id: children[:tech_contacts]).map{|o| o.safe_version_at(version.created_at)} - - admin_contacts = Contact.where(id: children[:admin_contacts]).map{|o| o.safe_version_at(version.created_at)} - - registrant = Contact.where(id: children[:registrant]).map{|o| o.safe_version_at(version.created_at)} + - nameservers = Nameserver.all_versions_for(children[:nameservers], version.created_at) + - tech_contacts = Contact.all_versions_for(children[:tech_contacts], version.created_at) + - admin_contacts = Contact.all_versions_for(children[:admin_contacts], version.created_at) + - registrant = Contact.all_versions_for(children[:registrant], version.created_at) - event = version.event - creator = plain_username(version.terminator) - else # pending history @@ -87,8 +86,8 @@ - Array(nameservers).each do |ns| = ns[:hostname] %br - = ns[:ipv4] - = ns[:ipv6] + = ns[:ipv4].presence + = ns[:ipv6].presence %br %td