Brunomm/br_boleto

View on GitHub
lib/br_boleto/association/have_conta.rb

Summary

Maintainability
B
5 hrs
Test Coverage
module BrBoleto
    module HaveConta
        extend ActiveSupport::Concern
        
        included do 
            validate :conta_validations
        end

        def conta
            yield conta if block_given?
            get_conta
        end

        def conta=(value)
            if value.is_a?(conta_class) || value.nil?
                @conta = value
            elsif value.is_a?(Hash)
                conta.assign_attributes(value)
            end
        end

        def conta_class
            raise NotImplementedError.new("Not implemented #conta_class in #{self}.")
        end        

    private

        def get_conta
            @conta.is_a?(conta_class) ? @conta : @conta = conta_class.new()
            set_regras_tamanho_e_validations!
            @conta
        end

        #######################  VALIDAÇÔES DA CONTA #######################
        # Devem ser sobrescrita a cada classe que utilizar, pois pode variar
        def valid_conta_corrente_length;       end
        def valid_conta_corrente_minimum;      end
        def valid_conta_corrente_maximum;      end
        def valid_conta_corrente_required;     end
        def valid_modalidade_length;           end
        def valid_modalidade_minimum;          end
        def valid_modalidade_maximum;          end
        def valid_modalidade_required;         end
        def valid_codigo_cedente_length;       end
        def valid_codigo_cedente_minimum;      end
        def valid_codigo_cedente_maximum;      end
        def valid_codigo_cedente_required;     end
        def valid_codigo_cedente_inclusion;    end
        def valid_endereco_required;           end
        def valid_carteira_length;             end
        def valid_carteira_minimum;            end
        def valid_carteira_maximum;            end
        def valid_carteira_required;           end
        def valid_convenio_length;             end
        def valid_convenio_minimum;            end
        def valid_convenio_maximum;            end
        def valid_convenio_required;           end
        def valid_modalidade_inclusion;        end
        def valid_carteira_inclusion;          end
        def valid_convenio_inclusion;          end
        def valid_versao_aplicativo_required;  end # Banco da Caixa
        def valid_variacao_carteira_required;  end # Banco do Brasil
        def valid_codigo_transmissao_required; end # Banco Santander


        def set_regras_tamanho_e_validations!
            @conta ||= conta_class.new()
            @conta.valid_conta_corrente_length   = valid_conta_corrente_length   if "#{valid_conta_corrente_length}".present?
            @conta.valid_conta_corrente_minimum  = valid_conta_corrente_minimum  if "#{valid_conta_corrente_minimum}".present?
            @conta.valid_conta_corrente_maximum  = valid_conta_corrente_maximum  if "#{valid_conta_corrente_maximum}".present?
            @conta.valid_conta_corrente_required = valid_conta_corrente_required if "#{valid_conta_corrente_required}".present?
            
            @conta.valid_modalidade_length       = valid_modalidade_length       if "#{valid_modalidade_length}".present?
            @conta.valid_modalidade_minimum      = valid_modalidade_minimum      if "#{valid_modalidade_minimum}".present?
            @conta.valid_modalidade_maximum      = valid_modalidade_maximum      if "#{valid_modalidade_maximum}".present?
            @conta.valid_modalidade_required     = valid_modalidade_required     if "#{valid_modalidade_required}".present?
            @conta.valid_modalidade_inclusion    = valid_modalidade_inclusion    if "#{valid_modalidade_inclusion}".present?
            
            @conta.valid_endereco_required       = valid_endereco_required       if "#{valid_endereco_required}".present?
            
            @conta.valid_carteira_length         = valid_carteira_length         if "#{valid_carteira_length}".present?
            @conta.valid_carteira_minimum        = valid_carteira_minimum        if "#{valid_carteira_minimum}".present?
            @conta.valid_carteira_maximum        = valid_carteira_maximum        if "#{valid_carteira_maximum}".present?
            @conta.valid_carteira_required       = valid_carteira_required       if "#{valid_carteira_required}".present?
            @conta.valid_carteira_inclusion      = valid_carteira_inclusion      if "#{valid_carteira_inclusion}".present?
            
            # Se tiver alguma validação setada em convênio é o que deve prevalecer
            @conta.valid_codigo_cedente_length   = valid_codigo_cedente_length     if "#{valid_codigo_cedente_length}".present?
            @conta.valid_codigo_cedente_minimum  = valid_codigo_cedente_minimum    if "#{valid_codigo_cedente_minimum}".present?
            @conta.valid_codigo_cedente_maximum  = valid_codigo_cedente_maximum    if "#{valid_codigo_cedente_maximum}".present?
            @conta.valid_codigo_cedente_required = valid_codigo_cedente_required   if "#{valid_codigo_cedente_required}".present?
            @conta.valid_codigo_cedente_inclusion = valid_codigo_cedente_inclusion if "#{valid_codigo_cedente_inclusion}".present?
            
            @conta.valid_convenio_length         = valid_convenio_length         if "#{valid_convenio_length}".present?
            @conta.valid_convenio_minimum        = valid_convenio_minimum        if "#{valid_convenio_minimum}".present?
            @conta.valid_convenio_maximum        = valid_convenio_maximum        if "#{valid_convenio_maximum}".present?
            @conta.valid_convenio_required       = valid_convenio_required       if "#{valid_convenio_required}".present?
            @conta.valid_convenio_inclusion      = valid_convenio_inclusion      if "#{valid_convenio_inclusion}".present?
            
            @conta.valid_versao_aplicativo_required  = valid_versao_aplicativo_required  if "#{valid_versao_aplicativo_required}".present?
            @conta.valid_variacao_carteira_required  = valid_variacao_carteira_required  if "#{valid_variacao_carteira_required}".present?
            @conta.valid_codigo_transmissao_required = valid_codigo_transmissao_required if "#{valid_codigo_transmissao_required}".present?

        end

        def conta_validations
            set_regras_tamanho_e_validations!
            if conta.invalid?
                conta.errors.full_messages.each do |msg|
                    errors.add(:base, msg)
                end
            end
        end
    end
end