blabla 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|