brnumeros 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.
- data/CHANGELOG +0 -0
- data/MIT-LICENSE +20 -0
- data/README +1 -0
- data/Rakefile +97 -0
- data/lib/brnumeros/number_portuguese.rb +162 -0
- data/lib/brnumeros/version.rb +9 -0
- data/lib/brnumeros.rb +7 -0
- data/test/number_test.rb +356 -0
- data/test/test_helper.rb +15 -0
- metadata +65 -0
data/CHANGELOG
ADDED
File without changes
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008 [name of plugin creator]
|
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
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Aqui vai o README.
|
data/Rakefile
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/testtask'
|
4
|
+
require 'rake/rdoctask'
|
5
|
+
require 'rake/packagetask'
|
6
|
+
require 'rake/gempackagetask'
|
7
|
+
require 'rake/contrib/sshpublisher'
|
8
|
+
require File.join(File.dirname(__FILE__), 'lib', 'brnumeros', 'version')
|
9
|
+
|
10
|
+
PKG_BUILD = ENV['PKG_BUILD'] ? '.' + ENV['PKG_BUILD'] : ''
|
11
|
+
PKG_NAME = 'brnumeros'
|
12
|
+
PKG_VERSION = BrNumeros::VERSION::STRING + PKG_BUILD
|
13
|
+
PKG_FILE_NAME = "#{PKG_NAME}-#{PKG_VERSION}"
|
14
|
+
|
15
|
+
RELEASE_NAME = "REL #{PKG_VERSION}"
|
16
|
+
|
17
|
+
RUBY_FORGE_PROJECT = "brnumeros"
|
18
|
+
RUBY_FORGE_USER = "tapajos"
|
19
|
+
|
20
|
+
desc "Default Task"
|
21
|
+
task :default => [ :test ]
|
22
|
+
|
23
|
+
# Run the unit tests
|
24
|
+
Rake::TestTask.new { |t|
|
25
|
+
t.libs << "test"
|
26
|
+
t.pattern = 'test/*_test.rb'
|
27
|
+
t.verbose = true
|
28
|
+
t.warning = false
|
29
|
+
}
|
30
|
+
|
31
|
+
|
32
|
+
#Generate the RDoc documentation
|
33
|
+
Rake::RDocTask.new { |rdoc|
|
34
|
+
rdoc.rdoc_dir = 'doc'
|
35
|
+
rdoc.title = "Brazilian Rails -- Números"
|
36
|
+
rdoc.options << '--line-numbers' << '--inline-source' << '-A cattr_accessor=object'
|
37
|
+
rdoc.options << '--charset' << 'utf-8'
|
38
|
+
rdoc.template = "#{ENV['template']}.rb" if ENV['template']
|
39
|
+
rdoc.rdoc_files.include('README', 'CHANGELOG')
|
40
|
+
rdoc.rdoc_files.include('lib/**/*')
|
41
|
+
}
|
42
|
+
|
43
|
+
|
44
|
+
|
45
|
+
# Create compressed packages
|
46
|
+
spec = Gem::Specification.new do |s|
|
47
|
+
s.platform = Gem::Platform::RUBY
|
48
|
+
s.name = PKG_NAME
|
49
|
+
s.summary = "brnumeros é uma das gems que compoem o Brazilian Rails"
|
50
|
+
s.description = %q{brnumeros é uma das gems que compoem o Brazilian Rails}
|
51
|
+
s.version = PKG_VERSION
|
52
|
+
|
53
|
+
s.authors = ["Marcos Tapajós", "Celestino Gomes", "Andre Kupkosvki", "Vinícius Teles"]
|
54
|
+
s.email = "tapajos@gmail.com"
|
55
|
+
s.rubyforge_project = "brnumeros"
|
56
|
+
s.homepage = "http://www.improveit.com.br/software_livre/brazilian_rails"
|
57
|
+
|
58
|
+
s.has_rdoc = true
|
59
|
+
s.requirements << 'none'
|
60
|
+
s.require_path = 'lib'
|
61
|
+
# s.autorequire = 'brnumeros'
|
62
|
+
|
63
|
+
s.files = [ "Rakefile", "README", "CHANGELOG", "MIT-LICENSE" ]
|
64
|
+
s.files = s.files + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
|
65
|
+
s.files = s.files + Dir.glob( "test/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
|
66
|
+
end
|
67
|
+
|
68
|
+
Rake::GemPackageTask.new(spec) do |p|
|
69
|
+
p.gem_spec = spec
|
70
|
+
p.need_tar = true
|
71
|
+
p.need_zip = true
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
# desc "Publish the API documentation"
|
76
|
+
# task :pgem => [:package] do
|
77
|
+
# Rake::SshFilePublisher.new("wrath.rubyonrails.org", "public_html/gems/gems", "pkg", "#{PKG_FILE_NAME}.gem").upload
|
78
|
+
# end
|
79
|
+
#
|
80
|
+
# desc "Publish the API documentation"
|
81
|
+
# task :pdoc => [:rdoc] do
|
82
|
+
# Rake::SshDirPublisher.new("wrath.rubyonrails.org", "public_html/am", "doc").upload
|
83
|
+
# end
|
84
|
+
#
|
85
|
+
|
86
|
+
desc "Publish the release files to RubyForge."
|
87
|
+
task :release => [ :package ] do
|
88
|
+
require 'rubyforge'
|
89
|
+
require 'rake/contrib/rubyforgepublisher'
|
90
|
+
|
91
|
+
packages = %w( gem tgz zip ).collect{ |ext| "pkg/#{PKG_NAME}-#{PKG_VERSION}.#{ext}" }
|
92
|
+
|
93
|
+
rubyforge = RubyForge.new
|
94
|
+
rubyforge.configure
|
95
|
+
rubyforge.login
|
96
|
+
rubyforge.add_release(PKG_NAME, PKG_NAME, "REL #{PKG_VERSION}", *packages)
|
97
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
module Extenso
|
2
|
+
@@unidade = {
|
3
|
+
0 => "zero",
|
4
|
+
1 => "um",
|
5
|
+
2 => "dois",
|
6
|
+
3 => "três",
|
7
|
+
4 => "quatro",
|
8
|
+
5 => "cinco",
|
9
|
+
6 => "seis",
|
10
|
+
7 => "sete",
|
11
|
+
8 => "oito",
|
12
|
+
9 => "nove"
|
13
|
+
}
|
14
|
+
@@dezena = {
|
15
|
+
10 => "dez",
|
16
|
+
11 => "onze",
|
17
|
+
12 => "doze",
|
18
|
+
13 => "treze",
|
19
|
+
14 => "quatorze",
|
20
|
+
15 => "quinze",
|
21
|
+
16 => "dezesseis",
|
22
|
+
17 => "dezessete",
|
23
|
+
18 => "dezoito",
|
24
|
+
19 => "dezenove",
|
25
|
+
20 => "vinte",
|
26
|
+
30 => "trinta",
|
27
|
+
40 => "quarenta",
|
28
|
+
50 => "cinquenta",
|
29
|
+
60 => "sessenta",
|
30
|
+
70 => "setenta",
|
31
|
+
80 => "oitenta",
|
32
|
+
90 => "noventa" }
|
33
|
+
@@centena = {100 => "cento",
|
34
|
+
200 => "duzentos",
|
35
|
+
300 => "trezentos",
|
36
|
+
400 => "quatrocentos",
|
37
|
+
500 => "quinhentos",
|
38
|
+
600 => "seiscentos",
|
39
|
+
700 => "setecentos",
|
40
|
+
800 => "oitocentos",
|
41
|
+
900 => "novecentos" }
|
42
|
+
|
43
|
+
# Escreve o numero por extenso.
|
44
|
+
#
|
45
|
+
# Exemplo:
|
46
|
+
# 1.por_extenso ==> 'um'
|
47
|
+
# 100.por_extenso ==> 'cem'
|
48
|
+
# 158.por_extenso ==> 'cento e cinquenta e oito'
|
49
|
+
def por_extenso
|
50
|
+
Extenso.por_extenso(self)
|
51
|
+
end
|
52
|
+
|
53
|
+
# Alias para o metodo por_extenso
|
54
|
+
alias_method :to_extenso, :por_extenso
|
55
|
+
|
56
|
+
# Escreve o numero por extenso.
|
57
|
+
#
|
58
|
+
# Exemplo:
|
59
|
+
# Extenso.por_extenso(1) ==> "um"
|
60
|
+
# Extenso.por_extenso(100) ==> "cem"
|
61
|
+
# Extenso.por_extenso(158) ==> "cento e cinquenta e oito"
|
62
|
+
def Extenso.por_extenso(numero)
|
63
|
+
negativo=(numero<0)?"menos ":""
|
64
|
+
n=numero.to_i.abs
|
65
|
+
return case n
|
66
|
+
when 0..9: negativo + @@unidade[n].to_s
|
67
|
+
when 10..19: negativo + @@dezena[n].to_s
|
68
|
+
when 20..99:
|
69
|
+
v=n % 10
|
70
|
+
if v== 0
|
71
|
+
negativo + @@dezena[n].to_s
|
72
|
+
else
|
73
|
+
"#{negativo}#{@@dezena[n-v]} e #{por_extenso(v)}"
|
74
|
+
end
|
75
|
+
when 100
|
76
|
+
negativo+"cem"
|
77
|
+
when 101..999
|
78
|
+
v=n % 100
|
79
|
+
if v== 0
|
80
|
+
negativo + @@centena[n].to_s
|
81
|
+
else
|
82
|
+
"#{negativo}#{@@centena[n-v]} e #{por_extenso(v)}"
|
83
|
+
end
|
84
|
+
when 1000..999999
|
85
|
+
m,c=n/1000,n%1000
|
86
|
+
%(#{negativo}#{por_extenso(m)} mil#{c > 0 ? " e #{por_extenso(c)}":''})
|
87
|
+
when 1_000_000..999_999_999
|
88
|
+
mi,m=n/1_000_000,n%1_000_000
|
89
|
+
%(#{negativo}#{por_extenso(mi)} milh#{mi > 1 ? 'ões':'ão'}#{m > 0 ? " e #{por_extenso(m)}" : ''})
|
90
|
+
when 1_000_000_000..999_999_999_999
|
91
|
+
bi,mi=n/1_000_000_000,n%1_000_000_000
|
92
|
+
%(#{negativo}#{por_extenso(bi)} bilh#{bi > 1 ? 'ões':'ão'}#{mi > 0 ? " e #{por_extenso(mi)}" : ''})
|
93
|
+
when 1_000_000_000_000..999_999_999_999_999
|
94
|
+
tri,bi=n/1_000_000_000_000,n%1_000_000_000_000
|
95
|
+
%(#{negativo}#{por_extenso(tri)} trilh#{tri > 1 ? 'ões':'ão'}#{bi > 0 ? " e #{por_extenso(bi)}" : ''})
|
96
|
+
else
|
97
|
+
raise "Valor excede o permitido: #{n}"
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
module ExtensoReal
|
103
|
+
include Extenso
|
104
|
+
|
105
|
+
# Escreve por extenso em reais.
|
106
|
+
#
|
107
|
+
# Exemplo:
|
108
|
+
# 1.por_extenso_em_reais ==> 'um real'
|
109
|
+
# (100.58).por_extenso_em_reais ==> 'cem reais e cinquenta e oito centavos'
|
110
|
+
def por_extenso_em_reais
|
111
|
+
ExtensoReal.por_extenso_em_reais(self)
|
112
|
+
end
|
113
|
+
|
114
|
+
# Alias para por_extenso_em_reais
|
115
|
+
alias_method :to_extenso_real, :por_extenso_em_reais
|
116
|
+
|
117
|
+
# Escreve o numero por extenso em reais.
|
118
|
+
#
|
119
|
+
# Exemplo:
|
120
|
+
# Extenso.por_extenso_em_reais(1) ==> "um real"
|
121
|
+
# Extenso.por_extenso_em_reais(100) ==> "cem reais"
|
122
|
+
# Extenso.por_extenso_em_reais(100.58) ==> "cem reais e cinquenta e oito centavos"
|
123
|
+
def ExtensoReal.por_extenso_em_reais(valor)
|
124
|
+
negativo=(valor<0)?" negativo":""
|
125
|
+
negativos=(valor<0)?" negativos":""
|
126
|
+
valor = valor.abs
|
127
|
+
return 'grátis' if valor == 0
|
128
|
+
case valor
|
129
|
+
when Integer
|
130
|
+
extenso = Extenso.por_extenso(valor)
|
131
|
+
if extenso =~ /^(.*)(ão$|ões$)/
|
132
|
+
complemento = 'de '
|
133
|
+
else
|
134
|
+
complemento = ''
|
135
|
+
end
|
136
|
+
%(#{extenso} #{valor <= 1 ? "real#{negativo}": "#{complemento}reais#{negativos}"})
|
137
|
+
when Float
|
138
|
+
real,cents=("%.2f" % valor).split(/\./).map{ |m| m.to_i}
|
139
|
+
valor_cents=Extenso.por_extenso(cents%100)
|
140
|
+
valor_cents+= case cents.to_i%100
|
141
|
+
when 0: ""
|
142
|
+
when 1: " centavo"
|
143
|
+
when 2..99: " centavos"
|
144
|
+
end
|
145
|
+
|
146
|
+
if real.to_i > 0
|
147
|
+
"#{ExtensoReal.por_extenso_em_reais(real.to_i)}#{cents > 0 ? ' e ' + valor_cents + negativos : real.to_i > 1 ? negativos : negativo }"
|
148
|
+
else
|
149
|
+
if (cents.to_i%100)==1
|
150
|
+
"#{valor_cents}#{negativo}"
|
151
|
+
else
|
152
|
+
"#{valor_cents}#{negativos}"
|
153
|
+
end
|
154
|
+
end
|
155
|
+
else
|
156
|
+
ExtensoReal.por_extenso_em_reais(valor.to_s.strip.gsub(/[^\d]/,'.').to_f)
|
157
|
+
end
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
Numeric.send(:include, ExtensoReal)
|
162
|
+
|
data/lib/brnumeros.rb
ADDED
data/test/number_test.rb
ADDED
@@ -0,0 +1,356 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class NumberTest < Test::Unit::TestCase
|
4
|
+
def test_unidades
|
5
|
+
assert_equal 'zero', 0.por_extenso
|
6
|
+
assert_equal 'um', 1.por_extenso
|
7
|
+
assert_equal 'dois', 2.por_extenso
|
8
|
+
assert_equal 'três', 3.por_extenso
|
9
|
+
assert_equal 'quatro', 4.por_extenso
|
10
|
+
assert_equal 'cinco', 5.por_extenso
|
11
|
+
assert_equal 'seis', 6.por_extenso
|
12
|
+
assert_equal 'sete', 7.por_extenso
|
13
|
+
assert_equal 'oito', 8.por_extenso
|
14
|
+
assert_equal 'nove', 9.por_extenso
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_dezenas
|
18
|
+
assert_equal 'dez', 10.por_extenso
|
19
|
+
assert_equal 'onze', 11.por_extenso
|
20
|
+
assert_equal 'doze', 12.por_extenso
|
21
|
+
assert_equal 'treze', 13.por_extenso
|
22
|
+
assert_equal 'quatorze', 14.por_extenso
|
23
|
+
assert_equal 'quinze', 15.por_extenso
|
24
|
+
assert_equal 'dezesseis', 16.por_extenso
|
25
|
+
assert_equal 'dezessete', 17.por_extenso
|
26
|
+
assert_equal 'dezoito', 18.por_extenso
|
27
|
+
assert_equal 'dezenove', 19.por_extenso
|
28
|
+
assert_equal 'vinte', 20.por_extenso
|
29
|
+
assert_equal 'trinta', 30.por_extenso
|
30
|
+
assert_equal 'quarenta', 40.por_extenso
|
31
|
+
assert_equal 'cinquenta', 50.por_extenso
|
32
|
+
assert_equal 'sessenta', 60.por_extenso
|
33
|
+
assert_equal 'setenta', 70.por_extenso
|
34
|
+
assert_equal 'oitenta', 80.por_extenso
|
35
|
+
assert_equal 'noventa', 90.por_extenso
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_dezenas_com_unidades
|
39
|
+
assert_equal 'vinte e um', 21.por_extenso
|
40
|
+
assert_equal 'trinta e dois', 32.por_extenso
|
41
|
+
assert_equal 'quarenta e três', 43.por_extenso
|
42
|
+
assert_equal 'cinquenta e quatro', 54.por_extenso
|
43
|
+
assert_equal 'sessenta e cinco', 65.por_extenso
|
44
|
+
assert_equal 'setenta e seis', 76.por_extenso
|
45
|
+
assert_equal 'oitenta e sete', 87.por_extenso
|
46
|
+
assert_equal 'noventa e oito', 98.por_extenso
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_centenas
|
50
|
+
assert_equal 'cem', 100.por_extenso
|
51
|
+
assert_equal 'duzentos', 200.por_extenso
|
52
|
+
assert_equal 'trezentos', 300.por_extenso
|
53
|
+
assert_equal 'quatrocentos', 400.por_extenso
|
54
|
+
assert_equal 'quinhentos', 500.por_extenso
|
55
|
+
assert_equal 'seiscentos', 600.por_extenso
|
56
|
+
assert_equal 'setecentos', 700.por_extenso
|
57
|
+
assert_equal 'oitocentos', 800.por_extenso
|
58
|
+
assert_equal 'novecentos', 900.por_extenso
|
59
|
+
end
|
60
|
+
|
61
|
+
def test_centenas_com_dezenas_e_unidades
|
62
|
+
assert_equal 'cento e um', 101.por_extenso
|
63
|
+
assert_equal 'cento e dez', 110.por_extenso
|
64
|
+
assert_equal 'cento e onze', 111.por_extenso
|
65
|
+
|
66
|
+
assert_equal 'duzentos e dois', 202.por_extenso
|
67
|
+
assert_equal 'duzentos e vinte', 220.por_extenso
|
68
|
+
assert_equal 'duzentos e vinte e dois', 222.por_extenso
|
69
|
+
|
70
|
+
assert_equal 'trezentos e três', 303.por_extenso
|
71
|
+
assert_equal 'trezentos e trinta', 330.por_extenso
|
72
|
+
assert_equal 'trezentos e trinta e três', 333.por_extenso
|
73
|
+
|
74
|
+
assert_equal 'quatrocentos e quatro', 404.por_extenso
|
75
|
+
assert_equal 'quatrocentos e quarenta', 440.por_extenso
|
76
|
+
assert_equal 'quatrocentos e quarenta e quatro', 444.por_extenso
|
77
|
+
|
78
|
+
assert_equal 'quinhentos e cinco', 505.por_extenso
|
79
|
+
assert_equal 'quinhentos e cinquenta', 550.por_extenso
|
80
|
+
assert_equal 'quinhentos e cinquenta e cinco', 555.por_extenso
|
81
|
+
|
82
|
+
assert_equal 'seiscentos e seis', 606.por_extenso
|
83
|
+
assert_equal 'seiscentos e sessenta', 660.por_extenso
|
84
|
+
assert_equal 'seiscentos e sessenta e seis', 666.por_extenso
|
85
|
+
|
86
|
+
assert_equal 'setecentos e sete', 707.por_extenso
|
87
|
+
assert_equal 'setecentos e setenta', 770.por_extenso
|
88
|
+
assert_equal 'setecentos e setenta e sete', 777.por_extenso
|
89
|
+
|
90
|
+
assert_equal 'oitocentos e oito', 808.por_extenso
|
91
|
+
assert_equal 'oitocentos e oitenta', 880.por_extenso
|
92
|
+
assert_equal 'oitocentos e oitenta e oito', 888.por_extenso
|
93
|
+
|
94
|
+
assert_equal 'novecentos e nove', 909.por_extenso
|
95
|
+
assert_equal 'novecentos e noventa', 990.por_extenso
|
96
|
+
assert_equal 'novecentos e noventa e nove', 999.por_extenso
|
97
|
+
end
|
98
|
+
|
99
|
+
def test_mil
|
100
|
+
assert_equal 'um mil', 1_000.por_extenso
|
101
|
+
assert_equal 'um mil e um', 1_001.por_extenso
|
102
|
+
assert_equal 'um mil e dez', 1_010.por_extenso
|
103
|
+
assert_equal 'um mil e onze', 1_011.por_extenso
|
104
|
+
assert_equal 'um mil e cem', 1_100.por_extenso
|
105
|
+
assert_equal 'um mil e cento e um', 1_101.por_extenso
|
106
|
+
assert_equal 'um mil e cento e dez', 1_110.por_extenso
|
107
|
+
assert_equal 'um mil e cento e onze', 1_111.por_extenso
|
108
|
+
assert_equal 'dez mil', 10_000.por_extenso
|
109
|
+
assert_equal 'cem mil', 100_000.por_extenso
|
110
|
+
assert_equal 'cento e dez mil', 110_000.por_extenso
|
111
|
+
end
|
112
|
+
|
113
|
+
def test_milhao
|
114
|
+
assert_equal 'um milhão', 1_000_000.por_extenso
|
115
|
+
assert_equal 'um milhão e um mil e um', 1_001_001.por_extenso
|
116
|
+
assert_equal 'um milhão e dez mil e dez', 1_010_010.por_extenso
|
117
|
+
assert_equal 'um milhão e onze mil e onze', 1_011_011.por_extenso
|
118
|
+
assert_equal 'um milhão e cem mil e cem', 1_100_100.por_extenso
|
119
|
+
assert_equal 'um milhão e cento e um mil e cento e um', 1_101_101.por_extenso
|
120
|
+
assert_equal 'um milhão e cento e dez mil e cento e dez', 1_110_110.por_extenso
|
121
|
+
assert_equal 'um milhão e cento e onze mil e cento e onze', 1_111_111.por_extenso
|
122
|
+
assert_equal 'dez milhões', 10_000_000.por_extenso
|
123
|
+
assert_equal 'cem milhões', 100_000_000.por_extenso
|
124
|
+
assert_equal 'cento e dez milhões', 110_000_000.por_extenso
|
125
|
+
end
|
126
|
+
|
127
|
+
def test_bilhao
|
128
|
+
assert_equal 'um bilhão', 1_000_000_000.por_extenso
|
129
|
+
assert_equal 'um bilhão e um milhão e um mil e um', 1_001_001_001.por_extenso
|
130
|
+
assert_equal 'um bilhão e dez milhões e dez mil e dez', 1_010_010_010.por_extenso
|
131
|
+
assert_equal 'um bilhão e onze milhões e onze mil e onze', 1_011_011_011.por_extenso
|
132
|
+
assert_equal 'um bilhão e cem milhões e cem mil e cem', 1_100_100_100.por_extenso
|
133
|
+
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
|
134
|
+
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
|
135
|
+
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
|
136
|
+
assert_equal 'dez bilhões', 10_000_000_000.por_extenso
|
137
|
+
assert_equal 'cem bilhões', 100_000_000_000.por_extenso
|
138
|
+
assert_equal 'cento e dez bilhões', 110_000_000_000.por_extenso
|
139
|
+
end
|
140
|
+
|
141
|
+
def test_trilhao
|
142
|
+
assert_equal 'um trilhão', 1_000_000_000_000.por_extenso
|
143
|
+
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
|
144
|
+
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
|
145
|
+
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
|
146
|
+
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
|
147
|
+
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
|
148
|
+
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
|
149
|
+
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
|
150
|
+
assert_equal 'dez trilhões', 10_000_000_000_000.por_extenso
|
151
|
+
assert_equal 'cem trilhões', 100_000_000_000_000.por_extenso
|
152
|
+
assert_equal 'cento e dez trilhões', 110_000_000_000_000.por_extenso
|
153
|
+
end
|
154
|
+
|
155
|
+
def test_numero_maior_que_trilhao_eh_rejetaido
|
156
|
+
begin
|
157
|
+
1_000_000_000_000_000.por_extenso
|
158
|
+
raise "Deveria lançar RuntimeError com mensagem 'Valor excede o permitido'"
|
159
|
+
rescue RuntimeError => e
|
160
|
+
assert_equal RuntimeError, e.class
|
161
|
+
assert_equal 'Valor excede o permitido: 1000000000000000', e.message
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
def test_valores_em_real
|
166
|
+
assert_equal 'grátis', 0.por_extenso_em_reais
|
167
|
+
assert_equal 'um centavo', 0.01.por_extenso_em_reais
|
168
|
+
assert_equal 'dois centavos', 0.02.por_extenso_em_reais
|
169
|
+
assert_equal 'vinte e um centavos', 0.21.por_extenso_em_reais
|
170
|
+
assert_equal 'um real', 1.00.por_extenso_em_reais
|
171
|
+
assert_equal 'um real', 1.por_extenso_em_reais
|
172
|
+
assert_equal 'um real e um centavo', 1.01.por_extenso_em_reais
|
173
|
+
assert_equal 'um real e dois centavos', 1.02.por_extenso_em_reais
|
174
|
+
assert_equal 'um milhão de reais e um centavo', 1_000_000.01.por_extenso_em_reais
|
175
|
+
assert_equal 'dois milhões de reais e um centavo', 2_000_000.01.por_extenso_em_reais
|
176
|
+
assert_equal 'dois milhões e duzentos reais e um centavo', 2_000_200.01.por_extenso_em_reais
|
177
|
+
assert_equal 'um bilhão de reais e um centavo', 1_000_000_000.01.por_extenso_em_reais
|
178
|
+
assert_equal 'um trilhão de reais e um centavo', 1_000_000_000_000.01.por_extenso_em_reais
|
179
|
+
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
|
180
|
+
assert_equal 'oitenta e dois mil e trezentos e oitenta e nove reais e dezenove centavos', 82_389.19.por_extenso_em_reais
|
181
|
+
assert_equal 'dois mil e trezentos e quarenta e sete reais e vinte e oito centavos', 2_347.28.por_extenso_em_reais
|
182
|
+
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
|
183
|
+
end
|
184
|
+
|
185
|
+
def test_unidades_negativas
|
186
|
+
assert_equal 'zero', -0.por_extenso #Aha, tentou me pegar :)
|
187
|
+
assert_equal 'menos um', -1.por_extenso
|
188
|
+
assert_equal 'menos dois', -2.por_extenso
|
189
|
+
assert_equal 'menos três', -3.por_extenso
|
190
|
+
assert_equal 'menos quatro', -4.por_extenso
|
191
|
+
assert_equal 'menos cinco', -5.por_extenso
|
192
|
+
assert_equal 'menos seis', -6.por_extenso
|
193
|
+
assert_equal 'menos sete', -7.por_extenso
|
194
|
+
assert_equal 'menos oito', -8.por_extenso
|
195
|
+
assert_equal 'menos nove', -9.por_extenso
|
196
|
+
end
|
197
|
+
|
198
|
+
def test_dezenas_negativas
|
199
|
+
assert_equal 'menos dez', -10.por_extenso
|
200
|
+
assert_equal 'menos onze', -11.por_extenso
|
201
|
+
assert_equal 'menos doze', -12.por_extenso
|
202
|
+
assert_equal 'menos treze', -13.por_extenso
|
203
|
+
assert_equal 'menos quatorze', -14.por_extenso
|
204
|
+
assert_equal 'menos quinze', -15.por_extenso
|
205
|
+
assert_equal 'menos dezesseis', -16.por_extenso
|
206
|
+
assert_equal 'menos dezessete', -17.por_extenso
|
207
|
+
assert_equal 'menos dezoito', -18.por_extenso
|
208
|
+
assert_equal 'menos dezenove', -19.por_extenso
|
209
|
+
assert_equal 'menos vinte', -20.por_extenso
|
210
|
+
assert_equal 'menos trinta', -30.por_extenso
|
211
|
+
assert_equal 'menos quarenta', -40.por_extenso
|
212
|
+
assert_equal 'menos cinquenta', -50.por_extenso
|
213
|
+
assert_equal 'menos sessenta', -60.por_extenso
|
214
|
+
assert_equal 'menos setenta', -70.por_extenso
|
215
|
+
assert_equal 'menos oitenta', -80.por_extenso
|
216
|
+
assert_equal 'menos noventa', -90.por_extenso
|
217
|
+
end
|
218
|
+
|
219
|
+
def test_dezenas_com_unidades_negativas
|
220
|
+
assert_equal 'menos vinte e um', -21.por_extenso
|
221
|
+
assert_equal 'menos trinta e dois', -32.por_extenso
|
222
|
+
assert_equal 'menos quarenta e três', -43.por_extenso
|
223
|
+
assert_equal 'menos cinquenta e quatro', -54.por_extenso
|
224
|
+
assert_equal 'menos sessenta e cinco', -65.por_extenso
|
225
|
+
assert_equal 'menos setenta e seis', -76.por_extenso
|
226
|
+
assert_equal 'menos oitenta e sete', -87.por_extenso
|
227
|
+
assert_equal 'menos noventa e oito', -98.por_extenso
|
228
|
+
end
|
229
|
+
|
230
|
+
def test_centenas_negativas
|
231
|
+
assert_equal 'menos cem', -100.por_extenso
|
232
|
+
assert_equal 'menos duzentos', -200.por_extenso
|
233
|
+
assert_equal 'menos trezentos', -300.por_extenso
|
234
|
+
assert_equal 'menos quatrocentos', -400.por_extenso
|
235
|
+
assert_equal 'menos quinhentos', -500.por_extenso
|
236
|
+
assert_equal 'menos seiscentos', -600.por_extenso
|
237
|
+
assert_equal 'menos setecentos', -700.por_extenso
|
238
|
+
assert_equal 'menos oitocentos', -800.por_extenso
|
239
|
+
assert_equal 'menos novecentos', -900.por_extenso
|
240
|
+
end
|
241
|
+
|
242
|
+
def test_centenas_com_dezenas_e_unidades_negativas
|
243
|
+
assert_equal 'menos cento e um', -101.por_extenso
|
244
|
+
assert_equal 'menos cento e dez', -110.por_extenso
|
245
|
+
assert_equal 'menos cento e onze', -111.por_extenso
|
246
|
+
|
247
|
+
assert_equal 'menos duzentos e dois', -202.por_extenso
|
248
|
+
assert_equal 'menos duzentos e vinte', -220.por_extenso
|
249
|
+
assert_equal 'menos duzentos e vinte e dois', -222.por_extenso
|
250
|
+
|
251
|
+
assert_equal 'menos trezentos e três', -303.por_extenso
|
252
|
+
assert_equal 'menos trezentos e trinta', -330.por_extenso
|
253
|
+
assert_equal 'menos trezentos e trinta e três', -333.por_extenso
|
254
|
+
|
255
|
+
assert_equal 'menos quatrocentos e quatro', -404.por_extenso
|
256
|
+
assert_equal 'menos quatrocentos e quarenta', -440.por_extenso
|
257
|
+
assert_equal 'menos quatrocentos e quarenta e quatro', -444.por_extenso
|
258
|
+
|
259
|
+
assert_equal 'menos quinhentos e cinco', -505.por_extenso
|
260
|
+
assert_equal 'menos quinhentos e cinquenta', -550.por_extenso
|
261
|
+
assert_equal 'menos quinhentos e cinquenta e cinco', -555.por_extenso
|
262
|
+
|
263
|
+
assert_equal 'menos seiscentos e seis', -606.por_extenso
|
264
|
+
assert_equal 'menos seiscentos e sessenta', -660.por_extenso
|
265
|
+
assert_equal 'menos seiscentos e sessenta e seis', -666.por_extenso
|
266
|
+
|
267
|
+
assert_equal 'menos setecentos e sete', -707.por_extenso
|
268
|
+
assert_equal 'menos setecentos e setenta', -770.por_extenso
|
269
|
+
assert_equal 'menos setecentos e setenta e sete', -777.por_extenso
|
270
|
+
|
271
|
+
assert_equal 'menos oitocentos e oito', -808.por_extenso
|
272
|
+
assert_equal 'menos oitocentos e oitenta', -880.por_extenso
|
273
|
+
assert_equal 'menos oitocentos e oitenta e oito', -888.por_extenso
|
274
|
+
|
275
|
+
assert_equal 'menos novecentos e nove', -909.por_extenso
|
276
|
+
assert_equal 'menos novecentos e noventa', -990.por_extenso
|
277
|
+
assert_equal 'menos novecentos e noventa e nove', -999.por_extenso
|
278
|
+
end
|
279
|
+
|
280
|
+
def test_mil_negativo
|
281
|
+
assert_equal 'menos um mil', -1_000.por_extenso
|
282
|
+
assert_equal 'menos um mil e um', -1_001.por_extenso
|
283
|
+
assert_equal 'menos um mil e dez', -1_010.por_extenso
|
284
|
+
assert_equal 'menos um mil e onze', -1_011.por_extenso
|
285
|
+
assert_equal 'menos um mil e cem', -1_100.por_extenso
|
286
|
+
assert_equal 'menos um mil e cento e um', -1_101.por_extenso
|
287
|
+
assert_equal 'menos um mil e cento e dez', -1_110.por_extenso
|
288
|
+
assert_equal 'menos um mil e cento e onze', -1_111.por_extenso
|
289
|
+
assert_equal 'menos dez mil', -10_000.por_extenso
|
290
|
+
assert_equal 'menos cem mil', -100_000.por_extenso
|
291
|
+
assert_equal 'menos cento e dez mil', -110_000.por_extenso
|
292
|
+
end
|
293
|
+
|
294
|
+
def test_milhao_negativo
|
295
|
+
assert_equal 'menos um milhão', -1_000_000.por_extenso
|
296
|
+
assert_equal 'menos um milhão e um mil e um', -1_001_001.por_extenso
|
297
|
+
assert_equal 'menos um milhão e dez mil e dez', -1_010_010.por_extenso
|
298
|
+
assert_equal 'menos um milhão e onze mil e onze', -1_011_011.por_extenso
|
299
|
+
assert_equal 'menos um milhão e cem mil e cem', -1_100_100.por_extenso
|
300
|
+
assert_equal 'menos um milhão e cento e um mil e cento e um', -1_101_101.por_extenso
|
301
|
+
assert_equal 'menos um milhão e cento e dez mil e cento e dez', -1_110_110.por_extenso
|
302
|
+
assert_equal 'menos um milhão e cento e onze mil e cento e onze', -1_111_111.por_extenso
|
303
|
+
assert_equal 'menos dez milhões', -10_000_000.por_extenso
|
304
|
+
assert_equal 'menos cem milhões', -100_000_000.por_extenso
|
305
|
+
assert_equal 'menos cento e dez milhões', -110_000_000.por_extenso
|
306
|
+
end
|
307
|
+
|
308
|
+
def test_bilhao_negativo
|
309
|
+
assert_equal 'menos um bilhão', -1_000_000_000.por_extenso
|
310
|
+
assert_equal 'menos um bilhão e um milhão e um mil e um', -1_001_001_001.por_extenso
|
311
|
+
assert_equal 'menos um bilhão e dez milhões e dez mil e dez', -1_010_010_010.por_extenso
|
312
|
+
assert_equal 'menos um bilhão e onze milhões e onze mil e onze', -1_011_011_011.por_extenso
|
313
|
+
assert_equal 'menos um bilhão e cem milhões e cem mil e cem', -1_100_100_100.por_extenso
|
314
|
+
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
|
315
|
+
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
|
316
|
+
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
|
317
|
+
assert_equal 'menos dez bilhões', -10_000_000_000.por_extenso
|
318
|
+
assert_equal 'menos cem bilhões', -100_000_000_000.por_extenso
|
319
|
+
assert_equal 'menos cento e dez bilhões', -110_000_000_000.por_extenso
|
320
|
+
end
|
321
|
+
|
322
|
+
def test_trilhao_negativo
|
323
|
+
assert_equal 'menos um trilhão', -1_000_000_000_000.por_extenso
|
324
|
+
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
|
325
|
+
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
|
326
|
+
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
|
327
|
+
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
|
328
|
+
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
|
329
|
+
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
|
330
|
+
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
|
331
|
+
assert_equal 'menos dez trilhões', -10_000_000_000_000.por_extenso
|
332
|
+
assert_equal 'menos cem trilhões', -100_000_000_000_000.por_extenso
|
333
|
+
assert_equal 'menos cento e dez trilhões', -110_000_000_000_000.por_extenso
|
334
|
+
end
|
335
|
+
|
336
|
+
def test_valores_em_real_negativos
|
337
|
+
assert_equal 'grátis', -0.por_extenso_em_reais #grátis é grátis
|
338
|
+
assert_equal 'um centavo negativo', -0.01.por_extenso_em_reais
|
339
|
+
assert_equal 'dois centavos negativos', -0.02.por_extenso_em_reais
|
340
|
+
assert_equal 'vinte e um centavos negativos', -0.21.por_extenso_em_reais
|
341
|
+
assert_equal 'um real negativo', -1.00.por_extenso_em_reais
|
342
|
+
assert_equal 'um real negativo', -1.por_extenso_em_reais
|
343
|
+
assert_equal 'um real e um centavo negativos', -1.01.por_extenso_em_reais
|
344
|
+
assert_equal 'um real e dois centavos negativos', -1.02.por_extenso_em_reais
|
345
|
+
assert_equal 'um milhão de reais e um centavo negativos', -1_000_000.01.por_extenso_em_reais
|
346
|
+
assert_equal 'dois milhões de reais e um centavo negativos', -2_000_000.01.por_extenso_em_reais
|
347
|
+
assert_equal 'dois milhões e duzentos reais e um centavo negativos', -2_000_200.01.por_extenso_em_reais
|
348
|
+
assert_equal 'um bilhão de reais e um centavo negativos', -1_000_000_000.01.por_extenso_em_reais
|
349
|
+
assert_equal 'um trilhão de reais e um centavo negativos', -1_000_000_000_000.01.por_extenso_em_reais
|
350
|
+
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
|
351
|
+
assert_equal 'oitenta e dois mil e trezentos e oitenta e nove reais e dezenove centavos negativos', -82_389.19.por_extenso_em_reais
|
352
|
+
assert_equal 'dois mil e trezentos e quarenta e sete reais e vinte e oito centavos negativos', -2_347.28.por_extenso_em_reais
|
353
|
+
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
|
354
|
+
end
|
355
|
+
|
356
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require File.dirname(__FILE__) + '/../lib/brnumeros'
|
3
|
+
|
4
|
+
def tornar_metodos_publicos(clazz)
|
5
|
+
clazz.class_eval do
|
6
|
+
private_instance_methods.each { |instance_method| public instance_method }
|
7
|
+
private_methods.each { |method| public_class_method method }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def p80 text
|
12
|
+
p '*'*80
|
13
|
+
p text
|
14
|
+
yield if block_given?
|
15
|
+
end
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: brnumeros
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- "Marcos Tapaj\xC3\xB3s"
|
8
|
+
- Celestino Gomes
|
9
|
+
- Andre Kupkosvki
|
10
|
+
- "Vin\xC3\xADcius Teles"
|
11
|
+
autorequire:
|
12
|
+
bindir: bin
|
13
|
+
cert_chain: []
|
14
|
+
|
15
|
+
date: 2008-07-06 00:00:00 -03:00
|
16
|
+
default_executable:
|
17
|
+
dependencies: []
|
18
|
+
|
19
|
+
description: "brnumeros \xC3\xA9 uma das gems que compoem o Brazilian Rails"
|
20
|
+
email: tapajos@gmail.com
|
21
|
+
executables: []
|
22
|
+
|
23
|
+
extensions: []
|
24
|
+
|
25
|
+
extra_rdoc_files: []
|
26
|
+
|
27
|
+
files:
|
28
|
+
- Rakefile
|
29
|
+
- README
|
30
|
+
- CHANGELOG
|
31
|
+
- MIT-LICENSE
|
32
|
+
- lib/brnumeros
|
33
|
+
- lib/brnumeros/number_portuguese.rb
|
34
|
+
- lib/brnumeros/version.rb
|
35
|
+
- lib/brnumeros.rb
|
36
|
+
- test/number_test.rb
|
37
|
+
- test/test_helper.rb
|
38
|
+
has_rdoc: true
|
39
|
+
homepage: http://www.improveit.com.br/software_livre/brazilian_rails
|
40
|
+
post_install_message:
|
41
|
+
rdoc_options: []
|
42
|
+
|
43
|
+
require_paths:
|
44
|
+
- lib
|
45
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: "0"
|
50
|
+
version:
|
51
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - ">="
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: "0"
|
56
|
+
version:
|
57
|
+
requirements:
|
58
|
+
- none
|
59
|
+
rubyforge_project: brnumeros
|
60
|
+
rubygems_version: 1.2.0
|
61
|
+
signing_key:
|
62
|
+
specification_version: 2
|
63
|
+
summary: "brnumeros \xC3\xA9 uma das gems que compoem o Brazilian Rails"
|
64
|
+
test_files: []
|
65
|
+
|