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 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
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'rspec'
4
+ gem 'rake'
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
@@ -0,0 +1,3 @@
1
+ module BlaBla
2
+ VERSION = "0.0.1".freeze
3
+ end
@@ -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
@@ -0,0 +1,8 @@
1
+ require 'support/blabla_helpers'
2
+
3
+ $:.unshift File.expand_path('../lib', __FILE__)
4
+ require 'blabla'
5
+
6
+ RSpec.configure do |c|
7
+ c.include BlaBlaHelpers
8
+ end
@@ -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: []