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