bbrcobranca 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (220) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +1 -0
  3. data/LICENSE +20 -0
  4. data/README.md +12 -0
  5. data/Rakefile +13 -0
  6. data/lib/bbrcobranca.rb +196 -0
  7. data/lib/bbrcobranca/arquivos/logos/bancobrasil.eps +5402 -0
  8. data/lib/bbrcobranca/arquivos/logos/bancobrasil_carne.eps +5410 -0
  9. data/lib/bbrcobranca/arquivos/logos/bancobrasilia.eps +0 -0
  10. data/lib/bbrcobranca/arquivos/logos/bancobrasilia_carne.eps +0 -0
  11. data/lib/bbrcobranca/arquivos/logos/banconordeste.eps +0 -0
  12. data/lib/bbrcobranca/arquivos/logos/banconordeste_carne.eps +0 -0
  13. data/lib/bbrcobranca/arquivos/logos/banestes.eps +5198 -0
  14. data/lib/bbrcobranca/arquivos/logos/banestes_carne.eps +5206 -0
  15. data/lib/bbrcobranca/arquivos/logos/banrisul.eps +121 -0
  16. data/lib/bbrcobranca/arquivos/logos/banrisul_carne.eps +121 -0
  17. data/lib/bbrcobranca/arquivos/logos/bradesco.eps +5210 -0
  18. data/lib/bbrcobranca/arquivos/logos/bradesco_carne.eps +5214 -0
  19. data/lib/bbrcobranca/arquivos/logos/caixa.eps +5111 -0
  20. data/lib/bbrcobranca/arquivos/logos/caixa_carne.eps +5115 -0
  21. data/lib/bbrcobranca/arquivos/logos/cecred.eps +0 -0
  22. data/lib/bbrcobranca/arquivos/logos/cecred_carne.eps +0 -0
  23. data/lib/bbrcobranca/arquivos/logos/credisis.eps +0 -0
  24. data/lib/bbrcobranca/arquivos/logos/credisis_carne.eps +0 -0
  25. data/lib/bbrcobranca/arquivos/logos/hsbc.eps +5124 -0
  26. data/lib/bbrcobranca/arquivos/logos/hsbc_carne.eps +5128 -0
  27. data/lib/bbrcobranca/arquivos/logos/itau.eps +5318 -0
  28. data/lib/bbrcobranca/arquivos/logos/itau_carne.eps +5322 -0
  29. data/lib/bbrcobranca/arquivos/logos/santander.eps +5305 -0
  30. data/lib/bbrcobranca/arquivos/logos/santander_carne.eps +5313 -0
  31. data/lib/bbrcobranca/arquivos/logos/sicoob.eps +5375 -0
  32. data/lib/bbrcobranca/arquivos/logos/sicoob_carne.eps +5379 -0
  33. data/lib/bbrcobranca/arquivos/logos/sicredi.eps +5379 -0
  34. data/lib/bbrcobranca/arquivos/logos/sicredi_carne.eps +5383 -0
  35. data/lib/bbrcobranca/arquivos/logos/unicred.eps +0 -0
  36. data/lib/bbrcobranca/arquivos/logos/unicred_carne.eps +0 -0
  37. data/lib/bbrcobranca/arquivos/templates/modelo_carne.eps +1112 -0
  38. data/lib/bbrcobranca/arquivos/templates/modelo_generico.eps +0 -0
  39. data/lib/bbrcobranca/boleto/banco_brasil.rb +157 -0
  40. data/lib/bbrcobranca/boleto/banco_brasilia.rb +102 -0
  41. data/lib/bbrcobranca/boleto/banco_nordeste.rb +79 -0
  42. data/lib/bbrcobranca/boleto/banestes.rb +85 -0
  43. data/lib/bbrcobranca/boleto/banrisul.rb +94 -0
  44. data/lib/bbrcobranca/boleto/base.rb +256 -0
  45. data/lib/bbrcobranca/boleto/bradesco.rb +99 -0
  46. data/lib/bbrcobranca/boleto/bradesco_grb.rb +85 -0
  47. data/lib/bbrcobranca/boleto/caixa.rb +121 -0
  48. data/lib/bbrcobranca/boleto/cecred.rb +86 -0
  49. data/lib/bbrcobranca/boleto/credisis.rb +116 -0
  50. data/lib/bbrcobranca/boleto/hsbc.rb +94 -0
  51. data/lib/bbrcobranca/boleto/itau.rb +138 -0
  52. data/lib/bbrcobranca/boleto/itau_adimplere.rb +159 -0
  53. data/lib/bbrcobranca/boleto/santander.rb +84 -0
  54. data/lib/bbrcobranca/boleto/santander_adimplere.rb +73 -0
  55. data/lib/bbrcobranca/boleto/sicoob.rb +119 -0
  56. data/lib/bbrcobranca/boleto/sicredi.rb +142 -0
  57. data/lib/bbrcobranca/boleto/template/base.rb +25 -0
  58. data/lib/bbrcobranca/boleto/template/rghost.rb +315 -0
  59. data/lib/bbrcobranca/boleto/template/rghost_carne.rb +317 -0
  60. data/lib/bbrcobranca/boleto/unicred.rb +141 -0
  61. data/lib/bbrcobranca/calculo.rb +115 -0
  62. data/lib/bbrcobranca/calculo_data.rb +62 -0
  63. data/lib/bbrcobranca/currency.rb +69 -0
  64. data/lib/bbrcobranca/formatacao.rb +103 -0
  65. data/lib/bbrcobranca/formatacao_string.rb +35 -0
  66. data/lib/bbrcobranca/limpeza.rb +20 -0
  67. data/lib/bbrcobranca/remessa/base.rb +76 -0
  68. data/lib/bbrcobranca/remessa/cnab240/banco_brasil.rb +246 -0
  69. data/lib/bbrcobranca/remessa/cnab240/base.rb +512 -0
  70. data/lib/bbrcobranca/remessa/cnab240/base_correspondente.rb +299 -0
  71. data/lib/bbrcobranca/remessa/cnab240/caixa.rb +163 -0
  72. data/lib/bbrcobranca/remessa/cnab240/cecred.rb +151 -0
  73. data/lib/bbrcobranca/remessa/cnab240/sicoob.rb +226 -0
  74. data/lib/bbrcobranca/remessa/cnab240/sicoob_banco_brasil.rb +94 -0
  75. data/lib/bbrcobranca/remessa/cnab240/sicredi.rb +177 -0
  76. data/lib/bbrcobranca/remessa/cnab240/unicred.rb +9 -0
  77. data/lib/bbrcobranca/remessa/cnab400/banco_brasil.rb +169 -0
  78. data/lib/bbrcobranca/remessa/cnab400/banco_brasilia.rb +166 -0
  79. data/lib/bbrcobranca/remessa/cnab400/banco_nordeste.rb +160 -0
  80. data/lib/bbrcobranca/remessa/cnab400/banrisul.rb +155 -0
  81. data/lib/bbrcobranca/remessa/cnab400/base.rb +119 -0
  82. data/lib/bbrcobranca/remessa/cnab400/bradesco.rb +130 -0
  83. data/lib/bbrcobranca/remessa/cnab400/citibank.rb +138 -0
  84. data/lib/bbrcobranca/remessa/cnab400/credisis.rb +128 -0
  85. data/lib/bbrcobranca/remessa/cnab400/itau.rb +157 -0
  86. data/lib/bbrcobranca/remessa/cnab400/santander.rb +231 -0
  87. data/lib/bbrcobranca/remessa/cnab400/sicoob.rb +308 -0
  88. data/lib/bbrcobranca/remessa/cnab400/unicred.rb +143 -0
  89. data/lib/bbrcobranca/remessa/pagamento.rb +288 -0
  90. data/lib/bbrcobranca/retorno/base.rb +49 -0
  91. data/lib/bbrcobranca/retorno/cnab240/base.rb +42 -0
  92. data/lib/bbrcobranca/retorno/cnab240/caixa.rb +48 -0
  93. data/lib/bbrcobranca/retorno/cnab240/cecred.rb +102 -0
  94. data/lib/bbrcobranca/retorno/cnab240/santander.rb +95 -0
  95. data/lib/bbrcobranca/retorno/cnab240/sicoob.rb +99 -0
  96. data/lib/bbrcobranca/retorno/cnab240/sicredi.rb +79 -0
  97. data/lib/bbrcobranca/retorno/cnab400/banco_brasil.rb +127 -0
  98. data/lib/bbrcobranca/retorno/cnab400/banco_brasilia.rb +89 -0
  99. data/lib/bbrcobranca/retorno/cnab400/banco_nordeste.rb +112 -0
  100. data/lib/bbrcobranca/retorno/cnab400/banrisul.rb +42 -0
  101. data/lib/bbrcobranca/retorno/cnab400/base.rb +50 -0
  102. data/lib/bbrcobranca/retorno/cnab400/bradesco.rb +124 -0
  103. data/lib/bbrcobranca/retorno/cnab400/credisis.rb +115 -0
  104. data/lib/bbrcobranca/retorno/cnab400/itau.rb +143 -0
  105. data/lib/bbrcobranca/retorno/cnab400/santander.rb +57 -0
  106. data/lib/bbrcobranca/retorno/cnab400/unicred.rb +118 -0
  107. data/lib/bbrcobranca/retorno/retorno_cbr643.rb +49 -0
  108. data/lib/bbrcobranca/retorno/retorno_cnab240.rb +97 -0
  109. data/lib/bbrcobranca/retorno/retorno_cnab400.rb +70 -0
  110. data/lib/bbrcobranca/util/date.rb +20 -0
  111. data/lib/bbrcobranca/util/empresa.rb +28 -0
  112. data/lib/bbrcobranca/util/errors.rb +76 -0
  113. data/lib/bbrcobranca/validations.rb +232 -0
  114. data/lib/bbrcobranca/version.rb +6 -0
  115. data/spec/arquivos/CBR64310.RET +28 -0
  116. data/spec/arquivos/CNAB240.RET +74 -0
  117. data/spec/arquivos/CNAB240CECRED.RET +10 -0
  118. data/spec/arquivos/CNAB240SANTANDER.RET +8 -0
  119. data/spec/arquivos/CNAB240SICOOB.RET +10 -0
  120. data/spec/arquivos/CNAB240SICREDI.CRT +8 -0
  121. data/spec/arquivos/CNAB400.RET +54 -0
  122. data/spec/arquivos/CNAB400BANCOBRASILIA.RET +3 -0
  123. data/spec/arquivos/CNAB400BANCONORDESTE.RET +3 -0
  124. data/spec/arquivos/CNAB400BANRISUL.RET +3 -0
  125. data/spec/arquivos/CNAB400BRADESCO.RET +8 -0
  126. data/spec/arquivos/CNAB400CREDISIS.RET +3 -0
  127. data/spec/arquivos/CNAB400ITAU.RET +54 -0
  128. data/spec/arquivos/CNAB400SANTANDER.RET +54 -0
  129. data/spec/arquivos/CNAB400UNICRED.RET +3 -0
  130. data/spec/bbrcobranca_spec.rb +34 -0
  131. data/spec/brcobranca/base_spec.rb +170 -0
  132. data/spec/brcobranca/boleto/banco_brasil_spec.rb +334 -0
  133. data/spec/brcobranca/boleto/banco_brasilia_spec.rb +152 -0
  134. data/spec/brcobranca/boleto/banco_nordeste_spec.rb +161 -0
  135. data/spec/brcobranca/boleto/banestes_spec.rb +194 -0
  136. data/spec/brcobranca/boleto/banrisul_spec.rb +182 -0
  137. data/spec/brcobranca/boleto/bradesco_spec.rb +211 -0
  138. data/spec/brcobranca/boleto/caixa_spec.rb +161 -0
  139. data/spec/brcobranca/boleto/cecred_spec.rb +147 -0
  140. data/spec/brcobranca/boleto/credisis_spec.rb +159 -0
  141. data/spec/brcobranca/boleto/hsbc_spec.rb +172 -0
  142. data/spec/brcobranca/boleto/itau_spec.rb +262 -0
  143. data/spec/brcobranca/boleto/santander_spec.rb +143 -0
  144. data/spec/brcobranca/boleto/sicoob_spec.rb +193 -0
  145. data/spec/brcobranca/boleto/sicredi_spec.rb +190 -0
  146. data/spec/brcobranca/boleto/unicred_spec.rb +149 -0
  147. data/spec/brcobranca/boletos_em_lote_spec.rb +38 -0
  148. data/spec/brcobranca/calculo_data_spec.rb +33 -0
  149. data/spec/brcobranca/calculo_spec.rb +185 -0
  150. data/spec/brcobranca/currency_spec.rb +79 -0
  151. data/spec/brcobranca/formatacao_spec.rb +46 -0
  152. data/spec/brcobranca/formatacao_string_spec.rb +24 -0
  153. data/spec/brcobranca/limpeza_spec.rb +10 -0
  154. data/spec/brcobranca/remessa/base_spec.rb +67 -0
  155. data/spec/brcobranca/remessa/cnab240/banco_brasil_spec.rb +217 -0
  156. data/spec/brcobranca/remessa/cnab240/base_spec.rb +91 -0
  157. data/spec/brcobranca/remessa/cnab240/caixa_spec.rb +163 -0
  158. data/spec/brcobranca/remessa/cnab240/cecred_spec.rb +164 -0
  159. data/spec/brcobranca/remessa/cnab240/sicoob_banco_brasil_spec.rb +268 -0
  160. data/spec/brcobranca/remessa/cnab240/sicoob_spec.rb +198 -0
  161. data/spec/brcobranca/remessa/cnab240/sicredi_spec.rb +201 -0
  162. data/spec/brcobranca/remessa/cnab240/unicred_spec.rb +193 -0
  163. data/spec/brcobranca/remessa/cnab400/banco_brasil_spec.rb +187 -0
  164. data/spec/brcobranca/remessa/cnab400/banco_brasilia_spec.rb +183 -0
  165. data/spec/brcobranca/remessa/cnab400/banco_nordeste_spec.rb +187 -0
  166. data/spec/brcobranca/remessa/cnab400/banrisul_spec.rb +190 -0
  167. data/spec/brcobranca/remessa/cnab400/base_spec.rb +53 -0
  168. data/spec/brcobranca/remessa/cnab400/bradesco_spec.rb +201 -0
  169. data/spec/brcobranca/remessa/cnab400/citibank_spec.rb +126 -0
  170. data/spec/brcobranca/remessa/cnab400/credisis_spec.rb +188 -0
  171. data/spec/brcobranca/remessa/cnab400/itau_spec.rb +190 -0
  172. data/spec/brcobranca/remessa/cnab400/santander_spec.rb +152 -0
  173. data/spec/brcobranca/remessa/cnab400/sicoob_spec.rb +217 -0
  174. data/spec/brcobranca/remessa/cnab400/unicred_spec.rb +185 -0
  175. data/spec/brcobranca/remessa/pagamento_spec.rb +227 -0
  176. data/spec/brcobranca/retorno/cnab240/base_spec.rb +23 -0
  177. data/spec/brcobranca/retorno/cnab240/cecred_spec.rb +50 -0
  178. data/spec/brcobranca/retorno/cnab240/santander_spec.rb +50 -0
  179. data/spec/brcobranca/retorno/cnab240/sicoob_spec.rb +50 -0
  180. data/spec/brcobranca/retorno/cnab240/sicredi_spec.rb +31 -0
  181. data/spec/brcobranca/retorno/cnab400/banco_brasilia_spec.rb +36 -0
  182. data/spec/brcobranca/retorno/cnab400/banco_nordeste_spec.rb +39 -0
  183. data/spec/brcobranca/retorno/cnab400/banrisul_spec.rb +41 -0
  184. data/spec/brcobranca/retorno/cnab400/base_spec.rb +57 -0
  185. data/spec/brcobranca/retorno/cnab400/bradesco_spec.rb +58 -0
  186. data/spec/brcobranca/retorno/cnab400/credisis_spec.rb +25 -0
  187. data/spec/brcobranca/retorno/cnab400/itau_spec.rb +58 -0
  188. data/spec/brcobranca/retorno/cnab400/santander_spec.rb +39 -0
  189. data/spec/brcobranca/retorno/cnab400/unicred_spec.rb +42 -0
  190. data/spec/brcobranca/retorno/retorno_cbr643_spec.rb +69 -0
  191. data/spec/brcobranca/retorno/retorno_cnab400_spec.rb +57 -0
  192. data/spec/brcobranca/retorno/retorno_cnab_240_spec.rb +52 -0
  193. data/spec/brcobranca/rghost_spec.rb +29 -0
  194. data/spec/brcobranca/util/empresa_spec.rb +36 -0
  195. data/spec/fixtures/remessa/remessa-banco-brasil-cnab400.rem +3 -0
  196. data/spec/fixtures/remessa/remessa-banco-brasilia-cnab400.rem +3 -0
  197. data/spec/fixtures/remessa/remessa-banco-nordeste-cnab400.rem +3 -0
  198. data/spec/fixtures/remessa/remessa-banco_brasil-cnab240.rem +7 -0
  199. data/spec/fixtures/remessa/remessa-bancoob-cnab240.rem +7 -0
  200. data/spec/fixtures/remessa/remessa-banrisul-cnab400.rem +3 -0
  201. data/spec/fixtures/remessa/remessa-bradesco-cnab400.rem +3 -0
  202. data/spec/fixtures/remessa/remessa-caixa-cnab240.rem +7 -0
  203. data/spec/fixtures/remessa/remessa-cecred-cnab240.rem +7 -0
  204. data/spec/fixtures/remessa/remessa-citibank-cnab400.rem +3 -0
  205. data/spec/fixtures/remessa/remessa-credisis-cnab400.rem +3 -0
  206. data/spec/fixtures/remessa/remessa-itau-cnab400.rem +4 -0
  207. data/spec/fixtures/remessa/remessa-santander-cnab400.rem +3 -0
  208. data/spec/fixtures/remessa/remessa-sicoob-cnab400.rem +3 -0
  209. data/spec/fixtures/remessa/remessa-sicoob-correspondente-bb-cnab240.rem +4 -0
  210. data/spec/fixtures/remessa/remessa-sicredi-cnab240.rem +7 -0
  211. data/spec/fixtures/remessa/remessa-unicred-cnab240.rem +7 -0
  212. data/spec/fixtures/remessa/remessa-unicred-cnab400.rem +3 -0
  213. data/spec/spec.opts +8 -0
  214. data/spec/spec_helper.rb +38 -0
  215. data/spec/support/remessa_helpers.rb +13 -0
  216. data/spec/support/shared_examples/busca_logotipo.rb +15 -0
  217. data/spec/support/shared_examples/cnab240.rb +259 -0
  218. data/spec/support/shared_examples/cnab400.rb +180 -0
  219. data/spec/support/shared_examples/formatos_validos.rb +36 -0
  220. metadata +422 -0
