act_as_cnpj_cpf 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 73824fe9acab5c7cc094a1b4dba942eeadf69f94
4
- data.tar.gz: 65d424c466ff2cec600bc6efd57a329cfab1bed8
3
+ metadata.gz: 755a81eeb5ddc1753442ee13a84bbed78719f2a7
4
+ data.tar.gz: 48393237613d80ac092c06b4a8f6a049ef503315
5
5
  SHA512:
6
- metadata.gz: 05919b168466a32e5994136c3bad1920f3fafcc4af7eef72c8cde5d5ebd58641c26336fbfb0bb1fa59ec76fc7f55f1a7a01898db56ed24c5776fcc4e1de0ccba
7
- data.tar.gz: 6b8072c4e3538b575bfd5e0386e2f7c450f649fe5c67cd2d152d159bd409d55dfc685aa3cff5d8abbd9beb7c4d2a3afc2d5b9d6d003b7aed44ae03299beb32e5
6
+ metadata.gz: f5dde6be0219911bdb656bd7855986a594a4aa67f8928b10c88d312fb698a1d01f5706e5ffba45cecb0c2da2bcf21a2e18f1b0c4693c79a6071746041368d3a5
7
+ data.tar.gz: 5388314a83a54ad87a4fe4bd5853020016192c51d4bd8b493160e1a8dd2bda9a6147fd721eec6cd0ffe4e027304ec2a7b83e0e5779a48c473fb75061a8e811ef
data/README.md CHANGED
@@ -1,6 +1,158 @@
1
+ # act_as_cnpj_cpf
2
+
1
3
  [![Build Status](https://travis-ci.org/josuelima/act_as_cnpj_cpf.svg?branch=master)](https://travis-ci.org/josuelima/act_as_cnpj_cpf)
2
4
  [![Code Climate](https://codeclimate.com/github/josuelima/act_as_cnpj_cpf/badges/gpa.svg)](https://codeclimate.com/github/josuelima/act_as_cnpj_cpf)
3
5
  [![Test Coverage](https://codeclimate.com/github/josuelima/act_as_cnpj_cpf/badges/coverage.svg)](https://codeclimate.com/github/josuelima/act_as_cnpj_cpf)
4
6
 
5
- Under construction.
6
- More info soon..
7
+ ** Rubygem to format and validate CNPJ (Brazilian company registration number) and CPF (Brazilian citizens registration number). You can use it solo or as an ActiveRecord plugin. **
8
+
9
+ act_as_cnpj_cpf é uma Rubygem para validar e formatar CNPJ e CPF.
10
+
11
+ ## Funcionalidades
12
+
13
+ * Valida CPF e CNPJ com ou sem formatação
14
+ * Integração com ActiveRecord
15
+ * Formata número para o padrão do CNPJ ou CPF (xx.xxx.xxx/xxxx-xx e xxx.xxx.xxx-xx)
16
+ * Possibilidade de utilizar um atributo como CNPJ ou CPF ao mesmo tempo
17
+ * Permite persistir cpf ou cnpj inválido (caso seja especificado com permite_invalido: true)
18
+
19
+ Este projeto foi inicialmente desenvolvido como uma extensão da gem [brcpfcnpj](https://github.com/tapajos/brazilian-rails/tree/master/brcpfcnpj) e em seguida totalmente re-escrito por se tratar de uma proposta diferente. Além das novas funcionalidades, diferentemente do brcpfcnpj, este projeto utiliza o número sem formatação como padrão para salvar no banco de dados e exibir (podendo ser exibido formatado com .formatado)
20
+
21
+ ## Instalação
22
+
23
+ ```bash
24
+ $ gem install act_as_cnpj_cpf
25
+ ```
26
+
27
+ ou adicione act_as_cnpj_cpf ao seu Gemfile e em seguida `bundle install`:
28
+
29
+ ```ruby
30
+ gem 'act_as_cnpj_cpf'
31
+ ```
32
+
33
+ ## Uso
34
+
35
+ ### ActiveRecord
36
+
37
+ CPF Válido
38
+
39
+ ```ruby
40
+ class Pessoa < ActiveRecord::Base
41
+ # :cpf é um atributo no seu model Pessoa
42
+ usar_como_cpf :cpf
43
+ end
44
+
45
+ fulano = Pessoa.new(cpf: '67392957864')
46
+ # ou
47
+ fulano = Pessoa.new(cpf: '673.929.578-64')
48
+
49
+ fulano.cpf # retorna numero sem formatação 67392957864
50
+ fulano.cpf.formatado # retorna 673.929.578-64
51
+ fulano.cpf.valido? # validação do CPF, retorna true
52
+ fulano.valid? # validação do objeto pessoa, retorna true
53
+ fulano.save # retorna true e salva sem formatação no cpf
54
+ ```
55
+
56
+ CPF Inválido
57
+
58
+ ```ruby
59
+ fulano = Pessoa.new(cpf: '111111')
60
+ fulano.cpf # retorna 111111
61
+ fulano.cpf.valido? # validação do CPF, retorna false
62
+ fulano.cpf.formatado # retorna 111111
63
+ fulano.valid? # validação do objeto pessoa, retorna false
64
+ fulano.save # retorna false e adiciona mensagem de erro ao model (fulano.errors)
65
+ ```
66
+
67
+ CNPJ Válido
68
+
69
+ ```ruby
70
+ class Empresa < ActiveRecord::Base
71
+ # :cnpj é um atributo no seu model Empresa
72
+ usar_como_cnpj :cnpj
73
+ end
74
+
75
+ company = Empresa.new(cnpj: '54609346436407')
76
+ # ou
77
+ company = Empresa.new(cnpj: '54.609.346/4364-07')
78
+
79
+ company.cnpj # retorna numero sem formatação 54609346436407
80
+ company.cnpj.formatado # retorna 54.609.346/4364-07
81
+ company.cnpj.valido? # validação do CNPJ, retorna true
82
+ company.save # retorna true e salva sem formatação no cnpj
83
+ ```
84
+
85
+ CNPJ Inválido
86
+
87
+ ```ruby
88
+ company = Empresa.new(cnpj: '1111111111111')
89
+ company.cnpj # retorna 1111111111111
90
+ company.cnpj.valido? # validação do CNPJ, retorna false
91
+ company.cnpj.formatado # retorna 1111111111111
92
+ company.save # retorna false e adiciona mensagem de erro ao model (company.errors)
93
+ ```
94
+
95
+ ### CNPJ e CPF no mesmo atributo
96
+
97
+ Podem existir situações onde você precise utilizar o mesmo campo ora como CNPJ ora como CPF, para isto basta utilizar `usar_como_cnpj_ou_cpf`:
98
+
99
+ ```ruby
100
+ class Cliente < ActiveRecord::Base
101
+ # :codigo é um atributo no seu model Cliente
102
+ usar_como_cnpj_ou_cpf :codigo
103
+ end
104
+
105
+ # para cnpj com ou sem formatação
106
+ cliente = Cliente.new(codigo: '54609346436407')
107
+ # ou para cpf com ou sem formatação
108
+ cliente = Cliente.new(codigo: '67392957864')
109
+
110
+ cliente.codigo # retorna o cpf ou cnpj informado sem formatação
111
+ cliente.codigo.formatado # retorna o cpf ou cnpj informado devidamente formatado
112
+ cliente.codigo.valido? # retorna true caso seja um cnpj ou cpf válido
113
+ cliente.save # retorna true e salva sem formatação caso seja um cnpj ou cpf válido
114
+ cliente.eh_cpf? # retorna true se o conteudo do codigo for um CPF
115
+ cliente.eh_cnpj? # retorna true se o conteudo do codigo for um CNPJ
116
+ ```
117
+ A validação é feita de acordo com o tamanho do valor informado (após remover os caracteres especiais). Se == 11 tenta validar como CPF caso contrario tenta validar como CNPJ.
118
+
119
+ ### Persistir mesmo com CNPJ ou CPF Inválido
120
+
121
+ Caso o CNPJ ou CPF não sejam válidos o objeto não será salvo no banco de dados e uma mensagem de erro anexada ao objeto. Porém, podem existir casos onde você precise persistir CPF ou CNPJ inválidos para analises futuras. Para isso, utilize o atributo `permite_invalido: true`.
122
+
123
+ ```ruby
124
+ class Pessoa < ActiveRecord::Base
125
+ usar_como_cpf :cpf, permite_invalido: true
126
+ end
127
+
128
+ class Empresa < ActiveRecord::Base
129
+ usar_como_cnpj :cnpj, permite_invalido: true
130
+ end
131
+
132
+ class Cliente < ActiveRecord::Base
133
+ usar_como_cnpj_ou_cpf :codigo, permite_invalido: true
134
+ end
135
+ ```
136
+
137
+ ### Sem ActiveRecord
138
+
139
+ Para utilizar isoladamente basta apenas criar uma nova instancia da class Cpf, Cnpj ou CnpjOuCpf
140
+
141
+ ```ruby
142
+ codigo = ActAsCnpjCpf::Cnpj.new( cnpj )
143
+ codigo = ActAsCnpjCpf::Cpf.new( cpf )
144
+ codigo = ActAsCnpjCpf::CnpjOuCpf.new( cnpj_ou_cpf )
145
+
146
+ # api
147
+ codigo.valido? # true ou false
148
+ codigo.numero # cpf ou cnpj sem formatação
149
+ codigo.formatado # cpf ou cnpj formatado
150
+ ```
151
+
152
+ ## Contribuindo
153
+
154
+ 1. Fork it ( http://github.com/josuelima/act_as_cnpj_cpf/fork )
155
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
156
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
157
+ 4. Push to the branch (`git push origin my-new-feature`)
158
+ 5. Create new Pull Request
@@ -7,17 +7,17 @@ module ActAsCnpjCpf
7
7
 
8
8
  module ClassMethods
9
9
  %w(cnpj cpf cnpj_ou_cpf).each do |method|
10
- define_method("usar_como_#{method}") do |field, options = {}|
10
+ define_method("usar_como_#{method}") do |field, options = {}|
11
11
  init(field, options, "ActAsCnpjCpf::#{method.split('_').map(&:capitalize).join}")
12
12
  end
13
13
  end
14
14
 
15
15
  def init(field, options, klass)
16
16
  add_composed_class(field, klass)
17
- module_eval(create_validation(field.to_s, options, klass))
17
+ module_eval(create_validation(field.to_s, options))
18
18
  end
19
19
 
20
- # Adiciona reader e writer
20
+ # Adiciona reader e writer
21
21
  # http://api.rubyonrails.org/classes/ActiveRecord/Aggregations/ClassMethods.html
22
22
  def add_composed_class(name, klass)
23
23
  options = {class_name: klass, mapping: [name.to_s, 'numero'], allow_nil: true}
@@ -26,7 +26,7 @@ module ActAsCnpjCpf
26
26
  end
27
27
 
28
28
  # cria validacao para o model
29
- def create_validation(field, options, klass)
29
+ def create_validation(field, options)
30
30
  <<-CODE
31
31
  validate :#{field}_vazio?, :#{field}_valido?
32
32
 
@@ -16,5 +16,13 @@ module ActAsCnpjCpf
16
16
  klass = numero.to_s.gsub(/[^0-9]/, '').length == 11 ? Cpf : Cnpj
17
17
  @instance = klass.new(numero)
18
18
  end
19
+
20
+ def eh_cpf?
21
+ @instance.is_a?(Cpf)
22
+ end
23
+
24
+ def eh_cnpj?
25
+ @instance.is_a?(Cnpj)
26
+ end
19
27
  end
20
28
  end
@@ -1,3 +1,3 @@
1
1
  module ActAsCnpjCpf
2
- VERSION = '1.0.1'
2
+ VERSION = '1.1.0'
3
3
  end
@@ -12,5 +12,19 @@ module ActAsCnpjCpf
12
12
 
13
13
  it_behaves_like 'objeto valido'
14
14
  it_behaves_like 'objeto invalido'
15
+
16
+ context '#eh_cpf? e #eh_cnpj?' do
17
+ it 'deveria identificar como cpf' do
18
+ cpf = model.new(codigo: Faker::CPF.numeric)
19
+ expect(cpf.eh_cpf?).to be true
20
+ expect(cpf.eh_cnpj?).to be false
21
+ end
22
+
23
+ it 'deveria identificar como cnpj' do
24
+ cnpj = model.new(codigo: Faker::CNPJ.numeric)
25
+ expect(cnpj.eh_cnpj?).to be true
26
+ expect(cnpj.eh_cpf?).to be false
27
+ end
28
+ end
15
29
  end
16
30
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: act_as_cnpj_cpf
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josué Lima
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-25 00:00:00.000000000 Z
11
+ date: 2015-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport