Version refactored

This commit is contained in:
Priit Tark 2015-01-30 23:25:46 +02:00
parent c1949e7069
commit 3e2be53853
48 changed files with 379 additions and 147 deletions

View file

@ -0,0 +1,12 @@
module VersionSession
extend ActiveSupport::Concern
included do
before_save :add_session
def add_session
self.session = PaperSession.session
true
end
end
end

View file

@ -5,6 +5,7 @@ module Versions
included do
has_paper_trail class_name: "#{model_name}Version"
# add creator and updator
before_create :add_creator
before_create :add_updator
before_update :add_updator
@ -18,5 +19,14 @@ module Versions
self.updator_str = ::PaperTrail.whodunnit
true
end
# callbacks
def touch_domain_version
domain.try(:touch_with_version)
end
def touch_domains_version
domains.each(&:touch_with_version)
end
end
end

View file

@ -1,5 +1,7 @@
class Domain < ActiveRecord::Base
include Versions # version/domain_version.rb
has_paper_trail class_name: "DomainVersion", meta: { children: :children_log }
# TODO: whois requests ip whitelist for full info for own domains and partial info for other domains
# TODO: most inputs should be trimmed before validatation, probably some global logic?
paginates_per 10 # just for showoff
@ -50,6 +52,10 @@ class Domain < ActiveRecord::Base
before_create :set_validity_dates
before_create :attach_default_contacts
after_save :manage_automatic_statuses
before_save :touch_always_version
def touch_always_version
self.updated_at = Time.now
end
validates :name_dirty, domain_name: true, uniqueness: true
validates :period, numericality: { only_integer: true }
@ -280,11 +286,20 @@ class Domain < ActiveRecord::Base
end
end
def children_log
log = HashWithIndifferentAccess.new
log[:admin_contacts] = admin_contacts.map {|ac| ac.attributes}
log[:tech_contacts] = tech_contacts.map {|tc| tc.attributes}
log[:nameservers] = nameservers.map {|ns| ns.attributes}
log[:owner_contact] = [owner_contact.try(:attributes)]
log
end
class << self
def convert_period_to_time(period, unit)
return period.to_i.days if unit == 'd'
return period.to_i.days if unit == 'd'
return period.to_i.months if unit == 'm'
return period.to_i.years if unit == 'y'
return period.to_i.years if unit == 'y'
end
end
end

View file

@ -162,36 +162,36 @@ class Epp::EppDomain < Domain
end
def detach_contacts(contact_list)
to_delete = []
to_destroy = []
contact_list.each do |k, v|
v.each do |x|
contact = domain_contacts.joins(:contact).where(contacts: { code: x[:contact] }, contact_type: k.to_s)
if contact.blank?
add_epp_error('2303', 'contact', x[:contact], [:domain_contacts, :not_found])
else
to_delete << contact
to_destroy << contact
end
end
end
domain_contacts.delete(to_delete)
domain_contacts.destroy(to_destroy)
end
def detach_nameservers(ns_list)
to_delete = []
to_destroy = []
ns_list.each do |ns_attrs|
nameserver = nameservers.where(ns_attrs)
if nameserver.blank?
add_epp_error('2303', 'hostAttr', ns_attrs[:hostname], [:nameservers, :not_found])
else
to_delete << nameserver
to_destroy << nameserver
end
end
nameservers.delete(to_delete)
nameservers.destroy(to_destroy)
end
def detach_statuses(status_list)
to_delete = []
to_destroy = []
status_list.each do |x|
unless DomainStatus::CLIENT_STATUSES.include?(x[:value])
add_epp_error('2303', 'status', x[:value], [:domain_statuses, :not_found])
@ -202,11 +202,11 @@ class Epp::EppDomain < Domain
if status.blank?
add_epp_error('2303', 'status', x[:value], [:domain_statuses, :not_found])
else
to_delete << status
to_destroy << status
end
end
domain_statuses.delete(to_delete)
domain_statuses.destroy(to_destroy)
end
def attach_dnskeys(dnssec_data)
@ -258,13 +258,13 @@ class Epp::EppDomain < Domain
def detach_dnskeys(dnssec_data)
return false unless validate_dnssec_data(dnssec_data)
to_delete = []
to_destroy = []
dnssec_data[:ds_data].each do |x|
ds = dnskeys.where(ds_key_tag: x[:ds_key_tag])
if ds.blank?
add_epp_error('2303', 'keyTag', x[:key_tag], [:dnskeys, :not_found])
else
to_delete << ds
to_destroy << ds
end
end
@ -273,11 +273,11 @@ class Epp::EppDomain < Domain
if ds.blank?
add_epp_error('2303', 'publicKey', x[:public_key], [:dnskeys, :not_found])
else
to_delete << ds
to_destroy << ds
end
end
dnskeys.delete(to_delete)
dnskeys.destroy(to_destroy)
end
### RENEW ###

