identificamex 0.0.3 → 0.0.4
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 +4 -4
- data/.ruby-version +1 -1
- data/README.md +5 -1
- data/identificamex.gemspec +7 -7
- data/lib/curp_format_validator.rb +2 -2
- data/lib/identificamex/nombre/normalizador_apellido.rb +3 -3
- data/lib/identificamex/nombre/normalizador_nombre.rb +30 -5
- data/lib/identificamex/nombre/razon_social.rb +3 -8
- data/lib/identificamex/version.rb +1 -1
- data/test/identificamex/curp_format_validator_test.rb +8 -0
- metadata +16 -17
- data/lib/identificamex/nombre/normalizador_cadena.rb +0 -47
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 4635e390048785c33082dd5a59d948e44c313130
|
|
4
|
+
data.tar.gz: 708be8ef993125a8e73a00fc7c4d642d8f0550f7
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: bf93e16569ecc8cbf783dae290cecd170229fb4eafb9d5be42c7b046a7ae1ae40fb7e04894351e11e7dcb5b7ca557f575554a51054d8a8dc3040471643a9e5cc
|
|
7
|
+
data.tar.gz: b208aa3fe2a00a452d1d4a628b9c7e4c0839426b4dd7c71b396567af9eb78c583c931e2cf4b51701e11b10320e0d9a2054d9a92464a0a330ae58fa31056770ec
|
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.
|
|
1
|
+
2.1.5
|
data/README.md
CHANGED
|
@@ -26,6 +26,8 @@ O instálala por ti mismo de esta manera:
|
|
|
26
26
|
|
|
27
27
|
## Uso
|
|
28
28
|
|
|
29
|
+
### Formato
|
|
30
|
+
|
|
29
31
|
Agrega las validaciones de formato a los campos correspondientes.
|
|
30
32
|
|
|
31
33
|
```ruby
|
|
@@ -53,9 +55,11 @@ class Employee < ActiveRecord::Base
|
|
|
53
55
|
primer_apellido: 'Barrios',
|
|
54
56
|
segundo_apellido: 'Fernández',
|
|
55
57
|
fecha_nacimiento: Date.new(1970, 12, 13)
|
|
58
|
+
# => true
|
|
56
59
|
|
|
57
60
|
valid_rfc? 'APB830305QS6', razon_social: 'U.S. Ruber Mexicana, S.A.',
|
|
58
61
|
fecha_creacion: Date.new(1983, 03, 05)
|
|
62
|
+
# => false
|
|
59
63
|
end
|
|
60
64
|
end
|
|
61
65
|
```
|
|
@@ -69,7 +73,7 @@ posteriormente, al igual que la generación de la CURP_
|
|
|
69
73
|
El método `valid_rfc?` es auxiliar y ha funcionado con los casos que he
|
|
70
74
|
probado, pero no hay garantía que funcione en todos los casos, así que debe
|
|
71
75
|
usarse con precaución. Si detectas algún caso en el que no funciona, agrega
|
|
72
|
-
un _issue_ para corregirlo.
|
|
76
|
+
un _issue_ para tratar de corregirlo.
|
|
73
77
|
|
|
74
78
|
## Contribución
|
|
75
79
|
|
data/identificamex.gemspec
CHANGED
|
@@ -4,22 +4,22 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
|
4
4
|
require 'identificamex/version'
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |spec|
|
|
7
|
-
spec.name =
|
|
7
|
+
spec.name = 'identificamex'
|
|
8
8
|
spec.version = Identificamex::VERSION
|
|
9
|
-
spec.authors = [
|
|
10
|
-
spec.email = [
|
|
9
|
+
spec.authors = ['Azarel Doroteo Pacheco']
|
|
10
|
+
spec.email = ['azarel.doroteo@logicalbricks.com']
|
|
11
11
|
spec.description = %q{Validadores para los formatos de CURP y RFC}
|
|
12
12
|
spec.summary = %q{Validadores sencillos para los formatos de la Clave Única de Registro de Población (CURP) y el Registro Federal de Contribuyentes (RFC) utilizados en México}
|
|
13
|
-
spec.homepage =
|
|
14
|
-
spec.license =
|
|
13
|
+
spec.homepage = 'https://github.com/LogicalBricks/identificamex'
|
|
14
|
+
spec.license = 'MIT'
|
|
15
15
|
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
|
17
17
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
|
19
19
|
spec.require_paths = ["lib"]
|
|
20
20
|
|
|
21
|
-
spec.add_development_dependency
|
|
22
|
-
spec.add_development_dependency
|
|
21
|
+
spec.add_development_dependency 'bundler', '~> 1.7'
|
|
22
|
+
spec.add_development_dependency 'rake'
|
|
23
23
|
|
|
24
24
|
spec.add_dependency 'activemodel'
|
|
25
25
|
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# -*- encoding : utf-8 -*-
|
|
2
2
|
class CurpFormatValidator < ActiveModel::EachValidator
|
|
3
3
|
def validate_each(object, attribute, value)
|
|
4
|
-
unless value =~ /\A[A-Z][AEIOUX][A-Z]{2}[0-9]{2}[0-1][0-9][0-3][0-9][MH][A-Z][BCDFGHJKLMNÑPQRSTVWXYZ]{
|
|
5
|
-
object.errors[attribute] << (options[:message] || "no es una CURP válida")
|
|
4
|
+
unless value =~ /\A[A-Z][AEIOUX][A-Z]{2}[0-9]{2}[0-1][0-9][0-3][0-9][MH][A-Z][A-Z][BCDFGHJKLMNÑPQRSTVWXYZ]{3}[0-9A-Z][0-9]\z/i
|
|
5
|
+
object.errors[attribute] << (options[:message] || "no es una CURP válida")
|
|
6
6
|
end
|
|
7
7
|
end
|
|
8
8
|
end
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
require_relative '
|
|
1
|
+
require_relative 'normalizador_nombre'
|
|
2
2
|
|
|
3
3
|
module Identificamex
|
|
4
4
|
module Nombre
|
|
5
5
|
|
|
6
|
-
# Clase que hereda de `
|
|
6
|
+
# Clase que hereda de `NormalizadorNombre` y define los nombres a ignorar
|
|
7
7
|
# como `%w[DE LA DEL LOS]` que son los únicos que se ignoran para los
|
|
8
8
|
# apellidos.
|
|
9
9
|
#
|
|
@@ -17,7 +17,7 @@ module Identificamex
|
|
|
17
17
|
#
|
|
18
18
|
# NormalizadorApellido.new('Pérez').normalizar
|
|
19
19
|
# # => PEREZ
|
|
20
|
-
class NormalizadorApellido <
|
|
20
|
+
class NormalizadorApellido < NormalizadorNombre
|
|
21
21
|
|
|
22
22
|
private
|
|
23
23
|
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
require_relative '
|
|
1
|
+
require_relative 'mayusculas'
|
|
2
2
|
|
|
3
3
|
module Identificamex
|
|
4
4
|
module Nombre
|
|
5
5
|
|
|
6
|
-
# Clase
|
|
7
|
-
#
|
|
8
|
-
# nombres.
|
|
6
|
+
# Clase base para normalizar las cadenas de nombres y apellidos. La clase
|
|
7
|
+
# se encarga de convertir a mayúsculas las cadenas y recorre los nombres
|
|
8
|
+
# para descartar los nombres ignorados.
|
|
9
|
+
#
|
|
10
|
+
# Los nombres ignorados deben ser provistos por las clases que hereden.
|
|
11
|
+
# Para nombres, se ignoran los siguientes: `%w[JOSE MARIA DE LA DEL LOS]`.
|
|
9
12
|
#
|
|
10
13
|
# Ejemplo:
|
|
11
14
|
#
|
|
@@ -29,14 +32,36 @@ module Identificamex
|
|
|
29
32
|
#
|
|
30
33
|
# NormalizadorNombre.new('José').normalizar
|
|
31
34
|
# # => JOSE
|
|
32
|
-
class NormalizadorNombre
|
|
35
|
+
class NormalizadorNombre
|
|
36
|
+
|
|
37
|
+
include Mayusculas
|
|
38
|
+
|
|
39
|
+
def initialize(nombre)
|
|
40
|
+
@nombre = mayusculas(nombre)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def normalizar
|
|
44
|
+
nombre_aceptado || primer_nombre
|
|
45
|
+
end
|
|
33
46
|
|
|
34
47
|
private
|
|
35
48
|
|
|
49
|
+
def nombre_aceptado
|
|
50
|
+
(nombres - nombres_ignorados).first
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def primer_nombre
|
|
54
|
+
nombres.first
|
|
55
|
+
end
|
|
56
|
+
|
|
36
57
|
def nombres_ignorados
|
|
37
58
|
%w[JOSE MARIA DE LA DEL LOS]
|
|
38
59
|
end
|
|
39
60
|
|
|
61
|
+
def nombres
|
|
62
|
+
@nombres ||= @nombre.split
|
|
63
|
+
end
|
|
64
|
+
|
|
40
65
|
end
|
|
41
66
|
end
|
|
42
67
|
end
|
|
@@ -44,21 +44,16 @@ module Identificamex
|
|
|
44
44
|
|
|
45
45
|
def siglas_palabra_unica
|
|
46
46
|
letras = palabras_a_considerar.first[0, 3]
|
|
47
|
-
letras
|
|
47
|
+
letras += "X" * (3 - letras.length) if letras.length < 3
|
|
48
48
|
letras
|
|
49
49
|
end
|
|
50
50
|
|
|
51
51
|
def palabras_razon_social
|
|
52
|
-
@razon_social
|
|
53
|
-
.split
|
|
54
|
-
.select{|p| !palabras_especiales.member?(p) }
|
|
52
|
+
@razon_social.split - palabras_especiales
|
|
55
53
|
end
|
|
56
54
|
|
|
57
55
|
def eliminar_abreviaturas(str)
|
|
58
|
-
abreviaturas.
|
|
59
|
-
str = str.gsub(a, '')
|
|
60
|
-
end
|
|
61
|
-
str.strip
|
|
56
|
+
abreviaturas.inject(str) { |str, a| str.gsub(a, '') }.strip
|
|
62
57
|
end
|
|
63
58
|
|
|
64
59
|
def palabras_especiales
|
|
@@ -19,6 +19,14 @@ describe 'curp validator' do
|
|
|
19
19
|
it 'accepts curp (digito anti-duplicado alfanumérico)' do
|
|
20
20
|
model(curp: 'AAAA111111HDFBBBA1').must_be :valid?
|
|
21
21
|
end
|
|
22
|
+
|
|
23
|
+
it 'accepts generic curp (for man)' do
|
|
24
|
+
model(curp: 'XEXX010101MNEXXXA8').must_be :valid?
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
it 'accepts generic curp (for woman)' do
|
|
28
|
+
model(curp: 'XEXX010101HNEXXXA4').must_be :valid?
|
|
29
|
+
end
|
|
22
30
|
end # with valid data
|
|
23
31
|
|
|
24
32
|
describe 'with invalid data' do
|
metadata
CHANGED
|
@@ -1,55 +1,55 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: identificamex
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.0.
|
|
4
|
+
version: 0.0.4
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Azarel Doroteo Pacheco
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2015-01-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- - ~>
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '1.
|
|
19
|
+
version: '1.7'
|
|
20
20
|
type: :development
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- - ~>
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '1.
|
|
26
|
+
version: '1.7'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: rake
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
33
|
version: '0'
|
|
34
34
|
type: :development
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '0'
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: activemodel
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
47
|
version: '0'
|
|
48
48
|
type: :runtime
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
54
|
version: '0'
|
|
55
55
|
description: Validadores para los formatos de CURP y RFC
|
|
@@ -59,9 +59,9 @@ executables: []
|
|
|
59
59
|
extensions: []
|
|
60
60
|
extra_rdoc_files: []
|
|
61
61
|
files:
|
|
62
|
-
- .gitignore
|
|
63
|
-
- .ruby-version
|
|
64
|
-
- .travis.yml
|
|
62
|
+
- ".gitignore"
|
|
63
|
+
- ".ruby-version"
|
|
64
|
+
- ".travis.yml"
|
|
65
65
|
- Gemfile
|
|
66
66
|
- LICENSE.txt
|
|
67
67
|
- README.md
|
|
@@ -72,7 +72,6 @@ files:
|
|
|
72
72
|
- lib/identificamex/nombre/mayusculas.rb
|
|
73
73
|
- lib/identificamex/nombre/nombre_completo.rb
|
|
74
74
|
- lib/identificamex/nombre/normalizador_apellido.rb
|
|
75
|
-
- lib/identificamex/nombre/normalizador_cadena.rb
|
|
76
75
|
- lib/identificamex/nombre/normalizador_nombre.rb
|
|
77
76
|
- lib/identificamex/nombre/palabra_inconveniente.rb
|
|
78
77
|
- lib/identificamex/nombre/razon_social.rb
|
|
@@ -103,17 +102,17 @@ require_paths:
|
|
|
103
102
|
- lib
|
|
104
103
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
105
104
|
requirements:
|
|
106
|
-
- -
|
|
105
|
+
- - ">="
|
|
107
106
|
- !ruby/object:Gem::Version
|
|
108
107
|
version: '0'
|
|
109
108
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
109
|
requirements:
|
|
111
|
-
- -
|
|
110
|
+
- - ">="
|
|
112
111
|
- !ruby/object:Gem::Version
|
|
113
112
|
version: '0'
|
|
114
113
|
requirements: []
|
|
115
114
|
rubyforge_project:
|
|
116
|
-
rubygems_version: 2.
|
|
115
|
+
rubygems_version: 2.4.5
|
|
117
116
|
signing_key:
|
|
118
117
|
specification_version: 4
|
|
119
118
|
summary: Validadores sencillos para los formatos de la Clave Única de Registro de
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
require_relative 'mayusculas'
|
|
2
|
-
|
|
3
|
-
module Identificamex
|
|
4
|
-
module Nombre
|
|
5
|
-
|
|
6
|
-
# Clase base para normalizar las cadenas de nombres y apellidos. La clase
|
|
7
|
-
# se encarga de convertir a mayúsculas las cadenas y recorre los nombres para
|
|
8
|
-
# descartar los nombres ignorados.
|
|
9
|
-
#
|
|
10
|
-
# Los nombres ignorados deben ser provistos por las clases que hereden.
|
|
11
|
-
class NormalizadorCadena
|
|
12
|
-
|
|
13
|
-
include Mayusculas
|
|
14
|
-
|
|
15
|
-
def initialize(nombre)
|
|
16
|
-
@nombre = mayusculas(nombre)
|
|
17
|
-
end
|
|
18
|
-
|
|
19
|
-
def normalizar
|
|
20
|
-
nombre_aceptado || primer_nombre
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
private
|
|
24
|
-
|
|
25
|
-
def nombre_aceptado
|
|
26
|
-
nombres.find{|nombre| no_ignorado?(nombre) } if nombres.count > 1
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def no_ignorado?(nombre)
|
|
30
|
-
!nombres_ignorados.member?(nombre)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def primer_nombre
|
|
34
|
-
nombres.first
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def nombres_ignorados
|
|
38
|
-
raise NotImplementedError
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def nombres
|
|
42
|
-
@nombres ||= @nombre.split
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
end
|
|
46
|
-
end
|
|
47
|
-
end
|