brnumeros 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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
+
@@ -0,0 +1,9 @@
1
+ module BrNumeros
2
+ module VERSION #:nodoc:
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ TINY = 1
6
+
7
+ STRING = [MAJOR, MINOR, TINY].join('.')
8
+ end
9
+ end
data/lib/brnumeros.rb ADDED
@@ -0,0 +1,7 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ %w(number_portuguese version).each {|req| require File.dirname(__FILE__) + "/brnumeros/#{req}"}
5
+
6
+ module BrNumeros
7
+ end
@@ -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
@@ -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
+