diff --git a/app/models/contact_network.rb b/app/models/contact_network.rb index 552f204..23d3c79 100644 --- a/app/models/contact_network.rb +++ b/app/models/contact_network.rb @@ -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 diff --git a/app/views/staffs/contact_networks/index.html.erb b/app/views/staffs/contact_networks/index.html.erb index 2ede95d..e9906c4 100644 --- a/app/views/staffs/contact_networks/index.html.erb +++ b/app/views/staffs/contact_networks/index.html.erb @@ -8,7 +8,7 @@ - <%= ContactNetwork.human_attribute_name :nickname %> + <%= ContactNetwork.human_attribute_name :codename %> <%= ContactNetwork.human_attribute_name :public_name %> @@ -20,7 +20,7 @@ <% @contact_networks.each do |contact_network| %> - <%= contact_network.nickname %> + <%= contact_network.codename %> <%= contact_network.public_name %> <% end %> diff --git a/config/locales/activerecord/en.yml b/config/locales/activerecord/en.yml index fdae4a5..e7a3203 100644 --- a/config/locales/activerecord/en.yml +++ b/config/locales/activerecord/en.yml @@ -38,7 +38,7 @@ en: person: Person contact_network: id: ID - nickname: Nickname + codename: Codename public_name: Public name federal_subject: id: ID diff --git a/config/locales/activerecord/ru.yml b/config/locales/activerecord/ru.yml index 4db0086..00accdf 100644 --- a/config/locales/activerecord/ru.yml +++ b/config/locales/activerecord/ru.yml @@ -38,7 +38,7 @@ ru: person: Человек contact_network: id: ID - nickname: Имя пользователя + codename: Кодовое имя public_name: Публичное имя federal_subject: id: ID diff --git a/db/migrate/20181129203927_initial_migration.rb b/db/migrate/20181129203927_initial_migration.rb index 1590f6d..517ca07 100644 --- a/db/migrate/20181129203927_initial_migration.rb +++ b/db/migrate/20181129203927_initial_migration.rb @@ -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 diff --git a/db/seeds.rb b/db/seeds.rb index 1a7eb36..9b311fe 100644 --- a/db/seeds.rb +++ b/db/seeds.rb @@ -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 diff --git a/db/structure.sql b/db/structure.sql index fa1421e..a9a262f 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -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); -- diff --git a/factories/contact_networks.rb b/factories/contact_networks.rb index ec0d271..68c7c79 100644 --- a/factories/contact_networks.rb +++ b/factories/contact_networks.rb @@ -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 diff --git a/spec/models/contact_network_spec.rb b/spec/models/contact_network_spec.rb index 213eb9c..9711bda 100644 --- a/spec/models/contact_network_spec.rb +++ b/spec/models/contact_network_spec.rb @@ -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 '' }