Sha256: 1aa9422d147e7fa69cec891f92eb27c1a92b628b4bd85e576e02cc45bf9e4b95

Contents?: true

Size: 1.77 KB

Versions: 47

Compression:

Stored size: 1.77 KB

Contents

# -*- encoding : utf-8 -*-
module CpfCnpjActiveRecord #:nodoc:
  def self.included(base) #:nodoc:
    base.extend ClassMethods
  end
  module ClassMethods #:nodoc:
    def usar_como_cpf(*args) #:nodoc:
      init(args, 'Cpf')
    end

    def usar_como_cnpj(*args) #:nodoc:
      init(args, 'Cnpj')
    end

    def init(args, klass)
      unless args.size.zero?
        args.each do |name|
          add_composed_class(name, klass)
          module_eval create_code(name.to_s, klass)
        end
      end
    end

    def add_composed_class(name, klass)
      options = {:class_name => klass, :mapping => [name.to_s, "numero"], :allow_nil => true}
      constructor = Proc.new { |numero| eval(klass).new(numero) }
      converter   = Proc.new { |value| eval(klass).new(value) }
      begin
        composed_of name, options.merge( { :constructor => constructor, :converter => converter } )
      rescue Exception
        composed_of name, options { eval(klass).new(name[:numero]) }
      end
    end

    def create_code(name, klass)
      str = <<-CODE
        validate :#{name}_valido?
        def #{name}_valido?
          value = read_attribute('#{name}')
          if !value.nil? && value.strip != '' && !#{name}.nil? && !#{name}.valido?
            self.errors.add('#{name}', :invalid)
          end
        end
        def #{name}=(value)
          if value.blank?
            write_attribute('#{name}', nil)
          elsif value.kind_of?(#{eval(klass)})
            write_attribute('#{name}', value.numero)
          else
            begin
              c = #{eval(klass)}.new(value)
              c.valido? ? write_attribute('#{name}', c.numero) : write_attribute('#{name}', value)
            rescue
              @#{name} = value
            end
          end
        end
      CODE
    end
  end
end

Version data entries

47 entries across 47 versions & 2 rubygems

Version Path
brcpfcnpj-3.3.0 lib/brcpfcnpj/cpf_cnpj_activerecord.rb
brcpfcnpj-3.2.0 lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.5.2 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.5.1 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.5.0 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.9 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.8 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.7 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.6 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.5 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.4 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.3 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.2 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.1 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.3.0 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.2.9 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.2.8 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.2.7 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.2.6 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb
flexa_lib-0.2.5 lib/flexa_lib/brcpfcnpj/cpf_cnpj_activerecord.rb