unpack brazilian-rails

This commit is contained in:
2013-07-14 11:09:25 -04:00
parent 7d287fe530
commit e563725dc5
131 changed files with 5496 additions and 0 deletions

View File

View File

@@ -0,0 +1,20 @@
Copyright (c) 2008 [name of plugin creator]
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

View File

@@ -0,0 +1 @@
Aqui vai o README.

View File

@@ -0,0 +1,69 @@
# encoding: UTF-8
require "rubygems"
require "rake"
require "rake/testtask"
require "rdoc/task"
require "rake/packagetask"
require "rake/gempackagetask"
require File.join(File.dirname(__FILE__), "lib", "brnumeros", "version")
PKG_BUILD = ENV["PKG_BUILD"] ? "." + ENV["PKG_BUILD"] : ""
PKG_NAME = "brnumeros"
PKG_VERSION = BrNumeros::VERSION::STRING + PKG_BUILD
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
desc "Default Task"
task :default => [ :test ]
# Run the unit tests
Rake::TestTask.new { |t|
t.libs << "test"
t.pattern = "test/*_test.rb"
t.verbose = true
t.warning = false
}
#Generate the RDoc documentation
Rake::RDocTask.new { |rdoc|
rdoc.rdoc_dir = "doc"
rdoc.title = "Brazilian Rails -- Números"
rdoc.options << "--line-numbers" << "--inline-source" << "-A cattr_accessor=object"
rdoc.options << "--charset" << "utf-8"
rdoc.template = "#{ENV["template"]}.rb" if ENV["template"]
rdoc.rdoc_files.include("README", "CHANGELOG")
rdoc.rdoc_files.include("lib/**/*")
}
# Create compressed packages
spec = Gem::Specification.new do |s|
s.platform = Gem::Platform::RUBY
s.name = PKG_NAME
s.summary = "brnumeros é uma das gems que compoem o Brazilian Rails"
s.description = %q{brnumeros é uma das gems que compoem o Brazilian Rails}
s.version = PKG_VERSION
s.authors = ["Marcos Tapajós", "Celestino Gomes", "Andre Kupkosvki", "Vinícius Teles", "Felipe Barreto", "Rafael Walter", "Cassio Marques"]
s.email = %w"tapajos@gmail.com tinorj@gmail.com kupkovski@gmail.com vinicius.m.teles@gmail.com felipebarreto@gmail.com rafawalter@gmail.com cassiommc@gmail.com"
s.rubyforge_project = "brnumeros"
s.homepage = "http://www.improveit.com.br/software_livre/brazilian_rails"
s.has_rdoc = true
s.requirements << "none"
s.require_path = "lib"
s.add_development_dependency "rake"
s.files = [ "Rakefile", "README", "CHANGELOG", "MIT-LICENSE" ]
s.files = s.files + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
s.files = s.files + Dir.glob( "test/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
end
Rake::GemPackageTask.new(spec) do |p|
p.gem_spec = spec
end
desc "Publish the release files to RubyForge."
task :release => [ :package ] do
`gem push pkg/#{PKG_FILE_NAME}.gem`
end

View File

@@ -0,0 +1,7 @@
$:.unshift(File.dirname(__FILE__)) unless
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
%w(number_portuguese version).each {|req| require File.dirname(__FILE__) + "/brnumeros/#{req}"}
module BrNumeros
end

View File

@@ -0,0 +1,163 @@
# encoding: UTF-8
module Extenso
@@unidade = {
0 => "zero",
1 => "um",
2 => "dois",
3 => "três",
4 => "quatro",
5 => "cinco",
6 => "seis",
7 => "sete",
8 => "oito",
9 => "nove"
}
@@dezena = {
10 => "dez",
11 => "onze",
12 => "doze",
13 => "treze",
14 => "quatorze",
15 => "quinze",
16 => "dezesseis",
17 => "dezessete",
18 => "dezoito",
19 => "dezenove",
20 => "vinte",
30 => "trinta",
40 => "quarenta",
50 => "cinquenta",
60 => "sessenta",
70 => "setenta",
80 => "oitenta",
90 => "noventa" }
@@centena = {100 => "cento",
200 => "duzentos",
300 => "trezentos",
400 => "quatrocentos",
500 => "quinhentos",
600 => "seiscentos",
700 => "setecentos",
800 => "oitocentos",
900 => "novecentos" }
# Escreve o numero por extenso.
#
# Exemplo:
# 1.por_extenso ==> 'um'
# 100.por_extenso ==> 'cem'
# 158.por_extenso ==> 'cento e cinquenta e oito'
def por_extenso
Extenso.por_extenso(self)
end
# Alias para o metodo por_extenso
alias_method :to_extenso, :por_extenso
# Escreve o numero por extenso.
#
# Exemplo:
# Extenso.por_extenso(1) ==> "um"
# Extenso.por_extenso(100) ==> "cem"
# Extenso.por_extenso(158) ==> "cento e cinquenta e oito"
def Extenso.por_extenso(numero)
negativo=(numero<0)? "menos " : ""
n=numero.to_i.abs
return case n
when 0..9 then negativo + @@unidade[n].to_s
when 10..19 then negativo + @@dezena[n].to_s
when 20..99
v=n % 10
if v== 0
negativo + @@dezena[n].to_s
else
"#{negativo}#{@@dezena[n-v]} e #{por_extenso(v)}"
end
when 100
negativo+"cem"
when 101..999
v=n % 100
if v== 0
negativo + @@centena[n].to_s
else
"#{negativo}#{@@centena[n-v]} e #{por_extenso(v)}"
end
when 1000..999999
m,c=n/1000,n%1000
%(#{negativo}#{por_extenso(m)} mil#{c > 0 ? " e #{por_extenso(c)}":''})
when 1_000_000..999_999_999
mi,m=n/1_000_000,n%1_000_000
%(#{negativo}#{por_extenso(mi)} milh#{mi > 1 ? 'ões':'ão'}#{m > 0 ? " e #{por_extenso(m)}" : ''})
when 1_000_000_000..999_999_999_999
bi,mi=n/1_000_000_000,n%1_000_000_000
%(#{negativo}#{por_extenso(bi)} bilh#{bi > 1 ? 'ões':'ão'}#{mi > 0 ? " e #{por_extenso(mi)}" : ''})
when 1_000_000_000_000..999_999_999_999_999
tri,bi=n/1_000_000_000_000,n%1_000_000_000_000
%(#{negativo}#{por_extenso(tri)} trilh#{tri > 1 ? 'ões':'ão'}#{bi > 0 ? " e #{por_extenso(bi)}" : ''})
else
raise "Valor excede o permitido: #{n}"
end
end
end
module ExtensoReal
include Extenso
# Escreve por extenso em reais.
#
# Exemplo:
# 1.por_extenso_em_reais ==> 'um real'
# (100.58).por_extenso_em_reais ==> 'cem reais e cinquenta e oito centavos'
def por_extenso_em_reais
ExtensoReal.por_extenso_em_reais(self)
end
# Alias para por_extenso_em_reais
alias_method :to_extenso_real, :por_extenso_em_reais
# Escreve o numero por extenso em reais.
#
# Exemplo:
# Extenso.por_extenso_em_reais(1) ==> "um real"
# Extenso.por_extenso_em_reais(100) ==> "cem reais"
# Extenso.por_extenso_em_reais(100.58) ==> "cem reais e cinquenta e oito centavos"
def ExtensoReal.por_extenso_em_reais(valor)
negativo=(valor<0)? " negativo" : ""
negativos=(valor<0)? " negativos" : ""
valor = valor.abs
return 'grátis' if valor == 0
case valor
when Integer
extenso = Extenso.por_extenso(valor)
if extenso =~ /^(.*)(ão$|ões$)/
complemento = 'de '
else
complemento = ''
end
%(#{extenso} #{valor <= 1 ? "real#{negativo}": "#{complemento}reais#{negativos}"})
when Float
real,cents=("%.2f" % valor).split(/\./).map{ |m| m.to_i}
valor_cents=Extenso.por_extenso(cents%100)
valor_cents+= case cents.to_i%100
when 0 then ""
when 1 then " centavo"
when 2..99 then " centavos"
end
if real.to_i > 0
"#{ExtensoReal.por_extenso_em_reais(real.to_i)}#{cents > 0 ? ' e ' + valor_cents + negativos : real.to_i > 1 ? negativos : negativo }"
else
if (cents.to_i%100)==1
"#{valor_cents}#{negativo}"
else
"#{valor_cents}#{negativos}"
end
end
else
ExtensoReal.por_extenso_em_reais(valor.to_s.strip.gsub(/[^\d]/,'.').to_f)
end
end
end
Numeric.send(:include, ExtensoReal)

View File

@@ -0,0 +1,10 @@
module BrNumeros
module VERSION #:nodoc:
MAJOR = 3
MINOR = 3
TINY = 0
STRING = "#{MAJOR}.#{MINOR}.#{TINY}"
end
end

View File

@@ -0,0 +1 @@
require File.dirname(__FILE__) + '/../lib/brnumeros'

View File

@@ -0,0 +1,357 @@
# encoding: UTF-8
require File.dirname(__FILE__) + '/test_helper'
class NumberTest < Test::Unit::TestCase
def test_unidades
assert_equal 'zero', 0.por_extenso
assert_equal 'um', 1.por_extenso
assert_equal 'dois', 2.por_extenso
assert_equal 'três', 3.por_extenso
assert_equal 'quatro', 4.por_extenso
assert_equal 'cinco', 5.por_extenso
assert_equal 'seis', 6.por_extenso
assert_equal 'sete', 7.por_extenso
assert_equal 'oito', 8.por_extenso
assert_equal 'nove', 9.por_extenso
end
def test_dezenas
assert_equal 'dez', 10.por_extenso
assert_equal 'onze', 11.por_extenso
assert_equal 'doze', 12.por_extenso
assert_equal 'treze', 13.por_extenso
assert_equal 'quatorze', 14.por_extenso
assert_equal 'quinze', 15.por_extenso
assert_equal 'dezesseis', 16.por_extenso
assert_equal 'dezessete', 17.por_extenso
assert_equal 'dezoito', 18.por_extenso
assert_equal 'dezenove', 19.por_extenso
assert_equal 'vinte', 20.por_extenso
assert_equal 'trinta', 30.por_extenso
assert_equal 'quarenta', 40.por_extenso
assert_equal 'cinquenta', 50.por_extenso
assert_equal 'sessenta', 60.por_extenso
assert_equal 'setenta', 70.por_extenso
assert_equal 'oitenta', 80.por_extenso
assert_equal 'noventa', 90.por_extenso
end
def test_dezenas_com_unidades
assert_equal 'vinte e um', 21.por_extenso
assert_equal 'trinta e dois', 32.por_extenso
assert_equal 'quarenta e três', 43.por_extenso
assert_equal 'cinquenta e quatro', 54.por_extenso
assert_equal 'sessenta e cinco', 65.por_extenso
assert_equal 'setenta e seis', 76.por_extenso
assert_equal 'oitenta e sete', 87.por_extenso
assert_equal 'noventa e oito', 98.por_extenso
end
def test_centenas
assert_equal 'cem', 100.por_extenso
assert_equal 'duzentos', 200.por_extenso
assert_equal 'trezentos', 300.por_extenso
assert_equal 'quatrocentos', 400.por_extenso
assert_equal 'quinhentos', 500.por_extenso
assert_equal 'seiscentos', 600.por_extenso
assert_equal 'setecentos', 700.por_extenso
assert_equal 'oitocentos', 800.por_extenso
assert_equal 'novecentos', 900.por_extenso
end
def test_centenas_com_dezenas_e_unidades
assert_equal 'cento e um', 101.por_extenso
assert_equal 'cento e dez', 110.por_extenso
assert_equal 'cento e onze', 111.por_extenso
assert_equal 'duzentos e dois', 202.por_extenso
assert_equal 'duzentos e vinte', 220.por_extenso
assert_equal 'duzentos e vinte e dois', 222.por_extenso
assert_equal 'trezentos e três', 303.por_extenso
assert_equal 'trezentos e trinta', 330.por_extenso
assert_equal 'trezentos e trinta e três', 333.por_extenso
assert_equal 'quatrocentos e quatro', 404.por_extenso
assert_equal 'quatrocentos e quarenta', 440.por_extenso
assert_equal 'quatrocentos e quarenta e quatro', 444.por_extenso
assert_equal 'quinhentos e cinco', 505.por_extenso
assert_equal 'quinhentos e cinquenta', 550.por_extenso
assert_equal 'quinhentos e cinquenta e cinco', 555.por_extenso
assert_equal 'seiscentos e seis', 606.por_extenso
assert_equal 'seiscentos e sessenta', 660.por_extenso
assert_equal 'seiscentos e sessenta e seis', 666.por_extenso
assert_equal 'setecentos e sete', 707.por_extenso
assert_equal 'setecentos e setenta', 770.por_extenso
assert_equal 'setecentos e setenta e sete', 777.por_extenso
assert_equal 'oitocentos e oito', 808.por_extenso
assert_equal 'oitocentos e oitenta', 880.por_extenso
assert_equal 'oitocentos e oitenta e oito', 888.por_extenso
assert_equal 'novecentos e nove', 909.por_extenso
assert_equal 'novecentos e noventa', 990.por_extenso
assert_equal 'novecentos e noventa e nove', 999.por_extenso
end
def test_mil
assert_equal 'um mil', 1_000.por_extenso
assert_equal 'um mil e um', 1_001.por_extenso
assert_equal 'um mil e dez', 1_010.por_extenso
assert_equal 'um mil e onze', 1_011.por_extenso
assert_equal 'um mil e cem', 1_100.por_extenso
assert_equal 'um mil e cento e um', 1_101.por_extenso
assert_equal 'um mil e cento e dez', 1_110.por_extenso
assert_equal 'um mil e cento e onze', 1_111.por_extenso
assert_equal 'dez mil', 10_000.por_extenso
assert_equal 'cem mil', 100_000.por_extenso
assert_equal 'cento e dez mil', 110_000.por_extenso
end
def test_milhao
assert_equal 'um milhão', 1_000_000.por_extenso
assert_equal 'um milhão e um mil e um', 1_001_001.por_extenso
assert_equal 'um milhão e dez mil e dez', 1_010_010.por_extenso
assert_equal 'um milhão e onze mil e onze', 1_011_011.por_extenso
assert_equal 'um milhão e cem mil e cem', 1_100_100.por_extenso
assert_equal 'um milhão e cento e um mil e cento e um', 1_101_101.por_extenso
assert_equal 'um milhão e cento e dez mil e cento e dez', 1_110_110.por_extenso
assert_equal 'um milhão e cento e onze mil e cento e onze', 1_111_111.por_extenso
assert_equal 'dez milhões', 10_000_000.por_extenso
assert_equal 'cem milhões', 100_000_000.por_extenso
assert_equal 'cento e dez milhões', 110_000_000.por_extenso
end
def test_bilhao
assert_equal 'um bilhão', 1_000_000_000.por_extenso
assert_equal 'um bilhão e um milhão e um mil e um', 1_001_001_001.por_extenso
assert_equal 'um bilhão e dez milhões e dez mil e dez', 1_010_010_010.por_extenso
assert_equal 'um bilhão e onze milhões e onze mil e onze', 1_011_011_011.por_extenso
assert_equal 'um bilhão e cem milhões e cem mil e cem', 1_100_100_100.por_extenso
assert_equal 'um bilhão e cento e um milhões e cento e um mil e cento e um', 1_101_101_101.por_extenso
assert_equal 'um bilhão e cento e dez milhões e cento e dez mil e cento e dez', 1_110_110_110.por_extenso
assert_equal 'um bilhão e cento e onze milhões e cento e onze mil e cento e onze', 1_111_111_111.por_extenso
assert_equal 'dez bilhões', 10_000_000_000.por_extenso
assert_equal 'cem bilhões', 100_000_000_000.por_extenso
assert_equal 'cento e dez bilhões', 110_000_000_000.por_extenso
end
def test_trilhao
assert_equal 'um trilhão', 1_000_000_000_000.por_extenso
assert_equal 'um trilhão e um bilhão e um milhão e um mil e um', 1_001_001_001_001.por_extenso
assert_equal 'um trilhão e dez bilhões e dez milhões e dez mil e dez', 1_010_010_010_010.por_extenso
assert_equal 'um trilhão e onze bilhões e onze milhões e onze mil e onze', 1_011_011_011_011.por_extenso
assert_equal 'um trilhão e cem bilhões e cem milhões e cem mil e cem', 1_100_100_100_100.por_extenso
assert_equal 'um trilhão e cento e um bilhões e cento e um milhões e cento e um mil e cento e um', 1_101_101_101_101.por_extenso
assert_equal 'um trilhão e cento e dez bilhões e cento e dez milhões e cento e dez mil e cento e dez', 1_110_110_110_110.por_extenso
assert_equal 'um trilhão e cento e onze bilhões e cento e onze milhões e cento e onze mil e cento e onze', 1_111_111_111_111.por_extenso
assert_equal 'dez trilhões', 10_000_000_000_000.por_extenso
assert_equal 'cem trilhões', 100_000_000_000_000.por_extenso
assert_equal 'cento e dez trilhões', 110_000_000_000_000.por_extenso
end
def test_numero_maior_que_trilhao_eh_rejetaido
begin
1_000_000_000_000_000.por_extenso
raise "Deveria lançar RuntimeError com mensagem 'Valor excede o permitido'"
rescue RuntimeError => e
assert_equal RuntimeError, e.class
assert_equal 'Valor excede o permitido: 1000000000000000', e.message
end
end
def test_valores_em_real
assert_equal 'grátis', 0.por_extenso_em_reais
assert_equal 'um centavo', 0.01.por_extenso_em_reais
assert_equal 'dois centavos', 0.02.por_extenso_em_reais
assert_equal 'vinte e um centavos', 0.21.por_extenso_em_reais
assert_equal 'um real', 1.00.por_extenso_em_reais
assert_equal 'um real', 1.por_extenso_em_reais
assert_equal 'um real e um centavo', 1.01.por_extenso_em_reais
assert_equal 'um real e dois centavos', 1.02.por_extenso_em_reais
assert_equal 'um milhão de reais e um centavo', 1_000_000.01.por_extenso_em_reais
assert_equal 'dois milhões de reais e um centavo', 2_000_000.01.por_extenso_em_reais
assert_equal 'dois milhões e duzentos reais e um centavo', 2_000_200.01.por_extenso_em_reais
assert_equal 'um bilhão de reais e um centavo', 1_000_000_000.01.por_extenso_em_reais
assert_equal 'um trilhão de reais e um centavo', 1_000_000_000_000.01.por_extenso_em_reais
assert_equal 'cento e vinte e oito mil e duzentos e quarenta e três reais e vinte e oito centavos', 128_243.28.por_extenso_em_reais
assert_equal 'oitenta e dois mil e trezentos e oitenta e nove reais e dezenove centavos', 82_389.19.por_extenso_em_reais
assert_equal 'dois mil e trezentos e quarenta e sete reais e vinte e oito centavos', 2_347.28.por_extenso_em_reais
assert_equal 'noventa e dois mil e trezentos e setenta e dois reais e oitenta e seis centavos', 92_372.86.por_extenso_em_reais
end
def test_unidades_negativas
assert_equal 'zero', -0.por_extenso #Aha, tentou me pegar :)
assert_equal 'menos um', -1.por_extenso
assert_equal 'menos dois', -2.por_extenso
assert_equal 'menos três', -3.por_extenso
assert_equal 'menos quatro', -4.por_extenso
assert_equal 'menos cinco', -5.por_extenso
assert_equal 'menos seis', -6.por_extenso
assert_equal 'menos sete', -7.por_extenso
assert_equal 'menos oito', -8.por_extenso
assert_equal 'menos nove', -9.por_extenso
end
def test_dezenas_negativas
assert_equal 'menos dez', -10.por_extenso
assert_equal 'menos onze', -11.por_extenso
assert_equal 'menos doze', -12.por_extenso
assert_equal 'menos treze', -13.por_extenso
assert_equal 'menos quatorze', -14.por_extenso
assert_equal 'menos quinze', -15.por_extenso
assert_equal 'menos dezesseis', -16.por_extenso
assert_equal 'menos dezessete', -17.por_extenso
assert_equal 'menos dezoito', -18.por_extenso
assert_equal 'menos dezenove', -19.por_extenso
assert_equal 'menos vinte', -20.por_extenso
assert_equal 'menos trinta', -30.por_extenso
assert_equal 'menos quarenta', -40.por_extenso
assert_equal 'menos cinquenta', -50.por_extenso
assert_equal 'menos sessenta', -60.por_extenso
assert_equal 'menos setenta', -70.por_extenso
assert_equal 'menos oitenta', -80.por_extenso
assert_equal 'menos noventa', -90.por_extenso
end
def test_dezenas_com_unidades_negativas
assert_equal 'menos vinte e um', -21.por_extenso
assert_equal 'menos trinta e dois', -32.por_extenso
assert_equal 'menos quarenta e três', -43.por_extenso
assert_equal 'menos cinquenta e quatro', -54.por_extenso
assert_equal 'menos sessenta e cinco', -65.por_extenso
assert_equal 'menos setenta e seis', -76.por_extenso
assert_equal 'menos oitenta e sete', -87.por_extenso
assert_equal 'menos noventa e oito', -98.por_extenso
end
def test_centenas_negativas
assert_equal 'menos cem', -100.por_extenso
assert_equal 'menos duzentos', -200.por_extenso
assert_equal 'menos trezentos', -300.por_extenso
assert_equal 'menos quatrocentos', -400.por_extenso
assert_equal 'menos quinhentos', -500.por_extenso
assert_equal 'menos seiscentos', -600.por_extenso
assert_equal 'menos setecentos', -700.por_extenso
assert_equal 'menos oitocentos', -800.por_extenso
assert_equal 'menos novecentos', -900.por_extenso
end
def test_centenas_com_dezenas_e_unidades_negativas
assert_equal 'menos cento e um', -101.por_extenso
assert_equal 'menos cento e dez', -110.por_extenso
assert_equal 'menos cento e onze', -111.por_extenso
assert_equal 'menos duzentos e dois', -202.por_extenso
assert_equal 'menos duzentos e vinte', -220.por_extenso
assert_equal 'menos duzentos e vinte e dois', -222.por_extenso
assert_equal 'menos trezentos e três', -303.por_extenso
assert_equal 'menos trezentos e trinta', -330.por_extenso
assert_equal 'menos trezentos e trinta e três', -333.por_extenso
assert_equal 'menos quatrocentos e quatro', -404.por_extenso
assert_equal 'menos quatrocentos e quarenta', -440.por_extenso
assert_equal 'menos quatrocentos e quarenta e quatro', -444.por_extenso
assert_equal 'menos quinhentos e cinco', -505.por_extenso
assert_equal 'menos quinhentos e cinquenta', -550.por_extenso
assert_equal 'menos quinhentos e cinquenta e cinco', -555.por_extenso
assert_equal 'menos seiscentos e seis', -606.por_extenso
assert_equal 'menos seiscentos e sessenta', -660.por_extenso
assert_equal 'menos seiscentos e sessenta e seis', -666.por_extenso
assert_equal 'menos setecentos e sete', -707.por_extenso
assert_equal 'menos setecentos e setenta', -770.por_extenso
assert_equal 'menos setecentos e setenta e sete', -777.por_extenso
assert_equal 'menos oitocentos e oito', -808.por_extenso
assert_equal 'menos oitocentos e oitenta', -880.por_extenso
assert_equal 'menos oitocentos e oitenta e oito', -888.por_extenso
assert_equal 'menos novecentos e nove', -909.por_extenso
assert_equal 'menos novecentos e noventa', -990.por_extenso
assert_equal 'menos novecentos e noventa e nove', -999.por_extenso
end
def test_mil_negativo
assert_equal 'menos um mil', -1_000.por_extenso
assert_equal 'menos um mil e um', -1_001.por_extenso
assert_equal 'menos um mil e dez', -1_010.por_extenso
assert_equal 'menos um mil e onze', -1_011.por_extenso
assert_equal 'menos um mil e cem', -1_100.por_extenso
assert_equal 'menos um mil e cento e um', -1_101.por_extenso
assert_equal 'menos um mil e cento e dez', -1_110.por_extenso
assert_equal 'menos um mil e cento e onze', -1_111.por_extenso
assert_equal 'menos dez mil', -10_000.por_extenso
assert_equal 'menos cem mil', -100_000.por_extenso
assert_equal 'menos cento e dez mil', -110_000.por_extenso
end
def test_milhao_negativo
assert_equal 'menos um milhão', -1_000_000.por_extenso
assert_equal 'menos um milhão e um mil e um', -1_001_001.por_extenso
assert_equal 'menos um milhão e dez mil e dez', -1_010_010.por_extenso
assert_equal 'menos um milhão e onze mil e onze', -1_011_011.por_extenso
assert_equal 'menos um milhão e cem mil e cem', -1_100_100.por_extenso
assert_equal 'menos um milhão e cento e um mil e cento e um', -1_101_101.por_extenso
assert_equal 'menos um milhão e cento e dez mil e cento e dez', -1_110_110.por_extenso
assert_equal 'menos um milhão e cento e onze mil e cento e onze', -1_111_111.por_extenso
assert_equal 'menos dez milhões', -10_000_000.por_extenso
assert_equal 'menos cem milhões', -100_000_000.por_extenso
assert_equal 'menos cento e dez milhões', -110_000_000.por_extenso
end
def test_bilhao_negativo
assert_equal 'menos um bilhão', -1_000_000_000.por_extenso
assert_equal 'menos um bilhão e um milhão e um mil e um', -1_001_001_001.por_extenso
assert_equal 'menos um bilhão e dez milhões e dez mil e dez', -1_010_010_010.por_extenso
assert_equal 'menos um bilhão e onze milhões e onze mil e onze', -1_011_011_011.por_extenso
assert_equal 'menos um bilhão e cem milhões e cem mil e cem', -1_100_100_100.por_extenso
assert_equal 'menos um bilhão e cento e um milhões e cento e um mil e cento e um', -1_101_101_101.por_extenso
assert_equal 'menos um bilhão e cento e dez milhões e cento e dez mil e cento e dez', -1_110_110_110.por_extenso
assert_equal 'menos um bilhão e cento e onze milhões e cento e onze mil e cento e onze', -1_111_111_111.por_extenso
assert_equal 'menos dez bilhões', -10_000_000_000.por_extenso
assert_equal 'menos cem bilhões', -100_000_000_000.por_extenso
assert_equal 'menos cento e dez bilhões', -110_000_000_000.por_extenso
end
def test_trilhao_negativo
assert_equal 'menos um trilhão', -1_000_000_000_000.por_extenso
assert_equal 'menos um trilhão e um bilhão e um milhão e um mil e um', -1_001_001_001_001.por_extenso
assert_equal 'menos um trilhão e dez bilhões e dez milhões e dez mil e dez', -1_010_010_010_010.por_extenso
assert_equal 'menos um trilhão e onze bilhões e onze milhões e onze mil e onze', -1_011_011_011_011.por_extenso
assert_equal 'menos um trilhão e cem bilhões e cem milhões e cem mil e cem', -1_100_100_100_100.por_extenso
assert_equal 'menos um trilhão e cento e um bilhões e cento e um milhões e cento e um mil e cento e um', -1_101_101_101_101.por_extenso
assert_equal 'menos um trilhão e cento e dez bilhões e cento e dez milhões e cento e dez mil e cento e dez', -1_110_110_110_110.por_extenso
assert_equal 'menos um trilhão e cento e onze bilhões e cento e onze milhões e cento e onze mil e cento e onze', -1_111_111_111_111.por_extenso
assert_equal 'menos dez trilhões', -10_000_000_000_000.por_extenso
assert_equal 'menos cem trilhões', -100_000_000_000_000.por_extenso
assert_equal 'menos cento e dez trilhões', -110_000_000_000_000.por_extenso
end
def test_valores_em_real_negativos
assert_equal 'grátis', -0.por_extenso_em_reais #grátis é grátis
assert_equal 'um centavo negativo', -0.01.por_extenso_em_reais
assert_equal 'dois centavos negativos', -0.02.por_extenso_em_reais
assert_equal 'vinte e um centavos negativos', -0.21.por_extenso_em_reais
assert_equal 'um real negativo', -1.00.por_extenso_em_reais
assert_equal 'um real negativo', -1.por_extenso_em_reais
assert_equal 'um real e um centavo negativos', -1.01.por_extenso_em_reais
assert_equal 'um real e dois centavos negativos', -1.02.por_extenso_em_reais
assert_equal 'um milhão de reais e um centavo negativos', -1_000_000.01.por_extenso_em_reais
assert_equal 'dois milhões de reais e um centavo negativos', -2_000_000.01.por_extenso_em_reais
assert_equal 'dois milhões e duzentos reais e um centavo negativos', -2_000_200.01.por_extenso_em_reais
assert_equal 'um bilhão de reais e um centavo negativos', -1_000_000_000.01.por_extenso_em_reais
assert_equal 'um trilhão de reais e um centavo negativos', -1_000_000_000_000.01.por_extenso_em_reais
assert_equal 'cento e vinte e oito mil e duzentos e quarenta e três reais e vinte e oito centavos negativos', -128_243.28.por_extenso_em_reais
assert_equal 'oitenta e dois mil e trezentos e oitenta e nove reais e dezenove centavos negativos', -82_389.19.por_extenso_em_reais
assert_equal 'dois mil e trezentos e quarenta e sete reais e vinte e oito centavos negativos', -2_347.28.por_extenso_em_reais
assert_equal 'noventa e dois mil e trezentos e setenta e dois reais e oitenta e seis centavos negativos', -92_372.86.por_extenso_em_reais
end
end

View File

@@ -0,0 +1,15 @@
require 'test/unit'
require File.dirname(__FILE__) + '/../lib/brnumeros'
def tornar_metodos_publicos(clazz)
clazz.class_eval do
private_instance_methods.each { |instance_method| public instance_method }
private_methods.each { |method| public_class_method method }
end
end
def p80 text
p '*'*80
p text
yield if block_given?
end