itu_codes 0.3.6 → 0.4.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.
- data/README.md +37 -24
- data/lib/data/assigned_country_codes.yml +345 -0
- data/lib/data/iso_code_to_itu_country_names.yml +248 -0
- data/lib/data/north_american_area_codes.yml +394 -0
- data/lib/itu_codes/constants.rb +4 -746
- data/lib/itu_codes/helpers.rb +5 -3
- data/lib/itu_codes/version.rb +1 -1
- data/lib/itu_codes.rb +66 -77
- metadata +5 -34
data/lib/itu_codes/helpers.rb
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'yaml'
|
|
2
2
|
|
|
3
3
|
module ItuCodes
|
|
4
4
|
module Helpers
|
|
5
|
+
ISO2ITU = YAML.load_file( File.expand_path(File.dirname(__FILE__)) + '/../data/iso_code_to_itu_country_names.yml')
|
|
6
|
+
|
|
5
7
|
def self.country_code_lookup(country_name)
|
|
6
|
-
|
|
8
|
+
ISO2ITU.key(country_name)
|
|
7
9
|
end
|
|
8
10
|
|
|
9
11
|
def self.country_name_lookup(iso_code)
|
|
10
|
-
|
|
12
|
+
ISO2ITU[iso_code]
|
|
11
13
|
end
|
|
12
14
|
end
|
|
13
15
|
end
|
data/lib/itu_codes/version.rb
CHANGED
data/lib/itu_codes.rb
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
# to-do: deal with headache codes:
|
|
2
2
|
# 1 --> Non-US need to be separated by area code
|
|
3
3
|
# 7 --> Kazakhstan!
|
|
4
|
-
require 'carmen'
|
|
5
4
|
|
|
6
5
|
require 'itu_codes/constants'
|
|
7
6
|
require 'itu_codes/helpers'
|
|
@@ -10,123 +9,110 @@ require 'itu_codes/helpers'
|
|
|
10
9
|
|
|
11
10
|
module ItuCodes
|
|
12
11
|
class << self
|
|
12
|
+
def find_by_itu_code(code)
|
|
13
|
+
returner = lookup(code)
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
end
|
|
17
|
-
|
|
18
|
-
def lookup(code)
|
|
19
|
-
cleaned = clean(code)
|
|
20
|
-
list.find_all{ |hsh| hsh.keys.first == cleaned }.map do |k|
|
|
21
|
-
k.values.first
|
|
22
|
-
end.uniq
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def find (code_or_name)
|
|
26
|
-
if code_or_name.to_s.match /[^0-9]/ # non-numeric string passed
|
|
27
|
-
find_by_name(code_or_name)
|
|
15
|
+
if returner.size <= 1
|
|
16
|
+
returner.first
|
|
28
17
|
else
|
|
29
|
-
|
|
30
|
-
find_by_itu_code(cleaned)
|
|
18
|
+
returner
|
|
31
19
|
end
|
|
32
20
|
end
|
|
33
21
|
|
|
34
|
-
def
|
|
35
|
-
|
|
36
|
-
|
|
22
|
+
def find_by_name(name)
|
|
23
|
+
matching = country_codes.select do |k, v|
|
|
24
|
+
[*v].include? name
|
|
25
|
+
end || {}
|
|
26
|
+
|
|
27
|
+
returner = matching.keys
|
|
28
|
+
|
|
29
|
+
if returner.size <= 1
|
|
30
|
+
returner.first
|
|
37
31
|
else
|
|
38
|
-
returner
|
|
39
|
-
record.has_key? code
|
|
40
|
-
end.map { |k| k.values.first }.uniq
|
|
32
|
+
returner
|
|
41
33
|
end
|
|
42
|
-
returner.size <= 1 ? returner.shift : returner
|
|
43
34
|
end
|
|
44
35
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
end.map{ |k| k.keys.first }.uniq
|
|
49
|
-
returner.size <= 1 ? returner.shift : returner
|
|
50
|
-
end
|
|
51
|
-
|
|
52
|
-
# ie. find_by_country_iso_code('US')
|
|
36
|
+
# lookup by ISO 3166 country code
|
|
37
|
+
# e.g. iso2itu('US')
|
|
38
|
+
# see : http://www.iso.org/iso/country_codes.htm
|
|
53
39
|
def iso2itu(iso_code)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
end.shift rescue nil
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
# this is tricky for North American destinations: '1' can be the US, Canada or another country
|
|
60
|
-
def itu2iso(itu_code)
|
|
61
|
-
lookup(itu_code).map do |country|
|
|
62
|
-
Helpers.country_code_lookup(country)
|
|
63
|
-
end.compact
|
|
40
|
+
country_name = Helpers.country_name_lookup(iso_code)
|
|
41
|
+
find_by_name(country_name)
|
|
64
42
|
end
|
|
65
43
|
|
|
66
44
|
# returns true for any valid ITU code
|
|
67
45
|
# valid_code?(1) => true
|
|
68
46
|
# valid_code?(1818) => false
|
|
69
47
|
def valid_code?(some_code)
|
|
70
|
-
|
|
71
|
-
some_code.length == 1
|
|
72
|
-
else
|
|
73
|
-
self.list.any? { |hsh| hsh.has_key?(some_code) }
|
|
74
|
-
end
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def north_america
|
|
78
|
-
find_by_itu_code '1'
|
|
48
|
+
country_codes.has_key?(some_code)
|
|
79
49
|
end
|
|
80
50
|
|
|
81
51
|
def north_american?(some_code)
|
|
82
|
-
some_code
|
|
52
|
+
some_code[0,1] == '1'
|
|
83
53
|
end
|
|
84
54
|
|
|
85
55
|
# parse a destination code (probably with area code) to find the ITU code
|
|
86
56
|
# ex: parse_code(1818) => 1
|
|
87
|
-
def parse_code(
|
|
88
|
-
|
|
89
|
-
sub_index = (1..
|
|
90
|
-
valid_code?
|
|
57
|
+
def parse_code(some_number)
|
|
58
|
+
some_number = clean(some_number)
|
|
59
|
+
sub_index = (1..some_number.length).find do |len|
|
|
60
|
+
valid_code? some_number[0,len]
|
|
91
61
|
end
|
|
92
|
-
|
|
62
|
+
some_number[0,sub_index] unless sub_index.nil?
|
|
93
63
|
end
|
|
94
64
|
|
|
95
65
|
# parse a destination code (probably with area code) to find the number without the ITU code
|
|
96
66
|
# ex: parse_number(18184443322) => 8184443322
|
|
97
|
-
def parse_number(
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
valid_code? some_code[0,len]
|
|
101
|
-
end
|
|
102
|
-
some_code[sub_index,some_code.length - sub_index] unless sub_index.nil?
|
|
67
|
+
def parse_number(some_number)
|
|
68
|
+
country_code = parse_code(some_number)
|
|
69
|
+
some_number.gsub(/^#{country_code}/) unless country_code.nil?
|
|
103
70
|
end
|
|
104
71
|
|
|
105
72
|
def compatriots?(some, other)
|
|
106
73
|
both_valid = ! ( parse_code(some).nil? or parse_code(other).nil? )
|
|
107
|
-
both_valid and ( parse_code(some) == parse_code(other) ) rescue nil
|
|
108
|
-
end
|
|
109
74
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
75
|
+
if north_american?(some) && north_american?(other)
|
|
76
|
+
both_valid && !(lookup(some) & lookup(other)).empty?
|
|
77
|
+
else
|
|
78
|
+
some = parse_code(some)
|
|
79
|
+
other = parse_code(other)
|
|
80
|
+
both_valid && lookup(some) == lookup(other)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
117
83
|
|
|
118
84
|
def american?(some_code)
|
|
119
85
|
# for non-US North American codes, parse_code will return a 4 digit code
|
|
120
86
|
# for US, '1' will be returned
|
|
121
|
-
|
|
122
|
-
countries
|
|
123
|
-
north_american?(some_code) and (countries.include?('United States'))
|
|
87
|
+
countries = lookup(some_code[0,4]) || []
|
|
88
|
+
countries.include?('United States of America')
|
|
124
89
|
end
|
|
125
90
|
|
|
126
91
|
def canadian?(some_code)
|
|
127
|
-
some_code = some_code.to_s
|
|
128
92
|
countries = lookup(some_code[0,4])
|
|
129
|
-
north_american?(some_code)
|
|
93
|
+
north_american?(some_code) && (countries.include?('Canada'))
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
private
|
|
98
|
+
|
|
99
|
+
def north_american_codes
|
|
100
|
+
Constants::NORTH_AMERICAN_AREA_CODES
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def country_codes
|
|
104
|
+
Constants::ASSIGNED_COUNTRY_CODES
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
def lookup(code)
|
|
108
|
+
cleaned = clean(code)
|
|
109
|
+
matching_countries = country_codes[cleaned] || []
|
|
110
|
+
|
|
111
|
+
matching_north_americans = north_american_codes.select do |k, v|
|
|
112
|
+
[*v].include?(code)
|
|
113
|
+
end || {}
|
|
114
|
+
|
|
115
|
+
[*matching_countries] + matching_north_americans.keys.compact
|
|
130
116
|
end
|
|
131
117
|
|
|
132
118
|
# converts input to string, then strips any non-numeric characters
|
|
@@ -134,5 +120,8 @@ module ItuCodes
|
|
|
134
120
|
input.to_s.gsub(/[^0-9]/, '')
|
|
135
121
|
end
|
|
136
122
|
|
|
123
|
+
def north_america
|
|
124
|
+
find_by_itu_code '1'
|
|
125
|
+
end
|
|
137
126
|
end
|
|
138
127
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: itu_codes
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.4.1
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,40 +9,8 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date:
|
|
12
|
+
date: 2013-03-17 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
|
-
- !ruby/object:Gem::Dependency
|
|
15
|
-
name: i18n
|
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
|
-
requirements:
|
|
19
|
-
- - ! '>='
|
|
20
|
-
- !ruby/object:Gem::Version
|
|
21
|
-
version: '0'
|
|
22
|
-
type: :runtime
|
|
23
|
-
prerelease: false
|
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
|
-
requirements:
|
|
27
|
-
- - ! '>='
|
|
28
|
-
- !ruby/object:Gem::Version
|
|
29
|
-
version: '0'
|
|
30
|
-
- !ruby/object:Gem::Dependency
|
|
31
|
-
name: carmen
|
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
|
-
requirements:
|
|
35
|
-
- - ! '>='
|
|
36
|
-
- !ruby/object:Gem::Version
|
|
37
|
-
version: '0'
|
|
38
|
-
type: :runtime
|
|
39
|
-
prerelease: false
|
|
40
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
|
-
requirements:
|
|
43
|
-
- - ! '>='
|
|
44
|
-
- !ruby/object:Gem::Version
|
|
45
|
-
version: '0'
|
|
46
14
|
- !ruby/object:Gem::Dependency
|
|
47
15
|
name: rake
|
|
48
16
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -67,6 +35,9 @@ executables: []
|
|
|
67
35
|
extensions: []
|
|
68
36
|
extra_rdoc_files: []
|
|
69
37
|
files:
|
|
38
|
+
- lib/data/assigned_country_codes.yml
|
|
39
|
+
- lib/data/iso_code_to_itu_country_names.yml
|
|
40
|
+
- lib/data/north_american_area_codes.yml
|
|
70
41
|
- lib/itu_codes/constants.rb
|
|
71
42
|
- lib/itu_codes/helpers.rb
|
|
72
43
|
- lib/itu_codes/version.rb
|