Sha256: f0dcd91eb825b90a42bdc045f3e85e6185e9ab1eb2bc6f7795d10d896aa45bf1

Contents?: true

Size: 1.12 KB

Versions: 9

Compression:

Stored size: 1.12 KB

Contents

require_relative "pattern1"
require_relative "pattern2"

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

      def valid?
        @validator.valid?
      end

      def formatted
        @validator.formatted
      end

      private
      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

      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
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
br_documents-0.1.3 lib/br_documents/ie/pe.rb
br_documents-0.1.2 lib/br_documents/ie/pe.rb
br_documents-0.1.1 lib/br_documents/ie/pe.rb
br_documents-0.1.0 lib/br_documents/ie/pe.rb
br_documents-0.0.15 lib/br_documents/ie/pe.rb
br_documents-0.0.14 lib/br_documents/ie/pe.rb
br_documents-0.0.13 lib/br_documents/ie/pe.rb
br_documents-0.0.12 lib/br_documents/ie/pe.rb
br_documents-0.0.11 lib/br_documents/ie/pe.rb