СНИЛС
Генерация, валидация и форматирование СНИЛС.
Read this README in English (Читать это README на английском)
Установка
Добавьте следующую строчку в Gemfile в вашем приложении:
gem 'snils'
И затем выполните:
$ bundle
Или установите вручную:
$ gem install snils
Использование
Генерирование новых СНИЛСов:
Snils.new.formatted
#=> "216-471-647 63"
Проверка корректности СНИЛСов:
Snils.new("21647164763").valid?
#=> true
Snils.new("21647164760").valid?
#=> false
Snils.new("21647164760").errors
#=> [:invalid]
Snils.new("216471647").errors
#=> [[:wrong_length, {:count=>11}], :invalid]
Валидация в Ruby on Rails для атрибутов моделей:
Измените Gemfile, чтобы он подключал
snils/railsgem 'snils', require: 'snils/rails'- Добавьте валидацию
:snilsк требуемым атрибутам
validates :snils, presence: true, uniqueness: true, snils: true- Добавьте валидацию
Генерация СНИЛСов в фабриках для тестов:
FactoryGirl.define do
sequence :snils do |_|
Snils.new.to_s
end
factory :user do
snils
end
end
Рекомендуемый рабочий процесс для проектов на Ruby on Rails
Используйте draper, чтобы форматировать СНИЛС для отображения
# app/decorators/user_decorator.rb class UserDecorator < Draper::Decorator delegate_all def snils @formatted_snils ||= Snils.new(object.snils).formatted if object.snils end endОчищайте СНИЛС при записи в атрибут модели
# app/models/user.rb class User < ActiveRecord::Base validates :snils, presence: true, uniqueness: true, snils: true def snils=(value) Snils.new(value).raw end end
С такой настройкой вы всегда будете хранить в БД значение, состоящее только из цифр, а пользователю всегда будете отображать красиво форматированный СНИЛС.
Помощь в разработке
- Сделайте форк проекта в своём github-аккаунте. ( https://github.com/Envek/snils/fork )
- Создайте отдельную ветвь разработки. (
git checkout -b my-new-feature) - Внесите в неё желаемые изменения (не забудьте про тесты!) и сделайте коммит(ы). (
git commit -am 'Add some feature') - Запушьте изменения (
git push origin my-new-feature) - Создайте новый Pull Request