СНИЛС

Генерация, валидация и форматирование СНИЛС (Страхового номера индивидуального лицевого счёта).

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 для атрибутов моделей:

  1. Измените Gemfile, чтобы он подключал snils/rails

    gem 'snils', require: 'snils/rails'
    
  2. Добавьте валидацию :snils к требуемым атрибутам

    validates :snils, presence: true, uniqueness: true, snils: true
    

Генерация СНИЛСов в фабриках для тестов:

FactoryGirl.define do
  # Вы можете генерировать случайные корректные СНИЛСы
  sequence :snils do |_|
    Snils.generate
  end
  # Или последовательные
  sequence :snils do |counter|
    Snils.generate(counter)
  end

  factory :user do
    snils
  end
end

Рекомендуемый рабочий процесс для проектов на Ruby on Rails

  1. Используйте 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
    
  2. Очищайте СНИЛС при записи в атрибут модели

    # app/models/user.rb
    class User < ActiveRecord::Base
      validates :snils, presence: true, uniqueness: true, snils: true
    
      def snils=(value)
        write_attribute(:snils, Snils.new(value).raw)
      end
    end
    

С такой настройкой вы всегда будете хранить в БД значение, состоящее только из цифр, а пользователю всегда будете отображать красиво форматированный СНИЛС.

Помощь в разработке

  1. Сделайте форк проекта в своём github-аккаунте. ( github.com/Envek/snils/fork )

  2. Создайте отдельную ветвь разработки. (git checkout -b my-new-feature)

  3. Внесите в неё желаемые изменения (не забудьте про тесты!) и сделайте коммит(ы). (git commit -am 'Add some feature')

  4. Запушьте изменения (git push origin my-new-feature)

  5. Создайте новый Pull Request