<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,6 +1,6 @@
 Gem::Specification.new do |s|
   s.name = &quot;acts_as_payment&quot;
-  s.version = &quot;0.0.5&quot;
+  s.version = &quot;0.0.6&quot;
   s.date = &quot;2008-08-27&quot;
   s.summary = &quot;An easy way to generate bills for your application&quot;
   s.email = &quot;kivanio@kivanio.com.br&quot;
@@ -10,4 +10,5 @@ Gem::Specification.new do |s|
   s.authors = [&quot;Kivanio Barbosa&quot;,&quot;Claudio Pozzebon&quot;]
   s.add_dependency(&quot;rghost&quot;, [&quot;&gt;= 0.8.3&quot;])
   s.add_dependency(&quot;rghost_barcode&quot;, [&quot;&gt;= 0.8&quot;])
+  s.add_dependency(&quot;validatable&quot;, [&quot;&gt;= 1.6.7&quot;])
 end</diff>
      <filename>acts_as_payment.gemspec</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,7 @@
 require 'rubygems'
 require 'rghost'
 require 'rghost_barcode'
+require 'validatable'
 
 # requerendo plugin
 require 'core_ext_payment'</diff>
      <filename>init.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,7 @@
 class BancoBrasil &lt; Boleto
 
   attr_accessor :codigo_servico
+  validates_presence_of :codigo_servico
 
   def initialize
     super
@@ -11,6 +12,7 @@ class BancoBrasil &lt; Boleto
 
   # Carteira 18
   def codigo_barras
+    return nil unless self.valid?
     banco = self.zeros_esquerda(self.banco,3)
     valor_documento = self.zeros_esquerda((self.valor_documento.limpa_valor_moeda),10)
     convenio = self.convenio.to_s</diff>
      <filename>lib/boleto/bancobrasil.rb</filename>
    </modified>
    <modified>
      <diff>@@ -1,6 +1,8 @@
 class Boleto
-  #necessario para gerar codigo de barras
-  include RGhost
+  # necessario para gerar codigo de barras
+  include RGhost unless self.include?(RGhost)
+  # necessario para validar os campos
+  include Validatable unless self.include?(Validatable)
 
   attr_accessor :banco
   attr_accessor :convenio
@@ -14,14 +16,12 @@ class Boleto
   attr_accessor :quantidade
   attr_accessor :valor
   attr_accessor :valor_documento
-  attr_accessor :valor_documento_limpo
   attr_accessor :nosso_numero
   attr_accessor :nosso_numero_dv
   attr_accessor :agencia
   attr_accessor :agencia_dv
   attr_accessor :conta_corrente
   attr_accessor :conta_corrente_dv
-  attr_accessor :fator_vencimento
   attr_accessor :cedente
   attr_accessor :documento_cedente
   attr_accessor :numero_documento
@@ -29,6 +29,7 @@ class Boleto
   attr_accessor :especie_documento
   attr_accessor :data_documento
   attr_accessor :sacado
+  attr_accessor :documento_sacado
   attr_accessor :instrucao1
   attr_accessor :instrucao2
   attr_accessor :instrucao3
@@ -37,11 +38,28 @@ class Boleto
   attr_accessor :instrucao6
   attr_accessor :instrucao7
   attr_accessor :local_pagamento
-  attr_accessor :documento_sacado
   attr_accessor :aceite
   attr_accessor :sacado_linha1
   attr_accessor :sacado_linha2
   attr_accessor :sacado_linha3
