global_phone 1.0.0 → 1.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: fece23d3eace739f32573747853124109fc041e8
4
- data.tar.gz: d826cae724c7d1e985a1202cfd1eb391a68a719e
3
+ metadata.gz: 22b1542e445e1f158ffaeb0115d0cdc5de251246
4
+ data.tar.gz: 69f61d4a5d562aeb508c75090d3cbb8af057da66
5
5
  SHA512:
6
- metadata.gz: 9fa62cde3524560b518b052fc641e2630b946b53acb0edfda89394e2e5073430a420b11ec7892da19796414323cc7cf994810c7573a5c1bc36a419c8978b49d5
7
- data.tar.gz: 4a74924a77e4c1560d1027825d65d5dd0f239fbb2b8f173f83c8157d7d934415db14a9f17cbecec034620ba763795982bfc8541b0d1fb22d8749b593115a70fd
6
+ metadata.gz: 80b970b279a2c53777b6e8dc58c18eff30e0a0e587f045b39587fe33383de8d39858b803951ff4c6b55dace57dcec1841506a9fcbb5572e36b611091b5c162a8
7
+ data.tar.gz: 29732d6e2760cbf943425355a304bdd45d28fd93cbc5ec2bb042d97104272de98eb4aaa7a96a7dca730605cd80c037981b79df0c932d207ba72546d81287de2d
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  GlobalPhone parses, validates, and formats local and international phone numbers according to the [E.164 standard](http://en.wikipedia.org/wiki/E.164).
4
4
 
5
- **Store and display phone numbers in your app.** Accept phone number input in national or international format. Convert phone numbers to international format (`+13125551212`) for storage and retrieval. Present numbers in national format (`(312) 555-1212`) in your UI.
5
+ **Store and display phone numbers in your app.** Accept phone number input in national or international format. Convert phone numbers to international strings (`+13125551212`) for storage and retrieval. Present numbers in national format (`(312) 555-1212`) in your UI.
6
6
 
7
7
  **Designed with the future in mind.** GlobalPhone uses format specifications from Google's open-source [libphonenumber](http://code.google.com/p/libphonenumber/) database. No need to upgrade the library when a new phone format is introduced—just generate a new copy of the database and check it into your app.
8
8
 
@@ -22,87 +22,109 @@ GlobalPhone parses, validates, and formats local and international phone numbers
22
22
 
23
23
  3. Tell GlobalPhone where to find the database. For example, in a Rails app, create an initializer in `config/initializers/global_phone.rb`:
24
24
 
25
- require 'global_phone'
26
- GlobalPhone.db_path = Rails.root.join('db/global_phone.json')
25
+ ```ruby
26
+ require 'global_phone'
27
+ GlobalPhone.db_path = Rails.root.join('db/global_phone.json')
28
+ ```
27
29
 
28
30
  ## Examples
29
31
 
30
32
  Parse an international number string into a `GlobalPhone::Number` object:
31
33
 
32
- >> number = GlobalPhone.parse('+1-312-555-1212')
33
- => #<GlobalPhone::Number territory=#<GlobalPhone::Territory country_code=1 name=US> national_string="3125551212">
34
+ ```ruby
35
+ number = GlobalPhone.parse('+1-312-555-1212')
36
+ # => #<GlobalPhone::Number territory=#<GlobalPhone::Territory country_code=1 name=US> national_string="3125551212">
37
+ ```
34
38
 
35
39
  Query the country code and likely territory name of the number:
36
40
 
37
- >> number.country_code
38
- => "1"
41
+ ```ruby
42
+ number.country_code
43
+ # => "1"
39
44
 
40
- >> number.territory.name
41
- => "US"
45
+ number.territory.name
46
+ # => "US"
47
+ ```
42
48
 
43
49
  Present the number in national and international formats:
44
50
 
45
- >> number.national_format
46
- => "(312) 555-1212"
51
+ ```ruby
52
+ number.national_format
53
+ # => "(312) 555-1212"
47
54
 
48
- >> number.international_format
49
- => "+1 312-555-1212"
55
+ number.international_format
56
+ # => "+1 312-555-1212"
57
+ ```
50
58
 
51
59
  Is the number valid? (Note: this is not definitive. For example, the number here is "valid" by format, but there are no US numbers that start with 555. The `valid?` method may return false positives, but *should not* return false negatives unless the database is out of date.)
52
60
 
53
- >> number.valid?
54
- true
61
+ ```ruby
62
+ number.valid?
63
+ # => true
64
+ ```
55
65
 
56
66
  Get the number's normalized E.164 international string:
57
67
 
58
- >> number.international_string
59
- => "+13125551212"
68
+ ```ruby
69
+ number.international_string
70
+ # => "+13125551212"
71
+ ```
60
72
 
61
73
  Parse a number in national format for a given territory:
62
74
 
63
- >> number = GlobalPhone.parse("(0) 20-7031-3000", :gb)
64
- => #<GlobalPhone::Number territory=#<GlobalPhone::Territory country_code=44 name=GB> national_string="2070313000">
75
+ ```ruby
76
+ number = GlobalPhone.parse("(0) 20-7031-3000", :gb)
77
+ # => #<GlobalPhone::Number territory=#<GlobalPhone::Territory country_code=44 name=GB> national_string="2070313000">
78
+ ```
65
79
 
66
80
  Parse an international number using a territory's international dialing prefix:
67
81
 
68
- >> number = GlobalPhone.parse("00 1 3125551212", :gb)
69
- => #<GlobalPhone::Number territory=#<GlobalPhone::Territory country_code=1 name=US> national_string="3125551212">
82
+ ```ruby
83
+ number = GlobalPhone.parse("00 1 3125551212", :gb)
84
+ # => #<GlobalPhone::Number territory=#<GlobalPhone::Territory country_code=1 name=US> national_string="3125551212">
85
+ ```
70
86
 
71
87
  Set the default territory to Great Britain (territory names are [ISO 3166-1 Alpha-2](http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2) codes):
72
88
 
73
- >> GlobalPhone.default_territory_name = :gb
74
- => :gb
89
+ ```ruby
90
+ GlobalPhone.default_territory_name = :gb
91
+ # => :gb
75
92
 
76
- >> GlobalPhone.parse("(0) 20-7031-3000")
77
- => #<GlobalPhone::Number territory=#<GlobalPhone::Territory country_code=44 name=GB> national_string="2070313000">
93
+ GlobalPhone.parse("(0) 20-7031-3000")
94
+ # => #<GlobalPhone::Number territory=#<GlobalPhone::Territory country_code=44 name=GB> national_string="2070313000">
95
+ ```
78
96
 
79
97
  Shortcuts for validating a phone number:
80
98
 
81
- >> GlobalPhone.validate("+1 312-555-1212")
82
- => true
99
+ ```ruby
100
+ GlobalPhone.validate("+1 312-555-1212")
101
+ # => true
83
102
 
84
- >> GlobalPhone.validate("+442070313000")
85
- => true
103
+ GlobalPhone.validate("+442070313000")
104
+ # => true
86
105
 
87
- >> GlobalPhone.validate("(0) 20-7031-3000")
88
- => false
106
+ GlobalPhone.validate("(0) 20-7031-3000")
107
+ # => false
89
108
 
90
- >> GlobalPhone.validate("(0) 20-7031-3000", :gb)
91
- => true
109
+ GlobalPhone.validate("(0) 20-7031-3000", :gb)
110
+ # => true
111
+ ```
92
112
 
93
113
  Shortcuts for normalizing a phone number in E.164 format:
94
114
 
95
- >> GlobalPhone.normalize("(312) 555-1212")
96
- => "+13125551212"
115
+ ```ruby
116
+ GlobalPhone.normalize("(312) 555-1212")
117
+ # => "+13125551212"
97
118
 
98
- >> GlobalPhone.normalize("+442070313000")
99
- => "+442070313000"
119
+ GlobalPhone.normalize("+442070313000")
120
+ # => "+442070313000"
100
121
 
101
- >> GlobalPhone.normalize("(0) 20-7031-3000")
102
- => nil
122
+ GlobalPhone.normalize("(0) 20-7031-3000")
123
+ # => nil
103
124
 
104
- >> GlobalPhone.normalize("(0) 20-7031-3000", :gb)
105
- => "+442070313000"
125
+ GlobalPhone.normalize("(0) 20-7031-3000", :gb)
126
+ # => "+442070313000"
127
+ ```
106
128
 
107
129
  ## Caveats
108
130
 
@@ -124,6 +146,12 @@ GlobalPhone is heavily inspired by Andreas Gal's [PhoneNumber.js](https://github
124
146
 
125
147
  ### Version History
126
148
 
149
+ **1.0.1** (May 29, 2013)
150
+
151
+ * GlobalPhone::Number#to_s returns the E.164 international string.
152
+ * Ensure GlobalPhone::Number always returns strings for #national_format, #international_format, and #international_string, regardless of validity.
153
+ * Relax format restrictions to more loosely match available national number patterns.
154
+
127
155
  **1.0.0** (May 28, 2013)
128
156
 
129
157
  * Initial public release.
@@ -1,7 +1,7 @@
1
1
  require 'global_phone/context'
2
2
 
3
3
  module GlobalPhone
4
- VERSION = '1.0.0'
4
+ VERSION = '1.0.1'
5
5
 
6
6
  class Error < ::StandardError; end
7
7
  class NoDatabaseError < Error; end
@@ -8,14 +8,14 @@ module GlobalPhone
8
8
  field 3, :national_prefix_formatting_rule
9
9
  field 4, :international_format_rule, :fallback => :national_format_rule
10
10
 
11
- def match(national_string)
12
- return false if leading_digits && national_string !~ leading_digits
11
+ def match(national_string, match_leading_digits = true)
12
+ return false if match_leading_digits && leading_digits && national_string !~ leading_digits
13
13
  national_string =~ pattern
14
14
  end
15
15
 
16
16
  def format_replacement_string(type)
17
17
  format_rule = send(:"#{type}_format_rule")
18
- format_rule.gsub("$", "\\") if format_rule && format_rule != "NA"
18
+ format_rule.to_s.gsub("$", "\\") unless format_rule == "NA"
19
19
  end
20
20
 
21
21
  def apply(national_string, type)
@@ -33,22 +33,22 @@ module GlobalPhone
33
33
  @national_format ||= begin
34
34
  if format && result = format.apply(national_string, :national)
35
35
  apply_national_prefix_format(result)
36
+ else
37
+ national_string
36
38
  end
37
39
  end
38
40
  end
39
41
 
40
42
  def international_string
41
- @international_string ||= begin
42
- if international_format
43
- international_format.gsub(NON_DIALABLE_CHARS, "")
44
- end
45
- end
43
+ @international_string ||= international_format.gsub(NON_DIALABLE_CHARS, "")
46
44
  end
47
45
 
48
46
  def international_format
49
47
  @international_format ||= begin
50
48
  if format && formatted_number = format.apply(national_string, :international)
51
49
  "+#{country_code} #{formatted_number}"
50
+ else
51
+ "+#{country_code} #{national_string}"
52
52
  end
53
53
  end
54
54
  end
@@ -61,9 +61,18 @@ module GlobalPhone
61
61
  "#<#{self.class.name} territory=#{territory.inspect} national_string=#{national_string.inspect}>"
62
62
  end
63
63
 
64
+ def to_s
65
+ international_string
66
+ end
67
+
64
68
  protected
65
69
  def format
66
- @format ||= region.formats.detect { |format| format.match(national_string) }
70
+ @format ||= find_format_for(national_string)
71
+ end
72
+
73
+ def find_format_for(string)
74
+ region.formats.detect { |format| format.match(string) } ||
75
+ region.formats.detect { |format| format.match(string, false) }
67
76
  end
68
77
 
69
78
  def apply_national_prefix_format(result)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: global_phone
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Stephenson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-28 00:00:00.000000000 Z
11
+ date: 2013-05-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: GlobalPhone parses, validates, and formats local and international phone
14
14
  numbers according to the E.164 standard using the rules specified in Google's libphonenumber