faker_spanish_documents 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 2544e5f94aed1c398cabbd6e7ce101a9aa6fc6a5b41cfdfe12fb0fd173ed7147
4
+ data.tar.gz: ab82a168780f59505d15d0bd097820104b57e348545327467e5d045c17108d3b
5
+ SHA512:
6
+ metadata.gz: 39891aba45bdd57587d44a53955893bd5113a72580c6b15c4741219c1f10494e6ef73e1d498fe4cc51120363526b76b826bee96300cd20518951a91afce0b35e
7
+ data.tar.gz: 7319379e3bac40943b7981dc5390a1dc792948f06f7bf73fdcfa51ff3cec3bb044108018abe0ced0dc1ab3765cd76888f1bef2b369da013e15c871a894f8961f
data/.rspec ADDED
@@ -0,0 +1,3 @@
1
+ --format documentation
2
+ --color
3
+ --require spec_helper
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ group :development, :test do
6
+ gem 'rspec'
7
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,38 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ faker_spanish_documents (0.1.0)
5
+ faker (~> 2.18)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ concurrent-ruby (1.1.9)
11
+ diff-lcs (1.3)
12
+ faker (2.18.0)
13
+ i18n (>= 1.6, < 2)
14
+ i18n (1.8.10)
15
+ concurrent-ruby (~> 1.0)
16
+ rspec (3.7.0)
17
+ rspec-core (~> 3.7.0)
18
+ rspec-expectations (~> 3.7.0)
19
+ rspec-mocks (~> 3.7.0)
20
+ rspec-core (3.7.1)
21
+ rspec-support (~> 3.7.0)
22
+ rspec-expectations (3.7.0)
23
+ diff-lcs (>= 1.2.0, < 2.0)
24
+ rspec-support (~> 3.7.0)
25
+ rspec-mocks (3.7.0)
26
+ diff-lcs (>= 1.2.0, < 2.0)
27
+ rspec-support (~> 3.7.0)
28
+ rspec-support (3.7.1)
29
+
30
+ PLATFORMS
31
+ ruby
32
+
33
+ DEPENDENCIES
34
+ faker_spanish_documents!
35
+ rspec
36
+
37
+ BUNDLED WITH
38
+ 2.1.4
data/README.md ADDED
@@ -0,0 +1,25 @@
1
+ # Faker::SpanishDocuments
2
+
3
+ Gem to generate fake spanish documents as DNI, CIF or NIE. It's based on the well-known gem [Faker](https://github.com/stympy/faker).
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'faker_spanish_documents'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install faker_spanish_documents
18
+
19
+ ## Usage
20
+
21
+ Its use is pretty easy, it exposes three method one for each type of document.
22
+ ```ruby
23
+ Faker::SpanishDocuments.dni
24
+ Faker::SpanishDocuments.cif
25
+ Faker::SpanishDocuments.nie
@@ -0,0 +1,15 @@
1
+ Gem::Specification.new do |s|
2
+ s.name = 'faker_spanish_documents'
3
+ s.version = '0.1.0'
4
+ s.description = 'A simple faker to generate spanish documents as DNI, NIE or CIF'
5
+ s.summary = 'Generate valid DNI, NIE or CIF numbers'
6
+ s.authors = ['F. Padillo']
7
+ s.email = 'fpadillo@nosolosoftware.es'
8
+ s.homepage = 'https://github.com/nosolosoftware/faker_spanish'
9
+ s.license = 'MIT'
10
+ s.files = `git ls-files -z`.split("\x0").reject do |f|
11
+ f.match(%r{^(test|spec|features)/})
12
+ end
13
+
14
+ s.add_dependency 'faker', '~> 2.18'
15
+ end
@@ -0,0 +1,69 @@
1
+ require 'faker'
2
+ require 'faker_spanish_documents/version'
3
+
4
+ module Faker
5
+ class SpanishDocuments
6
+ NIF_LETTERS = 'TRWAGMYFPDXBNJZSQVHLCKE'.freeze
7
+ NIE_LETTERS = %w[X Y Z].freeze
8
+ CIF_LETTERS = %w[A B C D E F G H J N P Q R S U V W].freeze
9
+ CIF_LETTERS_NUMBER = 'PQSW'.freeze
10
+ CIF_CONTROL_LETTERS = 'JABCDEFGHI'.freeze
11
+
12
+ class << self
13
+ def dni
14
+ number = Faker::Number.number(digits: 8).to_i
15
+ "#{number}#{nif_letter(number)}"
16
+ end
17
+
18
+ def nie(letter=nil)
19
+ first_letter = letter && NIE_LETTERS.include?(letter) ? letter : NIE_LETTERS.sample
20
+ first_number = NIE_LETTERS.find_index { |e| e == first_letter }
21
+ number_part = Faker::Number.number(digits: 7)
22
+ number_for_calculation = "#{first_number}#{number_part}".to_i
23
+
24
+ "#{first_letter}#{number_part}#{nif_letter(number_for_calculation)}"
25
+ end
26
+
27
+ def cif(letter=nil)
28
+ first_letter = letter && CIF_LETTERS.include?(letter) ? letter : CIF_LETTERS.sample
29
+ province_code = Faker::Number.number(digits: 2)
30
+ random_number = Faker::Number.number(digits: 5)
31
+ number = "#{province_code}#{random_number}"
32
+
33
+ control_code = cif_control_code(number, first_letter)
34
+
35
+ "#{first_letter}#{number}#{control_code}"
36
+ end
37
+
38
+ private
39
+
40
+ def cif_control_code(number, first_letter)
41
+ total = number
42
+ .split('')
43
+ .each_with_index
44
+ .inject(0) do |acc, (element, index)|
45
+ acc += if index.even?
46
+ (element.to_i * 2).digits.inject(:+)
47
+ else
48
+ element.to_i
49
+ end
50
+ end
51
+
52
+ decimal = total.digits.first
53
+ control = decimal != 0 ? 10 - decimal : decimal
54
+
55
+ if CIF_LETTERS_NUMBER.include?(first_letter) || number.start_with?('00')
56
+ # Control code will be a letter
57
+ CIF_CONTROL_LETTERS[control]
58
+ else
59
+ # Control code will be a number
60
+ control
61
+ end
62
+ end
63
+
64
+ def nif_letter(number)
65
+ NIF_LETTERS[number % NIF_LETTERS.length]
66
+ end
67
+ end
68
+ end
69
+ end
File without changes
metadata ADDED
@@ -0,0 +1,63 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: faker_spanish_documents
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - F. Padillo
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-06-30 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: faker
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.18'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.18'
27
+ description: A simple faker to generate spanish documents as DNI, NIE or CIF
28
+ email: fpadillo@nosolosoftware.es
29
+ executables: []
30
+ extensions: []
31
+ extra_rdoc_files: []
32
+ files:
33
+ - ".rspec"
34
+ - Gemfile
35
+ - Gemfile.lock
36
+ - README.md
37
+ - faker_spanish_documents.gemspec
38
+ - lib/faker_spanish_documents.rb
39
+ - lib/faker_spanish_documents/version.rb
40
+ homepage: https://github.com/nosolosoftware/faker_spanish
41
+ licenses:
42
+ - MIT
43
+ metadata: {}
44
+ post_install_message:
45
+ rdoc_options: []
46
+ require_paths:
47
+ - lib
48
+ required_ruby_version: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ">="
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '0'
58
+ requirements: []
59
+ rubygems_version: 3.1.2
60
+ signing_key:
61
+ specification_version: 4
62
+ summary: Generate valid DNI, NIE or CIF numbers
63
+ test_files: []