phoney 0.1.3 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +1 -5
- data/Gemfile.lock +3 -11
- data/{LICENCE → MIT-LICENCE} +1 -1
- data/README.rdoc +16 -20
- data/Rakefile +9 -25
- data/lib/data/regions.bin +0 -0
- data/lib/phoney.rb +103 -6
- data/lib/phoney/formatter.rb +144 -0
- data/lib/phoney/parser.rb +62 -218
- data/lib/phoney/region.rb +19 -35
- data/lib/phoney/rules.rb +56 -0
- data/lib/phoney/vanity.rb +31 -0
- data/lib/phoney/version.rb +2 -10
- data/phoney.gemspec +15 -43
- data/resources/Default.phoneformat +0 -0
- data/resources/liveinput_tester.rb +32 -0
- data/resources/phoneformat_converter.rb +122 -0
- data/resources/tasks/region_data.rake +23 -0
- data/test/formatter_test.rb +91 -0
- data/test/lib/phoney/test_helper.rb +6 -0
- data/test/phone_number_test.rb +4 -0
- data/test/regions/br_test.rb +33 -0
- data/test/regions/de_test.rb +45 -0
- data/test/regions/fr_test.rb +17 -0
- data/test/regions/ni_test.rb +14 -0
- data/test/regions/th_test.rb +38 -0
- data/test/regions/tw_test.rb +28 -0
- data/test/regions/ua_test.rb +18 -0
- data/test/regions/us_test.rb +44 -0
- metadata +45 -45
- data/lib/data/regions.yml +0 -19601
- data/lib/phoney/base.rb +0 -102
- data/lib/phoney/utils.rb +0 -52
- data/spec/parser/br_spec.rb +0 -64
- data/spec/parser/de_spec.rb +0 -73
- data/spec/parser/us_spec.rb +0 -49
- data/spec/phone_number_spec.rb +0 -40
- data/spec/spec.opts +0 -4
- data/spec/spec_helper.rb +0 -4
data/lib/phoney/region.rb
CHANGED
@@ -1,39 +1,30 @@
|
|
1
|
-
require '
|
1
|
+
require 'set'
|
2
2
|
|
3
|
-
|
4
|
-
|
3
|
+
module Phoney
|
5
4
|
class Region
|
6
|
-
|
5
|
+
REGION_FILE = File.join(File.dirname(__FILE__), '..', 'data', 'regions.bin')
|
7
6
|
|
8
7
|
attr_reader :country_code, :country_abbr
|
9
|
-
attr_reader :
|
8
|
+
attr_reader :trunk_prefixes, :dialout_prefixes
|
10
9
|
attr_reader :rule_sets
|
11
10
|
|
12
11
|
class << self
|
13
12
|
def load
|
14
|
-
data_file = File.join(File.dirname(__FILE__), '..', 'data', 'regions.yml')
|
15
|
-
|
16
13
|
@@regions = []
|
17
|
-
|
18
|
-
new_region = Region.new
|
19
|
-
@@regions.push
|
14
|
+
Marshal.load(File.read(REGION_FILE)).each_pair do |key, region_hash|
|
15
|
+
new_region = Region.new region_hash
|
16
|
+
@@regions.push new_region
|
20
17
|
end
|
21
18
|
@@regions
|
22
19
|
end
|
23
20
|
|
24
21
|
def all
|
25
|
-
|
26
|
-
|
27
|
-
load
|
22
|
+
@@regions.empty? ? load : @@regions
|
28
23
|
end
|
29
24
|
|
30
|
-
def find(param)
|
31
|
-
return nil unless param
|
32
|
-
|
33
|
-
param = param.to_sym
|
34
|
-
|
25
|
+
def find(param)
|
35
26
|
all.detect do |region|
|
36
|
-
region.country_code == param || region.country_abbr == param
|
27
|
+
region.country_code.to_s == param.to_s || region.country_abbr.to_s == param.to_s
|
37
28
|
end
|
38
29
|
end
|
39
30
|
|
@@ -42,29 +33,22 @@ class PhoneNumber
|
|
42
33
|
end
|
43
34
|
end
|
44
35
|
|
45
|
-
def initialize(
|
46
|
-
@country_abbr =
|
47
|
-
@country_code =
|
36
|
+
def initialize(options={})
|
37
|
+
@country_abbr = options[:country_abbr]
|
38
|
+
@country_code = options[:country_code]
|
48
39
|
|
49
|
-
@
|
50
|
-
@dialout_prefixes =
|
40
|
+
@trunk_prefixes = options[:trunk_prefixes]
|
41
|
+
@dialout_prefixes = options[:dialout_prefixes]
|
51
42
|
|
52
|
-
@rule_sets =
|
43
|
+
@rule_sets = SortedSet.new
|
53
44
|
|
54
|
-
|
55
|
-
|
56
|
-
if(rule_set[:rules])
|
57
|
-
rule_set[:rules].each_with_index do |rule,index|
|
58
|
-
rule.merge!(:index => index)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
45
|
+
(options[:rule_sets]||[]).each do |rule_group|
|
46
|
+
@rule_sets.add RuleGroup.new(rule_group[:significant_digits], rule_group[:rules])
|
62
47
|
end
|
63
48
|
end
|
64
49
|
|
65
50
|
def to_s
|
66
|
-
|
51
|
+
country_abbr
|
67
52
|
end
|
68
53
|
end
|
69
|
-
|
70
54
|
end
|
data/lib/phoney/rules.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
module Phoney
|
2
|
+
class RuleGroup
|
3
|
+
attr_reader :significant_digits, :rules
|
4
|
+
|
5
|
+
def initialize(significant_digits, rules=[])
|
6
|
+
@significant_digits = significant_digits
|
7
|
+
@rules = []
|
8
|
+
|
9
|
+
rules.each do |rule|
|
10
|
+
add_rule Rule.new(rule)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
def add_rule(rule)
|
15
|
+
@rules.push rule
|
16
|
+
end
|
17
|
+
|
18
|
+
def delete_rule(rule)
|
19
|
+
@rules.delete rule
|
20
|
+
end
|
21
|
+
|
22
|
+
def <=>(other)
|
23
|
+
other.significant_digits <=> significant_digits
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class Rule
|
28
|
+
attr_reader :max_digits, :min_value, :max_value, :areacode_length, :areacode_offset, :pattern
|
29
|
+
|
30
|
+
def initialize(options={})
|
31
|
+
@max_digits = options[:max_digits]
|
32
|
+
|
33
|
+
@min_value = options[:min_value]
|
34
|
+
@max_value = options[:max_value]
|
35
|
+
|
36
|
+
@areacode_length = options[:areacode_length]
|
37
|
+
@areacode_offset = options[:areacode_offset]
|
38
|
+
|
39
|
+
@pattern = options[:pattern]
|
40
|
+
@flags = options[:flags]
|
41
|
+
end
|
42
|
+
|
43
|
+
def <=>(other)
|
44
|
+
max_digits <=> other.max_digits
|
45
|
+
end
|
46
|
+
|
47
|
+
def matches?(number)
|
48
|
+
value = number.to_s[0, max_value.to_s.length].to_i
|
49
|
+
(min_value..max_value).member?(value) && number.length <= max_digits
|
50
|
+
end
|
51
|
+
|
52
|
+
def flags
|
53
|
+
@flags || []
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Phoney
|
2
|
+
# Helper module that maps vanity numbers to digit numbers.
|
3
|
+
module Vanity
|
4
|
+
VANITY_REGEXP = /\A\d{3}[a-zA-Z]{6,12}\Z/
|
5
|
+
VANITY_NORMALIZING_REGEXP = /^0*|[^\d\w]/
|
6
|
+
|
7
|
+
# Returns a char to number mapping string for the String#tr method.
|
8
|
+
def self.mapping
|
9
|
+
@@mapping ||= [
|
10
|
+
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.freeze,
|
11
|
+
'2223334445556667777888999922233344455566677778889999'.freeze
|
12
|
+
]
|
13
|
+
end
|
14
|
+
|
15
|
+
# Replaces (and normalizes) vanity characters of passed number with correct digits.
|
16
|
+
def self.replace number
|
17
|
+
number.tr *mapping
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns true if there is a character in the number
|
21
|
+
# after the first four numbers.
|
22
|
+
def self.vanity? number
|
23
|
+
!(normalized(number) =~ VANITY_REGEXP).nil?
|
24
|
+
end
|
25
|
+
|
26
|
+
# Vanity-Normalized.
|
27
|
+
def self.normalized number
|
28
|
+
number.gsub VANITY_NORMALIZING_REGEXP, ''
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
data/lib/phoney/version.rb
CHANGED
data/phoney.gemspec
CHANGED
@@ -1,48 +1,20 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
$:.push File.expand_path("../lib", __FILE__)
|
4
|
-
|
5
|
-
# Maintain your gem's version:
|
1
|
+
$:.unshift File.expand_path("../lib", __FILE__)
|
6
2
|
require "phoney/version"
|
7
3
|
|
8
4
|
Gem::Specification.new do |s|
|
9
|
-
s.name =
|
10
|
-
s.version =
|
11
|
-
|
12
|
-
s.
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.description =
|
16
|
-
|
17
|
-
s.
|
18
|
-
|
19
|
-
|
20
|
-
s.
|
21
|
-
|
22
|
-
|
23
|
-
"LICENCE",
|
24
|
-
"README.rdoc",
|
25
|
-
"Rakefile",
|
26
|
-
"lib/data/regions.yml",
|
27
|
-
"lib/phoney.rb",
|
28
|
-
"lib/phoney/base.rb",
|
29
|
-
"lib/phoney/parser.rb",
|
30
|
-
"lib/phoney/region.rb",
|
31
|
-
"lib/phoney/utils.rb",
|
32
|
-
"lib/phoney/version.rb",
|
33
|
-
"phoney.gemspec",
|
34
|
-
"spec/parser/br_spec.rb",
|
35
|
-
"spec/parser/de_spec.rb",
|
36
|
-
"spec/parser/us_spec.rb",
|
37
|
-
"spec/phone_number_spec.rb",
|
38
|
-
"spec/spec.opts",
|
39
|
-
"spec/spec_helper.rb"
|
40
|
-
]
|
41
|
-
s.homepage = %q{http://github.com/habermann24/phoney}
|
42
|
-
s.require_paths = ["lib"]
|
43
|
-
s.summary = %q{Ruby library that formats phone numbers.}
|
44
|
-
|
45
|
-
s.add_development_dependency(%q<rake>, [">= 0"])
|
46
|
-
s.add_development_dependency(%q<rspec>, ["= 2.11.0"])
|
5
|
+
s.name = 'phoney'
|
6
|
+
s.version = Phoney::VERSION
|
7
|
+
s.author = 'Jan Habermann'
|
8
|
+
s.email = 'jan@habermann24.com'
|
9
|
+
s.homepage = 'http://github.com/habermann24/phoney'
|
10
|
+
s.summary = 'Ruby library that formats phone numbers.'
|
11
|
+
s.description = 'Ruby library that parses a phone number and automatically formats it correctly, depending on the country/locale you set.'
|
12
|
+
|
13
|
+
s.required_rubygems_version = '>= 1.9'
|
14
|
+
|
15
|
+
s.add_development_dependency 'rake'
|
16
|
+
s.add_development_dependency 'minitest'
|
17
|
+
|
18
|
+
s.files = Dir["#{File.dirname(__FILE__)}/**/*"]
|
47
19
|
end
|
48
20
|
|
Binary file
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'phoney'
|
3
|
+
|
4
|
+
require 'io/console'
|
5
|
+
|
6
|
+
Phoney.region = ARGV.first||'us'
|
7
|
+
|
8
|
+
input = ''
|
9
|
+
prompt = "(Ctrl-C to exit) #[#{Phoney.region.country_abbr}]: "
|
10
|
+
print prompt
|
11
|
+
|
12
|
+
while ch = STDIN.getch do
|
13
|
+
case ch.ord
|
14
|
+
when 3 # Ctrl-C
|
15
|
+
break
|
16
|
+
when 127 # Backspace
|
17
|
+
input = input[0..-2]
|
18
|
+
print "\b"
|
19
|
+
else
|
20
|
+
input << ch
|
21
|
+
end
|
22
|
+
|
23
|
+
output = Phoney::Parser.parse input
|
24
|
+
|
25
|
+
print "\r#{prompt}"
|
26
|
+
print output
|
27
|
+
|
28
|
+
print " "*100
|
29
|
+
print "\b"*100
|
30
|
+
end
|
31
|
+
|
32
|
+
puts "\n^C Exiting - Goodbye"
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
module PhoneformatConverter
|
4
|
+
class Country
|
5
|
+
attr_accessor :international_prefix, :code, :offset
|
6
|
+
attr_accessor :desc_len, :desc_count, :disp_scheme_offset, :rules_sets_count
|
7
|
+
attr_accessor :trunk_prefixes
|
8
|
+
attr_accessor :dialout_prefixes
|
9
|
+
end
|
10
|
+
|
11
|
+
def self.convert(file)
|
12
|
+
io = File.open(file, "rb")
|
13
|
+
num_countries = io.read(4).unpack("V")[0]
|
14
|
+
countries = []
|
15
|
+
|
16
|
+
(1..num_countries).each do
|
17
|
+
country = Country.new
|
18
|
+
country.international_prefix, country.code, country.offset = io.read(12).unpack("a4/a4/V")
|
19
|
+
|
20
|
+
country.international_prefix = country.international_prefix.delete("\000")
|
21
|
+
country.code = country.code.delete("\000")
|
22
|
+
|
23
|
+
countries << country
|
24
|
+
end
|
25
|
+
|
26
|
+
data = io.read
|
27
|
+
|
28
|
+
countries.each do |c|
|
29
|
+
c.desc_len, c.desc_count, c.disp_scheme_offset, c.rules_sets_count = data[c.offset, 12].unpack("v/v/V/V")
|
30
|
+
|
31
|
+
local_nat_raw = data[c.offset+12, c.desc_len-12].unpack("A*")
|
32
|
+
|
33
|
+
c.trunk_prefixes = local_nat_raw.to_s.delete('"[]').split('\0\0').first.split('\0').reject(&:empty?) rescue []
|
34
|
+
c.dialout_prefixes = local_nat_raw.to_s.delete('"[]').split('\0\0').last.split('\0').reject(&:empty?) rescue []
|
35
|
+
|
36
|
+
temp_dialout_prefixes = c.dialout_prefixes
|
37
|
+
c.dialout_prefixes = []
|
38
|
+
|
39
|
+
temp_dialout_prefixes.each do |p|
|
40
|
+
if p.start_with?('->')
|
41
|
+
c.dialout_prefixes.last << p
|
42
|
+
else
|
43
|
+
c.dialout_prefixes << p
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
rules_offset = c.offset+c.desc_len # points to the rules section
|
48
|
+
scheme_base = rules_offset+c.disp_scheme_offset # points to the scheme section
|
49
|
+
|
50
|
+
puts "#{c.code}:"
|
51
|
+
puts " :country_code: #{c.international_prefix}"
|
52
|
+
puts " :country_abbr: #{c.code}"
|
53
|
+
puts " :trunk_prefixes: #{c.trunk_prefixes}"
|
54
|
+
puts " :dialout_prefixes: #{c.dialout_prefixes}"
|
55
|
+
puts " :rule_sets:"
|
56
|
+
|
57
|
+
smallest_scheme_offset = nil
|
58
|
+
|
59
|
+
(0..(c.rules_sets_count-1)).each do |rule_set_idx|
|
60
|
+
digits, rules_count = data[rules_offset, 4].unpack("v/v")
|
61
|
+
|
62
|
+
puts " - :significant_digits: #{digits}"
|
63
|
+
puts " :rules:"
|
64
|
+
|
65
|
+
# iterate over individual rules
|
66
|
+
(0..(rules_count-1)).each do |rule_idx|
|
67
|
+
# each rule is 16 bytes
|
68
|
+
prefix_min,prefix_max,unkn1,total_digits,areacode_offset,areacode_length,type,unkn2,scheme_offset = data[rules_offset+4+(rule_idx*16), 16].unpack("V/V/C/C/C/C/C/C/v")
|
69
|
+
|
70
|
+
scheme_length = data[(scheme_base+scheme_offset)..-1].index("\x00")
|
71
|
+
comment_length = data[(scheme_base+scheme_offset+scheme_length+1)..-1].index("\x00")
|
72
|
+
|
73
|
+
# now extract the rule scheme and comment
|
74
|
+
scheme = data[scheme_base+scheme_offset, scheme_length]
|
75
|
+
comment = data[scheme_base+scheme_offset+scheme_length+1, comment_length]
|
76
|
+
|
77
|
+
smallest_scheme_offset ||= scheme_offset
|
78
|
+
smallest_scheme_offset = [smallest_scheme_offset, scheme_offset].min
|
79
|
+
|
80
|
+
flags = []
|
81
|
+
|
82
|
+
types_bin = ("%08b" % type).split('').reverse
|
83
|
+
types_bin.each_with_index do |t,i|
|
84
|
+
if t.to_i == 1
|
85
|
+
case 2**i
|
86
|
+
when 1
|
87
|
+
flags << :n
|
88
|
+
when 2
|
89
|
+
flags << :c
|
90
|
+
when 4
|
91
|
+
flags << :toll_free
|
92
|
+
when 8
|
93
|
+
flags << :local
|
94
|
+
when 16
|
95
|
+
flags << :unknown_16
|
96
|
+
when 32
|
97
|
+
flags << :unknown_32
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
puts " - :min_value: #{prefix_min}"
|
103
|
+
puts " :max_value: #{prefix_max}"
|
104
|
+
puts " :max_digits: #{total_digits}"
|
105
|
+
puts " :areacode_length: #{areacode_length}"
|
106
|
+
puts " :areacode_offset: #{areacode_offset}"
|
107
|
+
puts " :unknown1: #{unkn1}"
|
108
|
+
puts " :unknown2: #{unkn2}"
|
109
|
+
puts " :pattern: \"#{scheme}\""
|
110
|
+
puts " :flags:"
|
111
|
+
flags.each do |flag|
|
112
|
+
puts " - :#{flag}"
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
rules_offset += (4 + rules_count*16) # move to next rules-set
|
117
|
+
end
|
118
|
+
|
119
|
+
pre_scheme = data[scheme_base, smallest_scheme_offset||0]
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require './resources/phoneformat_converter'
|
3
|
+
|
4
|
+
namespace :phoney do
|
5
|
+
desc 'Generate a regions YAML file from a .phoneformat binary'
|
6
|
+
task :generate_regions_yml do
|
7
|
+
raise 'You must provide .phoneformat FILE for the task to run' unless ENV['FILE']
|
8
|
+
PhoneformatConverter.convert(ENV['FILE'])
|
9
|
+
end
|
10
|
+
|
11
|
+
desc 'Generate a new regions data file from a .phoneformat binary'
|
12
|
+
task :generate_regions_bin do
|
13
|
+
raise 'You must provide .phoneformat FILE for the task to run' unless ENV['FILE']
|
14
|
+
|
15
|
+
output = StringIO.new
|
16
|
+
$stdout = output
|
17
|
+
|
18
|
+
PhoneformatConverter.convert(ENV['FILE'])
|
19
|
+
|
20
|
+
$stdout = STDOUT
|
21
|
+
puts Marshal.dump(YAML.load(output.string))
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'phoney/test_helper'
|
2
|
+
|
3
|
+
class FormatterTest < MiniTest::Unit::TestCase
|
4
|
+
include Phoney::Formatter
|
5
|
+
|
6
|
+
def setup
|
7
|
+
Phoney.region = 'us'
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_international_call_prefix_for_us_region
|
11
|
+
assert_equal "0", international_call_prefix_for("0")
|
12
|
+
assert_equal "01", international_call_prefix_for("01")
|
13
|
+
assert_equal "011", international_call_prefix_for("011")
|
14
|
+
assert_equal "011", international_call_prefix_for("011999")
|
15
|
+
assert_equal nil, international_call_prefix_for("123")
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_international_call_prefix_for_br_region
|
19
|
+
assert_equal "+00", international_call_prefix_for("+0055123", region: Phoney::Region["br"])
|
20
|
+
assert_equal "00 55", international_call_prefix_for("0055123", region: Phoney::Region["br"])
|
21
|
+
assert_equal "00 12", international_call_prefix_for("0012456", region: Phoney::Region["br"])
|
22
|
+
assert_equal nil, international_call_prefix_for("03001234567", region: Phoney::Region["br"])
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_international_call_prefix_with_plus_sign
|
26
|
+
assert_equal "+011", international_call_prefix_for("+011")
|
27
|
+
assert_equal "+", international_call_prefix_for("+123")
|
28
|
+
assert_equal "+", international_call_prefix_for("+")
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_formatting_international_call_with_non_exiting_country
|
32
|
+
assert_equal "+99", format("+99", "###")
|
33
|
+
|
34
|
+
assert_equal "+99", Phoney::Parser.parse("+99")
|
35
|
+
assert_equal "+999999999", Phoney::Parser.parse("+999999999")
|
36
|
+
|
37
|
+
assert_equal "011 99", Phoney::Parser.parse("01199")
|
38
|
+
assert_equal "011 999999999", Phoney::Parser.parse("011999999999")
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_international_calling_prefix_for_empty_number
|
42
|
+
assert_equal nil, international_call_prefix_for("")
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_country_code_extraction
|
46
|
+
assert_equal "49", extract_country_code("+49")
|
47
|
+
assert_equal "49", extract_country_code("01149")
|
48
|
+
assert_equal "49", extract_country_code("01149123456")
|
49
|
+
assert_equal "1", extract_country_code("0111234567")
|
50
|
+
assert_equal nil, extract_country_code("03001234567", region: Phoney::Region["br"])
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_nonexisting_country_code
|
54
|
+
assert_equal nil, extract_country_code("+99")
|
55
|
+
assert_equal nil, extract_country_code("01199")
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_trunk_prefix_extraction
|
59
|
+
assert_equal "1", extract_trunk_prefix("+117041234567")
|
60
|
+
assert_equal "0", extract_trunk_prefix("+49040")
|
61
|
+
assert_equal nil, extract_trunk_prefix("+1705")
|
62
|
+
assert_equal nil, extract_trunk_prefix("+1")
|
63
|
+
assert_equal nil, extract_trunk_prefix("+4940")
|
64
|
+
|
65
|
+
assert_equal "1", extract_trunk_prefix("011117041234567")
|
66
|
+
assert_equal nil, extract_trunk_prefix("011705")
|
67
|
+
assert_equal "0", extract_trunk_prefix("01149040")
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_format_international_number_with_trunk_prefix
|
71
|
+
assert_equal "+1 (1) (704) 205-1234", Phoney::Parser.parse("+117042051234")
|
72
|
+
assert_equal "+49 (0) 40 1234567", Phoney::Parser.parse("+490401234567")
|
73
|
+
assert_equal "011 1 (1) (704) 205-1234", Phoney::Parser.parse("011117042051234")
|
74
|
+
assert_equal "011 49 (0) 40 1234567", Phoney::Parser.parse("011490401234567")
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_format_string_without_prefixes
|
78
|
+
assert_equal "123", format("123", "n ###")
|
79
|
+
assert_equal "123", format("123", "c ###")
|
80
|
+
assert_equal "123", format("123", "c n ###")
|
81
|
+
end
|
82
|
+
|
83
|
+
def test_format_number_with_double_international_prefix
|
84
|
+
assert_equal "+011 49 40", Phoney::Parser.parse("+0114940")
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_international_prefix_with_plus_and_trunk_prefix_start
|
88
|
+
assert_equal "+0", international_call_prefix_for("+0", region: Phoney::Region["de"])
|
89
|
+
assert_equal "+00", international_call_prefix_for("+00", region: Phoney::Region["de"])
|
90
|
+
end
|
91
|
+
end
|