Sha256: 82ce5b3da22f89be90e0ebaf1af8a9c2864983b9778cf7f402125169d11869b6

Contents?: true

Size: 1.01 KB

Versions: 4

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true
module ValidatesZipcode
  class Zipcode
    include CldrRegexpCollection

    def initialize(args = {})
      @zipcode                = args.fetch(:zipcode)
      @country_alpha2         = args.fetch(:country_alpha2)
      @excluded_country_codes = args.fetch(:excluded_country_codes, [])
      @format                 = args.fetch(:format, false)
    end

    def valid?
      return true if @excluded_country_codes.include?(@country_alpha2)
      return true unless regexp

      zipcode = @format ? formatted_zip : @zipcode
      !!(regexp =~ zipcode)
    end
    alias_method :validate, :valid?

    def format
      raise InvalidZipcodeError, "invalid zipcode #{formatted_zip} for country #{@country_alpha2.to_s.upcase}" unless valid?

      formatted_zip
    end

    private

    def regexp
      @regexp ||= regexp_for_country_alpha2(@country_alpha2)
    end

    def formatted_zip
      @formatted_zip ||= Formatter.new(zipcode: @zipcode, country_alpha2: @country_alpha2).format
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
validates_zipcode-0.5.3 lib/validates_zipcode/zipcode.rb
validates_zipcode-0.5.2 lib/validates_zipcode/zipcode.rb
validates_zipcode-0.5.1 lib/validates_zipcode/zipcode.rb
validates_zipcode-0.5.0 lib/validates_zipcode/zipcode.rb