1
0
Fork 0

Add model PassportMap

This commit is contained in:
Alex Kotov 2018-12-02 19:16:16 +05:00
parent 7b65ced261
commit 6ac24de25f
No known key found for this signature in database
GPG Key ID: 4E831250F47DE154
9 changed files with 172 additions and 1 deletions

View File

@ -7,6 +7,8 @@ class Passport < ApplicationRecord
has_many_attached :images
has_one :passport_map, dependent: :restrict_with_exception
has_many :passport_confirmations, dependent: :restrict_with_exception
validates :confirmed,

View File

@ -0,0 +1,24 @@
# frozen_string_literal: true
class PassportMap < ApplicationRecord
enum sex: %i[male female]
belongs_to :passport
validates :passport_id, uniqueness: true
validates :surname, presence: true
validates :given_name, presence: true
validates :sex, presence: true
validates :date_of_birth, presence: true
validates :place_of_birth, presence: true
validates :series, presence: true
validates :number, presence: true
validates :issued_by, presence: true
validates :unit_code, presence: true
validates :date_of_issue, presence: true
before_validation do
self.patronymic = nil if patronymic.blank?
end
end

View File

@ -7,6 +7,9 @@ en:
passport:
one: Passport
other: Passports
passport_map:
one: Passport mapping
other: Passport mappings
country_state:
one: State
other: States
@ -43,6 +46,19 @@ en:
issued_by: Issued by
unit_code: Unit code
date_of_issue: Date of issue
passport_map:
id: ID
surname: Surname
given_name: Given names
patronymic: Patronymic
sex: Sex
date_of_birth: Date of birth
place_of_birth: Place of birth
series: Series
number: Number
issued_by: Issued by
unit_code: Unit code
date_of_issue: Date of issue
country_state:
id: ID
membership_applications: Membership applications

View File

@ -7,6 +7,9 @@ ru:
passport:
one: Паспорт
other: Паспорта
passport_map:
one: Отображение паспорта
other: Отображения паспортов
country_state:
one: Регион
other: Регионы
@ -43,6 +46,19 @@ ru:
issued_by: Кем выдан
unit_code: Код подразделения
date_of_issue: Дата выдачи
passport_map:
id: ID
surname: Фамилия
given_name: Имя
patronymic: Отчество
sex: Пол
date_of_birth: Дата рождения
place_of_birth: Место рождения
series: Серия
number: Номер
issued_by: Кем выдан
unit_code: Код подразделения
date_of_issue: Дата выдачи
country_state:
id: ID
membership_applications: Заявления на вступление

View File

@ -0,0 +1,24 @@
# frozen_string_literal: true
class CreatePassportMaps < ActiveRecord::Migration[5.2]
def change
create_table :passport_maps do |t|
t.timestamps null: false
t.references :passport, null: false,
index: { unique: true }, foreign_key: true
t.string :surname, null: false
t.string :given_name, null: false
t.string :patronymic
t.integer :sex, null: false
t.date :date_of_birth, null: false
t.string :place_of_birth, null: false
t.integer :series, null: false
t.integer :number, null: false
t.text :issued_by, null: false
t.string :unit_code, null: false
t.date :date_of_issue, null: false
end
end
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 2018_12_02_104848) do
ActiveRecord::Schema.define(version: 2018_12_02_140310) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
@ -87,6 +87,24 @@ ActiveRecord::Schema.define(version: 2018_12_02_104848) do
t.index ["passport_id"], name: "index_passport_confirmations_on_passport_id"
end
create_table "passport_maps", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.bigint "passport_id", null: false
t.string "surname", null: false
t.string "given_name", null: false
t.string "patronymic"
t.integer "sex", null: false
t.date "date_of_birth", null: false
t.string "place_of_birth", null: false
t.integer "series", null: false
t.integer "number", null: false
t.text "issued_by", null: false
t.string "unit_code", null: false
t.date "date_of_issue", null: false
t.index ["passport_id"], name: "index_passport_maps_on_passport_id", unique: true
end
create_table "passports", force: :cascade do |t|
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
@ -155,5 +173,6 @@ ActiveRecord::Schema.define(version: 2018_12_02_104848) do
add_foreign_key "membership_applications", "country_states"
add_foreign_key "passport_confirmations", "accounts"
add_foreign_key "passport_confirmations", "passports"
add_foreign_key "passport_maps", "passports"
add_foreign_key "users", "accounts"
end

View File

@ -0,0 +1,21 @@
# frozen_string_literal: true
FactoryBot.define do
factory :passport_map do
association :passport, factory: :passport_without_image
surname { Faker::Name.last_name }
given_name { Faker::Name.first_name }
patronymic { Faker::Name.first_name }
sex { Passport.sexes.keys.sample }
date_of_birth { Faker::Date.backward }
place_of_birth { Faker::Address.city }
series { rand 0..9999 }
number { rand 0..999_999 }
issued_by { Faker::Lorem.sentence }
unit_code do
"#{rand(0..999).to_s.rjust(3, '0')}-#{rand(0..999).to_s.rjust(3, '0')}"
end
date_of_issue { Faker::Date.backward }
end
end

View File

@ -0,0 +1,43 @@
# frozen_string_literal: true
require 'rails_helper'
RSpec.describe PassportMap do
subject { create :passport_map }
it { is_expected.to belong_to :passport }
it { is_expected.to validate_presence_of(:passport).with_message(:required) }
it { is_expected.to validate_presence_of :surname }
it { is_expected.to validate_presence_of :given_name }
it { is_expected.not_to validate_presence_of :patronymic }
it { is_expected.to validate_presence_of :sex }
it { is_expected.to validate_presence_of :date_of_birth }
it { is_expected.to validate_presence_of :place_of_birth }
it { is_expected.to validate_presence_of :series }
it { is_expected.to validate_presence_of :number }
it { is_expected.to validate_presence_of :issued_by }
it { is_expected.to validate_presence_of :unit_code }
it { is_expected.to validate_presence_of :date_of_issue }
it { is_expected.to validate_uniqueness_of :passport_id }
describe '#patronymic' do
context 'when it is empty' do
subject { create :passport_without_image, patronymic: '' }
specify do
expect(subject.patronymic).to eq nil
end
end
context 'when it is blank' do
subject { create :passport_without_image, patronymic: ' ' }
specify do
expect(subject.patronymic).to eq nil
end
end
end
end

View File

@ -5,6 +5,12 @@ require 'rails_helper'
RSpec.describe Passport do
subject { create :passport_without_image }
it do
is_expected.to \
have_one(:passport_map)
.dependent(:restrict_with_exception)
end
it do
is_expected.to \
have_many(:passport_confirmations)