phoney 0.1.3 → 0.2.0

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.
@@ -1,102 +0,0 @@
1
- class PhoneNumber
2
- attr_accessor :country_code, :prefix_code, :area_code, :number
3
-
4
- class << self
5
- def default_region
6
- @@region ||= Region[:us]
7
- end
8
-
9
- def default_region=(region)
10
- if region.is_a?(Region)
11
- @@region = region
12
- else
13
- @@region = Region[region.to_s.to_sym]
14
- end
15
- end
16
-
17
- def default_country_code
18
- @@country_code ||= default_region.country_code.to_s
19
- end
20
-
21
- def default_country_code=(country_code)
22
- @@country_code = country_code
23
- end
24
-
25
- def default_area_code
26
- @@area_code ||= nil
27
- end
28
-
29
- def default_area_code=(area_code)
30
- @@area_code = area_code
31
- end
32
-
33
- def version
34
- VERSION::STRING
35
- end
36
- end
37
-
38
- def initialize(params, region_code=nil)
39
- region = Region.find(region_code)
40
- country_code = region.country_code.to_s if region
41
-
42
- if params.is_a?(String)
43
- params = Parser.parse_to_parts(params, region_code)
44
- end
45
-
46
- self.number = params[:number].to_s
47
- # The rare case when some digits are in front of the area code
48
- self.prefix_code = params[:prefix_code].to_s
49
- # Can be empty, because some special numbers just don't have an area code (e.g. 911)
50
- self.area_code = params[:area_code].to_s || self.class.default_area_code
51
- self.country_code = params[:country_code].to_s || country_code || self.class.default_country_code
52
-
53
- raise "Must enter number" if(self.number.nil? || self.number.empty?)
54
- raise "Must enter country code or set default country code" if(self.country_code.nil? || self.country_code.empty?)
55
- end
56
-
57
- # Does this number belong to the default country code?
58
- def has_default_country_code?
59
- country_code.to_s == self.class.default_country_code.to_s
60
- end
61
-
62
- # Does this number belong to the default area code?
63
- def has_default_area_code?
64
- (!area_code.to_s.empty? && area_code.to_s == self.class.default_area_code.to_s)
65
- end
66
-
67
- # Formats the phone number.
68
- # If the method argument is a String, it is used as a format string, with the following fields being interpolated:
69
- #
70
- # * %c - country_code (385)
71
- # * %a - area_code (91)
72
- # * %n - number (5125486)
73
- #
74
- # If the method argument is a Symbol, we use one of the default formattings and let the parser do the rest.
75
- def format(fmt)
76
- if fmt.is_a?(Symbol)
77
- case fmt
78
- when :default
79
- Parser::parse("+#{country_code} #{prefix_code}#{area_code} #{number}", country_code)
80
- when :national
81
- Parser::parse("#{area_code} #{number}", country_code)
82
- when :local
83
- STDERR.puts "Warning: Using local format without setting a default area code!?" if PhoneNumber.default_area_code.nil?
84
- Parser::parse(number, country_code)
85
- else
86
- raise "The format #{fmt} doesn't exist'"
87
- end
88
- else
89
- format_number(fmt)
90
- end
91
- end
92
-
93
- # The default format is the canonical format: "+{country_code} {area_code} {number}"
94
- def to_s
95
- format(:default)
96
- end
97
-
98
- private
99
- def format_number(fmt)
100
- fmt.gsub("%c", country_code || "").gsub("%a", area_code || "").gsub("%n", number || "")
101
- end
102
- end
@@ -1,52 +0,0 @@
1
- class PhoneNumber
2
-
3
- module Utils
4
-
5
- # Returns the string formatted according to a pattern.
6
- #
7
- # Examples:
8
- # format('123456789', 'XXX-XX-XXXX')
9
- # => "123-45-6789"
10
- # format('12345', 'XXX-XX-XXXX')
11
- # => "123-45"
12
- #
13
- # Parameters:
14
- # string -- The string to be formatted.
15
- # pattern -- The format string, see above examples.
16
- # fixchar -- The single-character placeholder. Default is 'X'.
17
- def format(string, pattern, fixchar='X')
18
- raise ArgumentError.new("First parameter 'string' must be a String") unless string.is_a?(String)
19
- raise ArgumentError.new("#{fixchar} too long") if fixchar.length > 1
20
-
21
- slots = pattern.count(fixchar)
22
-
23
- # Return the string if it doesn't fit and we shouldn't even try,
24
- return string if string.length > slots
25
-
26
- # Make the result.
27
- scanner = ::StringScanner.new(pattern)
28
- regexp = Regexp.new(Regexp.escape(fixchar))
29
- index = 0
30
- result = ''
31
-
32
- while(!scanner.eos? && index < string.length)
33
- if scanner.scan(regexp) then
34
- result += string[index].chr
35
- index += 1
36
- else
37
- result += scanner.getch
38
- end
39
- end
40
-
41
- result
42
- end
43
-
44
- # Strips all non-numberpad characters from a string
45
- # => For example: "+45 (123) 023 1.1.1" -> "+45123023111"
46
- def normalize(string_with_number)
47
- string_with_number.gsub(/[^0-9+*#]/,'') unless string_with_number.nil?
48
- end
49
-
50
- end
51
-
52
- end
@@ -1,64 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe PhoneNumber::Parser do
4
-
5
- describe "with region set to [:br]" do
6
- before(:each) do
7
- PhoneNumber.default_region = :br
8
- end
9
-
10
- it "should format a [:br] (Brazil) phone number" do
11
- PhoneNumber::Parser.parse("03001234567").should == "0300 123-4567"
12
-
13
- PhoneNumber::Parser.parse("123").should == "123"
14
- PhoneNumber::Parser.parse("1234").should == "123-4"
15
- PhoneNumber::Parser.parse("12345").should == "123-45"
16
- PhoneNumber::Parser.parse("123456").should == "123-456"
17
- PhoneNumber::Parser.parse("1234567").should == "123-4567"
18
- PhoneNumber::Parser.parse("12345678").should == "1234-5678"
19
- PhoneNumber::Parser.parse("123456789").should == "(12) 3456-789"
20
- PhoneNumber::Parser.parse("1234567891").should == "(12) 3456-7891"
21
- PhoneNumber::Parser.parse("12345678910").should == "123 4567-8910"
22
- PhoneNumber::Parser.parse("123456789100").should == "(12 34) 5678-9100"
23
- end
24
-
25
- describe "dialing with international prefix" do
26
- it "should dial out with an international_prefix" do
27
- PhoneNumber::Parser.parse("+4940123456").should == "+49 40 123456"
28
- PhoneNumber::Parser.parse("+004940123456").should == "+00 49 40 123456"
29
- PhoneNumber::Parser.parse("00004940123456").should == "00 00 49 40 123456"
30
- PhoneNumber::Parser.parse("00014940123456").should == "00 01 49 40 123456"
31
- PhoneNumber::Parser.parse("00024940123456").should == "00 02 49 40 123456"
32
- end
33
-
34
- describe "given an any phone number" do
35
- it "should ignore non-number pad characters" do
36
- PhoneNumber::Parser.parse("!!+ 1 7--12@ 34 5.6").should == "+1 (712) 345-6"
37
- end
38
-
39
- it "should guess the current formatting correctly" do
40
- PhoneNumber::Parser.parse("+17").should == "+1 (7"
41
- PhoneNumber::Parser.parse("+171").should == "+1 (71"
42
- PhoneNumber::Parser.parse("+1712").should == "+1 (712"
43
- PhoneNumber::Parser.parse("+171234").should == "+1 (712) 34"
44
- PhoneNumber::Parser.parse("+1712345").should == "+1 (712) 345"
45
- PhoneNumber::Parser.parse("+17123456").should == "+1 (712) 345-6"
46
- end
47
- end
48
-
49
- describe "given an invalid phone number" do
50
- it "should use a reasonable default format" do
51
- # the number is too long for [:br]
52
- PhoneNumber::Parser.parse("1234567891001").should == "1234567891001"
53
-
54
- PhoneNumber::Parser.parse("+++494070123").should == "+++494070123"
55
- PhoneNumber::Parser.parse("++494070123").should == "++494070123"
56
- PhoneNumber::Parser.parse("+01494070123").should == "+01494070123"
57
- PhoneNumber::Parser.parse("+00000000").should == "+00 000000"
58
- PhoneNumber::Parser.parse("0000000000").should == "00 00 000000"
59
- end
60
- end
61
- end
62
- end
63
-
64
- end
@@ -1,73 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe PhoneNumber::Parser do
4
-
5
- describe "with region set to [:de] (Germany)" do
6
- before(:each) do
7
- PhoneNumber.default_region = :de
8
- end
9
-
10
- describe "given a valid phone number" do
11
- it "should output the correct format" do
12
- # with national prefix '0'
13
- PhoneNumber::Parser.parse("040789554488").should == "040 789554488"
14
- # without national prefix '0'
15
- PhoneNumber::Parser.parse("40789554488").should == "40 789554488"
16
- end
17
- end
18
-
19
- describe "without international prefix" do
20
- describe "given an any phone number" do
21
- it "should guess the current formatting correctly" do
22
- PhoneNumber::Parser.parse("04").should == "04"
23
- PhoneNumber::Parser.parse("040").should == "040"
24
- PhoneNumber::Parser.parse("0407").should == "040 7"
25
-
26
- PhoneNumber::Parser.parse("4").should == "4"
27
- PhoneNumber::Parser.parse("40").should == "40"
28
- PhoneNumber::Parser.parse("407").should == "40 7"
29
- end
30
- end
31
- end
32
-
33
- describe "with internatoinal prefix" do
34
- describe "given an any phone number" do
35
- it "should guess the current formatting correctly" do
36
- PhoneNumber::Parser.parse("+494").should == "+49 4"
37
- PhoneNumber::Parser.parse("+4940").should == "+49 40"
38
- PhoneNumber::Parser.parse("+49407").should == "+49 40 7"
39
- PhoneNumber::Parser.parse("+494070").should == "+49 40 70"
40
- PhoneNumber::Parser.parse("+4940705").should == "+49 40 705"
41
- PhoneNumber::Parser.parse("+49407055").should == "+49 40 7055"
42
- PhoneNumber::Parser.parse("+494070558").should == "+49 40 70558"
43
- end
44
- end
45
- end
46
-
47
- describe "with country specific internatoinal prefix" do
48
- describe "given an any phone number" do
49
- it "should guess the current formatting correctly" do
50
- PhoneNumber::Parser.parse("00494").should == "00 49 4"
51
- PhoneNumber::Parser.parse("004940").should == "00 49 40"
52
- PhoneNumber::Parser.parse("0049407").should == "00 49 40 7"
53
- PhoneNumber::Parser.parse("00494070").should == "00 49 40 70"
54
- PhoneNumber::Parser.parse("004940705").should == "00 49 40 705"
55
- PhoneNumber::Parser.parse("0049407055").should == "00 49 40 7055"
56
- PhoneNumber::Parser.parse("00494070558").should == "00 49 40 70558"
57
- end
58
- end
59
- end
60
-
61
- describe "given an invalid phone number" do
62
- it "should use a reasonable default format" do
63
- # the number is too long for [:de]
64
- PhoneNumber::Parser.parse("040123456789123456789").should == "040123456789123456789"
65
-
66
- PhoneNumber::Parser.parse("+++494070123").should == "+++494070123"
67
- PhoneNumber::Parser.parse("++494070123").should == "++494070123"
68
- PhoneNumber::Parser.parse("+01494070123").should == "+01494070123"
69
- end
70
- end
71
- end
72
-
73
- end
@@ -1,49 +0,0 @@
1
- require File.dirname(__FILE__) + '/../spec_helper'
2
-
3
- describe PhoneNumber::Parser do
4
-
5
- describe "with region set to [:us]" do
6
- before(:each) do
7
- PhoneNumber.default_region = :us
8
- end
9
-
10
- it "should format a [:us] (USA) phone number" do
11
- PhoneNumber::Parser.parse("5689780").should == "568-9780"
12
- PhoneNumber::Parser.parse("7045689780").should == "(704) 568-9780"
13
- PhoneNumber::Parser.parse("17045689780").should == "1 (704) 568-9780"
14
- end
15
-
16
- describe "dialing with international prefix" do
17
- it "should not dialout without the prefix" do
18
- PhoneNumber::Parser.parse("4940123456").should == "(494) 012-3456"
19
- end
20
-
21
- it "should dial out with an international_prefix" do
22
- PhoneNumber::Parser.parse("0114940123456").should == "011 49 40 123456"
23
- end
24
-
25
- describe "given an any phone number" do
26
- it "should ignore non-number pad characters" do
27
- PhoneNumber::Parser.parse("!!+ 1 7--12@ 34 5.6").should == "+1 (712) 345-6"
28
- end
29
-
30
- it "should guess the current formatting correctly" do
31
- PhoneNumber::Parser.parse("+17").should == "+1 (7"
32
- PhoneNumber::Parser.parse("+171").should == "+1 (71"
33
- PhoneNumber::Parser.parse("+1712").should == "+1 (712"
34
- PhoneNumber::Parser.parse("+171234").should == "+1 (712) 34"
35
- PhoneNumber::Parser.parse("+1712345").should == "+1 (712) 345"
36
- PhoneNumber::Parser.parse("+17123456").should == "+1 (712) 345-6"
37
- end
38
- end
39
-
40
- describe "given an invalid phone number" do
41
- it "should use a reasonable default format" do
42
- # the number is too long for [:us]
43
- PhoneNumber::Parser.parse("+1704123456789").should == "+1 704123456789"
44
- end
45
- end
46
- end
47
- end
48
-
49
- end
@@ -1,40 +0,0 @@
1
- require File.dirname(__FILE__) + '/spec_helper'
2
-
3
- describe PhoneNumber do
4
-
5
- describe "with region set to [:us]" do
6
- before(:each) do
7
- PhoneNumber.default_region = :us
8
- end
9
-
10
- it "should format a valid number according to [:us] formatting" do
11
- pn = PhoneNumber.new '7041234567'
12
- pn.to_s.should == "+1 (704) 123-4567"
13
- end
14
-
15
- it "should extract the country, area, and number correctly" do
16
- pn = PhoneNumber.new '7041234567'
17
-
18
- pn.country_code.should == "1"
19
- pn.area_code.should == "704"
20
- pn.number.should == "1234567"
21
- end
22
- end
23
-
24
- describe "using a number that has a prefix_code before the area code" do
25
- before(:each) do
26
- @pn = PhoneNumber.new("+55 12 34 5678-9012")
27
- end
28
-
29
- it "should have the correct prefix/area code assigned" do
30
- @pn.prefix_code.should == "12"
31
- @pn.area_code.should == "34"
32
- @pn.number == "56789012"
33
- end
34
-
35
- it "should output the correct canonical format" do
36
- @pn.to_s.should == "+55 (12 34) 5678-9012"
37
- end
38
- end
39
-
40
- end
@@ -1,4 +0,0 @@
1
- --colour
2
- --format progress
3
- --loadby mtime
4
- --reverse
@@ -1,4 +0,0 @@
1
- $:.unshift(File.dirname(__FILE__) + '/../lib')
2
-
3
- require 'rubygems'
4
- require 'phoney'