Skip to content
/ snils Public

Generating, validating and formatting SNILS number / Генерирует, проверяет и форматирует СНИЛС

License

Notifications You must be signed in to change notification settings

Envek/snils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SNILS

Gem Version Continuous Integration status PullReview stats

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:

  1. Modify your gemfile to require snils/rails

    gem 'snils', require: 'snils/rails'
  2. Add :snils validation to SNILS attributes

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

Generating SNILSes in factories for tests:

FactoryGirl.define do
  # You can generate random valid SNILSes
  sequence :snils do |_|
    Snils.generate
  end
  # Or sequenced ones
  sequence :snils do |counter|
    Snils.generate(counter)
  end

  factory :user do
    snils
  end
end

Recommended workflow for Ruby on Rails projects

  1. 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
    end
  2. Sanitize SNILSes on attribute write

    # 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

With this setup you will always store raw (only digits) value in database and always will show pretty formatted SNILS to users.

Contributing

  1. Fork it ( https://github.com/Envek/snils/fork )
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create a new Pull Request

About

Generating, validating and formatting SNILS number / Генерирует, проверяет и форматирует СНИЛС

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages