blabla 0.0.1

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