+  
+  validates_presence_of :banco, :message =&gt; &quot;Banco n&#227;o pode estar em branco.&quot;
+  validates_presence_of :agencia, :message =&gt; &quot;Ag&#234;ncia n&#227;o pode estar em branco.&quot;
+  validates_presence_of :conta_corrente, :message =&gt; &quot;Conta Corrente n&#227;o pode estar em branco.&quot;
+  validates_presence_of :especie_documento, :message =&gt; &quot;Esp&#233;cie de Documento n&#227;o pode estar em branco.&quot;
+  validates_presence_of :especie, :message =&gt; &quot;Esp&#233;cie n&#227;o pode estar em branco.&quot;
+  validates_presence_of :moeda, :message =&gt; &quot;Moeda n&#227;o pode estar em branco.&quot;
+  validates_presence_of :data_processamento, :message =&gt; &quot;Date de Processamento n&#227;o pode estar em branco.&quot;
+  validates_presence_of :dias_vencimento, :message =&gt; &quot;Dias para o Vencimento n&#227;o pode estar em branco.&quot;
+  validates_presence_of :data_vencimento, :message =&gt; &quot;Data de Vencimento n&#227;o pode estar em branco.&quot;
+  validates_presence_of :aceite, :message =&gt; &quot;Aceite n&#227;o pode estar em branco.&quot;
+  validates_presence_of :quantidade, :message =&gt; &quot;Quantidade n&#227;o pode estar em branco.&quot;
+  validates_presence_of :valor_documento, :message =&gt; &quot;Valor do Documento n&#227;o pode estar em branco.&quot;
+  validates_presence_of :cedente, :message =&gt; &quot;Cedente n&#227;o pode estar em branco.&quot;
+  validates_presence_of :documento_cedente, :message =&gt; &quot;Documento do Cedente n&#227;o pode estar em branco.&quot;
+  validates_presence_of :nosso_numero, :message =&gt; &quot;Nosso N&#250;mero n&#227;o pode estar em branco.&quot;
+  validates_presence_of :sacado, :message =&gt; &quot;Sacado n&#227;o pode estar em branco.&quot;
+  validates_presence_of :documento_sacado, :message =&gt; &quot;Documento do Sacado n&#227;o pode estar em branco.&quot;
 
   def initialize
     self.especie_documento = &quot;DM&quot;
@@ -175,6 +193,11 @@ class Boleto
     return valor_inicial if (diferenca &lt;= 0)
     return ((&quot;0&quot; * diferenca) + valor_inicial )
   end
+  
+  def fator_vencimento
+    return nil unless self.data_vencimento.kind_of?(Date)
+    self.data_vencimento.fator_vencimento
+  end
 
 end
 </diff>
      <filename>lib/boleto/boleto.rb</filename>
    </modified>
    <modified>
      <diff>@@ -2,6 +2,7 @@ $:.unshift File.join(File.dirname(__FILE__), &quot;..&quot;, &quot;lib&quot;)
 require 'rubygems'
 require 'rghost'
 require 'rghost_barcode'
+require 'validatable'
 require 'core_ext_payment.rb'
 require 'boleto/boleto.rb'
 require 'boleto/bancobrasil.rb'
@@ -11,6 +12,15 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
 
   def setup
     @boleto_novo = BancoBrasil.new
+    @boleto_novo.cedente = &quot;Kivanio Barbosa&quot;
+    @boleto_novo.documento_cedente = &quot;12345678912&quot;
+    @boleto_novo.sacado = &quot;Claudio Pozzebom&quot;
+    @boleto_novo.documento_sacado = &quot;12345678900&quot;
+    @boleto_novo.aceite = &quot;S&quot;
+    @boleto_novo.agencia = &quot;4042&quot;
+    @boleto_novo.agencia_dv = @boleto_novo.modulo11_9to2_bb(@boleto_novo.agencia)
+    @boleto_novo.conta_corrente = &quot;61900&quot;
+    @boleto_novo.conta_corrente_dv = @boleto_novo.modulo11_9to2_bb(@boleto_novo.conta_corrente)
   end
 
   def boleto_convenio7_numero10_um
@@ -20,6 +30,7 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     @boleto_novo.valor_documento = 135.00
     @boleto_novo.convenio = 1238798
     @boleto_novo.nosso_numero = &quot;7777700168&quot;
