diff --git a/app/controllers/concerns/shared/user_stamper.rb b/app/controllers/concerns/shared/user_stamper.rb new file mode 100644 index 000000000..f0ee8c6e1 --- /dev/null +++ b/app/controllers/concerns/shared/user_stamper.rb @@ -0,0 +1,15 @@ +module Shared::UserStamper + extend ActiveSupport::Concern + + def stamp obj + return false if obj.nil? || !obj.has_attribute?( :created_by_id && :updated_by_id ) + + if obj.new_record? + obj.created_by_id = current_epp_user.id + else + obj.updated_by_id = current_epp_user.id + end + + return true + end +end diff --git a/app/controllers/epp/commands_controller.rb b/app/controllers/epp/commands_controller.rb index 38b2b065d..c8cb040d6 100644 --- a/app/controllers/epp/commands_controller.rb +++ b/app/controllers/epp/commands_controller.rb @@ -2,6 +2,7 @@ class Epp::CommandsController < ApplicationController include Epp::Common include Epp::DomainsHelper include Epp::ContactsHelper + include Shared::UserStamper private def create diff --git a/app/helpers/epp/contacts_helper.rb b/app/helpers/epp/contacts_helper.rb index 7320a47c6..085c002ea 100644 --- a/app/helpers/epp/contacts_helper.rb +++ b/app/helpers/epp/contacts_helper.rb @@ -21,6 +21,8 @@ module Epp::ContactsHelper zip: ph[:postalInfo][:pc] ) + stamp @contact + @contact.save render '/epp/contacts/create' end diff --git a/db/migrate/20140804095654_add_user_stamps_to_contact.rb b/db/migrate/20140804095654_add_user_stamps_to_contact.rb new file mode 100644 index 000000000..cc274ecdf --- /dev/null +++ b/db/migrate/20140804095654_add_user_stamps_to_contact.rb @@ -0,0 +1,6 @@ +class AddUserStampsToContact < ActiveRecord::Migration + def change + add_column :contacts, :created_by_id, :integer + add_column :contacts, :updated_by_id, :integer + end +end diff --git a/db/schema.rb b/db/schema.rb index e7b2b6dfd..6a44334c7 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20140801140249) do +ActiveRecord::Schema.define(version: 20140804095654) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -39,6 +39,8 @@ ActiveRecord::Schema.define(version: 20140801140249) do t.string "ident" t.string "ident_type" t.string "org_name" + t.integer "created_by_id" + t.integer "updated_by_id" end create_table "countries", force: true do |t| diff --git a/spec/epp/contact_spec.rb b/spec/epp/contact_spec.rb index 6d3ebd2eb..b7c159b1b 100644 --- a/spec/epp/contact_spec.rb +++ b/spec/epp/contact_spec.rb @@ -12,6 +12,8 @@ describe 'EPP Contact', epp: true do expect(response[:result_code]).to eq('1000') expect(response[:msg]).to eq('Command completed successfully') expect(response[:clTRID]).to eq('ABC-12345') + expect(Contact.first.created_by_id).to be 1 + expect(Contact.first.updated_by_id).to be nil expect(Contact.count).to eq(1) expect(Contact.first.org_name).to eq('Example Inc.') @@ -27,6 +29,10 @@ describe 'EPP Contact', epp: true do expect(Contact.first.name).to eq("John Doe") expect(Contact.first.ident_type).to eq("op") + expect(Contact.first.updated_by_id).to be 1 + #nil because we fabricate, hence stamping in controller won't happen + expect(Contact.first.created_by_id).to be nil + expect(Contact.count).to eq(1) end #TODO tests for missing/invalid/etc ident