phonelib 0.7.7 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/data/extended_data.dat +0 -0
- data/data/phone_data.dat +0 -0
- data/lib/phonelib/core.rb +11 -1
- data/lib/phonelib/phone.rb +2 -0
- data/lib/phonelib/phone_analyzer.rb +11 -4
- data/lib/phonelib/phone_analyzer_helper.rb +4 -1
- data/lib/phonelib/version.rb +1 -1
- metadata +30 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 6788d5bcd52e5f525a0405906a60ccb2a8443c0303905344ca37557d5765f51a
         | 
| 4 | 
            +
              data.tar.gz: 22d467bb889ce0e4fcde42cf82d2e9c6a0f5466e923a8acc8416ac805d53c876
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 53bfc909baa588bad634aa4ba0a43416471fe372936613f50ddb07a84b961f4ddc69ebec7e0288b526060cef5b350f2d5780fa1d4ae26def0399fe0c2f968973
         | 
| 7 | 
            +
              data.tar.gz: 9671de06ef3f2d6c34284ca988b132098c177627babeee6c40bf8305b4639250f2afb5d3f494f35deac4b3a363437bac35525913490914bd57f15a395a3a88a2
         | 
    
        data/data/extended_data.dat
    CHANGED
    
    | Binary file | 
    
        data/data/phone_data.dat
    CHANGED
    
    | Binary file | 
    
        data/lib/phonelib/core.rb
    CHANGED
    
    | @@ -10,6 +10,16 @@ module Phonelib | |
| 10 10 | 
             
                  @@phone_data ||= load_data.freeze
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 | 
            +
                # @private getter for phone data indexed by country code (internal use only)
         | 
| 14 | 
            +
                def data_by_country_codes
         | 
| 15 | 
            +
                  @@data_by_country_codes ||= phone_data.each_value.group_by { |d| d[COUNTRY_CODE] }.freeze
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                # @private getter for all international prefixes in phone_data
         | 
| 19 | 
            +
                def phone_data_int_prefixes
         | 
| 20 | 
            +
                  @@all_int_prefixes ||= phone_data.map {|k,v| v[:international_prefix] }.select { |v| v != '' }.compact.uniq.join('|').freeze
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
             | 
| 13 23 | 
             
                # @private used to cache frequently-used regular expressions
         | 
| 14 24 | 
             
                @@phone_regexp_cache = {}
         | 
| 15 25 |  | 
| @@ -179,7 +189,7 @@ module Phonelib | |
| 179 189 | 
             
                def add_additional_regex(country, type, national_regex)
         | 
| 180 190 | 
             
                  return unless Phonelib::Core::TYPES_DESC.keys.include?(type.to_sym)
         | 
| 181 191 | 
             
                  return unless national_regex.is_a?(String)
         | 
| 182 | 
            -
                  @@phone_data = nil
         | 
| 192 | 
            +
                  @@phone_data = @@data_by_country_codes = nil
         | 
| 183 193 | 
             
                  @@additional_regexes[country.to_s.upcase] ||= {}
         | 
| 184 194 | 
             
                  @@additional_regexes[country.to_s.upcase][type] ||= []
         | 
| 185 195 | 
             
                  @@additional_regexes[country.to_s.upcase][type] << national_regex
         | 
    
        data/lib/phonelib/phone.rb
    CHANGED
    
    | @@ -178,6 +178,8 @@ module Phonelib | |
| 178 178 |  | 
| 179 179 | 
             
                # @private extracts extension from passed phone number if provided
         | 
| 180 180 | 
             
                def separate_extension(original)
         | 
| 181 | 
            +
                  return [original, ''] unless Phonelib.extension_separate_symbols
         | 
| 182 | 
            +
             | 
| 181 183 | 
             
                  regex = if Phonelib.extension_separate_symbols.is_a?(Array)
         | 
| 182 184 | 
             
                            cr("#{Phonelib.extension_separate_symbols.join('|')}")
         | 
| 183 185 | 
             
                          else
         | 
| @@ -124,15 +124,22 @@ module Phonelib | |
| 124 124 | 
             
                #
         | 
| 125 125 | 
             
                # * +phone+ - phone number for parsing
         | 
| 126 126 | 
             
                def detect_and_parse(phone, country)
         | 
| 127 | 
            -
                   | 
| 128 | 
            -
             | 
| 127 | 
            +
                  countries_data = country_code_candidates_for(phone).flat_map { |code|
         | 
| 128 | 
            +
                    Phonelib.data_by_country_codes[code] || []
         | 
| 129 | 
            +
                  }
         | 
| 130 | 
            +
                  countries_data.each_with_object({}) do |data, result|
         | 