View file

@ -16,6 +16,8 @@ class Keyrelay < ActiveRecord::Base
validate :validate_expiry_relative_xor_expiry_absolute
after_save :touch_domain_version
def epp_code_map
{
'2005' => [

View file

@ -8,6 +8,7 @@ class Registrar < ActiveRecord::Base
validates :name, :reg_no, :address, :country, :email, presence: true
validates :name, :reg_no, uniqueness: true
after_save :touch_domains_version
validates :email, :billing_email, format: /@/, allow_blank: true

View file

@ -1,4 +1,5 @@
class AddressVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_addresses
self.sequence_name = :log_addresses_id_seq
end

View file

@ -1,4 +1,5 @@
class ApiUserVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_api_users
self.sequence_name = :log_api_users_id_seq
end

View file

@ -1,4 +1,5 @@
class ContactDisclosureVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_contact_disclosures
self.sequence_name = :log_contact_disclosures_id_seq
end

View file

@ -1,4 +1,5 @@
class ContactStatusVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_contact_statuses
self.sequence_name = :log_contact_statuses_id_seq
end

View file

@ -1,4 +1,5 @@
class ContactVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_contacts
self.sequence_name = :log_contacts_id_seq

View file

@ -1,4 +1,5 @@
class CountryVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_countries
self.sequence_name = :log_countries_id_seq
end

View file

@ -1,4 +1,5 @@
class DnskeyVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_dnskeys
self.sequence_name = :log_dnskeys_id_seq
end

View file

@ -1,4 +1,5 @@
class DomainContactVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_domain_contacts
self.sequence_name = :log_domain_contacts_id_seq
end

View file

@ -1,4 +1,5 @@
class DomainStatusVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_domain_statuses
self.sequence_name = :log_domain_statuses_id_seq
end

View file

@ -1,4 +1,5 @@
class DomainTransferVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_domain_transfers
self.sequence_name = :log_domain_transfers_id_seq
end

View file

@ -1,4 +1,6 @@
class DomainVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_domains
self.sequence_name = :log_domains_id_seq

View file

@ -1,4 +1,5 @@
class KeyrelayVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_keyrelays
self.sequence_name = :log_keyrelays_id_seq
end

View file

@ -1,4 +1,5 @@
class LegalDocumentVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_legal_documents
self.sequence_name = :log_legal_documents_id_seq
end

View file

@ -1,4 +1,5 @@
class MessageVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_messages
self.sequence_name = :log_messages_id_seq
end

View file

@ -1,4 +1,5 @@
class NameserverVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_nameservers
self.sequence_name = :log_nameservers_id_seq
end

View file

@ -1,4 +1,5 @@
class RegistrarVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_registrars
self.sequence_name = :log_registrars_id_seq
end

View file

@ -1,4 +1,5 @@
class ReservedDomainVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_reserved_domains
self.sequence_name = :log_reserved_domains_id_seq
end

View file

@ -1,4 +1,5 @@
class SettingVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_settings
self.sequence_name = :log_settings_id_seq
end

View file

@ -1,4 +1,5 @@
class UserVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_users
self.sequence_name = :log_users_id_seq
end

View file

@ -1,4 +1,5 @@
class ZonefileSettingVersion < PaperTrail::Version
include VersionSession
self.table_name = :log_zonefile_settings
self.sequence_name = :log_zonefile_settings_id_seq
end