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 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
@@ -2,7 +2,7 @@
2
2
  require "rubygems"
3
3
  require "rake"
4
4
  require "rake/testtask"
5
- require "rake/rdoctask"
5
+ require "rdoc/task"
6
6
  require "rake/packagetask"
7
7
  require "rake/gempackagetask"
8
8
 
@@ -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
@@ -33,6 +33,10 @@ module DinheiroActiveRecord#:nodoc:
33
33
  end
34
34
  end
35
35
  end
36
+
37
+ def #{name}
38
+ read_attribute(:#{name})
39
+ end
36
40
  ADICIONANDO_METODO
37
41
  end
38
42
  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:
@@ -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.")
@@ -7,7 +7,7 @@ class NilClass
7
7
  def contabil
8
8
  0.contabil
9
9
  end
10
-
10
+
11
11
  def para_dinheiro
12
12
  0.real
13
13
  end
@@ -18,7 +18,7 @@ class NilClass
18
18
 
19
19
  def real
20
20
  0.real
21
- end
21
+ end
22
22
 
23
23
  end
24
24
 
@@ -2,7 +2,7 @@ module BrDinheiro
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 3
4
4
  MINOR = 0
5
- TINY = 4
5
+ TINY = 5
6
6
 
7
7
  STRING = "#{MAJOR}.#{MINOR}.#{TINY}"
8
8
  end
@@ -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
 
@@ -5,7 +5,7 @@ class TestBrDinheiro < Test::Unit::TestCase
5
5
 
6
6
  def setup
7
7
  end
8
-
8
+
9
9
  def test_truth
10
10
  assert true
11
11
  end
@@ -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
 
@@ -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
@@ -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
- version: 3.0.4
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: 2011-03-01 00:00:00 -03:00
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
- version: 3.0.4
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.5.2
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"