| 131 | 
            +
                    key = data[:id]
         | 
| 129 132 | 
             
                    parsed = parse_single_country(phone, data)
         | 
| 130 133 | 
             
                    if (!Phonelib.strict_double_prefix_check || key == country) && double_prefix_allowed?(data, phone, parsed && parsed[key])
         | 
| 131 134 | 
             
                      parsed = parse_single_country(changed_dp_phone(key, phone), data)
         | 
| 132 135 | 
             
                    end
         | 
| 133 136 | 
             
                    result.merge!(parsed) unless parsed.nil?
         | 
| 134 | 
            -
                  end
         | 
| 135 | 
            -
             | 
| 137 | 
            +
                  end.compact
         | 
| 138 | 
            +
                end
         | 
| 139 | 
            +
             | 
| 140 | 
            +
                def country_code_candidates_for(phone)
         | 
| 141 | 
            +
                  stripped_phone = phone.gsub(/^(#{Phonelib.phone_data_int_prefixes})/, '')
         | 
| 142 | 
            +
                  ((1..3).map { |length| phone[0, length] } + (1..3).map { |length| stripped_phone[0, length] }).uniq
         | 
| 136 143 | 
             
                end
         | 
| 137 144 |  | 
| 138 145 | 
             
                # Create phone representation in e164 format
         | 
| @@ -7,6 +7,8 @@ module Phonelib | |
| 7 7 | 
             
                  if result.size == 1
         | 
| 8 8 | 
             
                    result
         | 
| 9 9 | 
             
                  else
         | 
| 10 | 
            +
                    matched_countries = country_or_default_country(nil) & result.keys
         | 
| 11 | 
            +
                    result = result.keep_if {|k, _v| matched_countries.include?(k) } if matched_countries
         | 
| 10 12 | 
             
                    Hash[result.take(1)]
         | 
| 11 13 | 
             
                  end
         | 
| 12 14 | 
             
                end
         | 
| @@ -56,7 +58,7 @@ module Phonelib | |
| 56 58 | 
             
                def country_can_dp?(country)
         | 
| 57 59 | 
             
                  Phonelib.phone_data[country] &&
         | 
| 58 60 | 
             
                    Phonelib.phone_data[country][Core::DOUBLE_COUNTRY_PREFIX_FLAG] &&
         | 
| 59 | 
            -
                    !original_starts_with_plus?
         | 
| 61 | 
            +
                    !original_starts_with_plus? && original_s.start_with?(Phonelib.phone_data[country][Core::COUNTRY_CODE])
         | 
| 60 62 | 
             
                end
         | 
| 61 63 |  | 
| 62 64 | 
             
                # changes phone to with/without double country prefix
         | 
| @@ -66,6 +68,7 @@ module Phonelib | |
| 66 68 |  | 
| 67 69 | 
             
                  country_code = Phonelib.phone_data[country][Core::COUNTRY_CODE]
         | 
| 68 70 | 
             
                  if phone.start_with? country_code * 2
         | 
| 71 | 
            +
                    # remove double prefix in case it is there
         | 
| 69 72 | 
             
                    phone.gsub(cr("^#{country_code}"), '')
         | 
| 70 73 | 
             
                  else
         | 
| 71 74 | 
             
                    "#{country_code}#{phone}"
         | 
    
        data/lib/phonelib/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: phonelib
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.8.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Vadim Senderovich
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-04-11 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: rake
         | 
| @@ -94,6 +94,34 @@ dependencies: | |
| 94 94 | 
             
                - - ">="
         | 
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 96 | 
             
                    version: '0'
         | 
| 97 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            +
              name: benchmark-ips
         | 
| 99 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            +
                requirements:
         | 
| 101 | 
            +
                - - ">="
         | 
| 102 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            +
                    version: '0'
         | 
| 104 | 
            +
              type: :development
         | 
| 105 | 
            +
              prerelease: false
         | 
| 106 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            +
                requirements:
         | 
| 108 | 
            +
                - - ">="
         | 
| 109 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            +
                    version: '0'
         | 
| 111 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            +
              name: benchmark-memory
         | 
| 113 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 | 
            +
                requirements:
         | 
| 115 | 
            +
                - - ">="
         | 
| 116 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            +
                    version: '0'
         | 
| 118 | 
            +
              type: :development
         | 
| 119 | 
            +
              prerelease: false
         | 
| 120 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 | 
            +
                requirements:
         | 
| 122 | 
            +
                - - ">="
         | 
| 123 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            +
                    version: '0'
         | 
| 97 125 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 126 | 
             
              name: rack-cache
         | 
| 99 127 | 
             
              requirement: !ruby/object:Gem::Requirement
         |