@@ -0,0 +1,70 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # DEPRECATED
4
+ #
5
+ # Classe original desenvolvida a partir do layout do Itau.
6
+ # Movido para: cnab400/itau.rb
7
+ #
8
+ require 'parseline'
9
+ module Bbrcobranca
10
+ module Retorno
11
+ # Formato de Retorno CNAB 400
12
+
13
+ # Baseado em: http://download.itau.com.br/bankline/layout_cobranca_400bytes_cnab_itau_mensagem.pdf
14
+ class RetornoCnab400 < Base
15
+ extend ParseLine::FixedWidth # Extendendo parseline
16
+
17
+ def self.load_lines(file, options = {})
18
+ default_options = { except: [1] } # por padrao ignora a primeira linha que é header
19
+ options = default_options.merge!(options)
20
+
21
+ super file, options
22
+ end
23
+
24
+ fixed_width_layout do |parse|
25
+ parse.field :codigo_registro, 0..0
26
+ parse.field :agencia_com_dv, 17..20 # FIXME - SEM DIV
27
+ parse.field :cedente_com_dv, 23..28
28
+ parse.field :nosso_numero, 62..69
29
+ parse.field :carteira_variacao, 82..84
30
+ parse.field :carteira, 107..107
31
+ parse.field :codigo_ocorrencia, 108..109
32
+ parse.field :data_ocorrencia, 110..115
33
+ parse.field :data_vencimento, 146..151
34
+ parse.field :valor_titulo, 152..164
35
+ parse.field :banco_recebedor, 165..167
36
+ parse.field :agencia_recebedora_com_dv, 168..172
37
+ parse.field :especie_documento, 173..174
38
+ parse.field :valor_tarifa, 175..187
39
+ parse.field :iof, 214..226
40
+ parse.field :valor_abatimento, 227..239
41
+ parse.field :desconto, 240..252
42
+ parse.field :valor_recebido, 253..265
43
+ parse.field :juros_mora, 266..278
44
+ parse.field :outros_recebimento, 279..291
45
+ parse.field :data_credito, 295..300
46
+ parse.field :motivo_ocorrencia, 377..384, ->(motivos) do
47
+ motivos.scan(/.{2}/).reject(&:blank?).reject{|motivo| motivo == '00'}
48
+ end
49
+ parse.field :sequencial, 394..399
50
+
51
+ # Campos da classe base que não encontrei a relação com CNAB400
52
+ # parse.field :tipo_cobranca,80..80
53
+ # parse.field :tipo_cobranca_anterior,81..81
54
+ # parse.field :natureza_recebimento,86..87
55
+ # parse.field :convenio,31..37
56
+ # parse.field :comando,108..109
57
+ # parse.field :juros_desconto,201..213
58
+ # parse.field :iof_desconto,214..226
59
+ # parse.field :desconto_concedito,240..252
60
+ # parse.field :outras_despesas,279..291
61
+ # parse.field :abatimento_nao_aproveitado,292..304
62
+ # parse.field :data_liquidacao,295..300
63
+ # parse.field :valor_lancamento,305..317
64
+ # parse.field :indicativo_lancamento,318..318
65
+ # parse.field :indicador_valor,319..319
66
+ # parse.field :valor_ajuste,320..331
67
+ end
68
+ end
69
+ end
70
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # @author Eduardo Reboucas
4
+ #
5
+ # Para manter compatibilidade com ActiveModel
6
+
7
+ require 'date'
8
+ require 'time'
9
+
10
+ class Date
11
+ def self.current
12
+ Time.respond_to?(:zone) && Time.zone ? Time.zone.today : Date.today
13
+ end
14
+ end
15
+
16
+ class Time
17
+ def self.current
18
+ Time.respond_to?(:zone) && Time.zone ? Time.zone.now : Time.now
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+ # @author Kivanio Barbosa
4
+ module Bbrcobranca
5
+ # Métodos auxiliares
6
+ module Util
7
+ class Empresa
8
+ def initialize(documento, zero = true)
9
+ @documento = documento
10
+ @zero = zero
11
+ end
12
+
13
+ # Tipo de empresa (fisica ou juridica)
14
+ # de acordo com o documento (CPF/CNPJ)
15
+ # 1 = CPF
16
+ # 2 = CNPJ
17
+ #
18
+ # @return [String]
19
+ # @param [String] documento Número do documento da empresa
20
+ # @param [Boollean] zero Incluir zero a esquerda
21
+ def tipo
22
+ @tipo = @documento.somente_numeros.size <= 11 ? '1' : '2'
23
+ @tipo = @tipo.rjust(2, '0') if @zero
24
+ @tipo
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,76 @@
1
+ module Bbrcobranca
2
+ module Util
3
+ class Errors
4
+
5
+ include Enumerable
6
+
7
+ CALLBACKS_OPTIONS = [:if, :unless, :on, :allow_nil, :allow_blank, :strict]
8
+ MESSAGE_OPTIONS = [:message]
9
+
10
+ attr_reader :messages, :details
11
+
12
+ def initialize(base)
13
+ @base = base
14
+ @messages = apply_default_array({})
15
+ @details = apply_default_array({})
16
+ end
17
+
18
+ def add(attribute, message = :invalid, options = {})
19
+ message = message.call if message.respond_to?(:call)
20
+ detail = normalize_detail(message, options)
21
+ message = normalize_message(attribute, message, options)
22
+ details[attribute.to_sym] << detail
23
+ messages[attribute.to_sym] << message
24
+ end
25
+
26
+ def size
27
+ @messages.values.flatten.size
28
+ end
29
+ alias :count :size
30
+
31
+ def generate_message(attribute, type = :invalid, options = {})
32
+ :"errors.attributes.#{attribute}.#{type}"
33
+ end
34
+
35
+ def full_messages
36
+ @messages.values.flatten
37
+ end
38
+ alias :to_a :full_messages
39
+
40
+ private
41
+
42
+ def apply_default_array(hash)
43
+ hash.default_proc = proc { |h, key| h[key] = [] }
44
+ hash
45
+ end
46
+
47
+ def normalize_message(attribute, message, options)
48
+ case message
49
+ when Symbol
50
+ generate_message(attribute, message, except(options, *CALLBACKS_OPTIONS))
51
+ else
52
+ if message.start_with?(variable_name(attribute))
53
+ message
54
+ else
55
+ "#{variable_name(attribute)} #{message}"
56
+ end
57
+ end
58
+ end
59
+
60
+ def normalize_detail(message, options)
61
+ { error: message }.merge(except(options, *CALLBACKS_OPTIONS + MESSAGE_OPTIONS))
62
+ end
63
+
64
+ def except(hash, *keys)
65
+ dup = hash.dup
66
+ keys.each { |key| dup.delete(key) }
67
+ dup
68
+ end
69
+
70
+ def variable_name(symbol)
71
+ symbol.to_s.tr("_", " ").capitalize
72
+ end
73
+
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,232 @@
1
+ # coding: utf-8
2
+ # @author Eduardo Reboucas
3
+ require 'bbrcobranca/util/errors'
4
+
5
+ module Bbrcobranca
6
+
7
+ # Métodos auxiliares de validação para evitar ActiveSupport e ActiveModel com
8
+ # mínimo de impacto nas definições das validações existentes
9
+
10
+ module Validations
11
+
12
+ def self.included(base)
13
+ base.extend(ClassMethods)
14
+ end
15
+
16
+ module ClassMethods
17
+
18
+ attr_reader :presences
19
+ attr_reader :lengths
20
+ attr_reader :numericals
21
+ attr_reader :inclusions
22
+ attr_reader :eachs
23
+
24
+ def validates_presence_of(*attr_names)
25
+ @presences ||= []
26
+ @presences = @presences << attr_names
27
+ end
28
+
29
+ def validates_length_of(*attr_names)
30
+ @lengths ||= []
31
+ @lengths = @lengths << attr_names
32
+ end
33
+
34
+ def validates_numericality_of(*attr_names)
35
+ @numericals ||= []
36
+ @numericals = @numericals << attr_names
37
+ end
38
+
39
+ def validates_inclusion_of(*attr_names)
40
+ @inclusions ||= []
41
+ @inclusions = @inclusions << attr_names
42
+ end
43
+
44
+ def validates_each(*attr_names, &block)
45
+ @eachs ||= {}
46
+ attr_names.each do |attr_name|
47
+ @eachs[attr_name] = block
48
+ end
49
+ end
50
+
51
+ def with_options(options, &block)
52
+ end
53
+
54
+ end
55
+
56
+ def errors
57
+ @errors ||= Bbrcobranca::Util::Errors.new(self)
58
+ end
59
+
60
+ def valid?
61
+ #puts "** #{self.class}"
62
+ #puts "** #{self.class.superclass}"
63
+ all_valid = true
64
+ all_valid = false if !check_eachs
65
+ all_valid = false if !check_presences
66
+ all_valid = false if !check_numericals
67
+ all_valid = false if !check_lengths
68
+ all_valid = false if !check_inclusions
69
+ return all_valid
70
+ end
71
+
72
+ def invalid?
73
+ !valid?
74
+ end
75
+
76
+ private
77
+
78
+ def check_eachs
79
+ eachs = {}
80
+ if self.class.superclass.superclass.respond_to?(:eachs)
81
+ eachs.merge!(self.class.superclass.superclass.eachs || {})
82
+ end
83
+ if self.class.superclass.respond_to?(:eachs)
84
+ eachs.merge!(self.class.superclass.eachs || {})
85
+ end
86
+ if self.class.eachs
87
+ eachs.merge!(self.class.eachs)
88
+ end
89
+ return true if eachs.keys.size == 0
90
+ eachs.each do |attr_name, block|
91
+ value = ''
92
+ begin
93
+ value = self.send(attr_name)
94
+ rescue
95
+ end
96
+ block.call(self, attr_name, value)
97
+ end
98
+ return errors.size == 0
99
+ end
100
+
101
+ def check_presences
102
+ presences = []
103
+ if self.class.superclass.superclass.respond_to?(:presences)
104
+ presences = self.class.superclass.superclass.presences || []
105
+ end
106
+ if self.class.superclass.respond_to?(:presences)
107
+ presences += self.class.superclass.presences || []
108
+ end
109
+ if self.class.presences
110
+ presences += self.class.presences
111
+ end
112
+ all_present = true
113
+ presences.each do |presence|
114
+ presence.select { |p| p.is_a? Symbol}.each do |variable|
115
+ if blank?(self.send(variable))
116
+ all_present = false
117
+ errors.add variable, presence[-1][:message]
118
+ end
119
+ end
120
+ end
121
+ return all_present
122
+ end
123
+
124
+ def check_numericals
125
+ numericals = []
126
+ if self.class.superclass.respond_to?(:numericals)
127
+ numericals = self.class.superclass.numericals || []
128
+ end
129
+ if self.class.numericals
130
+ numericals += self.class.numericals
131
+ end
132
+ return true if !numericals
133
+ all_numerical = true
134
+ numericals.each do |numerical|
135
+ numerical.select { |p| p.is_a? Symbol}.each do |variable|
136
+ if self.respond_to?(variable) && self.send(variable) && (self.send(variable).to_s =~ /\A[+-]?\d+\z/).nil?
137
+ all_numerical = false
138
+ errors.add variable, numerical[-1][:message]
139
+ end
140
+ end
141
+ end
142
+ return all_numerical
143
+ end
144
+
145
+ def check_lengths
146
+ lengths = []
147
+ if self.class.superclass.superclass.respond_to?(:lengths)
148
+ lengths = self.class.superclass.superclass.lengths || []
149
+ end
150
+ if self.class.superclass.respond_to?(:lengths)
151
+ lengths += self.class.superclass.lengths || []
152
+ end
153
+ if self.class.lengths
154
+ lengths += self.class.lengths
155
+ end
156
+ return true if !lengths
157
+ all_checked = true
158
+ lengths.each do |rule|
159
+ variable = rule[0]
160
+ next if !self.respond_to?(variable)
161
+ value = self.send(variable)
162
+ if rule[-1][:in]
163
+ if !value
164
+ all_checked = false
165
+ errors.add variable, rule[-1][:message]
166
+ elsif value.size < rule[-1][:in].first || value.size > rule[-1][:in].last
167
+ all_checked = false
168
+ errors.add variable, rule[-1][:message]
169
+ end
170
+ end
171
+ if rule[-1][:is]
172
+ if !value
173
+ all_checked = false
174
+ errors.add variable, rule[-1][:message]
175
+ elsif value.to_s.size != rule[-1][:is]
176
+ all_checked = false
177
+ errors.add variable, rule[-1][:message]
178
+ end
179
+ end
180
+ if rule[-1][:minimum] && rule[-1][:maximum]
181
+ if !value || value.size < rule[-1][:minimum] || value.size > rule[-1][:maximum]
182
+ all_checked = false
183
+ errors.add variable, rule[-1][:message]
184
+ end
185
+ elsif rule[-1][:maximum]
186
+ if value && value.size > rule[-1][:maximum]
187
+ all_checked = false
188
+ errors.add variable, rule[-1][:message]
189
+ end
190
+ end
191
+ end
192
+ return all_checked
193
+ end
194
+
195
+ def check_inclusions
196
+ inclusions = []
197
+ if self.class.superclass.superclass.respond_to?(:inclusions)
198
+ inclusions = self.class.superclass.superclass.inclusions || []
199
+ end
200
+ if self.class.superclass.respond_to?(:inclusions)
201
+ inclusions += self.class.superclass.inclusions || []
202
+ end
203
+ if self.class.inclusions
204
+ inclusions += self.class.inclusions
205
+ end
206
+ return true if !inclusions
207
+ all_checked = true
208
+ inclusions.each do |rule|
209
+ variable = rule[0]
210
+ next if !self.respond_to?(variable)
211
+ value = self.send(variable)
212
+ next if !value
213
+ if rule[-1][:in]
214
+ if !rule[-1][:in].include?(value)
215
+ all_checked = false
216
+ errors.add variable, rule[-1][:message]
217
+ end
218
+ end
219
+ end
220
+ return all_checked
221
+ end
222
+
223
+ def variable_name(symbol)
224
+ symbol.to_s.tr("_", " ").capitalize
225
+ end
226
+
227
+ def blank?(obj)
228
+ return obj !~ /\S/ if obj.is_a? String
229
+ obj.respond_to?(:empty?) ? obj.empty? : !obj
230
+ end
231
+ end
232
+ end
@@ -0,0 +1,6 @@
1
+ # -*- encoding: utf-8 -*-
2
+ #
3
+
4
+ module Bbrcobranca
5
+ VERSION = '0.0.1'
6
+ end
@@ -0,0 +1,28 @@
1
+ 02RETORNO01COBRANCA 33251000289353000000INSTITUTO MATO-GROSSENSE DO AL001BANCO DO BRASIL2001090000007 000000009703754590 1622420 000001
2
+ 70000000000000000332510002893531622420 1622420000000000310000001 01900000000000 1806200109 000000000000000906400114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000009064000000000000000000000000000000000000000000000000856420000000000000 0000000000000000000000000000000000000000000000000004000002
3
+ 70000000000000000332510002893531622420 1622420000000003010000001 01900000000000 1806200109 000000000000002235239909430002201090000500000000000000000000000000000000000000000000000000000000000000000000000000022352000000000000000000000000000000000000000000000002185220000000000000 0000000000000000000000000000000000000000000000000010000003
4
+ 70000000000000000332510002893531622420 1622420000000003110000001 01900000000000 1806200109 00000000000000165330012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000016533000000000000000000000000000000000000000000000001603320000000000000 0000000000000000000000000000000000000000000000000002000004
5
+ 70000000000000000332510002893531622420 1622420000000003210000001 01900000000000 1806200109 00000000000000157740012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000015774000000000000000000000000000000000000000000000001527420000000000000 0000000000000000000000000000000000000000000000000002000005
6
+ 70000000000000000332510002893531622420 1622420000000003310000001 01900000000000 1806200109 00000000000000414440012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000041444000000000000000000000000000000000000000000000004094420000000000000 0000000000000000000000000000000000000000000000000002000006
7
+ 70000000000000000332510002893531622420 1622420000000003410000001 01900000000000 1806200109 00000000000000610280012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000061028000000000000000000000000000000000000000000000006052820000000000000 0000000000000000000000000000000000000000000000000002000007
8
+ 70000000000000000332510002893531622420 1622420000000003510000001 01900000000000 1806200109 00000000000000608040012970X002201090000500000000000000000000000000000000000000000000000000000000000000000000000000060804000000000000000000000000000000000000000000000006030420000000000000 0000000000000000000000000000000000000000000000000002000008
9
+ 70000000000000000332510002893531622420 1622420000000003610000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000009
10
+ 70000000000000000332510002893531622420 1622420000000003710000001 01900000000000 1806200109 000000000000000565474808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005654000000000000000000000000000000000000000000000000515420000000000000 0000000000000000000000000000000000000000000000000010000010
11
+ 70000000000000000332510002893531622420 1622420000000003810000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000011
12
+ 70000000000000000332510002893531622420 1622420000000003910000001 01900000000000 1806200109 000000000000000528074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005280000000000000000000000000000000000000000000000000478020000000000000 0000000000000000000000000000000000000000000000000010000012
13
+ 70000000000000000332510002893531622420 1622420000000004010000001 01900000000000 1806200109 000000000000005610074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000010000013
14
+ 70000000000000000332510002893531622420 1622420000000004110000001 01900000000000 1806200109 000000000000000528074808110002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005280000000000000000000000000000000000000000000000000478020000000000000 0000000000000000000000000000000000000000000000000010000014
15
+ 70000000000000000332510002893531622420 1622420000000004210000001 01900000000000 1806200109 000000000000005610000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000004000015
16
+ 70000000000000000332510002893531622420 1622420000000004310000001 01900000000000 1806200109 000000000000001672000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000016720000000000000000000000000000000000000000000000001622020000000000000 0000000000000000000000000000000000000000000000000004000016
17
+ 70000000000000000332510002893531622420 1622420000000004410000001 01900000000000 1806200109 000000000000000535300136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000005353000000000000000000000000000000000000000000000000485320000000000000 0000000000000000000000000000000000000000000000000004000017
18
+ 70000000000000000332510002893531622420 1622420000000004510000001 01900000000000 1806200109 000000000000005210700130376002201090000500000000000000000000000000000000000000000000000000000000000000000000000000052107000000000000000000000000000000000000000000000005160720000000000000 0000000000000000000000000000000000000000000000000008000018
19
+ 70000000000000000332510002893531622420 1622420000000004610000001 01900000000000 1806200109 000000000000006043600114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000060436000000000000000000000000000000000000000000000005993620000000000000 0000000000000000000000000000000000000000000000000002000019
20
+ 70000000000000000332510002893531622420 1622420000000004710000001 01900000000000 1806200109 000000000000005610000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000004000020
21
+ 70000000000000000332510002893531622420 1622420000000004810000001 01900000000000 1806200109 000000000000000495000136439002201090000500000000000000000000000000000000000000000000000000000000000000000000000000004950000000000000000000000000000000000000000000000000445020000000000000 0000000000000000000000000000000000000000000000000004000021
22
+ 70000000000000000332510002893531622420 1622420000000005010000001 01900000000000 1806200109 000000000000005707000114923002201090000500000000000000000000000000000000000000000000000000000000000000000000000000057070000000000000000000000000000000000000000000000005657020000000000000 0000000000000000000000000000000000000000000000000002000022
23
+ 70000000000000000332510002893531622420 1622420000000005110000001 01900000000000 1806200109 000000000000005638600106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056386000000000000000000000000000000000000000000000005588620000000000000 0000000000000000000000000000000000000000000000000002000023
24
+ 70000000000000000332510002893531622420 1622420000000005210000001 01900000000000 1806200109 000000000000005610000106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056100000000000000000000000000000000000000000000000005560020000000000000 0000000000000000000000000000000000000000000000000002000024
25
+ 70000000000000000332510002893531622420 1622420000000005310000001 01900000000000 1806200109 000000000000005856400106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000058564000000000000000000000000000000000000000000000005806420000000000000 0000000000000000000000000000000000000000000000000002000025
26
+ 70000000000000000332510002893531622420 1622420000000005410000001 01900000000000 1806200109 000000000000005704600106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000057046000000000000000000000000000000000000000000000005654620000000000000 0000000000000000000000000000000000000000000000000002000026
27
+ 70000000000000000332510002893531622420 1622420000000005510000001 01900000000000 1806200109 000000000000005673800106599002201090000500000000000000000000000000000000000000000000000000000000000000000000000000056738000000000000000000000000000000000000000000000005623820000000000000 0000000000000000000000000000000000000000000000000002000027
28
+ 9201001 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000000000000000000000000000000 000028