Sha256: 1d4cdcf76082ea3d73dcf4ac5163312c99e3c1c802563cadd41d4490dc5e9092

Contents?: true

Size: 1.11 KB

Versions: 6

Compression:

Stored size: 1.11 KB

Contents

require_relative 'pattern1'
require_relative 'pattern2'

module BrDocuments
  module IE
    class PE
      def initialize(number)
        @validator = number.gsub(/[\.\/-]/, '').length <= 9 ? PE9.new(number) : PE14.new(number)
      end

      def valid?
        @validator.valid?
      end

      def formatted
        @validator.formatted
      end

      class PE14 < Pattern1
        def initialize(number)
          super
          @mask = /^(\d{2}\.\d{1}\.\d{3}\.\d{7}\-\d{1})$|^(\d{14})$/
          @weight = [5, 4, 3, 2, 1, 9, 8, 7, 6, 5, 4, 3, 2]
        end

        private

        def format_ie(number)
          number.sub(/(\d{2})(\d{1})(\d{3})(\d{7})(\d{1})/, '\\1.\\2.\\3.\\4-\\5')
        end
      end
      private_constant :PE14

      class PE9 < Pattern2
        def initialize(number)
          super
          @mask = /^(\d{7}\-\d{2})$|^(\d{9})$/
          @weight1 = [8, 7, 6, 5, 4, 3, 2]
          @weight2 = [9, 8, 7, 6, 5, 4, 3, 2]
        end

        private

        def format_ie(number)
          number.sub(/(\d{7})(\d{2})/, '\\1-\\2')
        end
      end

      private_constant :PE9
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
br_documents-0.2.5 lib/br_documents/ie/pe.rb
br_documents-0.2.4 lib/br_documents/ie/pe.rb
br_documents-0.2.3 lib/br_documents/ie/pe.rb
br_documents-0.2.2 lib/br_documents/ie/pe.rb
br_documents-0.2.1 lib/br_documents/ie/pe.rb
br_documents-0.2.0 lib/br_documents/ie/pe.rb