Logging added for most models

This commit is contained in:
Priit Tark 2015-01-29 12:50:59 +02:00
parent 09a816d5a8
commit c3675c1b2a
46 changed files with 285 additions and 28 deletions

View file

@ -1,5 +1,6 @@
# rubocop: disable Metrics/ClassLength
class ApiUser < ActiveRecord::Base
include Versions # version/api_user_version.rb
# TODO: should have max request limit per day
belongs_to :registrar
has_many :contacts

View file

@ -1,10 +0,0 @@
module LogTable
extend ActiveSupport::Concern
included do
# one plase to define log tables
log_table_name = "log_#{table_name.sub('_versions', '').tableize}"
self.table_name = log_table_name
self.sequence_name = log_table_name
end
end

View file

@ -1,4 +1,5 @@
class ContactDisclosure < ActiveRecord::Base
include Versions # version/contact_disclosure_version.rb
belongs_to :contact
def attributes_with_flag

View file

@ -1,4 +1,5 @@
class ContactStatus < ActiveRecord::Base
include Versions # version/contact_status_version.rb
include EppErrors
belongs_to :contact

View file

@ -1,4 +1,8 @@
class Country < ActiveRecord::Base
include Versions # version/country_version.rb
validates :name, presence: true
def to_s
name
end

View file

@ -1,4 +1,5 @@
class Dnskey < ActiveRecord::Base
include Versions # version/dnskey_version.rb
include EppErrors
belongs_to :domain

View file

@ -1,4 +1,5 @@
class DomainContact < ActiveRecord::Base
include Versions # version/domain_contact_version.rb
include EppErrors
belongs_to :contact
belongs_to :domain

View file

@ -1,4 +1,5 @@
class DomainTransfer < ActiveRecord::Base
include Versions # version/domain_transfer_version.rb
belongs_to :domain
belongs_to :transfer_from, class_name: 'Registrar'

View file

@ -1,4 +1,5 @@
class Keyrelay < ActiveRecord::Base
include Versions # version/keyrelay_version.rb
include EppErrors
belongs_to :domain

View file

@ -1,4 +1,5 @@
class LegalDocument < ActiveRecord::Base
include Versions # version/legal_document_version.rb
belongs_to :documentable, polymorphic: true
TYPES = %w(pdf bdoc ddoc zip rar gz tar 7z)

View file

@ -1,4 +1,5 @@
class Message < ActiveRecord::Base
include Versions # version/message_version.rb
belongs_to :registrar
before_create -> { self.queued = true }

View file

@ -1,4 +1,5 @@
class Registrar < ActiveRecord::Base
include Versions # version/registrar_version.rb
belongs_to :country
has_many :domains, dependent: :restrict_with_error
has_many :contacts, dependent: :restrict_with_error

View file

@ -1,2 +1,3 @@
class ReservedDomain < ActiveRecord::Base
include Versions # version/reserved_domain_version.rb
end

View file

@ -1,2 +1,3 @@
class Setting < RailsSettings::CachedSettings
include Versions # version/setting_version.rb
end

View file

@ -1,4 +1,5 @@
class User < ActiveRecord::Base
include Versions # version/user_version.rb
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :trackable, :timeoutable

View file

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

View file

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

View file

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

View file

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

View file

@ -1,8 +1,8 @@
class ContactVersion < PaperTrail::Version
include LogTable
include UserEvents
# self.table_name = :post_versions
# self.sequence_name = :post_version_id_seq
self.table_name = :log_contacts
self.sequence_name = :log_contacts_id_seq
scope :deleted, -> { where(event: 'destroy') }
# include UserEvents
# scope :deleted, -> { where(event: 'destroy') }
end

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,5 +1,7 @@
class DomainVersion < PaperTrail::Version
include LogTable
self.table_name = :log_domains
self.sequence_name = :log_domains_id_seq
include UserEvents
# TODO: remove old
# include DomainVersionObserver if Setting.whois_enabled # unless Setting.whois_enabled

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -1,4 +1,5 @@
class ZonefileSetting < ActiveRecord::Base
include Versions # version/zonefile_setting_version.rb
validates :origin, :ttl, :refresh, :retry, :expire, :minimum_ttl, :email, presence: true
validates :ttl, :refresh, :retry, :expire, :minimum_ttl, numericality: { only_integer: true }

View file

@ -1,6 +1,10 @@
# the following line is required for PaperTrail >= 4.0.0 with Rails
PaperTrail::Rails::Engine.eager_load!
PaperTrail::Version.module_eval do
self.abstract_class = true
end
# Store console and rake changes in versions
if defined?(::Rails::Console)
PaperTrail.whodunnit = "#{`whoami`.strip}: console"
@ -8,6 +12,3 @@ elsif File.basename($PROGRAM_NAME) == "rake"
PaperTrail.whodunnit = "#{`whoami`.strip}: rake #{ARGV.join ' '}"
end
PaperTrail::Version.module_eval do
self.abstract_class = true
end

View file

@ -0,0 +1,11 @@
class AddVersions < ActiveRecord::Migration
def change
if ActiveRecord::Base.connection.table_exists? 'versions'
rename_table :versions, :depricated_versions
end
create_table :versions do |t|
t.text :depricated_table_but_somehow_paper_trail_tests_fails_without_it
end
end
end

View file

