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
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 #
@ -14,10 +14,10 @@ class ContactNetwork < ApplicationRecord
# Validations #
###############
validates :nickname,
validates :codename,
presence: true,
length: { in: 3..36 },
format: NICKNAME_RE,
format: CODENAME_RE,
uniqueness: { case_sensitive: false }
validates :public_name, allow_nil: true, length: { in: 1..255 }
@ -25,12 +25,12 @@ class ContactNetwork < ApplicationRecord
private
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?
end
def strip_extra_spaces
self.nickname = nickname&.strip
self.codename = codename&.strip
self.public_name = public_name&.strip
end
end

View File

@ -8,7 +8,7 @@
<thead>
<tr>
<th scope="col">
<%= ContactNetwork.human_attribute_name :nickname %>
<%= ContactNetwork.human_attribute_name :codename %>
</th>
<th scope="col">
<%= ContactNetwork.human_attribute_name :public_name %>
@ -20,7 +20,7 @@
<tbody>
<% @contact_networks.each do |contact_network| %>
<tr>
<td scope="row"><%= contact_network.nickname %></td>
<td scope="row"><%= contact_network.codename %></td>
<td><%= contact_network.public_name %></td>
</tr>
<% end %>

View File

@ -38,7 +38,7 @@ en:
person: Person
contact_network:
id: ID
nickname: Nickname
codename: Codename
public_name: Public name
federal_subject:
id: ID

View File

@ -38,7 +38,7 @@ ru:
person: Человек
contact_network:
id: ID
nickname: Имя пользователя
codename: Кодовое имя
public_name: Публичное имя
federal_subject:
id: ID

View File

@ -59,6 +59,15 @@ private
$$;
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
(str text) RETURNS boolean IMMUTABLE LANGUAGE plpgsql AS
$$
@ -161,7 +170,7 @@ private
create_table :contact_networks do |t|
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 }
end
@ -384,8 +393,8 @@ private
is_good_small_text(value)
SQL
constraint :contact_networks, :nickname, <<~SQL
is_nickname(nickname)
constraint :contact_networks, :codename, <<~SQL
is_codename(codename)
SQL
constraint :contact_networks, :public_name, <<~SQL

View File

@ -28,13 +28,13 @@ end
CSV.foreach(
contact_networks_filename,
col_sep: '|',
) do |(id, nickname, public_name)|
) do |(id, codename, public_name)|
id = Integer(id.strip)
nickname.strip!
codename.strip!
public_name.strip!
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
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: -
--
@ -403,9 +416,9 @@ CREATE TABLE public.contact_networks (
id bigint NOT NULL,
created_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,
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))
);
@ -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
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 }
end
end

View File

@ -5,18 +5,18 @@ require 'rails_helper'
RSpec.describe ContactNetwork do
subject { create :contact_network }
describe '#nickname' do
describe '#codename' do
def allow_value(*)
super.for :nickname
super.for :codename
end
it { is_expected.to validate_presence_of :nickname }
it { is_expected.to validate_presence_of :codename }
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
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 '' }