Sha256: e5d7b439abe5f5919f6304515d6094b507978ecd1d88181707acdd69c8093cfd

Contents?: true

Size: 1.35 KB

Versions: 29

Compression:

Stored size: 1.35 KB

Contents

module TelephoneNumber
  class Number
    extend Forwardable

    attr_reader :country, :parser, :formatter, :original_number, :geo_locator, :time_zone_detector

    delegate [:valid?, :valid_types, :normalized_number] => :parser
    delegate [:national_number, :e164_number, :international_number] => :formatter

    def initialize(number, country = nil)
      @original_number = TelephoneNumber.sanitize(number)
      @country = country ? Country.find(country) : detect_country
      @parser = Parser.new(self)
      @formatter = Formatter.new(self)
    end

    def location(locale = :en)
      return if !country || !valid?
      @geo_locator ||= GeoLocator.new(self, locale)
      @geo_locator.location
    end

    def timezone
      return if !country || !valid?
      @time_zone_detector ||= TimeZoneDetector.new(self)
      @time_zone_detector.detect_timezone
    end

    private

    def eligible_countries
      # note that it is entirely possible for two separate countries to use the same
      # validation scheme. Take Italy and Vatican City for example.
      Country.all_countries.select do |country|
        original_number.start_with?(country.country_code) && self.class.new(original_number, country.country_id).valid?
      end
    end

    def detect_country
      eligible_countries.detect(&:main_country_for_code) || eligible_countries.first
    end
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
telephone_number-1.4.22 lib/telephone_number/number.rb
telephone_number-1.4.21 lib/telephone_number/number.rb
telephone_number-1.4.20 lib/telephone_number/number.rb
telephone_number-1.4.19 lib/telephone_number/number.rb
telephone_number-1.4.18 lib/telephone_number/number.rb
telephone_number-1.4.16 lib/telephone_number/number.rb
telephone_number-1.4.15 lib/telephone_number/number.rb
telephone_number-1.4.14 lib/telephone_number/number.rb
telephone_number-1.4.13 lib/telephone_number/number.rb
telephone_number-1.4.12 lib/telephone_number/number.rb
telephone_number-1.4.11 lib/telephone_number/number.rb
telephone_number-1.4.10 lib/telephone_number/number.rb
telephone_number-1.4.9 lib/telephone_number/number.rb
telephone_number-1.4.8 lib/telephone_number/number.rb
telephone_number-1.4.7 lib/telephone_number/number.rb
telephone_number-1.4.6 lib/telephone_number/number.rb
telephone_number-1.4.5 lib/telephone_number/number.rb
telephone_number-1.4.4 lib/telephone_number/number.rb
telephone_number-1.4.3 lib/telephone_number/number.rb
telephone_number-1.4.2 lib/telephone_number/number.rb