Refactor statuses to static

This commit is contained in:
Martin Lensment 2014-09-02 15:48:48 +03:00
parent 5f277ae2bb
commit 710ac1db92
5 changed files with 47 additions and 13 deletions

View file

@ -26,9 +26,7 @@ class Domain < ActiveRecord::Base
has_many :domain_nameservers, dependent: :delete_all has_many :domain_nameservers, dependent: :delete_all
has_many :nameservers, through: :domain_nameservers has_many :nameservers, through: :domain_nameservers
has_many :domain_statuses, -> { has_many :domain_statuses, dependent: :delete_all
joins(:setting).where(settings: { setting_group_id: SettingGroup.domain_statuses.id })
}, dependent: :delete_all
has_many :domain_transfers, dependent: :delete_all has_many :domain_transfers, dependent: :delete_all
@ -134,10 +132,13 @@ class Domain < ActiveRecord::Base
next next
end end
setting = SettingGroup.domain_statuses.settings.find_by(value: x[:value]) unless DomainStatus::STATUSES.include?(x[:value])
add_epp_error('2302', 'status', x[:value], [:domain_statuses, :not_found])
next
end
domain_statuses.build( domain_statuses.build(
setting: setting, value: x[:value],
description: x[:description] description: x[:description]
) )
end end
@ -176,7 +177,7 @@ class Domain < ActiveRecord::Base
def detach_statuses(status_list) def detach_statuses(status_list)
to_delete = [] to_delete = []
status_list.each do |x| status_list.each do |x|
status = domain_statuses.joins(:setting).where(settings: { value: x[:value] }) status = domain_statuses.find_by(value: x[:value])
if status.blank? if status.blank?
add_epp_error('2303', 'status', x[:value], [:domain_statuses, :not_found]) add_epp_error('2303', 'status', x[:value], [:domain_statuses, :not_found])
else else

View file

@ -7,11 +7,31 @@ class DomainStatus < ActiveRecord::Base
} }
belongs_to :domain belongs_to :domain
belongs_to :setting # belongs_to :setting
delegate :value, :code, to: :setting # delegate :value, :code, to: :setting
validates :setting, uniqueness: { scope: :domain_id } # validates :setting, uniqueness: { scope: :domain_id }
CLIENT_DELETE_PROHIBITED = 'clientDeleteProhibited'
SERVER_DELETE_PROHIBITED = 'serverDeleteProhibited'
CLIENT_HOLD = 'clientHold'
SERVER_HOLD = 'serverHold'
CLIENT_RENEW_PROHIBITED = 'clientRenewProhibited'
SERVER_RENEW_PROHIBITED = 'serverRenewProhibited'
CLIENT_TRANSFER_PROHIBITED = 'clientTransferProhibited'
SERVER_TRANSFER_PROHIBITED = 'serverTransferProhibited'
CLIENT_UPDATE_PROHIBITED = 'clientUpdateProhibited'
SERVER_UPDATE_PROHIBITED = 'serverUpdateProhibited'
INACTIVE = 'inactive'
OK = 'ok'
PENDING_CREATE = 'pendingCreate'
PENDING_DELETE = 'pendingDelete'
PENDING_RENEW = 'pendingRenew'
PENDING_TRANSFER = 'pendingTransfer'
PENDING_UPDATE = 'pendingUpdate'
STATUSES = [CLIENT_DELETE_PROHIBITED, SERVER_DELETE_PROHIBITED, CLIENT_HOLD, SERVER_HOLD, CLIENT_RENEW_PROHIBITED, SERVER_RENEW_PROHIBITED, CLIENT_TRANSFER_PROHIBITED, SERVER_TRANSFER_PROHIBITED, CLIENT_UPDATE_PROHIBITED, SERVER_UPDATE_PROHIBITED, INACTIVE, OK, PENDING_CREATE, PENDING_DELETE, PENDING_RENEW, PENDING_TRANSFER, PENDING_UPDATE]
def epp_code_map def epp_code_map
{ {

View file

@ -0,0 +1,10 @@
class RefactorDomainStatuses < ActiveRecord::Migration
def change
add_column :domain_statuses, :value, :string
remove_column :domain_statuses, :setting_id
sg = SettingGroup.find_by(code: 'domain_statuses')
sg.settings.delete_all
sg.delete
end
end

View file

@ -11,7 +11,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20140828133057) do ActiveRecord::Schema.define(version: 20140902121843) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -84,8 +84,8 @@ ActiveRecord::Schema.define(version: 20140828133057) do
create_table "domain_statuses", force: true do |t| create_table "domain_statuses", force: true do |t|
t.integer "domain_id" t.integer "domain_id"
t.integer "setting_id"
t.string "description" t.string "description"
t.string "value"
end end
create_table "domain_transfers", force: true do |t| create_table "domain_transfers", force: true do |t|

View file

@ -308,7 +308,7 @@ describe 'EPP Domain', epp: true do
it 'returns domain info' do it 'returns domain info' do
d = Domain.first d = Domain.first
d.domain_statuses.create(setting: Setting.find_by(code: 'client_hold'), description: 'Payment overdue.') d.domain_statuses.create(value: DomainStatus::CLIENT_HOLD, description: 'Payment overdue.')
d.nameservers.create(hostname: 'ns1.example.com', ipv4: '192.168.1.1', ipv6: '1080:0:0:0:8:800:200C:417A') d.nameservers.create(hostname: 'ns1.example.com', ipv4: '192.168.1.1', ipv6: '1080:0:0:0:8:800:200C:417A')
response = epp_request(domain_info_xml, :xml) response = epp_request(domain_info_xml, :xml)
@ -374,7 +374,6 @@ describe 'EPP Domain', epp: true do
expect(d.domain_statuses.count).to eq(2) expect(d.domain_statuses.count).to eq(2)
expect(d.domain_statuses.first.description).to eq('Payment overdue.') expect(d.domain_statuses.first.description).to eq('Payment overdue.')
expect(d.domain_statuses.first.value).to eq('clientHold') expect(d.domain_statuses.first.value).to eq('clientHold')
expect(d.domain_statuses.first.code).to eq('client_hold')
expect(d.domain_statuses.last.value).to eq('clientUpdateProhibited') expect(d.domain_statuses.last.value).to eq('clientUpdateProhibited')
@ -383,6 +382,10 @@ describe 'EPP Domain', epp: true do
expect(response[:results][0][:msg]).to eq('Nameserver already exists on this domain') expect(response[:results][0][:msg]).to eq('Nameserver already exists on this domain')
expect(response[:results][0][:value]).to eq('ns1.example.com') expect(response[:results][0][:value]).to eq('ns1.example.com')
expect(response[:results][1][:msg]).to eq('Nameserver already exists on this domain') expect(response[:results][1][:msg]).to eq('Nameserver already exists on this domain')
expect(response[:results][2][:msg]).to eq('Status already exists on this domain')
expect(response[:results][2][:value]).to eq('clientHold')
expect(response[:results][3][:msg]).to eq('Status already exists on this domain')
expect(response[:results][3][:value]).to eq('clientUpdateProhibited')
expect(d.domain_statuses.count).to eq(2) expect(d.domain_statuses.count).to eq(2)
end end