+    @boleto_novo.nosso_numero_dv = @boleto_novo.modulo11_9to2_bb(&quot;#{@boleto_novo.convenio}#{@boleto_novo.nosso_numero}&quot;)  
     @boleto_novo.data_vencimento = Date.parse(&quot;2008-02-01&quot;)
   end
 
@@ -30,6 +41,7 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     @boleto_novo.valor_documento = 723.56
     @boleto_novo.convenio = 1238798
     @boleto_novo.nosso_numero = &quot;7777700168&quot;
+    @boleto_novo.nosso_numero_dv = @boleto_novo.modulo11_9to2_bb(&quot;#{@boleto_novo.convenio}#{@boleto_novo.nosso_numero}&quot;)  
     @boleto_novo.data_vencimento = Date.parse(&quot;2008-02-01&quot;)
   end
 
@@ -42,6 +54,7 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     @boleto_novo.valor_documento = 135.00
     @boleto_novo.convenio = 123879
     @boleto_novo.nosso_numero = &quot;1234&quot;
+    @boleto_novo.nosso_numero_dv = @boleto_novo.modulo11_9to2_bb(&quot;#{@boleto_novo.convenio}#{@boleto_novo.nosso_numero}&quot;)  
     @boleto_novo.data_vencimento = Date.parse(&quot;2008-02-01&quot;)
     @boleto_novo.codigo_servico = false
   end
@@ -55,6 +68,7 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     @boleto_novo.valor_documento = 135.00
     @boleto_novo.convenio = 123879
     @boleto_novo.nosso_numero = &quot;1234567899&quot;
+    @boleto_novo.nosso_numero_dv = @boleto_novo.modulo11_9to2_bb(&quot;#{@boleto_novo.convenio}#{@boleto_novo.nosso_numero}&quot;)  
     @boleto_novo.data_vencimento = Date.parse(&quot;2008-02-01&quot;)
     @boleto_novo.codigo_servico = true
   end
@@ -68,6 +82,7 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     @boleto_novo.valor_documento = 135.00
     @boleto_novo.convenio = 123879
     @boleto_novo.nosso_numero = &quot;1234567899&quot;
+    @boleto_novo.nosso_numero_dv = @boleto_novo.modulo11_9to2_bb(&quot;#{@boleto_novo.convenio}#{@boleto_novo.nosso_numero}&quot;)  
     @boleto_novo.data_vencimento = Date.parse(&quot;2008-02-01&quot;)
     @boleto_novo.codigo_servico = true
   end
@@ -81,6 +96,7 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     @boleto_novo.valor_documento = 135.00
     @boleto_novo.convenio = 123879
     @boleto_novo.nosso_numero = &quot;1234567899&quot;
+    @boleto_novo.nosso_numero_dv = @boleto_novo.modulo11_9to2_bb(&quot;#{@boleto_novo.convenio}#{@boleto_novo.nosso_numero}&quot;)  
     @boleto_novo.data_vencimento = Date.parse(&quot;2008-02-01&quot;)
     @boleto_novo.codigo_servico = true
   end
@@ -94,6 +110,7 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     @boleto_novo.valor_documento = 135.00
     @boleto_novo.convenio = 1238
     @boleto_novo.nosso_numero = &quot;123456&quot;
+    @boleto_novo.nosso_numero_dv = @boleto_novo.modulo11_9to2_bb(&quot;#{@boleto_novo.convenio}#{@boleto_novo.nosso_numero}&quot;)  
     @boleto_novo.data_vencimento = Date.parse(&quot;2008-02-01&quot;)
   end
 
@@ -104,6 +121,7 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     @boleto_novo.valor_documento = 0
     @boleto_novo.convenio = &quot;&quot;
     @boleto_novo.nosso_numero = &quot;&quot;
+    @boleto_novo.nosso_numero_dv = @boleto_novo.modulo11_9to2_bb(&quot;#{@boleto_novo.convenio}#{@boleto_novo.nosso_numero}&quot;)  
     @boleto_novo.data_vencimento = Date.parse(&quot;2008-02-01&quot;)
   end
 
@@ -215,5 +233,12 @@ class BancoBrasilTest &lt; Test::Unit::TestCase
     boleto_nil
     assert_equal nil, @boleto_novo.linha_digitavel(@boleto_novo.codigo_barras)
   end
+  
+  def test_should_boelto_valid
+    boleto_convenio7_numero10_um
+    assert_equal true, @boleto_novo.valid?
+    boleto_nil
+    assert_equal false, @boleto_novo.valid?
+  end
 
 end
\ No newline at end of file</diff>
      <filename>test/banco_brasil_test.rb</filename>
    </modified>
    <modified>
      <diff>@@ -4,6 +4,7 @@ require 'test/unit'
 require 'rubygems'
 require 'rghost'
 require 'rghost_barcode'
+require 'validatable'
 
 class BoletoTest &lt; Test::Unit::TestCase
 </diff>
      <filename>test/boleto_test.rb</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>install.rb</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>a7843f7300286c30b0b2bef609814ec0c7c9c52d</id>
    </parent>
  </parents>
  <author>
    <name>Kivanio Barbosa</name>
    <email>kivanio@gmail.com</email>
  </author>
  <url>http://github.com/kivanio/acts_as_payment/commit/5bc68ae97d516621396dee1bccb100089b748ce5</url>
  <id>5bc68ae97d516621396dee1bccb100089b748ce5</id>
  <committed-date>2008-08-29T08:34:18-07:00</committed-date>
  <authored-date>2008-08-29T08:34:18-07:00</authored-date>
  <message>1 - incluindo gem de validacao de campos</message>
  <tree>a30aa71f77ac417dd951c4d74375dc3e3bc72b8d</tree>
  <committer>
    <name>Kivanio Barbosa</name>
    <email>kivanio@gmail.com</email>
  </committer>
</commit>
