brdinheiro 0.0.1 → 2.0.0
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 +1 -0
- data/README +52 -0
- data/Rakefile +15 -15
- data/lib/brdinheiro/dinheiro.rb +5 -68
- data/lib/brdinheiro/dinheiro_util.rb +2 -0
- data/lib/brdinheiro/excecoes.rb +0 -1
- data/lib/brdinheiro/nil_class.rb +24 -0
- data/lib/brdinheiro/version.rb +2 -2
- data/lib/brdinheiro.rb +6 -6
- data/test/active_record/base_without_table.rb +32 -0
- data/test/br_dinheiro_test.rb +11 -11
- data/test/dinheiro_active_record_test.rb +49 -49
- data/test/dinheiro_test.rb +3 -3
- data/test/nil_class_test.rb +29 -0
- data/test/test_helper.rb +9 -0
- metadata +23 -6
- data/TODO +0 -5
- data/lib/brdinheiro/number_portuguese.rb +0 -163
data/CHANGELOG
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
Version 0.0.1 -> Versão beta da gem.
|
data/README
CHANGED
@@ -0,0 +1,52 @@
|
|
1
|
+
== Como usar o Dinheiro em seu ActiveRecord?
|
2
|
+
|
3
|
+
* Arquivo 001_create_lancamentos.rb:
|
4
|
+
|
5
|
+
class CreateLancamentos < ActiveRecord::Migration
|
6
|
+
def self.up
|
7
|
+
create_table :lancamentos do |t|
|
8
|
+
t.column :descricao, :string, :null => false
|
9
|
+
t.column :valor, :decimal, :precision => 14, :scale => 2
|
10
|
+
t.column :mensalidade, :decimal, :precision => 14, :scale => 2
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def self.down
|
15
|
+
drop_table :lancamentos
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
* Arquivo lancamento.rb:
|
20
|
+
|
21
|
+
class Lancamento < ActiveRecord::Base
|
22
|
+
usar_como_dinheiro :valor, :mensalidade
|
23
|
+
end
|
24
|
+
|
25
|
+
* No console (script/console):
|
26
|
+
|
27
|
+
Loading development environment.
|
28
|
+
>> lancamento = Lancamento.new
|
29
|
+
=> #<Lancamento:0x9652cd8 @attributes={"descricao"=>nil,
|
30
|
+
"valor"=>#<BigDecimal:9657008,'0.0',4(4)>,
|
31
|
+
"mensalidade"=>#<BigDecimal:9656e8c,'0.0',4(4)>},
|
32
|
+
@new_record=true>
|
33
|
+
>> lancamento.valor = 100
|
34
|
+
=> 100
|
35
|
+
>> lancamento.valor
|
36
|
+
=> #<Dinheiro:0x9650f3c @quantia=10000>
|
37
|
+
>> lancamento.valor.real
|
38
|
+
=> "R$ 100,00"
|
39
|
+
>> lancamento.valor = 100.50
|
40
|
+
=> 100.5
|
41
|
+
>> lancamento.valor.real
|
42
|
+
=> "R$ 100,50"
|
43
|
+
>> lancamento.valor = "250.50"
|
44
|
+
=> "250.50"
|
45
|
+
>> lancamento.valor.real
|
46
|
+
=> "R$ 250,50"
|
47
|
+
>> lancamento.valor = 354.58.reais
|
48
|
+
=> #<Dinheiro:0x9646384 @quantia=35458>
|
49
|
+
>> lancamento.valor.real
|
50
|
+
=> "R$ 354,58"
|
51
|
+
>> exit
|
52
|
+
|
data/Rakefile
CHANGED
@@ -29,17 +29,16 @@ Rake::TestTask.new { |t|
|
|
29
29
|
}
|
30
30
|
|
31
31
|
|
32
|
-
#
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
# }
|
32
|
+
#Generate the RDoc documentation
|
33
|
+
Rake::RDocTask.new { |rdoc|
|
34
|
+
rdoc.rdoc_dir = 'doc'
|
35
|
+
rdoc.title = "Brazilian Rails -- Dinheiro"
|
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
|
+
}
|
43
42
|
|
44
43
|
|
45
44
|
# Create compressed packages
|
@@ -50,20 +49,21 @@ spec = Gem::Specification.new do |s|
|
|
50
49
|
s.description = %q{brdinheiro é uma das gems que compoem o Brazilian Rails}
|
51
50
|
s.version = PKG_VERSION
|
52
51
|
|
53
|
-
s.
|
52
|
+
s.authors = ["Marcos Tapajós", "Celestino Gomes", "Andre Kupkosvki", "Vinícius Teles"]
|
54
53
|
s.email = "tapajos@gmail.com"
|
55
54
|
s.rubyforge_project = "brdinheiro"
|
56
55
|
s.homepage = "http://www.improveit.com.br/software_livre/brazilian_rails"
|
57
56
|
|
58
57
|
s.add_dependency('actionpack', '>= 1.4.2')
|
59
58
|
s.add_dependency('activerecord', '>= 1.15.3')
|
59
|
+
s.add_dependency('brnumeros', '>= 0.0.1')
|
60
60
|
|
61
61
|
s.has_rdoc = true
|
62
|
-
s.requirements << '
|
62
|
+
s.requirements << 'brnumeros'
|
63
63
|
s.require_path = 'lib'
|
64
|
-
#
|
64
|
+
#s.autorequire = 'brnumeros'
|
65
65
|
|
66
|
-
s.files = [ "Rakefile", "README", "CHANGELOG", "
|
66
|
+
s.files = [ "Rakefile", "README", "CHANGELOG", "MIT-LICENSE" ]
|
67
67
|
s.files = s.files + Dir.glob( "lib/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
|
68
68
|
s.files = s.files + Dir.glob( "test/**/*" ).delete_if { |item| item.include?( "\.svn" ) }
|
69
69
|
end
|
data/lib/brdinheiro/dinheiro.rb
CHANGED
@@ -1,57 +1,4 @@
|
|
1
|
-
# == Como usar o Dinheiro em seu ActiveRecord?
|
2
|
-
#
|
3
|
-
# * Arquivo 001_create_lancamentos.rb:
|
4
|
-
#
|
5
|
-
# class CreateLancamentos < ActiveRecord::Migration
|
6
|
-
# def self.up
|
7
|
-
# create_table :lancamentos do |t|
|
8
|
-
# t.column :descricao, :string, :null => false
|
9
|
-
# t.column :valor, :decimal, :precision => 14, :scale => 2
|
10
|
-
# t.column :mensalidade, :decimal, :precision => 14, :scale => 2
|
11
|
-
# end
|
12
|
-
# end
|
13
|
-
#
|
14
|
-
# def self.down
|
15
|
-
# drop_table :lancamentos
|
16
|
-
# end
|
17
|
-
# end
|
18
|
-
#
|
19
|
-
# * Arquivo lancamento.rb:
|
20
|
-
#
|
21
|
-
# class Lancamento < ActiveRecord::Base
|
22
|
-
# usar_como_dinheiro :valor, :mensalidade
|
23
|
-
# end
|
24
|
-
#
|
25
|
-
# * No console (script/console):
|
26
|
-
#
|
27
|
-
# Loading development environment.
|
28
|
-
# >> lancamento = Lancamento.new
|
29
|
-
# => #<Lancamento:0x9652cd8 @attributes={"descricao"=>nil,
|
30
|
-
# "valor"=>#<BigDecimal:9657008,'0.0',4(4)>,
|
31
|
-
# "mensalidade"=>#<BigDecimal:9656e8c,'0.0',4(4)>},
|
32
|
-
# @new_record=true>
|
33
|
-
# >> lancamento.valor = 100
|
34
|
-
# => 100
|
35
|
-
# >> lancamento.valor
|
36
|
-
# => #<Dinheiro:0x9650f3c @quantia=10000>
|
37
|
-
# >> lancamento.valor.real
|
38
|
-
# => "R$ 100,00"
|
39
|
-
# >> lancamento.valor = 100.50
|
40
|
-
# => 100.5
|
41
|
-
# >> lancamento.valor.real
|
42
|
-
# => "R$ 100,50"
|
43
|
-
# >> lancamento.valor = "250.50"
|
44
|
-
# => "250.50"
|
45
|
-
# >> lancamento.valor.real
|
46
|
-
# => "R$ 250,50"
|
47
|
-
# >> lancamento.valor = 354.58.reais
|
48
|
-
# => #<Dinheiro:0x9646384 @quantia=35458>
|
49
|
-
# >> lancamento.valor.real
|
50
|
-
# => "R$ 354,58"
|
51
|
-
# >> exit
|
52
|
-
#
|
53
1
|
class Dinheiro
|
54
|
-
|
55
2
|
include Comparable
|
56
3
|
|
57
4
|
attr_reader :quantia
|
@@ -151,17 +98,11 @@ class Dinheiro
|
|
151
98
|
# 6.reais.parcelar(2.reais) == DisivaPorNaoEscalarError
|
152
99
|
# 6.reais.parcelar(0) == ZeroDivisionError
|
153
100
|
def parcelar(numero_de_parcelar)
|
154
|
-
Fixnum
|
155
101
|
raise DivisaPorNaoEscalarError unless numero_de_parcelar.kind_of?(Integer)
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
(numero_de_parcelar-
|
160
|
-
parcela = Dinheiro.new(transforma_em_string_que_represente_a_quantia(@quantia/numero_de_parcelar))
|
161
|
-
parcelas << parcela
|
162
|
-
soma_parcial += parcela
|
163
|
-
end
|
164
|
-
parcelas << Dinheiro.new(transforma_em_string_que_represente_a_quantia(@quantia - quantia_de(soma_parcial)))
|
102
|
+
resto = @quantia % numero_de_parcelar
|
103
|
+
valor_menor = Dinheiro.new((@quantia/numero_de_parcelar)/100.0)
|
104
|
+
valor_maior = Dinheiro.new((@quantia/numero_de_parcelar+1)/100.0)
|
105
|
+
[valor_menor] * (numero_de_parcelar - resto) + [valor_maior] * resto
|
165
106
|
end
|
166
107
|
|
167
108
|
# Escreve o valor por extenso.
|
@@ -237,11 +178,7 @@ class Dinheiro
|
|
237
178
|
end
|
238
179
|
end
|
239
180
|
|
240
|
-
#
|
241
|
-
def valor_decimal
|
242
|
-
BigDecimal.new quantia_sem_separacao_milhares.gsub(',','.')
|
243
|
-
end
|
244
|
-
|
181
|
+
# Method missing para retorna um BigDecinal quando chamada .
|
245
182
|
def method_missing(symbol, *args) #:nodoc:
|
246
183
|
#Ex: Chama ao método valor_decimal()
|
247
184
|
if (symbol.to_s =~ /^(.*)_decimal$/) && args.size == 0
|
data/lib/brdinheiro/excecoes.rb
CHANGED
data/lib/brdinheiro/version.rb
CHANGED
data/lib/brdinheiro.rb
CHANGED
@@ -5,13 +5,13 @@ $:.unshift(File.dirname(__FILE__)) unless
|
|
5
5
|
dinheiro_util
|
6
6
|
dinheiro_active_record
|
7
7
|
excecoes
|
8
|
-
|
8
|
+
nil_class).each {|req| require File.dirname(__FILE__) + "/brdinheiro/#{req}"}
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
require
|
10
|
+
%w(bigdecimal
|
11
|
+
rubygems
|
12
|
+
active_record
|
13
|
+
activesupport
|
14
|
+
brnumeros).each {|req| require req }
|
15
15
|
|
16
16
|
String.send(:include, DinheiroUtil)
|
17
17
|
ActiveRecord::Base.send :include, DinheiroActiveRecord
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'active_record'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
class BaseWithoutTable < Base
|
5
|
+
self.abstract_class = true
|
6
|
+
|
7
|
+
def create_or_update
|
8
|
+
errors.empty?
|
9
|
+
end
|
10
|
+
|
11
|
+
def save
|
12
|
+
self.valid?
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
def columns()
|
17
|
+
@columns ||= []
|
18
|
+
end
|
19
|
+
|
20
|
+
def column(name, sql_type = nil, default = nil, null = true)
|
21
|
+
columns << ActiveRecord::ConnectionAdapters::Column.new(name.to_s, default, sql_type.to_s, null)
|
22
|
+
reset_column_information
|
23
|
+
end
|
24
|
+
|
25
|
+
# Do not reset @columns
|
26
|
+
def reset_column_information
|
27
|
+
generated_methods.each { |name| undef_method(name) }
|
28
|
+
@column_names = @columns_hash = @content_columns = @dynamic_methods_hash = @read_methods = nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/test/br_dinheiro_test.rb
CHANGED
@@ -1,11 +1,11 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
-
|
3
|
-
class TestBrDinheiro < Test::Unit::TestCase
|
4
|
-
|
5
|
-
def setup
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_truth
|
9
|
-
assert true
|
10
|
-
end
|
11
|
-
end
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
|
+
|
3
|
+
class TestBrDinheiro < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_truth
|
9
|
+
assert true
|
10
|
+
end
|
11
|
+
end
|
@@ -1,49 +1,49 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
require File.dirname(__FILE__) + '/active_record/base_without_table'
|
3
|
+
|
4
|
+
class Carteira < ActiveRecord::BaseWithoutTable
|
5
|
+
column :saldo, :decimal
|
6
|
+
|
7
|
+
usar_como_dinheiro :saldo
|
8
|
+
end
|
9
|
+
|
10
|
+
class DinheiroActiveRecordTest < Test::Unit::TestCase
|
11
|
+
|
12
|
+
def setup
|
13
|
+
@carteira = Carteira.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def teste_se_aceita_dinheiro
|
17
|
+
@carteira.saldo = 8.reais
|
18
|
+
assert @carteira.save
|
19
|
+
assert_equal 8.reais, @carteira.saldo
|
20
|
+
end
|
21
|
+
|
22
|
+
def teste_se_aceita_numero
|
23
|
+
@carteira.saldo = 30
|
24
|
+
assert @carteira.save
|
25
|
+
assert_equal 30.reais, @carteira.saldo
|
26
|
+
end
|
27
|
+
|
28
|
+
def teste_se_rejeita_valor_invalido
|
29
|
+
@carteira.saldo = 30
|
30
|
+
assert @carteira.save
|
31
|
+
@carteira.saldo = 'bla'
|
32
|
+
assert_false @carteira.save
|
33
|
+
assert_equal "O valor deve estar preenchido e no formato correto. Ex.: 100.00 .", @carteira.errors['saldo']
|
34
|
+
end
|
35
|
+
|
36
|
+
def teste_se_trata_nulo_corretamente
|
37
|
+
assert_nil @carteira.saldo
|
38
|
+
@carteira.saldo = nil
|
39
|
+
assert_nil @carteira.saldo
|
40
|
+
@carteira.save
|
41
|
+
assert_nil @carteira.saldo
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_se_cria_carteira_corretamente_quando_recebe_parametros
|
45
|
+
carteira = Carteira.new(:saldo => "1")
|
46
|
+
assert_equal 1.real, carteira.saldo
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/test/dinheiro_test.rb
CHANGED
@@ -91,9 +91,9 @@ class DinheiroTest < Test::Unit::TestCase
|
|
91
91
|
[Dinheiro.new(33.33), Dinheiro.new(33.33), Dinheiro.new(33.34)] => Dinheiro.new(100).parcelar(3),
|
92
92
|
[Dinheiro.new(50.00), Dinheiro.new(50)] => Dinheiro.new(100).parcelar(2),
|
93
93
|
[Dinheiro.new(0.25), Dinheiro.new(0.25)] => Dinheiro.new(0.5).parcelar(2),
|
94
|
-
[Dinheiro.new(0.16), Dinheiro.new(0.
|
95
|
-
[Dinheiro.new(0.33)] => Dinheiro.new(0.33).parcelar(1)
|
96
|
-
[Dinheiro.new(0.33)] => Dinheiro.new(0.33).parcelar(1)
|
94
|
+
[Dinheiro.new(0.16), Dinheiro.new(0.17),Dinheiro.new(0.17)] => Dinheiro.new(0.5).parcelar(3),
|
95
|
+
[Dinheiro.new(0.33)] => Dinheiro.new(0.33).parcelar(1),
|
96
|
+
[Dinheiro.new(0.33)] => Dinheiro.new(0.33).parcelar(1),
|
97
97
|
}
|
98
98
|
|
99
99
|
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/test_helper'
|
2
|
+
|
3
|
+
class NilClassTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_real
|
6
|
+
assert_equal Dinheiro.new(0), nil.real
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_reais
|
10
|
+
assert_equal Dinheiro.new(0), nil.reais
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_para_dinheiro
|
14
|
+
assert_equal Dinheiro.new(0), nil.para_dinheiro
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_valor
|
18
|
+
assert_equal Dinheiro.new(0), nil.valor
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_contabil
|
22
|
+
assert_equal "0,00", nil.contabil
|
23
|
+
end
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
end
|
data/test/test_helper.rb
CHANGED
@@ -14,3 +14,12 @@ def p80 text
|
|
14
14
|
p text
|
15
15
|
p '*'*80
|
16
16
|
end
|
17
|
+
|
18
|
+
class Test::Unit::TestCase
|
19
|
+
def assert_false(boolean, message=nil)
|
20
|
+
_wrap_assertion do
|
21
|
+
assert_block("assert should not be called with a block.") { !block_given? }
|
22
|
+
assert_block(build_message(message, "<?> is not false.", boolean)) { !boolean }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
metadata
CHANGED
@@ -1,19 +1,23 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brdinheiro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Marcos Tapaj\xC3\xB3s"
|
8
|
+
- Celestino Gomes
|
9
|
+
- Andre Kupkosvki
|
10
|
+
- "Vin\xC3\xADcius Teles"
|
8
11
|
autorequire:
|
9
12
|
bindir: bin
|
10
13
|
cert_chain: []
|
11
14
|
|
12
|
-
date: 2008-
|
15
|
+
date: 2008-08-31 00:00:00 -03:00
|
13
16
|
default_executable:
|
14
17
|
dependencies:
|
15
18
|
- !ruby/object:Gem::Dependency
|
16
19
|
name: actionpack
|
20
|
+
type: :runtime
|
17
21
|
version_requirement:
|
18
22
|
version_requirements: !ruby/object:Gem::Requirement
|
19
23
|
requirements:
|
@@ -23,6 +27,7 @@ dependencies:
|
|
23
27
|
version:
|
24
28
|
- !ruby/object:Gem::Dependency
|
25
29
|
name: activerecord
|
30
|
+
type: :runtime
|
26
31
|
version_requirement:
|
27
32
|
version_requirements: !ruby/object:Gem::Requirement
|
28
33
|
requirements:
|
@@ -30,6 +35,16 @@ dependencies:
|
|
30
35
|
- !ruby/object:Gem::Version
|
31
36
|
version: 1.15.3
|
32
37
|
version:
|
38
|
+
- !ruby/object:Gem::Dependency
|
39
|
+
name: brnumeros
|
40
|
+
type: :runtime
|
41
|
+
version_requirement:
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: 0.0.1
|
47
|
+
version:
|
33
48
|
description: "brdinheiro \xC3\xA9 uma das gems que compoem o Brazilian Rails"
|
34
49
|
email: tapajos@gmail.com
|
35
50
|
executables: []
|
@@ -42,19 +57,21 @@ files:
|
|
42
57
|
- Rakefile
|
43
58
|
- README
|
44
59
|
- CHANGELOG
|
45
|
-
- TODO
|
46
60
|
- MIT-LICENSE
|
47
61
|
- lib/brdinheiro
|
48
62
|
- lib/brdinheiro/dinheiro.rb
|
49
63
|
- lib/brdinheiro/dinheiro_active_record.rb
|
50
64
|
- lib/brdinheiro/dinheiro_util.rb
|
51
65
|
- lib/brdinheiro/excecoes.rb
|
52
|
-
- lib/brdinheiro/
|
66
|
+
- lib/brdinheiro/nil_class.rb
|
53
67
|
- lib/brdinheiro/version.rb
|
54
68
|
- lib/brdinheiro.rb
|
69
|
+
- test/active_record
|
70
|
+
- test/active_record/base_without_table.rb
|
55
71
|
- test/br_dinheiro_test.rb
|
56
72
|
- test/dinheiro_active_record_test.rb
|
57
73
|
- test/dinheiro_test.rb
|
74
|
+
- test/nil_class_test.rb
|
58
75
|
- test/test_helper.rb
|
59
76
|
has_rdoc: true
|
60
77
|
homepage: http://www.improveit.com.br/software_livre/brazilian_rails
|
@@ -76,9 +93,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
76
93
|
version: "0"
|
77
94
|
version:
|
78
95
|
requirements:
|
79
|
-
-
|
96
|
+
- brnumeros
|
80
97
|
rubyforge_project: brdinheiro
|
81
|
-
rubygems_version: 1.
|
98
|
+
rubygems_version: 1.2.0
|
82
99
|
signing_key:
|
83
100
|
specification_version: 2
|
84
101
|
summary: "brdinheiro \xC3\xA9 uma das gems que compoem o Brazilian Rails"
|
data/TODO
DELETED
@@ -1,163 +0,0 @@
|
|
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, DinheiroUtil)
|
162
|
-
Numeric.send(:include, ExtensoReal)
|
163
|
-
|