brdinheiro 0.0.1 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|