SNILS
Generating, validating and formatting SNILS number (Russian pension insurance individual account number).
Генерация, валидация и форматирование СНИЛС (Страхового номера индивидуального лицевого счёта).
Read this README in Russian (Читать это README на русском)
Installation
Add this line to your application's Gemfile:
gem 'snils'
And then execute:
$ bundle
Or install it yourself as:
$ gem install snils
Usage
Generate new SNILS:
Snils.new.formatted
#=> "216-471-647 63"
Validate SNILS:
Snils.new("21647164763").valid?
#=> true
Snils.new("21647164760").valid?
#=> false
Snils.new("21647164760").errors
#=> [:invalid]
Snils.new("216471647").errors
#=> [[:wrong_length, {:count=>11}], :invalid]
Validating Rails model attributes:
Modify your gemfile to require
snils/railsgem 'snils', require: 'snils/rails'Add
:snilsvalidation to SNILS attributesvalidates :snils, presence: true, uniqueness: true, snils: true
Generating SNILSes in factories for tests:
FactoryGirl.define do
sequence :snils do |_|
Snils.new.to_s
end
factory :user do
snils
end
end
Recommended workflow for Ruby on Rails projects
Use draper gem to format SNILS for views
# app/decorators/user_decorator.rb class UserDecorator < Draper::Decorator delegate_all def snils @formatted_snils ||= Snils.new(object.snils).formatted end endSanitize SNILSes on attribute write
# 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
With this setup you will always store raw (only digits) value in database and always will show pretty formatted SNILS to users.
Contributing
- Fork it ( https://github.com/Envek/snils/fork )
- Create your feature branch (
git checkout -b my-new-feature) - Commit your changes (
git commit -am 'Add some feature') - Push to the branch (
git push origin my-new-feature) - Create a new Pull Request