Rename column ContactNetwork#nickname to #codename
This commit is contained in:
parent
e6e979041a
commit
cc9c846cc9
|
@ -1,7 +1,7 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
class ContactNetwork < ApplicationRecord
|
class ContactNetwork < ApplicationRecord
|
||||||
NICKNAME_RE = /\A[a-z][a-z0-9]*(_[a-z0-9]+)*\z/.freeze
|
CODENAME_RE = /\A[a-z][a-z0-9]*(_[a-z0-9]+)*\z/.freeze
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# Callbacks #
|
# Callbacks #
|
||||||
|
@ -14,10 +14,10 @@ class ContactNetwork < ApplicationRecord
|
||||||
# Validations #
|
# Validations #
|
||||||
###############
|
###############
|
||||||
|
|
||||||
validates :nickname,
|
validates :codename,
|
||||||
presence: true,
|
presence: true,
|
||||||
length: { in: 3..36 },
|
length: { in: 3..36 },
|
||||||
format: NICKNAME_RE,
|
format: CODENAME_RE,
|
||||||
uniqueness: { case_sensitive: false }
|
uniqueness: { case_sensitive: false }
|
||||||
|
|
||||||
validates :public_name, allow_nil: true, length: { in: 1..255 }
|
validates :public_name, allow_nil: true, length: { in: 1..255 }
|
||||||
|
@ -25,12 +25,12 @@ class ContactNetwork < ApplicationRecord
|
||||||
private
|
private
|
||||||
|
|
||||||
def turn_blanks_into_nils
|
def turn_blanks_into_nils
|
||||||
self.nickname = nil if nickname.blank?
|
self.codename = nil if codename.blank?
|
||||||
self.public_name = nil if public_name.blank?
|
self.public_name = nil if public_name.blank?
|
||||||
end
|
end
|
||||||
|
|
||||||
def strip_extra_spaces
|
def strip_extra_spaces
|
||||||
self.nickname = nickname&.strip
|
self.codename = codename&.strip
|
||||||
self.public_name = public_name&.strip
|
self.public_name = public_name&.strip
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
<th scope="col">
|
<th scope="col">
|
||||||
<%= ContactNetwork.human_attribute_name :nickname %>
|
<%= ContactNetwork.human_attribute_name :codename %>
|
||||||
</th>
|
</th>
|
||||||
<th scope="col">
|
<th scope="col">
|
||||||
<%= ContactNetwork.human_attribute_name :public_name %>
|
<%= ContactNetwork.human_attribute_name :public_name %>
|
||||||
|
@ -20,7 +20,7 @@
|
||||||
<tbody>
|
<tbody>
|
||||||
<% @contact_networks.each do |contact_network| %>
|
<% @contact_networks.each do |contact_network| %>
|
||||||
<tr>
|
<tr>
|
||||||
<td scope="row"><%= contact_network.nickname %></td>
|
<td scope="row"><%= contact_network.codename %></td>
|
||||||
<td><%= contact_network.public_name %></td>
|
<td><%= contact_network.public_name %></td>
|
||||||
</tr>
|
</tr>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
|
@ -38,7 +38,7 @@ en:
|
||||||
person: Person
|
person: Person
|
||||||
contact_network:
|
contact_network:
|
||||||
id: ID
|
id: ID
|
||||||
nickname: Nickname
|
codename: Codename
|
||||||
public_name: Public name
|
public_name: Public name
|
||||||
federal_subject:
|
federal_subject:
|
||||||
id: ID
|
id: ID
|
||||||
|
|
|
@ -38,7 +38,7 @@ ru:
|
||||||
person: Человек
|
person: Человек
|
||||||
contact_network:
|
contact_network:
|
||||||
id: ID
|
id: ID
|
||||||
nickname: Имя пользователя
|
codename: Кодовое имя
|
||||||
public_name: Публичное имя
|
public_name: Публичное имя
|
||||||
federal_subject:
|
federal_subject:
|
||||||
id: ID
|
id: ID
|
||||||
|
|
|
@ -59,6 +59,15 @@ private
|
||||||
$$;
|
$$;
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
|
func :is_codename, <<~SQL
|
||||||
|
(str text) RETURNS boolean IMMUTABLE LANGUAGE plpgsql AS
|
||||||
|
$$
|
||||||
|
BEGIN
|
||||||
|
RETURN is_nickname(str);
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
SQL
|
||||||
|
|
||||||
func :is_good_text, <<~SQL
|
func :is_good_text, <<~SQL
|
||||||
(str text) RETURNS boolean IMMUTABLE LANGUAGE plpgsql AS
|
(str text) RETURNS boolean IMMUTABLE LANGUAGE plpgsql AS
|
||||||
$$
|
$$
|
||||||
|
@ -161,7 +170,7 @@ private
|
||||||
create_table :contact_networks do |t|
|
create_table :contact_networks do |t|
|
||||||
t.timestamps null: false
|
t.timestamps null: false
|
||||||
|
|
||||||
t.string :nickname, null: false, index: { unique: true }
|
t.string :codename, null: false, index: { unique: true }
|
||||||
t.string :public_name, null: false, index: { unique: true }
|
t.string :public_name, null: false, index: { unique: true }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -384,8 +393,8 @@ private
|
||||||
is_good_small_text(value)
|
is_good_small_text(value)
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
constraint :contact_networks, :nickname, <<~SQL
|
constraint :contact_networks, :codename, <<~SQL
|
||||||
is_nickname(nickname)
|
is_codename(codename)
|
||||||
SQL
|
SQL
|
||||||
|
|
||||||
constraint :contact_networks, :public_name, <<~SQL
|
constraint :contact_networks, :public_name, <<~SQL
|
||||||
|
|
|
@ -28,13 +28,13 @@ end
|
||||||
CSV.foreach(
|
CSV.foreach(
|
||||||
contact_networks_filename,
|
contact_networks_filename,
|
||||||
col_sep: '|',
|
col_sep: '|',
|
||||||
) do |(id, nickname, public_name)|
|
) do |(id, codename, public_name)|
|
||||||
id = Integer(id.strip)
|
id = Integer(id.strip)
|
||||||
nickname.strip!
|
codename.strip!
|
||||||
public_name.strip!
|
public_name.strip!
|
||||||
|
|
||||||
ContactNetwork.where(id: id).first_or_create! do |new_contact_network|
|
ContactNetwork.where(id: id).first_or_create! do |new_contact_network|
|
||||||
new_contact_network.nickname = nickname
|
new_contact_network.codename = codename
|
||||||
new_contact_network.public_name = public_name
|
new_contact_network.public_name = public_name
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -161,6 +161,19 @@ END;
|
||||||
$$;
|
$$;
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Name: is_codename(text); Type: FUNCTION; Schema: public; Owner: -
|
||||||
|
--
|
||||||
|
|
||||||
|
CREATE FUNCTION public.is_codename(str text) RETURNS boolean
|
||||||
|
LANGUAGE plpgsql IMMUTABLE
|
||||||
|
AS $$
|
||||||
|
BEGIN
|
||||||
|
RETURN is_nickname(str);
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: is_good_big_text(text); Type: FUNCTION; Schema: public; Owner: -
|
-- Name: is_good_big_text(text); Type: FUNCTION; Schema: public; Owner: -
|
||||||
--
|
--
|
||||||
|
@ -403,9 +416,9 @@ CREATE TABLE public.contact_networks (
|
||||||
id bigint NOT NULL,
|
id bigint NOT NULL,
|
||||||
created_at timestamp(6) without time zone NOT NULL,
|
created_at timestamp(6) without time zone NOT NULL,
|
||||||
updated_at timestamp(6) without time zone NOT NULL,
|
updated_at timestamp(6) without time zone NOT NULL,
|
||||||
nickname character varying NOT NULL,
|
codename character varying NOT NULL,
|
||||||
public_name character varying NOT NULL,
|
public_name character varying NOT NULL,
|
||||||
CONSTRAINT nickname CHECK (public.is_nickname((nickname)::text)),
|
CONSTRAINT codename CHECK (public.is_codename((codename)::text)),
|
||||||
CONSTRAINT public_name CHECK (public.is_good_small_text((public_name)::text))
|
CONSTRAINT public_name CHECK (public.is_good_small_text((public_name)::text))
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1085,10 +1098,10 @@ CREATE UNIQUE INDEX index_active_storage_blobs_on_key ON public.active_storage_b
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
-- Name: index_contact_networks_on_nickname; Type: INDEX; Schema: public; Owner: -
|
-- Name: index_contact_networks_on_codename; Type: INDEX; Schema: public; Owner: -
|
||||||
--
|
--
|
||||||
|
|
||||||
CREATE UNIQUE INDEX index_contact_networks_on_nickname ON public.contact_networks USING btree (nickname);
|
CREATE UNIQUE INDEX index_contact_networks_on_codename ON public.contact_networks USING btree (codename);
|
||||||
|
|
||||||
|
|
||||||
--
|
--
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
FactoryBot.define do
|
FactoryBot.define do
|
||||||
factory :contact_network, class: ContactNetwork do
|
factory :contact_network, class: ContactNetwork do
|
||||||
nickname { Faker::Internet.username 3..36, %w[_] }
|
codename { Faker::Internet.username 3..36, %w[_] }
|
||||||
public_name { Faker::Company.unique.name }
|
public_name { Faker::Company.unique.name }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -5,18 +5,18 @@ require 'rails_helper'
|
||||||
RSpec.describe ContactNetwork do
|
RSpec.describe ContactNetwork do
|
||||||
subject { create :contact_network }
|
subject { create :contact_network }
|
||||||
|
|
||||||
describe '#nickname' do
|
describe '#codename' do
|
||||||
def allow_value(*)
|
def allow_value(*)
|
||||||
super.for :nickname
|
super.for :codename
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to validate_presence_of :nickname }
|
it { is_expected.to validate_presence_of :codename }
|
||||||
|
|
||||||
it do
|
it do
|
||||||
is_expected.to validate_length_of(:nickname).is_at_least(3).is_at_most(36)
|
is_expected.to validate_length_of(:codename).is_at_least(3).is_at_most(36)
|
||||||
end
|
end
|
||||||
|
|
||||||
it { is_expected.to validate_uniqueness_of(:nickname).case_insensitive }
|
it { is_expected.to validate_uniqueness_of(:codename).case_insensitive }
|
||||||
|
|
||||||
it { is_expected.not_to allow_value nil }
|
it { is_expected.not_to allow_value nil }
|
||||||
it { is_expected.not_to allow_value '' }
|
it { is_expected.not_to allow_value '' }
|
||||||
|
|
Reference in New Issue