1
0
Fork 0

Rename column ContactNetwork#nickname to #codename

This commit is contained in:
Alex Kotov 2019-08-18 04:51:03 +05:00
parent e6e979041a
commit cc9c846cc9
Signed by: kotovalexarian
GPG Key ID: 553C0EBBEB5D5F08
9 changed files with 47 additions and 25 deletions

View File

@ -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

View File

@ -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 %>

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
-- --

View File

@ -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

View File

@ -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 '' }