blabla 0.0.1
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 +15 -0
- data/.rspec +1 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +20 -0
- data/LICENSE +20 -0
- data/README.md +73 -0
- data/Rakefile +13 -0
- data/blabla.gemspec +20 -0
- data/lib/blabla.rb +47 -0
- data/lib/generators/cartao_credito.rb +79 -0
- data/lib/generators/cnpj.rb +38 -0
- data/lib/generators/cpf.rb +35 -0
- data/lib/generators/pessoa.rb +120 -0
- data/lib/generators/texto/bacon.rb +35 -0
- data/lib/generators/texto/base.rb +87 -0
- data/lib/generators/texto/lorem.rb +35 -0
- data/lib/strings/strings.yml +15 -0
- data/lib/utilities/util.rb +20 -0
- data/lib/version.rb +3 -0
- data/spec/blabla_spec.rb +117 -0
- data/spec/spec_helper.rb +8 -0
- data/spec/support/blabla_helpers.rb +111 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
YWI3ZTFjYjkwNmFkN2RjYjYwMzJlZjEyYmQ2ZTdiMDMwOWYzYTI4Yw==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
YWE0YjNmNjE5M2FhOTZhNDhlOTdmNmM2ZTIyOGI5NTI5NWQxZjk4Ng==
|
7
|
+
!binary "U0hBNTEy":
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
NzczMzJiYmQ3ZTFmODg3ZGU4Y2EyZDhlYzk3NjEzNWM2YzRjZjBkYmNiMmNi
|
10
|
+
MjIwZThmOGE0MGM4N2E5ZTRiNmE0MTZhZDBhZjdkOGQ5MzQxZDIwNzVjOGRj
|
11
|
+
NTViYjE2OWU0MDAxN2M5ODM3YTQzZGY0YWJlOWVhNzQ4M2UyOGI=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
ZWRlNzU3YjBlNDUxOWNkODE1ZTQ3NDkzMDQ0NjI3ZWY2ZWJjN2RmN2YxMTM4
|
14
|
+
MDI0MDI1MTFlZjZiZWZiZTc5ZTcxMzc1MGEzMTY5MzgxZGM1NmZjYWQ4Mzg5
|
15
|
+
NjgxMDZmMmVjNzk2Mjc1ZDVlMjcxZjU2YTJkYTA4NTQ4YjYwNTM=
|
data/.rspec
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
-f d -c
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
GEM
|
2
|
+
remote: https://rubygems.org/
|
3
|
+
specs:
|
4
|
+
diff-lcs (1.2.2)
|
5
|
+
rake (10.0.4)
|
6
|
+
rspec (2.13.0)
|
7
|
+
rspec-core (~> 2.13.0)
|
8
|
+
rspec-expectations (~> 2.13.0)
|
9
|
+
rspec-mocks (~> 2.13.0)
|
10
|
+
rspec-core (2.13.1)
|
11
|
+
rspec-expectations (2.13.0)
|
12
|
+
diff-lcs (>= 1.1.3, < 2.0)
|
13
|
+
rspec-mocks (2.13.0)
|
14
|
+
|
15
|
+
PLATFORMS
|
16
|
+
ruby
|
17
|
+
|
18
|
+
DEPENDENCIES
|
19
|
+
rake
|
20
|
+
rspec
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2013 Alcides Queiroz (alcidesqueiroz@gmail.com)
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
BlaBla
|
2
|
+
=====
|
3
|
+
|
4
|
+
O Que é?
|
5
|
+
--------
|
6
|
+
|
7
|
+
BlaBla é uma gem para geração de dados fictícios, porém verossímeis, para aplicações em português do Brasil.
|
8
|
+
|
9
|
+
Sim, eu conheço o Faker, e sei que é possível definir o default_locale para pt-BR.
|
10
|
+
Porém, para a realidade das nossas aplicações, o Faker fica devendo muita coisa.
|
11
|
+
|
12
|
+
###A versão inicial(0.0.1) já conta com:
|
13
|
+
|
14
|
+
* Gerador de CPF
|
15
|
+
* Gerador de CNPJ
|
16
|
+
* Gerador de Cartão de Crédito
|
17
|
+
* Gerador de Bacon Ipsum
|
18
|
+
* Gerador de Lorem Ipsum
|
19
|
+
* Gerador de Nomes Próprios de Pessoas
|
20
|
+
|
21
|
+
###Para as próximas versões devem vir:
|
22
|
+
|
23
|
+
* Gerador de CEP
|
24
|
+
* Gerador de Endereços
|
25
|
+
* Gerador de URLs
|
26
|
+
* Gerador de Email
|
27
|
+
* Gerador de ISBN
|
28
|
+
* Gerador de Telefones
|
29
|
+
* Gerador de Senhas
|
30
|
+
* Entre outras coisas ... =)
|
31
|
+
|
32
|
+
Por que não o Faker?
|
33
|
+
--------------------
|
34
|
+
O Faker é uma ótima gem, porém os dados gerados não parecem muito "realísticos" em aplicações brasileiras, possui poucos geradores, e os mesmos não são focados em nossa realidade.
|
35
|
+
|
36
|
+
Instalando
|
37
|
+
----------
|
38
|
+
```bash
|
39
|
+
sudo gem install blabla
|
40
|
+
```
|
41
|
+
|
42
|
+
Uso
|
43
|
+
-----
|
44
|
+
```ruby
|
45
|
+
BlaBla::CPF.numero #=> "67021487983"
|
46
|
+
|
47
|
+
BlaBla::CNPJ.formatado #=> "51.777.676/0001-27"
|
48
|
+
|
49
|
+
BlaBla::CartaoCredito.formatado(:bandeira => :visa) #=> "4398 2852 4214 7717"
|
50
|
+
|
51
|
+
BlaBla::Pessoa.nome #=> "Viviane Alves Almeida"
|
52
|
+
|
53
|
+
BlaBla::Bacon.frase #=> "Flank round belly chuck mignon jowl ham beef mignon."
|
54
|
+
```
|
55
|
+
|
56
|
+
Contribuindo
|
57
|
+
------------
|
58
|
+
Se você deseja contribuir, faça um Fork do [repo](https://github.com/alcidesqueiroz/faker) no Github, faça as suas alterações e mande um pull request.
|
59
|
+
|
60
|
+
**Nota importante**
|
61
|
+
|
62
|
+
Rode `bundle install` e `rspec` para confirmar que os testes estão passando.
|
63
|
+
|
64
|
+
Contato
|
65
|
+
-------
|
66
|
+
Estou aberto a sugestões, elogios, críticas ou qualquer outro tipo de comentário.
|
67
|
+
|
68
|
+
* Grupo de discussão: https://groups.google.com/forum/#!forum/blabla-gem
|
69
|
+
* Twitter: [@alcidesqueiroz](http://www.twitter.com/alcidesqueiroz)
|
70
|
+
|
71
|
+
Licença
|
72
|
+
-------
|
73
|
+
Esse código é livre para ser usado dentro dos termos da licença MIT license
|
data/Rakefile
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
require 'rubygems'
|
3
|
+
require 'bundler/gem_tasks'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
RSpec::Core::RakeTask.new(:spec)
|
7
|
+
task :default => :spec
|
8
|
+
|
9
|
+
desc "Run all specs"
|
10
|
+
RSpec::Core::RakeTask.new do |t|
|
11
|
+
t.pattern = 'spec/**/*_spec.rb'
|
12
|
+
t.ruby_opts = '-w' #verbose
|
13
|
+
end
|
data/blabla.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "blabla"
|
7
|
+
s.version = BlaBla::VERSION.dup
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Alcides Queiroz Aguiar"]
|
10
|
+
s.email = ["alcidesqueiroz@gmail.com"]
|
11
|
+
s.homepage = "http://rubygems.org/gems/blabla"
|
12
|
+
s.extra_rdoc_files = ["README.md"]
|
13
|
+
s.summary = "Um gerador de dados fictícios, porém realísticos, para desenvolvedores brasileiros."
|
14
|
+
s.description = s.summary
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split($\)
|
17
|
+
s.require_paths = ["lib"]
|
18
|
+
|
19
|
+
s.add_development_dependency "rake", "~> 0.9.2"
|
20
|
+
end
|
data/lib/blabla.rb
ADDED
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module BlaBla
|
4
|
+
@@strings = nil
|
5
|
+
|
6
|
+
def self.root_dir
|
7
|
+
File.expand_path(File.dirname(File.expand_path(__FILE__)) + "/..")
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.strings_file
|
11
|
+
File.join(root_dir, "lib", "strings", "strings.yml")
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.strings key=nil
|
15
|
+
@@strings ||= YAML.load_file(strings_file)["blabla"]
|
16
|
+
parse_string_key key
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def self.parse_string_key key
|
23
|
+
return @@strings if key.nil?
|
24
|
+
key_parts = key.split(/[\.,>]/)
|
25
|
+
|
26
|
+
ret = @@strings
|
27
|
+
key_parts.each do |part|
|
28
|
+
ret = ret[part];
|
29
|
+
end
|
30
|
+
|
31
|
+
ret
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
|
36
|
+
require_relative "./utilities/util"
|
37
|
+
require_relative "version"
|
38
|
+
|
39
|
+
def require_generator(name) require_relative "./generators/#{name}"; end
|
40
|
+
|
41
|
+
require_generator 'cpf'
|
42
|
+
require_generator 'cnpj'
|
43
|
+
require_generator 'pessoa'
|
44
|
+
require_generator 'cartao_credito'
|
45
|
+
require_generator 'texto/base'
|
46
|
+
require_generator 'texto/bacon'
|
47
|
+
require_generator 'texto/lorem'
|
@@ -0,0 +1,79 @@
|
|
1
|
+
module BlaBla
|
2
|
+
class CartaoCredito
|
3
|
+
#Apesar de que seria perfeitamente possível elaborar um algoritmo mais sofisticado,
|
4
|
+
#que considere os códigos de cada banco, optei deliberadamente por não fazê-lo.
|
5
|
+
#Afinal, desconheço as questões legais sobre a geração automatizada de dados fictícios e
|
6
|
+
#não sei se a divulgação de tal código infringiria alguma lei.
|
7
|
+
#Por essa razão, limitei-me a gerar números válidos e que considerem o código
|
8
|
+
#da bandeira apenas (3-> AMEX, 4-> Visa, 5-> MasterCard).
|
9
|
+
#O uso indevido deste código não é de responsabilidade de seu autor.
|
10
|
+
|
11
|
+
CODIGO_AMEX = 3
|
12
|
+
CODIGO_VISA = 4
|
13
|
+
CODIGO_MASTER = 5
|
14
|
+
|
15
|
+
def self.numero params={}
|
16
|
+
numeros = []
|
17
|
+
numeros_verificacao = []
|
18
|
+
|
19
|
+
unless params[:bandeira].nil?
|
20
|
+
numeros << CODIGO_AMEX if params[:bandeira] == :amex
|
21
|
+
numeros << CODIGO_VISA if params[:bandeira] == :visa
|
22
|
+
numeros << CODIGO_MASTER if params[:bandeira] == :master
|
23
|
+
else
|
24
|
+
numeros << [CODIGO_AMEX, CODIGO_VISA, CODIGO_MASTER].sample
|
25
|
+
end
|
26
|
+
|
27
|
+
1.upto(16 - numeros.size) do
|
28
|
+
numeros << rand(1..9)
|
29
|
+
end
|
30
|
+
|
31
|
+
total_pares = 0
|
32
|
+
1.upto(16) do |p|
|
33
|
+
if p % 2 == 0
|
34
|
+
n = numeros[p-1]
|
35
|
+
total_pares += n
|
36
|
+
else
|
37
|
+
n = numeros[p-1] * 2
|
38
|
+
n -= 9 if n >= 10
|
39
|
+
end
|
40
|
+
|
41
|
+
numeros_verificacao << n
|
42
|
+
end
|
43
|
+
total = numeros_verificacao.inject(:+)
|
44
|
+
resto = total % 10
|
45
|
+
if resto > 0
|
46
|
+
if resto <= 5
|
47
|
+
subtrair = (total_pares > 5)
|
48
|
+
else
|
49
|
+
subtrair = (total_pares > 67)
|
50
|
+
resto = 10 - resto unless subtrair
|
51
|
+
end
|
52
|
+
|
53
|
+
while resto > 0
|
54
|
+
1.upto(16) do |p|
|
55
|
+
if resto > 0
|
56
|
+
if p % 2 == 0
|
57
|
+
p -= 1
|
58
|
+
numero = numeros[p]
|
59
|
+
if subtrair
|
60
|
+
numeros[p] -= 1 if numeros[p] > 0
|
61
|
+
else
|
62
|
+
numeros[p] += 1 if numeros[p] < 9
|
63
|
+
end
|
64
|
+
resto -= 1 if numero != numeros[p]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
numeros.join
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.formatado params={}
|
75
|
+
numeros = numero(params).split ''
|
76
|
+
[numeros[0..3], " ", numeros[4..7], " ", numeros[8..11], " ", numeros[12..15]].join
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module BlaBla
|
2
|
+
class CNPJ
|
3
|
+
def self.numero
|
4
|
+
numeros = []
|
5
|
+
|
6
|
+
1.upto(8) do
|
7
|
+
numeros << rand(0..9)
|
8
|
+
end
|
9
|
+
numeros.concat [0, 0, 0, 1]
|
10
|
+
|
11
|
+
d1 = 0
|
12
|
+
|
13
|
+
11.downto(0) do |n|
|
14
|
+
n2 = (n >= 4? n : n + 8)
|
15
|
+
d1 += numeros[n] * (13 - (n2))
|
16
|
+
end
|
17
|
+
|
18
|
+
d1 = 11 - (d1 % 11)
|
19
|
+
d1 = 0 if d1 >= 10
|
20
|
+
|
21
|
+
d2 = d1 * 2
|
22
|
+
11.downto(0) do |n|
|
23
|
+
n2 = (n >= 5? n : n + 8)
|
24
|
+
d2 += numeros[n] * (14 - (n2))
|
25
|
+
end
|
26
|
+
|
27
|
+
d2 = 11 - (d2 % 11)
|
28
|
+
d2 = 0 if d2 >= 10
|
29
|
+
|
30
|
+
numeros.join + d1.to_s + d2.to_s
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.formatado
|
34
|
+
numeros = numero.split ''
|
35
|
+
[numeros[0..1], ".", numeros[2..4], ".", numeros[5..7], "/", numeros[8..11], "-", numeros[12..13]].join
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module BlaBla
|
2
|
+
class CPF
|
3
|
+
def self.numero
|
4
|
+
numeros = []
|
5
|
+
|
6
|
+
1.upto(9) do
|
7
|
+
numeros << rand(0..9)
|
8
|
+
end
|
9
|
+
|
10
|
+
d1 = 0
|
11
|
+
|
12
|
+
8.downto(0) do |n|
|
13
|
+
d1 += numeros[n] * (10 - (n))
|
14
|
+
end
|
15
|
+
|
16
|
+
d1 = 11 - (d1 % 11)
|
17
|
+
d1 = 0 if d1 >= 10
|
18
|
+
|
19
|
+
d2 = d1 * 2
|
20
|
+
8.downto(0) do |n|
|
21
|
+
d2 += numeros[n] * (11 - (n))
|
22
|
+
end
|
23
|
+
|
24
|
+
d2 = 11 - (d2 % 11)
|
25
|
+
d2 = 0 if d2 >= 10
|
26
|
+
|
27
|
+
numeros.join + d1.to_s + d2.to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.formatado
|
31
|
+
numeros = numero.split ''
|
32
|
+
[numeros[0..2], ".", numeros[3..5], ".", numeros[6..8], "-", numeros[9..10]].join
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,120 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
require 'date'
|
3
|
+
|
4
|
+
module BlaBla
|
5
|
+
class Pessoa
|
6
|
+
def self.perfil_completo params={}
|
7
|
+
#ToDo
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.nome params={}
|
11
|
+
primeiro_nome(params) + " " + sobrenome(params)
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.primeiro_nome params={}
|
15
|
+
sexo = params[:sexo]
|
16
|
+
sexo = [:masculino, :feminino].sample if sexo.nil?
|
17
|
+
|
18
|
+
BlaBla.strings("pessoa>#{sexo == :masculino ? "homens" : "mulheres" }>nomes").sample.capitalize
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.sobrenome params={}
|
22
|
+
sexo = params[:sexo]
|
23
|
+
|
24
|
+
if sexo == :masculino
|
25
|
+
agnome = BlaBla::Util.sortear_por_peso [
|
26
|
+
{
|
27
|
+
:valor => nil,
|
28
|
+
:probabilidade => 95
|
29
|
+
},
|
30
|
+
{
|
31
|
+
:valor => BlaBla.strings("pessoa>homens>agnomes").sample,
|
32
|
+
:probabilidade => 5
|
33
|
+
}
|
34
|
+
]
|
35
|
+
end
|
36
|
+
|
37
|
+
quantidade_sobrenomes = BlaBla::Util.sortear_por_peso [
|
38
|
+
{
|
39
|
+
:valor => 2,
|
40
|
+
:probabilidade => 65
|
41
|
+
},
|
42
|
+
{
|
43
|
+
:valor => 3,
|
44
|
+
:probabilidade => 32
|
45
|
+
},
|
46
|
+
{
|
47
|
+
:valor => 4,
|
48
|
+
:probabilidade => 3
|
49
|
+
}
|
50
|
+
]
|
51
|
+
|
52
|
+
quantidade_sobrenomes -= 1 unless agnome.nil?
|
53
|
+
|
54
|
+
sobrenomes = []
|
55
|
+
disponiveis = BlaBla.strings("pessoa>sobrenomes")
|
56
|
+
|
57
|
+
while sobrenomes.size < quantidade_sobrenomes
|
58
|
+
sorteado = disponiveis.sample
|
59
|
+
sobrenomes << sorteado unless sobrenomes.include? sorteado
|
60
|
+
end
|
61
|
+
|
62
|
+
sobrenomes << agnome unless agnome.nil?
|
63
|
+
|
64
|
+
capitalize_all sobrenomes.join(" ")
|
65
|
+
end
|
66
|
+
|
67
|
+
def self.idade params={}
|
68
|
+
unless params[:data_nascimento].nil?
|
69
|
+
raise "Data de nascimento não é do tipo Date" if params[:data_nascimento].class != Date
|
70
|
+
BlaBla::Util.diff_in_years_from(params[:data_nascimento])
|
71
|
+
else
|
72
|
+
unless params[:faixa].nil?
|
73
|
+
faixa = params[:faixa]
|
74
|
+
|
75
|
+
if faixa == :crianca
|
76
|
+
rand(0..11)
|
77
|
+
elsif faixa == :adolescente
|
78
|
+
rand(12..18)
|
79
|
+
elsif faixa == :adulto
|
80
|
+
rand(19..60)
|
81
|
+
elsif faixa == :idoso
|
82
|
+
rand(60..90)
|
83
|
+
elsif faixa.class == Range
|
84
|
+
rand(faixa)
|
85
|
+
else
|
86
|
+
raise "Faixa de idade inválida"
|
87
|
+
end
|
88
|
+
else
|
89
|
+
rand(18..70)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def self.data_nascimento params={}
|
95
|
+
#ToDo
|
96
|
+
end
|
97
|
+
|
98
|
+
def self.sexo params={}
|
99
|
+
#ToDo
|
100
|
+
end
|
101
|
+
|
102
|
+
def self.pai params={}
|
103
|
+
#ToDo
|
104
|
+
end
|
105
|
+
|
106
|
+
def self.mae params={}
|
107
|
+
#ToDo
|
108
|
+
end
|
109
|
+
|
110
|
+
def self.filho params={}
|
111
|
+
#ToDo
|
112
|
+
end
|
113
|
+
|
114
|
+
private
|
115
|
+
|
116
|
+
def self.capitalize_all string
|
117
|
+
string.split(' ').map {|w| w.capitalize }.join(' ')
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
module BlaBla
|
3
|
+
class Bacon < Texto::Base
|
4
|
+
#Definições de peso no sorteio de palavras do gerador.
|
5
|
+
#Para textos com aparência mais natural, ranges de tamanhos menores devem
|
6
|
+
#possuir maior chance de serem sorteados, portanto, como exemplo,
|
7
|
+
#pode-se atribuir ao range de 1..6 uma probabilidade de 80%, ou seja,
|
8
|
+
#palavras de 1 a 6 letras tem 80% de chance de serem sorteadas.
|
9
|
+
|
10
|
+
def self.peso_por_tamanho_palavra
|
11
|
+
[
|
12
|
+
{
|
13
|
+
:probabilidade => 80,
|
14
|
+
:valor => 1..6
|
15
|
+
},
|
16
|
+
{
|
17
|
+
:probabilidade => 12,
|
18
|
+
:valor => 7..9
|
19
|
+
},
|
20
|
+
{
|
21
|
+
:probabilidade => 6,
|
22
|
+
:valor => 10..13
|
23
|
+
},
|
24
|
+
{
|
25
|
+
:probabilidade => 2,
|
26
|
+
:valor => 14..20
|
27
|
+
}
|
28
|
+
]
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.generator_name
|
32
|
+
"bacon"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
module BlaBla
|
3
|
+
module Texto
|
4
|
+
class Base
|
5
|
+
def self.palavra
|
6
|
+
tamanho = BlaBla::Util.sortear_por_peso peso_por_tamanho_palavra
|
7
|
+
|
8
|
+
palavras_gerador.reject{|p| p.size < tamanho.min || p.size > tamanho.max}.sample
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.palavras quantidade
|
12
|
+
sorteadas = []
|
13
|
+
|
14
|
+
while sorteadas.size < quantidade do
|
15
|
+
sorteada = palavra
|
16
|
+
sorteadas << sorteada unless sorteadas.last == sorteada
|
17
|
+
end
|
18
|
+
sorteadas
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.frase params={}
|
22
|
+
raise "Parâmetros inválidos" if params.class != Hash
|
23
|
+
|
24
|
+
frase = ""
|
25
|
+
tamanho = 7..16
|
26
|
+
|
27
|
+
|
28
|
+
if params[:comeco_padrao]
|
29
|
+
frase = comeco_padrao + " "
|
30
|
+
tamanho = (comeco_padrao.split.size + 4)..16
|
31
|
+
end
|
32
|
+
|
33
|
+
tamanho = rand(tamanho)
|
34
|
+
tem_virgula = true
|
35
|
+
|
36
|
+
#frases com menos de dez palavras poderão não possuir vírgula
|
37
|
+
tem_virgula = rand(1..3) != 3 if tamanho < 10
|
38
|
+
|
39
|
+
if tem_virgula
|
40
|
+
posicao_virgula = (tamanho / 2) + rand(0..(tamanho/2 - 3)) * (rand(1..2)==2 ? 1:-1)
|
41
|
+
|
42
|
+
if params[:comeco_padrao]
|
43
|
+
tamanho_comeco_padrao = comeco_padrao.split.size
|
44
|
+
posicao_virgula = tamanho - rand(3..(tamanho-tamanho_comeco_padrao)) if posicao_virgula < tamanho_comeco_padrao
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
palavras_frase = frase.split + palavras(tamanho - frase.split.size)
|
49
|
+
palavras_frase.insert posicao_virgula, "," if tem_virgula
|
50
|
+
(palavras_frase.join(" ") + ".").gsub(" ,", ",").capitalize
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.frases quantidade
|
54
|
+
sorteadas = []
|
55
|
+
1.upto(quantidade) { sorteadas << frase }
|
56
|
+
sorteadas
|
57
|
+
end
|
58
|
+
|
59
|
+
def self.paragrafo params={}
|
60
|
+
raise "Parâmetros inválidos" if params.class != Hash
|
61
|
+
tamanho = rand(4..10)
|
62
|
+
frases_paragrafo = []
|
63
|
+
if params[:comeco_padrao]
|
64
|
+
frases_paragrafo << frase(:comeco_padrao => true)
|
65
|
+
tamanho -= 1
|
66
|
+
end
|
67
|
+
|
68
|
+
1.upto(tamanho) { frases_paragrafo << frase }
|
69
|
+
frases_paragrafo.join " "
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.paragrafos quantidade
|
73
|
+
sorteados = []
|
74
|
+
1.upto(quantidade) { sorteados << paragrafo }
|
75
|
+
sorteados
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.comeco_padrao
|
79
|
+
BlaBla.strings "texto>#{generator_name}>comeco_padrao"
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.palavras_gerador
|
83
|
+
BlaBla.strings "texto>#{generator_name}>palavras"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
module BlaBla
|
3
|
+
class Lorem < Texto::Base
|
4
|
+
#Definições de peso no sorteio de palavras do gerador.
|
5
|
+
#Para textos com aparência mais natural, ranges de tamanhos menores devem
|
6
|
+
#possuir maior chance de serem sorteados, portanto, como exemplo,
|
7
|
+
#pode-se atribuir ao range de 1..6 uma probabilidade de 80%, ou seja,
|
8
|
+
#palavras de 1 a 6 letras tem 80% de chance de serem sorteadas.
|
9
|
+
|
10
|
+
def self.peso_por_tamanho_palavra
|
11
|
+
[
|
12
|
+
{
|
13
|
+
:probabilidade => 80,
|
14
|
+
:valor => 1..5
|
15
|
+
},
|
16
|
+
{
|
17
|
+
:probabilidade => 12,
|
18
|
+
:valor => 6..8
|
19
|
+
},
|
20
|
+
{
|
21
|
+
:probabilidade => 6,
|
22
|
+
:valor => 9..10
|
23
|
+
},
|
24
|
+
{
|
25
|
+
:probabilidade => 2,
|
26
|
+
:valor => 11..12
|
27
|
+
}
|
28
|
+
]
|
29
|
+
end
|
30
|
+
|
31
|
+
def self.generator_name
|
32
|
+
"lorem"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
blabla:
|
2
|
+
texto:
|
3
|
+
lorem:
|
4
|
+
comeco_padrao: "Lorem ipsum dolor sit amet"
|
5
|
+
palavras: ["lorem", "ipsum", "dolor", "sit", "amet", "consectetur", "adipiscing", "elit", "ut", "orci", "scelerisque", "tempor", "elementum", "et", "dictum", "quis", "massa", "sed", "sollicitudin", "mi", "nec", "semper", "molestie", "pellentesque", "fermentum", "libero", "vel", "arcu", "eu", "ante", "aliquam", "nam", "posuere", "mauris", "a", "vehicula", "dignissim", "tortor", "tincidunt", "ligula", "ultricies", "imperdiet", "velit", "est", "cras", "luctus", "ullamcorper", "leo", "in", "accumsan", "nunc", "blandit", "fusce", "turpis", "dui", "sagittis", "purus", "metus", "vitae", "ac", "laoreet", "enim", "nulla", "mattis", "etiam", "euismod", "fringilla", "felis", "augue", "viverra", "duis", "facilisis", "urna", "ornare", "non", "tempus", "integer", "risus", "diam", "quam", "vulputate", "at", "dapibus", "gravida", "aenean", "hac", "habitasse", "platea", "dictumst", "eros", "tellus", "volutpat", "id", "vestibulum", "cursus", "rutrum", "magna", "sapien", "hendrerit", "eget", "donec", "sem", "interdum", "varius", "nisi", "odio", "nibh", "class", "aptent", "taciti", "sociosqu", "ad", "litora", "torquent", "per", "conubia", "nostra", "inceptos", "himenaeos", "feugiat", "malesuada", "praesent", "ultrices", "neque", "tristique", "rhoncus", "facilisi", "convallis", "phasellus", "sodales", "quisque", "faucibus", "proin", "suspendisse", "congue", "maecenas", "auctor", "condimentum", "justo", "porttitor", "iaculis", "lobortis", "aliquet", "suscipit", "primis", "cubilia", "curae", "cum", "sociis", "natoque", "penatibus", "magnis", "dis", "parturient", "montes", "nascetur", "ridiculus", "mus", "pulvinar", "lacinia", "erat", "nisl", "venenatis", "nullam", "lectus"]
|
6
|
+
bacon:
|
7
|
+
comeco_padrao: "Bacon ipsum dolor sit amet"
|
8
|
+
palavras: ["jowl", "chicken", "boudin", "doner", "turkey", "drumstick", "swine", "prosciutto", "ham", "andouille", "ribeye", "tail", "pig", "spare", "ribs", "leberkas", "ball", "tip", "capicola", "sirloin", "brisket", "jerky", "meatloaf", "cow", "pork", "chop", "tri-tip", "venison", "loin", "biltong", "shankle", "shank", "pastrami", "pancetta", "meatball", "ground", "round", "hamburger", "bacon", "strip", "steak", "shoulder", "chuck", "beef", "sausage", "turduckenfatback", "tenderloin", "tongue", "kielbasa", "corned", "filet", "mignon", "donerham", "hock", "rump", "flank", "short", "t-bone", "belly", "fatbackstrip", "turducken", "hamburgerchicken", "frankfurter", "fatback", "fatbackjowl", "salami", "roundhamburger", "sausagesalami", "bresaola", "sausaget-bone", "pigprosciutto", "hockfilet", "fatbacksalami", "chopspare", "chopjowl", "jowlpancetta", "bresaoladoner", "tipshankle", "tipbrisket", "venisonham", "bellybrisket", "sausagesausage", "tipbeef", "t-bonepastrami", "frankfurterbacon", "capicolasirloin", "beefground", "chuckribeye", "salamiswine", "shouldertri-tip", "cowshort", "t-bonebeef", "turduckensausage", "bellysalami", "drumstickcow", "prosciuttotongue", "frankfurterchicken", "porkchuck", "capicolabacon", "leberkastail", "ribsham", "sausageshort", "brisketmeatball", "meatballspare", "loinsirloin", "flankdrumstick", "jowlsausage", "hockshort", "donerjerky", "porksausage", "leberkaspork", "tailchicken", "hamburgerpastrami", "donerleberkas", "bellypancetta", "turkeysirloin", "mignonrump", "leberkasandouille", "salamipig", "mignondoner", "beefshankle", "beeftail", "tenderloinsalami", "cowspare", "jerkybresaola", "t-bonepork", "kielbasaribeye", "sirloinvenison", "jerkyshank", "turduckenprosciutto", "hockfatback", "loinboudin", "sirloinbrisket", "tippastrami", "shankledoner", "ribspastrami", "mignonkielbasa", "biltongflank", "steakribeye", "chucktenderloin", "shoulderleberkas", "jerkypig", "beefball", "loinbacon", "bellyjerky", "sausagecorned", "leberkashamburger", "leberkasturducken", "chickenturducken", "chopdoner", "salamidrumstick", "swineleberkas", "donerjowl", "jowlvenison", "bellypig", "donerandouille", "baconandouille", "shouldert-bone", "chopbeef"]
|
9
|
+
pessoa:
|
10
|
+
homens:
|
11
|
+
nomes: ["rafael", "bruno", "andré", "luiz", "tiago", "felipe", "guilherme", "daniel", "lucas", "rodrigo", "fernando", "joão", "pedro", "fábio", "marcelo", "victor", "eduardo", "gustavo", "gabriel", "paulo", "ricardo", "josé", "carlos", "leonardo", "alexandre", "leandro", "vinícius", "renato", "marcos", "caio", "mateus", "diego", "henrique", "danilo", "arthur", "renan", "maurício", "antônio", "márcio", "flávio", "william", "marco", "anderson", "roberto", "julio", "francisco", "diogo", "douglas", "sérgio", "césar", "murilo", "igor", "adriano", "alan", "eric", "alex", "filipe", "ivan", "mário", "hugo", "marcel", "rodolfo", "rogério", "marcus", "luciano", "jorge", "edson", "fabrício", "claudio", "denis", "augusto", "david", "frederico", "samuel", "yuri", "otávio", "juliano", "davi", "wagner", "michel", "jefferson", "celso", "ronaldo", "robson", "mauro", "fabiano", "alberto", "heitor", "rubens", "thomas", "alessandro", "emerson", "cristiano", "everton", "jonas", "breno", "cássio", "wellington", "thales", "evandro"]
|
12
|
+
agnomes: ["junior", "neto", "filho"]
|
13
|
+
mulheres:
|
14
|
+
nomes: ["adriana", "alessandra", "alice", "aline", "alinne", "amanda", "ana", "anna", "andrea", "andreia", "andressa", "ariane", "beariz", "bianca", "bruna", "bárbara", "camila", "carla", "carolina", "caroline", "cecília", "cláudia", "cristiane", "cristina", "cíntia", "daniela", "danielle", "denise", "débora", "elaine", "eliane", "elisa", "emanuele", "emanuelle", "fabiana", "fernada", "flávia", "gabriela", "giovanna", "gisele", "helena", "heloisa", "isabel", "isabela", "isadora", "janaina", "jaqueline", "joyce", "julia", "juliana", "jéssica", "karen", "karina", "kelly", "kátia", "lara", "larissa", "laura", "laís", "letícia", "lgia", "lilian", "luana", "luciana", "luiza", "lívia", "marcela", "maria", "mariana", "mariane", "marina", "marília", "mayara", "mayra", "michelle", "milena", "márcia", "mônica", "natália", "nádia", "pamela", "patrícia", "paula", "priscila", "rafaela", "raquel", "renata", "roberta", "sabrina", "sandra", "sarah", "silvia", "simone", "stephanie", "talita", "tatiana", "tatiane", "thaís", "vanessa", "verônica", "vitória", "vivian", "viviane"]
|
15
|
+
sobrenomes: ["aguiar", "aires", "alencar", "almeida", "alves", "amorim", "antunes", "araújo", "azevedo", "barbosa", "barreto", "barros", "borges", "brito", "cabral", "campelo", "cardoso", "carvalho", "castro", "cavalcante", "correia", "costela", "cunha", "dias", "dutra", "escobar", "farias", "faustino", "fernandes", "ferreira", "flores", "garcia", "gomes", "guimarães", "gusmão", "leite", "leitão", "lima", "lopes", "macedo", "machado", "magalhães", "martins", "melo", "mendonça", "moreira", "nascimento", "nogueira", "nunes", "oliveira", "paes", "paiva", "pereira", "pinto", "queiroz", "ramos", "ribeiro", "rocha", "rodrigues", "santos", "saraiva", "silva", "soares", "souza", "xavier"]
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
module BlaBla
|
3
|
+
class Util
|
4
|
+
def self.diff_in_years_from(date, date_b=Date.today)
|
5
|
+
years = date_b.year - date.year
|
6
|
+
date_b < Date.civil(date_b.year, date.month, date.day) ? years - 1 : years
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.sortear_por_peso params
|
10
|
+
total_pesos = params.map{|par| par[:probabilidade]}.reduce{|a, b|a+b}
|
11
|
+
raise "Somatório de pesos deve ser igual a 100" if total_pesos != 100
|
12
|
+
|
13
|
+
c = 1
|
14
|
+
rnd = rand 1..100
|
15
|
+
params.each do |par|
|
16
|
+
return par[:valor] if Range.new(c, (c += par[:probabilidade])-1).include? rnd
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/version.rb
ADDED
data/spec/blabla_spec.rb
ADDED
@@ -0,0 +1,117 @@
|
|
1
|
+
#encoding: UTF-8
|
2
|
+
require 'spec_helper'
|
3
|
+
|
4
|
+
describe BlaBla do
|
5
|
+
describe "Gerador de CPF" do
|
6
|
+
describe ".numero" do
|
7
|
+
it "deveria gerar um número de 11 dígitos" do
|
8
|
+
BlaBla::CPF.numero.size.should == 11
|
9
|
+
end
|
10
|
+
|
11
|
+
it "deveria gerar um CPF válido" do
|
12
|
+
10.times { validar_cpf(BlaBla::CPF.numero).should be_true }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe ".formatado" do
|
17
|
+
it "deveria gerar um CPF no formato xxx.xxx.xxx-xx" do
|
18
|
+
numero = BlaBla::CPF.formatado
|
19
|
+
validar_formatacao_cpf(numero).should be_true
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe "Gerador de CNPJ" do
|
25
|
+
describe ".numero" do
|
26
|
+
it "deveria gerar um número de 14 dígitos" do
|
27
|
+
BlaBla::CNPJ.numero.size.should == 14
|
28
|
+
end
|
29
|
+
|
30
|
+
it "deveria gerar um CNPJ válido" do
|
31
|
+
10.times { validar_cnpj(BlaBla::CNPJ.numero).should be_true }
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe ".formatado" do
|
36
|
+
it "deveria gerar um CNPJ no formato xx.xxx.xxx/xxxx-xx" do
|
37
|
+
numero = BlaBla::CNPJ.formatado
|
38
|
+
validar_formatacao_cnpj(numero).should be_true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "Gerador de Cartão de Crédito" do
|
44
|
+
describe ".numero" do
|
45
|
+
it "deveria gerar um número de 16 dígitos" do
|
46
|
+
BlaBla::CartaoCredito.numero.size.should == 16
|
47
|
+
end
|
48
|
+
|
49
|
+
it "deveria gerar números válidos" do
|
50
|
+
10.times { validar_cartao_credito(BlaBla::CartaoCredito.numero).should be_true }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
describe ".formatado" do
|
55
|
+
it "deveria gerar um número de cartão no formato xxxx xxxx xxxx xxxx" do
|
56
|
+
numero = BlaBla::CartaoCredito.formatado
|
57
|
+
validar_formatacao_cartao_credito(numero).should be_true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "Geradores de Bacon Ipsum e de Lorem Ipsum" do
|
63
|
+
before do
|
64
|
+
@geradores = [BlaBla::Lorem, BlaBla::Bacon]
|
65
|
+
end
|
66
|
+
|
67
|
+
describe ".palavra" do
|
68
|
+
it "deveria gerar uma única palavra" do
|
69
|
+
@geradores.each do |g|
|
70
|
+
g.palavra.split.size.should == 1
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
describe ".palavras" do
|
76
|
+
it "deveria gerar um vetor de palavras com a quantidade especificada" do
|
77
|
+
@geradores.each do |g|
|
78
|
+
g.palavras(10).size.should == 10
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe ".frase" do
|
84
|
+
it "A frase deveria iniciar com letra maiúscula e terminar com ponto" do
|
85
|
+
@geradores.each do |g|
|
86
|
+
frase = g.frase
|
87
|
+
is_upper?(frase[0]).should be_true
|
88
|
+
frase[-1].should == "."
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe ".frases" do
|
94
|
+
it "deveria gerar um vetor de frases com a quantidade especificada" do
|
95
|
+
@geradores.each do |g|
|
96
|
+
g.frases(10).size.should == 10
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
describe ".paragrafo" do
|
102
|
+
it "deveria gerar um parágrafo com mais de uma frase" do
|
103
|
+
@geradores.each do |g|
|
104
|
+
(g.paragrafo.split(".").size > 2).should be_true
|
105
|
+
end
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
describe ".paragrafos" do
|
110
|
+
it "deveria gerar um vetor de parágrafos com a quantidade especificada" do
|
111
|
+
@geradores.each do |g|
|
112
|
+
g.paragrafos(10).size.should == 10
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,111 @@
|
|
1
|
+
module BlaBlaHelpers
|
2
|
+
def validar_cpf numero
|
3
|
+
return false if numero.nil?
|
4
|
+
|
5
|
+
invalidos = ["12345678909"]
|
6
|
+
0.upto(9) {|n| invalidos << (n.to_s * 11)}
|
7
|
+
|
8
|
+
valor = numero.scan /[0-9]/
|
9
|
+
if valor.length == 11
|
10
|
+
unless invalidos.include? valor.join
|
11
|
+
valor = valor.collect{|x| x.to_i}
|
12
|
+
|
13
|
+
soma = 0
|
14
|
+
0.upto(8) do |n|
|
15
|
+
soma += (10-n)*valor[n]
|
16
|
+
end
|
17
|
+
soma -= (11 * (soma/11))
|
18
|
+
|
19
|
+
r1 = [0,1].include?(soma) ? 0 : 11 - soma
|
20
|
+
if r1 == valor[9]
|
21
|
+
soma = 0
|
22
|
+
0.upto(9) do |n|
|
23
|
+
soma += (11-n)*valor[n]
|
24
|
+
end
|
25
|
+
|
26
|
+
soma -= (11 * (soma/11))
|
27
|
+
r2 = [0,1].include?(soma) ? 0 : 11 - soma
|
28
|
+
return true if r2 == valor[10]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
false
|
33
|
+
end
|
34
|
+
|
35
|
+
def validar_cnpj numero
|
36
|
+
return false if numero.nil?
|
37
|
+
|
38
|
+
invalidos = []
|
39
|
+
0.upto(9) {|n| invalidos << (n.to_s * 14)}
|
40
|
+
|
41
|
+
valor = numero.scan /[0-9]/
|
42
|
+
if valor.length == 14
|
43
|
+
unless invalidos.include? valor.join
|
44
|
+
valor = valor.collect{|x| x.to_i}
|
45
|
+
|
46
|
+
soma = 0
|
47
|
+
0.upto(11) do |n|
|
48
|
+
nn = 5 - n
|
49
|
+
soma += (nn >= 2 ? nn : nn + 8)*valor[n]
|
50
|
+
end
|
51
|
+
soma -= (11 * (soma/11))
|
52
|
+
|
53
|
+
r1 = [0,1].include?(soma) ? 0 : 11 - soma
|
54
|
+
if r1 == valor[12]
|
55
|
+
soma = 0
|
56
|
+
0.upto(12) do |n|
|
57
|
+
nn = 6 - n
|
58
|
+
soma += (nn >= 2 ? nn : nn + 8)*valor[n]
|
59
|
+
end
|
60
|
+
|
61
|
+
soma -= (11 * (soma/11))
|
62
|
+
r2 = [0,1].include?(soma) ? 0 : 11 - soma
|
63
|
+
return true if r2 == valor[13]
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def validar_cartao_credito numero
|
70
|
+
numero = numero.to_s unless numero.class == String
|
71
|
+
|
72
|
+
digitos = []
|
73
|
+
|
74
|
+
1.upto(16) do |d|
|
75
|
+
if d % 2 == 0
|
76
|
+
n = numero[d-1].to_i
|
77
|
+
else
|
78
|
+
n = numero[d-1].to_i * 2
|
79
|
+
n -= 9 if n >= 10
|
80
|
+
end
|
81
|
+
|
82
|
+
digitos << n
|
83
|
+
end
|
84
|
+
|
85
|
+
digitos.inject(:+) % 10 == 0
|
86
|
+
end
|
87
|
+
|
88
|
+
def validar_formatacao_cpf cpf
|
89
|
+
cpf =~ /^(\d{3}\.){2}\d{3}\-\d{2}$/
|
90
|
+
end
|
91
|
+
|
92
|
+
def validar_formatacao_cnpj cnpj
|
93
|
+
cnpj =~ /^\d{2}(\.\d{3}){2}\/\d{4}\-\d{2}$/
|
94
|
+
end
|
95
|
+
|
96
|
+
def validar_formatacao_cartao_credito numero
|
97
|
+
numero =~ /^(\d{4} ){3}\d{4}$/
|
98
|
+
end
|
99
|
+
|
100
|
+
def is_number? s
|
101
|
+
!!(s =~ /\A[+-]?\d+?(\.\d+)?\Z/)
|
102
|
+
end
|
103
|
+
|
104
|
+
def is_lower? c
|
105
|
+
c >= 'a' && c <= 'z'
|
106
|
+
end
|
107
|
+
|
108
|
+
def is_upper? c
|
109
|
+
! is_lower? c
|
110
|
+
end
|
111
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: blabla
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Alcides Queiroz Aguiar
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-03-31 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rake
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.9.2
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.9.2
|
27
|
+
description: Um gerador de dados fictícios, porém realísticos, para desenvolvedores
|
28
|
+
brasileiros.
|
29
|
+
email:
|
30
|
+
- alcidesqueiroz@gmail.com
|
31
|
+
executables: []
|
32
|
+
extensions: []
|
33
|
+
extra_rdoc_files:
|
34
|
+
- README.md
|
35
|
+
files:
|
36
|
+
- .rspec
|
37
|
+
- Gemfile
|
38
|
+
- Gemfile.lock
|
39
|
+
- LICENSE
|
40
|
+
- README.md
|
41
|
+
- Rakefile
|
42
|
+
- blabla.gemspec
|
43
|
+
- lib/blabla.rb
|
44
|
+
- lib/generators/cartao_credito.rb
|
45
|
+
- lib/generators/cnpj.rb
|
46
|
+
- lib/generators/cpf.rb
|
47
|
+
- lib/generators/pessoa.rb
|
48
|
+
- lib/generators/texto/bacon.rb
|
49
|
+
- lib/generators/texto/base.rb
|
50
|
+
- lib/generators/texto/lorem.rb
|
51
|
+
- lib/strings/strings.yml
|
52
|
+
- lib/utilities/util.rb
|
53
|
+
- lib/version.rb
|
54
|
+
- spec/blabla_spec.rb
|
55
|
+
- spec/spec_helper.rb
|
56
|
+
- spec/support/blabla_helpers.rb
|
57
|
+
homepage: http://rubygems.org/gems/blabla
|
58
|
+
licenses: []
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ! '>='
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ! '>='
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.0.3
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: Um gerador de dados fictícios, porém realísticos, para desenvolvedores brasileiros.
|
80
|
+
test_files: []
|