brdinheiro 3.0.4 → 3.0.5
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/README +9 -9
- data/Rakefile +1 -1
- data/lib/brdinheiro/dinheiro.rb +56 -56
- data/lib/brdinheiro/dinheiro_active_record.rb +4 -0
- data/lib/brdinheiro/dinheiro_util.rb +2 -2
- data/lib/brdinheiro/excecoes.rb +1 -1
- data/lib/brdinheiro/nil_class.rb +2 -2
- data/lib/brdinheiro/version.rb +1 -1
- data/test/active_record/base_without_table.rb +27 -1
- data/test/br_dinheiro_test.rb +1 -1
- data/test/dinheiro_active_record_test.rb +6 -0
- data/test/dinheiro_test.rb +90 -90
- data/test/nil_class_test.rb +10 -10
- metadata +33 -9
data/README
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
== Como usar o Dinheiro em seu ActiveRecord?
|
2
|
-
|
2
|
+
|
3
3
|
* Arquivo 001_create_lancamentos.rb:
|
4
|
-
|
4
|
+
|
5
5
|
class CreateLancamentos < ActiveRecord::Migration
|
6
6
|
def self.up
|
7
7
|
create_table :lancamentos do |t|
|
@@ -15,20 +15,20 @@
|
|
15
15
|
drop_table :lancamentos
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
* Arquivo lancamento.rb:
|
20
|
-
|
20
|
+
|
21
21
|
class Lancamento < ActiveRecord::Base
|
22
22
|
usar_como_dinheiro :valor, :mensalidade
|
23
23
|
end
|
24
24
|
|
25
25
|
* No console (script/console):
|
26
|
-
|
26
|
+
|
27
27
|
Loading development environment.
|
28
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)>},
|
29
|
+
=> #<Lancamento:0x9652cd8 @attributes={"descricao"=>nil,
|
30
|
+
"valor"=>#<BigDecimal:9657008,'0.0',4(4)>,
|
31
|
+
"mensalidade"=>#<BigDecimal:9656e8c,'0.0',4(4)>},
|
32
32
|
@new_record=true>
|
33
33
|
>> lancamento.valor = 100
|
34
34
|
=> 100
|
@@ -49,4 +49,4 @@
|
|
49
49
|
>> lancamento.valor.real
|
50
50
|
=> "R$ 354,58"
|
51
51
|
>> exit
|
52
|
-
|
52
|
+
|
data/Rakefile
CHANGED
data/lib/brdinheiro/dinheiro.rb
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
class Dinheiro
|
2
2
|
include Comparable
|
3
|
-
|
3
|
+
|
4
4
|
attr_reader :quantia
|
5
|
-
|
5
|
+
|
6
6
|
FORMATO_VALIDO_BR = /^([R|r]\$\s*)?(([+-]?\d{1,3}(\.?\d{3})*))?(\,\d{0,2})?$/
|
7
7
|
FORMATO_VALIDO_EUA = /^([R|r]\$\s*)?(([+-]?\d{1,3}(\,?\d{3})*))?(\.\d{0,2})?$/
|
8
8
|
SEPARADOR_MILHAR = "."
|
9
9
|
SEPARADOR_FRACIONARIO = ","
|
10
10
|
QUANTIDADE_DIGITOS = 3
|
11
11
|
PRECISAO_DECIMAL = 100
|
12
|
-
|
12
|
+
|
13
13
|
def initialize(quantia)
|
14
14
|
self.quantia = quantia
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
# Retorna o valor armazenado em string.
|
18
18
|
#
|
19
19
|
# Exemplo:
|
@@ -21,7 +21,7 @@ class Dinheiro
|
|
21
21
|
def to_s
|
22
22
|
inteiro_com_milhar(parte_inteira) + parte_decimal
|
23
23
|
end
|
24
|
-
|
24
|
+
|
25
25
|
# Compara com outro dinheiro se eh igual.
|
26
26
|
#
|
27
27
|
# Exemplo:
|
@@ -29,14 +29,14 @@ class Dinheiro
|
|
29
29
|
# um_real == Dinheiro.new(1) ==> true
|
30
30
|
# um_real == Dinheiro.new(2) ==> false
|
31
31
|
def ==(outro_dinheiro)
|
32
|
-
begin
|
32
|
+
begin
|
33
33
|
outro_dinheiro = Dinheiro.new(outro_dinheiro) unless outro_dinheiro.kind_of?(Dinheiro)
|
34
34
|
rescue
|
35
35
|
return false
|
36
36
|
end
|
37
37
|
@quantia == outro_dinheiro.quantia
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
# Compara com outro dinheiro se eh maior ou menor.
|
41
41
|
#
|
42
42
|
# Exemplo:
|
@@ -48,25 +48,25 @@ class Dinheiro
|
|
48
48
|
outro_dinheiro = Dinheiro.new(outro_dinheiro) unless outro_dinheiro.kind_of?(Dinheiro)
|
49
49
|
@quantia <=> outro_dinheiro.quantia
|
50
50
|
end
|
51
|
-
|
51
|
+
|
52
52
|
# Retorna a adicao entre dinheiros.
|
53
53
|
#
|
54
54
|
# Exemplo:
|
55
|
-
# 1.real + 1.real == 2.reais
|
56
|
-
# 1.real + 1 == 2.reais
|
55
|
+
# 1.real + 1.real == 2.reais
|
56
|
+
# 1.real + 1 == 2.reais
|
57
57
|
def +(outro)
|
58
58
|
Dinheiro.new(transforma_em_string_que_represente_a_quantia(@quantia + quantia_de(outro)))
|
59
59
|
end
|
60
|
-
|
60
|
+
|
61
61
|
# Retorna a subtracao entre dinheiros.
|
62
62
|
#
|
63
63
|
# Exemplo:
|
64
|
-
# 10.reais - 2.reais == 8.reais
|
65
|
-
# 10.reais - 2 == 8.reais
|
64
|
+
# 10.reais - 2.reais == 8.reais
|
65
|
+
# 10.reais - 2 == 8.reais
|
66
66
|
def -(outro)
|
67
67
|
Dinheiro.new(transforma_em_string_que_represente_a_quantia(@quantia - quantia_de(outro)))
|
68
68
|
end
|
69
|
-
|
69
|
+
|
70
70
|
# Retorna a multiplicacao entre dinheiros.
|
71
71
|
#
|
72
72
|
# Exemplo:
|
@@ -76,7 +76,7 @@ class Dinheiro
|
|
76
76
|
return Dinheiro.new(to_f * outro) unless outro.kind_of? Dinheiro
|
77
77
|
outro * to_f
|
78
78
|
end
|
79
|
-
|
79
|
+
|
80
80
|
# Retorna a divisao entre dinheiros.
|
81
81
|
#
|
82
82
|
# Exemplo:
|
@@ -104,44 +104,44 @@ class Dinheiro
|
|
104
104
|
valor_maior = Dinheiro.new((@quantia/numero_de_parcelar+1)/100.0)
|
105
105
|
[valor_menor] * (numero_de_parcelar - resto) + [valor_maior] * resto
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
# Escreve o valor por extenso.
|
109
|
-
#
|
109
|
+
#
|
110
110
|
# Exemplo:
|
111
111
|
# 1.real.to_extenso ==> 'um real'
|
112
112
|
# (100.58).to_extenso ==> 'cem reais e cinquenta e oito centavos'
|
113
113
|
def to_extenso
|
114
114
|
(@quantia/100.0).por_extenso_em_reais
|
115
115
|
end
|
116
|
-
|
116
|
+
|
117
117
|
# Alias para o metodo to_extenso.
|
118
118
|
alias_method :por_extenso, :to_extenso
|
119
|
-
|
119
|
+
|
120
120
|
# Alias para o metodo to_extenso.
|
121
121
|
alias_method :por_extenso_em_reais, :to_extenso
|
122
|
-
|
122
|
+
|
123
123
|
# Verifica se o valor é zero.
|
124
124
|
def zero?
|
125
125
|
to_f.zero?
|
126
126
|
end
|
127
|
-
|
127
|
+
|
128
128
|
# Retorna um Float.
|
129
129
|
def to_f
|
130
130
|
to_s.gsub('.', '').gsub(',', '.').to_f
|
131
131
|
end
|
132
|
-
|
132
|
+
|
133
133
|
def coerce(outro)#:nodoc:
|
134
134
|
[ Dinheiro.new(outro), self ]
|
135
135
|
end
|
136
|
-
|
136
|
+
|
137
137
|
# Retorna a própria instância/
|
138
138
|
def real
|
139
139
|
self
|
140
140
|
end
|
141
|
-
|
141
|
+
|
142
142
|
# Alias para real.
|
143
143
|
alias_method :reais, :real
|
144
|
-
|
144
|
+
|
145
145
|
# Retorna uma string formatada com sigla em valor monetário.
|
146
146
|
# Exemplo:
|
147
147
|
# Dinheiro.new(1).real_formatado ==> 'R$ 1,00'
|
@@ -149,10 +149,10 @@ class Dinheiro
|
|
149
149
|
def real_formatado
|
150
150
|
"R$ #{to_s}"
|
151
151
|
end
|
152
|
-
|
152
|
+
|
153
153
|
# Alias para real_formatado.
|
154
154
|
alias_method :reais_formatado, :real_formatado
|
155
|
-
|
155
|
+
|
156
156
|
# Retorna uma string formatada com sigla em valor contábil.
|
157
157
|
#
|
158
158
|
# Exemplo:
|
@@ -161,10 +161,10 @@ class Dinheiro
|
|
161
161
|
def real_contabil
|
162
162
|
"R$ " + contabil
|
163
163
|
end
|
164
|
-
|
164
|
+
|
165
165
|
# Alias para real_contabil.
|
166
166
|
alias_method :reais_contabeis, :real_contabil
|
167
|
-
|
167
|
+
|
168
168
|
# Retorna uma string formatada sem sigla.
|
169
169
|
#
|
170
170
|
# Exemplo:
|
@@ -172,15 +172,15 @@ class Dinheiro
|
|
172
172
|
# Dinheiro.new(-1).contabil ==> '(1,00)'
|
173
173
|
def contabil
|
174
174
|
if @quantia >= 0
|
175
|
-
to_s
|
176
|
-
else
|
177
|
-
"(" + to_s[1..-1] + ")"
|
178
|
-
end
|
175
|
+
to_s
|
176
|
+
else
|
177
|
+
"(" + to_s[1..-1] + ")"
|
178
|
+
end
|
179
179
|
end
|
180
|
-
|
180
|
+
|
181
181
|
# Method missing para retorna um BigDecinal quando chamada .
|
182
182
|
def method_missing(symbol, *args) #:nodoc:
|
183
|
-
#Ex: Chama ao método valor_decimal()
|
183
|
+
#Ex: Chama ao método valor_decimal()
|
184
184
|
if (symbol.to_s =~ /^(.*)_decimal$/) && args.size == 0
|
185
185
|
BigDecimal.new quantia_sem_separacao_milhares.gsub(',','.')
|
186
186
|
else
|
@@ -194,7 +194,7 @@ class Dinheiro
|
|
194
194
|
return outro.quantia if outro.kind_of?(Dinheiro)
|
195
195
|
(outro * 100).round
|
196
196
|
end
|
197
|
-
|
197
|
+
|
198
198
|
def transforma_em_string_que_represente_a_quantia(quantia)
|
199
199
|
if /^([+-]?)(\d)$/ =~ quantia.to_s
|
200
200
|
return "#{$1}0.0#{$2}"
|
@@ -202,69 +202,69 @@ class Dinheiro
|
|
202
202
|
/^([+-]?)(\d*)(\d\d)$/ =~ quantia.to_s
|
203
203
|
"#{$1}#{$2.to_i}.#{$3}"
|
204
204
|
end
|
205
|
-
|
205
|
+
|
206
206
|
def quantia=(quantia)
|
207
207
|
raise DinheiroInvalidoError unless quantia_valida?(quantia)
|
208
208
|
quantia = quantia.to_f if quantia.kind_of?(BigDecimal)
|
209
209
|
@quantia = (quantia * 100).round if quantia.kind_of?(Numeric)
|
210
210
|
@quantia = extrai_quantia_como_inteiro(quantia) if quantia.kind_of?(String)
|
211
211
|
end
|
212
|
-
|
212
|
+
|
213
213
|
def parte_inteira
|
214
214
|
quantia_sem_separacao_milhares[0,quantia_sem_separacao_milhares.length-QUANTIDADE_DIGITOS]
|
215
215
|
end
|
216
|
-
|
216
|
+
|
217
217
|
def parte_decimal
|
218
218
|
quantia_sem_separacao_milhares[-QUANTIDADE_DIGITOS, QUANTIDADE_DIGITOS]
|
219
219
|
end
|
220
|
-
|
220
|
+
|
221
221
|
def inteiro_com_milhar(inteiro)
|
222
222
|
return inteiro if quantidade_de_passos(inteiro) == 0
|
223
223
|
resultado = ""
|
224
|
-
quantidade_de_passos(inteiro).times do |passo|
|
225
|
-
resultado = "." + inteiro[-QUANTIDADE_DIGITOS + passo * -QUANTIDADE_DIGITOS, QUANTIDADE_DIGITOS] + resultado
|
224
|
+
quantidade_de_passos(inteiro).times do |passo|
|
225
|
+
resultado = "." + inteiro[-QUANTIDADE_DIGITOS + passo * -QUANTIDADE_DIGITOS, QUANTIDADE_DIGITOS] + resultado
|
226
226
|
end
|
227
227
|
resultado = inteiro[0, digitos_que_sobraram(inteiro)] + resultado
|
228
228
|
resultado.gsub(/^(-?)\./, '\1')
|
229
229
|
end
|
230
|
-
|
230
|
+
|
231
231
|
def quantia_sem_separacao_milhares
|
232
232
|
sprintf("%.2f", (@quantia.to_f / PRECISAO_DECIMAL)).gsub(SEPARADOR_MILHAR, SEPARADOR_FRACIONARIO)
|
233
|
-
end
|
234
|
-
|
233
|
+
end
|
234
|
+
|
235
235
|
def quantidade_de_passos(inteiro)
|
236
236
|
resultado = inteiro.length / QUANTIDADE_DIGITOS
|
237
237
|
resultado = (resultado - 1) if inteiro.length % QUANTIDADE_DIGITOS == 0
|
238
238
|
resultado
|
239
239
|
end
|
240
|
-
|
240
|
+
|
241
241
|
def digitos_que_sobraram(inteiro)
|
242
242
|
inteiro.length - (quantidade_de_passos(inteiro) * QUANTIDADE_DIGITOS)
|
243
243
|
end
|
244
|
-
|
244
|
+
|
245
245
|
def quantia_valida?(quantia)
|
246
246
|
return false if quantia.kind_of?(String) && !quantia_respeita_formato?(quantia)
|
247
247
|
quantia.kind_of?(String) || quantia.kind_of?(Numeric)
|
248
248
|
end
|
249
|
-
|
249
|
+
|
250
250
|
def extrai_quantia_como_inteiro(quantia)
|
251
251
|
if FORMATO_VALIDO_BR =~ quantia
|
252
252
|
return sem_milhar($2, $5, '.')
|
253
253
|
end
|
254
|
-
if FORMATO_VALIDO_EUA =~ quantia
|
254
|
+
if FORMATO_VALIDO_EUA =~ quantia
|
255
255
|
return sem_milhar($2, $5, ',')
|
256
256
|
end
|
257
257
|
end
|
258
|
-
|
258
|
+
|
259
259
|
def sem_milhar(parte_inteira, parte_decimal, delimitador_de_milhar)
|
260
260
|
(inteiro(parte_inteira, delimitador_de_milhar) + decimal(parte_decimal)).to_i
|
261
261
|
end
|
262
|
-
|
262
|
+
|
263
263
|
def inteiro(inteiro_com_separador_milhar, separador)
|
264
264
|
return inteiro_com_separador_milhar.gsub(separador, '') unless inteiro_com_separador_milhar.blank?
|
265
265
|
""
|
266
266
|
end
|
267
|
-
|
267
|
+
|
268
268
|
def decimal(parte_fracionaria)
|
269
269
|
unless parte_fracionaria.blank?
|
270
270
|
return sem_delimitador_decimal(parte_fracionaria) if parte_fracionaria.length == 3
|
@@ -272,15 +272,15 @@ class Dinheiro
|
|
272
272
|
end
|
273
273
|
"00"
|
274
274
|
end
|
275
|
-
|
275
|
+
|
276
276
|
def sem_delimitador_decimal(parte_fracionaria)
|
277
277
|
"#{parte_fracionaria}".gsub(/[.|,]/, '')
|
278
278
|
end
|
279
|
-
|
280
|
-
|
279
|
+
|
280
|
+
|
281
281
|
def quantia_respeita_formato?(quantia)
|
282
282
|
return true if FORMATO_VALIDO_BR.match(quantia) || FORMATO_VALIDO_EUA.match(quantia)
|
283
283
|
false
|
284
284
|
end
|
285
|
-
|
285
|
+
|
286
286
|
end
|
@@ -27,7 +27,7 @@ module DinheiroUtil
|
|
27
27
|
def real_contabil
|
28
28
|
Dinheiro.new(self).real_contabil
|
29
29
|
end
|
30
|
-
|
30
|
+
|
31
31
|
# Retorna string formatada com simbolo monetario
|
32
32
|
#
|
33
33
|
# Exemplo:
|
@@ -36,7 +36,7 @@ module DinheiroUtil
|
|
36
36
|
def reais_contabeis
|
37
37
|
Dinheiro.new(self).reais_contabeis
|
38
38
|
end
|
39
|
-
|
39
|
+
|
40
40
|
# Retorna string formatada com simbolo monetario
|
41
41
|
#
|
42
42
|
# Exemplo:
|
data/lib/brdinheiro/excecoes.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
def cria_excecao(classe, mensagem)
|
2
2
|
eval "class #{classe}; def initialize; super('#{mensagem}'); end; end"
|
3
3
|
end
|
4
|
-
|
4
|
+
|
5
5
|
cria_excecao("DinheiroInvalidoError < ArgumentError", "O valor deve estar preenchido e no formato correto. Ex.: 100.00 .")
|
6
6
|
cria_excecao("DivisaPorNaoEscalarError < ArgumentError", "So eh possivel dividir dinheiro por numeros.")
|
data/lib/brdinheiro/nil_class.rb
CHANGED
data/lib/brdinheiro/version.rb
CHANGED
@@ -11,7 +11,11 @@ module ActiveRecord
|
|
11
11
|
def save
|
12
12
|
self.valid?
|
13
13
|
end
|
14
|
-
|
14
|
+
|
15
|
+
def column_for_attribute(name)
|
16
|
+
self.class.columns_hash[name.to_s]
|
17
|
+
end
|
18
|
+
|
15
19
|
class << self
|
16
20
|
def columns()
|
17
21
|
@columns ||= []
|
@@ -27,7 +31,29 @@ module ActiveRecord
|
|
27
31
|
undefine_attribute_methods
|
28
32
|
@column_names = @columns_hash = @content_columns = @dynamic_methods_hash = @read_methods = nil
|
29
33
|
end
|
34
|
+
|
35
|
+
def columns_hash
|
36
|
+
hash = {}
|
37
|
+
columns.each do |column|
|
38
|
+
hash[column.name] = column
|
39
|
+
end
|
40
|
+
hash
|
41
|
+
end
|
42
|
+
|
43
|
+
def column_defaults
|
44
|
+
defaults = {}
|
45
|
+
columns.each do |column|
|
46
|
+
defaults[column.name.to_sym] = nil
|
47
|
+
end
|
48
|
+
defaults
|
49
|
+
end
|
30
50
|
end
|
51
|
+
|
52
|
+
private
|
53
|
+
def self.attributes_protected_by_default
|
54
|
+
[]
|
55
|
+
end
|
56
|
+
|
31
57
|
end
|
32
58
|
end
|
33
59
|
|
data/test/br_dinheiro_test.rb
CHANGED
@@ -44,6 +44,12 @@ class DinheiroActiveRecordTest < Test::Unit::TestCase
|
|
44
44
|
carteira = Carteira.new(:saldo => "1")
|
45
45
|
assert_equal 1.real, carteira.saldo
|
46
46
|
end
|
47
|
+
|
48
|
+
def test_se_atualiza_valor_inicializado
|
49
|
+
carteira = Carteira.new(:saldo => 10.reais)
|
50
|
+
carteira.saldo += 5.reais
|
51
|
+
assert_equal 15.reais, carteira.saldo
|
52
|
+
end
|
47
53
|
|
48
54
|
end
|
49
55
|
|
data/test/dinheiro_test.rb
CHANGED
@@ -3,11 +3,11 @@ require File.dirname(__FILE__) + '/test_helper'
|
|
3
3
|
class DinheiroTest < Test::Unit::TestCase
|
4
4
|
|
5
5
|
CONTABIL = { "(2,00)" => -2,
|
6
|
-
"2,00" => 2,
|
6
|
+
"2,00" => 2,
|
7
7
|
"0,00" => 0,
|
8
8
|
"0,32" => 0.32,
|
9
9
|
"(0,01)" => -0.01 }
|
10
|
-
|
10
|
+
|
11
11
|
REAL_CONTABIL = { "R$ (1,00)" => -1,
|
12
12
|
"R$ (0,12)" => -0.12,
|
13
13
|
"R$ 1,00" => 1,
|
@@ -26,7 +26,7 @@ class DinheiroTest < Test::Unit::TestCase
|
|
26
26
|
0.3.real => 0.real + 0.3.real,
|
27
27
|
-0.3.real => 0.real + -0.3.real,
|
28
28
|
-0.03.real => 0 + -0.03.real,
|
29
|
-
-0.03.real => 0.real + -0.03,
|
29
|
+
-0.03.real => 0.real + -0.03,
|
30
30
|
-1.03.real => -1.real + -0.03,
|
31
31
|
-1.03.real => -1.real + BigDecimal.new("-0.03") }
|
32
32
|
|
@@ -41,10 +41,10 @@ class DinheiroTest < Test::Unit::TestCase
|
|
41
41
|
0.03.real => 0.03.real - 0.real,
|
42
42
|
0.03.real => 0.06.real - 0.03.real,
|
43
43
|
-0.03.real => 0 - 0.03.real,
|
44
|
-
-0.03.real => 0.real - 0.03,
|
45
|
-
-1.03.real => -1.real - 0.03,
|
44
|
+
-0.03.real => 0.real - 0.03,
|
45
|
+
-1.03.real => -1.real - 0.03,
|
46
46
|
-1.03.real => -1.real - BigDecimal.new("0.03") }
|
47
|
-
|
47
|
+
|
48
48
|
MULTIPLICACAO = { 0.real => 0.real * 0,
|
49
49
|
0.real => 0.real * 1,
|
50
50
|
0.real => 0.real * -1,
|
@@ -76,8 +76,8 @@ class DinheiroTest < Test::Unit::TestCase
|
|
76
76
|
0.01.real => 0.01 * 1.real,
|
77
77
|
0.01.real => 1.real * BigDecimal("0.01"),
|
78
78
|
0.01.real => BigDecimal("0.01") * 1.real }
|
79
|
-
|
80
|
-
DIVISAO = {
|
79
|
+
|
80
|
+
DIVISAO = {
|
81
81
|
Dinheiro.new(0.33) => Dinheiro.new(1) / 3,
|
82
82
|
Dinheiro.new(33.33) => Dinheiro.new(100) / 3,
|
83
83
|
Dinheiro.new(50.00) => Dinheiro.new(100) / 2,
|
@@ -85,8 +85,8 @@ class DinheiroTest < Test::Unit::TestCase
|
|
85
85
|
Dinheiro.new(0.17) => Dinheiro.new(0.5) / 3,
|
86
86
|
Dinheiro.new(0.33) => Dinheiro.new(0.33) / 1
|
87
87
|
}
|
88
|
-
|
89
|
-
PARCELAS = {
|
88
|
+
|
89
|
+
PARCELAS = {
|
90
90
|
[Dinheiro.new(0.33), Dinheiro.new(0.33), Dinheiro.new(0.34)] => Dinheiro.new(1).parcelar(3),
|
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),
|
@@ -94,9 +94,9 @@ class DinheiroTest < Test::Unit::TestCase
|
|
94
94
|
[Dinheiro.new(0.16), Dinheiro.new(0.17),Dinheiro.new(0.17)] => Dinheiro.new(0.5).parcelar(3),
|
95
95
|
[Dinheiro.new(0.33)] => Dinheiro.new(0.33).parcelar(1),
|
96
96
|
[Dinheiro.new(0.33)] => Dinheiro.new(0.33).parcelar(1),
|
97
|
-
}
|
98
|
-
|
99
|
-
|
97
|
+
}
|
98
|
+
|
99
|
+
|
100
100
|
QUANTIA_COM_FORMATO_VALIDO = [ "1211",
|
101
101
|
"1211.",
|
102
102
|
"1211.0",
|
@@ -138,7 +138,7 @@ class DinheiroTest < Test::Unit::TestCase
|
|
138
138
|
'12.123.99',
|
139
139
|
'1,123,99',
|
140
140
|
'1212,39.90' ]
|
141
|
-
|
141
|
+
|
142
142
|
COMPARACAO = [ 1.real < 2.reais,
|
143
143
|
1.real <= 2.reais,
|
144
144
|
2.real > 1.real,
|
@@ -154,11 +154,11 @@ class DinheiroTest < Test::Unit::TestCase
|
|
154
154
|
1.real == 1.00,
|
155
155
|
1.real >= 1.00,
|
156
156
|
1.real <= 1.00 ]
|
157
|
-
|
158
|
-
ARREDONDAMENTO = { 23049 => 230.49,
|
157
|
+
|
158
|
+
ARREDONDAMENTO = { 23049 => 230.49,
|
159
159
|
23049 => 230.4949999999,
|
160
160
|
23050 => 230.495 }
|
161
|
-
|
161
|
+
|
162
162
|
PONTO_NO_MILHAR = { "234.175.211" => "234175211",
|
163
163
|
"" => "",
|
164
164
|
"1" => "1",
|
@@ -192,103 +192,103 @@ class DinheiroTest < Test::Unit::TestCase
|
|
192
192
|
"2,30" => "2,30" ,
|
193
193
|
"2,30" => 2.30 ,
|
194
194
|
"2,30" => 2.3 ,
|
195
|
-
"1.211,00" => "1211,00" ,
|
196
|
-
"1.211,01" => "1211,01" ,
|
197
|
-
"1.211,50" => "1211,5" ,
|
198
|
-
"1.211,00" => "1211," ,
|
195
|
+
"1.211,00" => "1211,00" ,
|
196
|
+
"1.211,01" => "1211,01" ,
|
197
|
+
"1.211,50" => "1211,5" ,
|
198
|
+
"1.211,00" => "1211," ,
|
199
199
|
"1.211,00" => "1211" ,
|
200
|
-
"1.211,00" => "1211.00" ,
|
201
|
-
"1.211,01" => "1211.01" ,
|
202
|
-
"1.211,20" => "1211.2" ,
|
200
|
+
"1.211,00" => "1211.00" ,
|
201
|
+
"1.211,01" => "1211.01" ,
|
202
|
+
"1.211,20" => "1211.2" ,
|
203
203
|
"1.211,00" => "1211." ,
|
204
204
|
"1.211,00" => "1211" ,
|
205
205
|
"1.211,00" => "1.211" ,
|
206
|
-
"123.112.211,35" => "123112211,35" ,
|
207
|
-
"-123.112.211,35" => "-123112211,35" ,
|
206
|
+
"123.112.211,35" => "123112211,35" ,
|
207
|
+
"-123.112.211,35" => "-123112211,35" ,
|
208
208
|
"123.112.211,35" => "+123112211,35" }
|
209
|
-
|
209
|
+
|
210
210
|
PARTE_INTEIRA = [ -1, -123112211, 0, 1, 12344545 ]
|
211
|
-
|
212
|
-
|
211
|
+
|
212
|
+
|
213
213
|
def setup
|
214
214
|
tornar_metodos_publicos Dinheiro
|
215
215
|
@dinheiro = 1.real
|
216
216
|
end
|
217
217
|
|
218
218
|
def testa_se_cria_dinheiro_a_partir_de_quantias_validos
|
219
|
-
QUANTIA_VALIDA.each do |esperado, quantia|
|
219
|
+
QUANTIA_VALIDA.each do |esperado, quantia|
|
220
220
|
assert_equal esperado, Dinheiro.new(quantia).to_s, "Deveria ter vindo o quantia: #{esperado} quando recebeu #{quantia}"
|
221
221
|
end
|
222
222
|
end
|
223
|
-
|
223
|
+
|
224
224
|
# coloca_ponto_no_milhar
|
225
225
|
def testa_se_coloca_ponto_no_milhar
|
226
|
-
PONTO_NO_MILHAR.each do |esperado, quantia|
|
226
|
+
PONTO_NO_MILHAR.each do |esperado, quantia|
|
227
227
|
{ esperado => quantia,
|
228
|
-
"-#{esperado}" => "-#{quantia}" }.each do |esperado, quantia|
|
229
|
-
assert_equal esperado, @dinheiro.inteiro_com_milhar(quantia)
|
228
|
+
"-#{esperado}" => "-#{quantia}" }.each do |esperado, quantia|
|
229
|
+
assert_equal esperado, @dinheiro.inteiro_com_milhar(quantia)
|
230
230
|
end
|
231
231
|
end
|
232
232
|
end
|
233
|
-
|
233
|
+
|
234
234
|
def testa_to_s
|
235
235
|
assert_equal "1,00", Dinheiro.new(1).to_s
|
236
236
|
assert_equal "1.000,00", Dinheiro.new(1000).to_s
|
237
237
|
end
|
238
|
-
|
238
|
+
|
239
239
|
# real
|
240
240
|
def testa_real_nao_eh_dinheiro
|
241
241
|
assert_kind_of(Dinheiro, 1.real)
|
242
242
|
end
|
243
|
-
|
243
|
+
|
244
244
|
def testa_real_eh_dinheiro
|
245
245
|
assert_kind_of(Dinheiro, Dinheiro.new(1).real)
|
246
246
|
end
|
247
|
-
|
247
|
+
|
248
248
|
def testa_real_contabil
|
249
249
|
REAL_CONTABIL.each { |esperado, quantia| assert_equal esperado, Dinheiro.new(quantia).real_contabil }
|
250
|
-
end
|
251
|
-
|
250
|
+
end
|
251
|
+
|
252
252
|
def testa_reais_contabeis
|
253
253
|
REAL_CONTABIL.each { |esperado, quantia| assert_equal esperado, Dinheiro.new(quantia).reais_contabeis }
|
254
|
-
end
|
255
|
-
|
254
|
+
end
|
255
|
+
|
256
256
|
# reais
|
257
257
|
def testa_reais
|
258
258
|
assert_equal Dinheiro.new("2,00"), Dinheiro.new(2).reais
|
259
259
|
end
|
260
|
-
|
260
|
+
|
261
261
|
def testa_contabil
|
262
262
|
CONTABIL.each { |esperado, quantia| assert_equal esperado, Dinheiro.new(quantia).contabil }
|
263
|
-
end
|
263
|
+
end
|
264
264
|
|
265
265
|
# real_formatado
|
266
266
|
def test_real_formatado
|
267
267
|
assert_equal "R$ 2,00", Dinheiro.new(2).real_formatado
|
268
268
|
end
|
269
|
-
|
269
|
+
|
270
270
|
# ==
|
271
271
|
def testa_igualdade
|
272
272
|
assert_equal Dinheiro.new(1), Dinheiro.new(1)
|
273
273
|
end
|
274
|
-
|
274
|
+
|
275
275
|
def testa_igualdade_quando_passa_possivel_dinheiro
|
276
276
|
assert_equal Dinheiro.new(1), 1.0
|
277
277
|
end
|
278
|
-
|
278
|
+
|
279
279
|
def testa_igualdade_quando_passa_algo_que_nao_seja_dinheiro
|
280
280
|
assert_equal false, Dinheiro.new(1) == 'salario'
|
281
281
|
end
|
282
|
-
|
282
|
+
|
283
283
|
# / (divisao)
|
284
284
|
def testa_divisao
|
285
285
|
DIVISAO.each { |parcelas, divisao| assert_equal parcelas, divisao }
|
286
286
|
end
|
287
|
-
|
287
|
+
|
288
288
|
def testa_divisao_por_zero
|
289
289
|
assert_raise(ZeroDivisionError) { 1.real / 0 }
|
290
290
|
end
|
291
|
-
|
291
|
+
|
292
292
|
def testa_divisao_por_algo_que_nao_seja_um_escalar
|
293
293
|
assert_raise(DivisaPorNaoEscalarError) { 10.reais / 2.reais }
|
294
294
|
end
|
@@ -297,55 +297,55 @@ class DinheiroTest < Test::Unit::TestCase
|
|
297
297
|
def testa_parcelar
|
298
298
|
PARCELAS.each { |parcelas, divisao| assert_equal parcelas, divisao }
|
299
299
|
end
|
300
|
-
|
300
|
+
|
301
301
|
def testa_parcelar_por_zero
|
302
302
|
assert_raise(ZeroDivisionError) { 1.real.parcelar 0 }
|
303
303
|
end
|
304
|
-
|
304
|
+
|
305
305
|
def testa_parcelar_por_algo_que_nao_seja_um_escalar
|
306
306
|
assert_raise(DivisaPorNaoEscalarError) { 10.reais.parcelar(2.reais) }
|
307
307
|
end
|
308
|
-
|
308
|
+
|
309
309
|
# initialize
|
310
310
|
def testa_se_cria_dinheiro_a_partir_de_float
|
311
311
|
verifica_se_cria_dinheiro_para 1.0
|
312
|
-
end
|
313
|
-
|
312
|
+
end
|
313
|
+
|
314
314
|
def testa_se_cria_dinheiro_a_partir_de_fixnum
|
315
315
|
verifica_se_cria_dinheiro_para 1
|
316
|
-
end
|
317
|
-
|
316
|
+
end
|
317
|
+
|
318
318
|
def testa_se_cria_dinheiro_a_partir_de_bigdecimal
|
319
319
|
verifica_se_cria_dinheiro_para BigDecimal.new("1")
|
320
|
-
end
|
320
|
+
end
|
321
321
|
|
322
322
|
def testa_se_cria_dinheiro_a_partir_de_string
|
323
323
|
verifica_se_cria_dinheiro_para "1"
|
324
|
-
end
|
325
|
-
|
324
|
+
end
|
325
|
+
|
326
326
|
def testa_se_rejeita_criacao_de_dinheiro_a_partir_de_string_invalida
|
327
|
-
QUANTIA_COM_FORMATO_INVALIDO.each do |quantia|
|
327
|
+
QUANTIA_COM_FORMATO_INVALIDO.each do |quantia|
|
328
328
|
assert_raise DinheiroInvalidoError, "Deveria ter rejeitado [#{quantia}]" do
|
329
329
|
Dinheiro.new quantia
|
330
330
|
end
|
331
331
|
end
|
332
332
|
end
|
333
|
-
|
333
|
+
|
334
334
|
# + (soma)
|
335
335
|
def testa_soma
|
336
336
|
SOMA.each{ |esperado, soma| assert_equal esperado, soma }
|
337
|
-
end
|
338
|
-
|
337
|
+
end
|
338
|
+
|
339
339
|
# - (subtracao)
|
340
340
|
def testa_subtracao
|
341
341
|
SUBTRACAO.each { |esperado, subtracao| assert_equal esperado, subtracao }
|
342
342
|
end
|
343
|
-
|
343
|
+
|
344
344
|
# * (multiplicacao)
|
345
345
|
def testa_multiplicacao
|
346
|
-
MULTIPLICACAO.each { |esperado, multiplicacao| assert_equal esperado, multiplicacao }
|
346
|
+
MULTIPLICACAO.each { |esperado, multiplicacao| assert_equal esperado, multiplicacao }
|
347
347
|
end
|
348
|
-
|
348
|
+
|
349
349
|
# quantia_de
|
350
350
|
def testa_quantia_de
|
351
351
|
assert_equal 0, @dinheiro.quantia_de(0.real)
|
@@ -384,39 +384,39 @@ class DinheiroTest < Test::Unit::TestCase
|
|
384
384
|
assert_equal 2.30, 2.30.real.to_f
|
385
385
|
assert_equal 1000, 1000.real.to_f
|
386
386
|
end
|
387
|
-
|
387
|
+
|
388
388
|
# quantia_respeita_formato?
|
389
389
|
def testa_se_quantia_respeita_formato
|
390
390
|
QUANTIA_COM_FORMATO_VALIDO.each { |quantia| verifica_se_quantia_respeita_formato quantia }
|
391
391
|
end
|
392
|
-
|
392
|
+
|
393
393
|
# >, <, == (ordenacao)
|
394
394
|
def testa_comparacao_entre_dinheiro
|
395
395
|
COMPARACAO.each { |comparacao| assert comparacao }
|
396
396
|
end
|
397
|
-
|
397
|
+
|
398
398
|
def testa_comparacao_entre_possivel_dinheiro
|
399
399
|
COMPARACAO_COM_ESCALAR.each { |comparacao_com_escalar| assert comparacao_com_escalar }
|
400
400
|
end
|
401
|
-
|
401
|
+
|
402
402
|
# decimal
|
403
403
|
def testa_decimal_quando_todas_as_casas_estao_preenchidas
|
404
404
|
verifica_decimal("12")
|
405
405
|
end
|
406
|
-
|
406
|
+
|
407
407
|
def testa_decimal_quando_apenas_uma_das_casas_esta_preenchida
|
408
408
|
verifica_decimal("10", "1")
|
409
409
|
end
|
410
|
-
|
410
|
+
|
411
411
|
def testa_decimal_quando_nenhuma_das_casas_esta_preenchida
|
412
412
|
verifica_decimal("00", "")
|
413
413
|
end
|
414
|
-
|
414
|
+
|
415
415
|
def testa_se_transforma_em_string_que_represente_a_quantia_quando_tem_tres_digitos
|
416
416
|
verifica_se_transforma_em_string_corretamente "1.23", 123
|
417
417
|
end
|
418
418
|
|
419
|
-
def testa_se_transforma_em_string_que_represente_a_quantia_quando_tem_dois_digitos
|
419
|
+
def testa_se_transforma_em_string_que_represente_a_quantia_quando_tem_dois_digitos
|
420
420
|
verifica_se_transforma_em_string_corretamente "0.12", 12
|
421
421
|
end
|
422
422
|
|
@@ -425,20 +425,20 @@ class DinheiroTest < Test::Unit::TestCase
|
|
425
425
|
end
|
426
426
|
|
427
427
|
def testa_se_transforma_em_string_para_valores_especiais
|
428
|
-
verifica_se_transforma_em_string_corretamente "-123112211.00", -12311221100
|
428
|
+
verifica_se_transforma_em_string_corretamente "-123112211.00", -12311221100
|
429
429
|
end
|
430
430
|
|
431
431
|
# parte_inteira
|
432
432
|
def testa_parte_inteira
|
433
433
|
PARTE_INTEIRA.each { |quantia| assert_equal "#{quantia}", Dinheiro.new(quantia).parte_inteira }
|
434
434
|
end
|
435
|
-
|
435
|
+
|
436
436
|
def testa_se_arredonda_valores_corretamente
|
437
|
-
ARREDONDAMENTO.each do |esperado, quantia|
|
437
|
+
ARREDONDAMENTO.each do |esperado, quantia|
|
438
438
|
assert_equal esperado, Dinheiro.new(quantia).quantia, "Deveria retornar #{esperado} para #{quantia}"
|
439
439
|
end
|
440
440
|
end
|
441
|
-
|
441
|
+
|
442
442
|
def testa_se_valor_decimal_cria_o_big_decimal_corretamente
|
443
443
|
assert_equal BigDecimal.new("1234.56"), Dinheiro.new("1234,56").valor_decimal
|
444
444
|
end
|
@@ -446,33 +446,33 @@ class DinheiroTest < Test::Unit::TestCase
|
|
446
446
|
def testa_soma_de_dinheiro_com_big_decimal
|
447
447
|
assert_equal Dinheiro.new(200), BigDecimal.new("100").reais + "100".reais
|
448
448
|
end
|
449
|
-
|
449
|
+
|
450
450
|
def testa_zero_quando_eh_zero
|
451
451
|
assert Dinheiro.new(0).zero?
|
452
452
|
end
|
453
|
-
|
453
|
+
|
454
454
|
def testa_zero_quando_nao_eh_zero
|
455
455
|
assert !Dinheiro.new(1).zero?
|
456
456
|
end
|
457
|
-
|
457
|
+
|
458
458
|
private
|
459
|
-
|
459
|
+
|
460
460
|
def verifica_se_transforma_em_string_corretamente(quantia_esperada, quantia)
|
461
461
|
assert_equal quantia_esperada, @dinheiro.transforma_em_string_que_represente_a_quantia(quantia)
|
462
462
|
end
|
463
|
-
|
463
|
+
|
464
464
|
def verifica_decimal(esperado, quantia = esperado)
|
465
465
|
assert_equal esperado, @dinheiro.decimal("." + quantia)
|
466
466
|
assert_equal esperado, @dinheiro.decimal("," + quantia)
|
467
467
|
assert_equal esperado, @dinheiro.decimal(quantia) if quantia.blank?
|
468
468
|
end
|
469
|
-
|
469
|
+
|
470
470
|
def verifica_se_quantia_respeita_formato(quantia)
|
471
|
-
formatos_validos(quantia).each do |quantia_str|
|
471
|
+
formatos_validos(quantia).each do |quantia_str|
|
472
472
|
assert 1.real.quantia_respeita_formato?(quantia_str), "O sistema deveria considerar o quantia '#{quantia_str}' dentro do formato valido."
|
473
473
|
end
|
474
474
|
end
|
475
|
-
|
475
|
+
|
476
476
|
def formatos_validos(quantia)
|
477
477
|
formatos_validos = []
|
478
478
|
quantias_validas(quantia).each do |quantia|
|
@@ -485,14 +485,14 @@ class DinheiroTest < Test::Unit::TestCase
|
|
485
485
|
end
|
486
486
|
formatos_validos
|
487
487
|
end
|
488
|
-
|
488
|
+
|
489
489
|
def quantias_validas(quantia)
|
490
490
|
return [quantia] if [ ".", "," ].include?(quantia[0..0])
|
491
491
|
[ quantia, "-#{quantia}" ]
|
492
492
|
end
|
493
|
-
|
493
|
+
|
494
494
|
def verifica_se_cria_dinheiro_para(quantia)
|
495
495
|
assert quantia.para_dinheiro.kind_of?(Dinheiro)
|
496
496
|
end
|
497
|
-
|
497
|
+
|
498
498
|
end
|
data/test/nil_class_test.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
require File.dirname(__FILE__) + '/test_helper'
|
2
2
|
|
3
3
|
class NilClassTest < Test::Unit::TestCase
|
4
|
-
|
4
|
+
|
5
5
|
def test_real
|
6
6
|
assert_equal Dinheiro.new(0), nil.real
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
def test_reais
|
10
10
|
assert_equal Dinheiro.new(0), nil.reais
|
11
11
|
end
|
12
|
-
|
12
|
+
|
13
13
|
def test_para_dinheiro
|
14
14
|
assert_equal Dinheiro.new(0), nil.para_dinheiro
|
15
15
|
end
|
16
|
-
|
16
|
+
|
17
17
|
def test_valor
|
18
18
|
assert_equal Dinheiro.new(0), nil.valor
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
def test_contabil
|
22
22
|
assert_equal "0,00", nil.contabil
|
23
23
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
24
|
+
|
25
|
+
|
26
|
+
|
27
|
+
|
28
|
+
|
29
29
|
end
|
metadata
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brdinheiro
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 3
|
7
|
+
- 0
|
8
|
+
- 5
|
9
|
+
version: 3.0.5
|
6
10
|
platform: ruby
|
7
11
|
authors:
|
8
12
|
- "Marcos Tapaj\xC3\xB3s"
|
@@ -16,52 +20,66 @@ autorequire:
|
|
16
20
|
bindir: bin
|
17
21
|
cert_chain: []
|
18
22
|
|
19
|
-
date:
|
23
|
+
date: 2012-01-02 00:00:00 -02:00
|
20
24
|
default_executable:
|
21
25
|
dependencies:
|
22
26
|
- !ruby/object:Gem::Dependency
|
23
27
|
name: actionpack
|
24
|
-
prerelease: false
|
25
28
|
requirement: &id001 !ruby/object:Gem::Requirement
|
26
29
|
none: false
|
27
30
|
requirements:
|
28
31
|
- - ">="
|
29
32
|
- !ruby/object:Gem::Version
|
33
|
+
segments:
|
34
|
+
- 3
|
35
|
+
- 0
|
36
|
+
- 0
|
30
37
|
version: 3.0.0
|
31
38
|
type: :runtime
|
39
|
+
prerelease: false
|
32
40
|
version_requirements: *id001
|
33
41
|
- !ruby/object:Gem::Dependency
|
34
42
|
name: activerecord
|
35
|
-
prerelease: false
|
36
43
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
44
|
none: false
|
38
45
|
requirements:
|
39
46
|
- - ">="
|
40
47
|
- !ruby/object:Gem::Version
|
48
|
+
segments:
|
49
|
+
- 3
|
50
|
+
- 0
|
51
|
+
- 0
|
41
52
|
version: 3.0.0
|
42
53
|
type: :runtime
|
54
|
+
prerelease: false
|
43
55
|
version_requirements: *id002
|
44
56
|
- !ruby/object:Gem::Dependency
|
45
57
|
name: brnumeros
|
46
|
-
prerelease: false
|
47
58
|
requirement: &id003 !ruby/object:Gem::Requirement
|
48
59
|
none: false
|
49
60
|
requirements:
|
50
61
|
- - "="
|
51
62
|
- !ruby/object:Gem::Version
|
52
|
-
|
63
|
+
segments:
|
64
|
+
- 3
|
65
|
+
- 0
|
66
|
+
- 5
|
67
|
+
version: 3.0.5
|
53
68
|
type: :runtime
|
69
|
+
prerelease: false
|
54
70
|
version_requirements: *id003
|
55
71
|
- !ruby/object:Gem::Dependency
|
56
72
|
name: rake
|
57
|
-
prerelease: false
|
58
73
|
requirement: &id004 !ruby/object:Gem::Requirement
|
59
74
|
none: false
|
60
75
|
requirements:
|
61
76
|
- - ">="
|
62
77
|
- !ruby/object:Gem::Version
|
78
|
+
segments:
|
79
|
+
- 0
|
63
80
|
version: "0"
|
64
81
|
type: :development
|
82
|
+
prerelease: false
|
65
83
|
version_requirements: *id004
|
66
84
|
description: "brdinheiro \xC3\xA9 uma das gems que compoem o Brazilian Rails"
|
67
85
|
email:
|
@@ -110,17 +128,23 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
110
128
|
requirements:
|
111
129
|
- - ">="
|
112
130
|
- !ruby/object:Gem::Version
|
131
|
+
hash: -3233565507204023944
|
132
|
+
segments:
|
133
|
+
- 0
|
113
134
|
version: "0"
|
114
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
136
|
none: false
|
116
137
|
requirements:
|
117
138
|
- - ">="
|
118
139
|
- !ruby/object:Gem::Version
|
140
|
+
hash: -3233565507204023944
|
141
|
+
segments:
|
142
|
+
- 0
|
119
143
|
version: "0"
|
120
144
|
requirements:
|
121
145
|
- brnumeros
|
122
146
|
rubyforge_project: brdinheiro
|
123
|
-
rubygems_version: 1.
|
147
|
+
rubygems_version: 1.3.7
|
124
148
|
signing_key:
|
125
149
|
specification_version: 3
|
126
150
|
summary: "brdinheiro \xC3\xA9 uma das gems que compoem o Brazilian Rails"
|