Sha256: 66eebc4d320f3a231dc16f67a96e4e4437a881d55176bbbcc2dd670e9ded4c73

Contents?: true

Size: 1.89 KB

Versions: 1

Compression:

Stored size: 1.89 KB

Contents

class IsoCountryCodes # :nodoc:
  class UnknownCodeError < StandardError; end

  class << self

    def for_select(*args)
      Code.for_select(*args)
    end

    def all
      Code.all
    end

    def find(code)
      code     = code.to_s.upcase
      instance = nil

      if code.match(/^\d{2}$/)
        code = "0#{code}" # Make numeric codes three digits
      end

      if code.match(/^\d{3}$/)
        instance = all.select { |c| c.numeric == code }.first
      elsif code.match(/^[A-Z]{2}$/)
        instance = all.select { |c| c.alpha2 == code }.first
      elsif code.match(/^[A-Z]{3}$/)
        instance = all.select { |c| c.alpha3 == code }.first
      end

      raise UnknownCodeError, "No ISO 3166-1 code could be found for '#{code}'." if instance.nil?

      instance
    end

    def search_by_name(str)
      instances = all.select { |c| c.name.upcase == str }
      instances = all.select { |c| c.name.match(/^#{str}/i) } if instances.empty?
      instances = all.select { |c| c.name.match(/#{str}/i) } if instances.empty?

      raise UnknownCodeError, "No ISO 3166-1 codes could be found searching with name '#{code}'." if instances.empty?

      instances
    end

    def search_by_calling_code(code)
      code = "+#{code.to_i}" # Normalize code
      instances = all.select { |c| c.calling == code }

      raise UnknownCodeError, "No ISO 3166-1 codes could be found searching with calling code '#{code}'." if instances.empty?

      instances
    end

    def search_by_calling(code) # Alias of search_by_calling_code
      search_by_calling_code code
    end

    def search_by_currency(code)
      code = code.to_str.upcase
      instances = all.select { |c|
        c.currencies.select { |currency|
          currency != code
        }.empty?
      }

      raise UnknownCodeError, "No ISO 3166-1 codes could be found searching with currency '#{code}'." if instances.empty?

      instances
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
iso_country_codes-0.4.0 lib/iso_country_codes/iso_country_codes.rb