@ -11,8 +11,12 @@
#
# It's strongly recommended that you check this file into your version control system.
<<<<<<< HEAD
ActiveRecord::Schema.define(version: 20150130085458) do
=======
ActiveRecord::Schema.define(version: 20150129114042) do
>>>>>>> Logging added for most models
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -127,6 +131,10 @@ ActiveRecord::Schema.define(version: 20150130085458) do
t.string "digest"
end
create_table "depricated_versions", force: :cascade do |t|
t.datetime "created_at"
end
create_table "dnskeys", force: :cascade do |t|
t.integer "domain_id"
t.integer "flags"
@ -538,14 +546,11 @@ ActiveRecord::Schema.define(version: 20150130085458) do
t.string "billing_address"
t.datetime "created_at"
t.datetime "updated_at"
<<<<<<< HEAD
t.string "phone"
t.string "email"
t.string "billing_email"
=======
t.integer "creator_id"
t.integer "updater_id"
>>>>>>> Added pure PaperTrail stack
end
create_table "reserved_domains", force: :cascade do |t|
@ -587,6 +592,10 @@ ActiveRecord::Schema.define(version: 20150130085458) do
t.integer "updater_id"
end
create_table "versions", force: :cascade do |t|
t.text "depricated_table_but_somehow_paper_trail_tests_fails_without_it"
end
create_table "zonefile_settings", force: :cascade do |t|
t.string "origin"
t.integer "ttl"

View file

@ -0,0 +1 @@
Will generate custom PaperTrail version model

View file

@ -0,0 +1,4 @@
class <%= class_name %>Version < PaperTrail::Version
self.table_name = :log_<%= file_name.tableize %>
self.sequence_name = :log_<%= file_name.tableize %>_id_seq
end

View file

@ -0,0 +1,11 @@
class VersionGenerator < Rails::Generators::NamedBase
source_root File.expand_path("../templates", __FILE__)
def create_version_file
template "version.rb.erb", "app/models/version/#{file_name}_version.rb"
end
def class_name
file_name.camelize
end
end

View file

@ -3,10 +3,55 @@ require 'rails_helper'
describe Address do
it { should belong_to(:contact) }
it { should belong_to(:country) }
context 'about class' do
it 'should have versioning enabled?' do
Address.paper_trail_enabled_for_model?.should == true
end
it 'should have custom log prexied table name for versions table' do
AddressVersion.table_name.should == 'log_addresses'
end
end
context 'with invalid attribute' do
before :all do
@address = Address.new
end
it 'should not be valid' do
@address.valid?
@address.errors.full_messages.should match_array([
])
end
it 'should not have any versions' do
@address.versions.should == []
end
end
context 'with valid attributes' do
before :all do
@address = Fabricate(:address)
end
it 'should be valid' do
@address.valid?
@address.errors.full_messages.should match_array([])
end
it 'should not have one version' do
with_versioning do
@address.versions.should == []
@address.zip = 'New zip'
@address.save
@address.versions.size.should == 1
end
end
end
end
describe Address, '.extract_params' do
it 'returns params hash' do
Fabricate(:country, iso: 'EE')
ph = { postalInfo: { name: 'fred', addr: { cc: 'EE', city: 'Village', street: 'street1' } } }

View file

@ -2,6 +2,54 @@ require 'rails_helper'
describe ContactDisclosure do
it { should belong_to(:contact) }
context 'about class' do
it 'should have versioning enabled?' do
Country.paper_trail_enabled_for_model?.should == true
end
it 'should have custom log prexied table name for versions table' do
CountryVersion.table_name.should == 'log_countries'
end
end
context 'with invalid attribute' do
before :all do
@contact_disclosure = Country.new
end
it 'should not be valid' do
@contact_disclosure.valid?
@contact_disclosure.errors.full_messages.should match_array([
"Name is missing"
])
end
it 'should not have any versions' do
@contact_disclosure.versions.should == []
end
end
context 'with valid attributes' do
before :all do
@contact_disclosure = Fabricate(:contact_disclosure)
end
it 'should be valid' do
@contact_disclosure.valid?
@contact_disclosure.errors.full_messages.should match_array([])
end
it 'should not have one version' do
with_versioning do
@contact_disclosure.versions.should == []
@contact_disclosure.name = 'New name'
@contact_disclosure.save
@contact_disclosure.versions.size.should == 1
end
end
end
end
describe '.extract_attributes' do

View file

@ -0,0 +1,54 @@
require 'rails_helper'
describe Country do
before :all do
@epp_user = Fabricate(:country)
end
context 'about class' do
it 'should have versioning enabled?' do
Country.paper_trail_enabled_for_model?.should == true
end
it 'should have custom log prexied table name for versions table' do
CountryVersion.table_name.should == 'log_countries'
end
end
context 'with invalid attribute' do
before :all do
@country = Country.new
end
it 'should not be valid' do
@country.valid?
@country.errors.full_messages.should match_array([
"Name is missing"
])
end
it 'should not have any versions' do
@country.versions.should == []
end
end
context 'with valid attributes' do
before :all do
@country = Fabricate(:country)
end
it 'should be valid' do
@country.valid?
@country.errors.full_messages.should match_array([])
end
it 'should not have one version' do
with_versioning do
@country.versions.should == []
@country.name = 'New name'
@country.save
@country.versions.size.should == 1
end
end
end
end

View file

@ -26,8 +26,8 @@ Dir[Rails.root.join('spec/support/**/*.rb')].each { |f| require f }
ActiveRecord::Migration.maintain_test_schema!
RSpec.configure do |config|
config.filter_run focus: true
config.run_all_when_everything_filtered = true
# config.filter_run focus: true
# config.run_all_when_everything_filtered = true
# If you're not using ActiveRecord, or you'd prefer not to run each of your
# examples within a transaction, remove the following line or assign false