as_dialed_from 0.2.2 → 0.2.3

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/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ # rcov generated
2
+ coverage
3
+
4
+ # bundler
5
+ Gemfile.lock
6
+ .bundle
7
+
8
+ # jeweler generated
9
+ pkg
data/.rvmrc CHANGED
@@ -1,2 +1,2 @@
1
- rvm 1.8.7@as_dialed_from
1
+ rvm 1.9.3@as_dialed_from --install --create
2
2
  rvm_project_rvmrc_default=1
data/Gemfile CHANGED
@@ -1,19 +1,10 @@
1
1
  source :rubygems
2
2
 
3
+ gemspec
4
+
3
5
  group :development, :test do
4
- gem 'xml-simple'
5
-
6
- gem 'test-unit'
7
- gem 'guard-test'
8
-
9
6
  group :darwin do
10
7
  gem 'rb-fsevent'
11
8
  gem 'growl'
12
9
  end
13
-
14
- gem 'rcov', :platforms => :mri
15
-
16
- gem 'bundler'
17
- gem 'jeweler'
18
10
  end
19
-
data/Rakefile CHANGED
@@ -1,47 +1,26 @@
1
1
  # encoding: utf-8
2
2
 
3
- require 'rubygems'
4
- require 'bundler'
5
- begin
6
- Bundler.setup(:default, :development)
7
- rescue Bundler::BundlerError => e
8
- $stderr.puts e.message
9
- $stderr.puts "Run `bundle install` to install missing gems"
10
- exit e.status_code
11
- end
12
- require 'rake'
3
+ require 'bundler/gem_tasks'
13
4
 
14
- require 'jeweler'
15
- Jeweler::Tasks.new do |gem|
16
- # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
- gem.name = "as_dialed_from"
18
- gem.homepage = "http://github.com/Movitas/as_dialed_from"
19
- gem.license = "Apache"
20
- gem.summary = "Figure out how a number should be dialed from another country"
21
- gem.description = "Figure out how a number should be dialed from another country. A fork of a port of Google's libphonenumber."
22
- gem.email = "jcampbell@movitas.com"
23
- gem.authors = ["Justin Campbell"]
24
- # dependencies defined in Gemfile
25
- end
26
- Jeweler::RubygemsDotOrgTasks.new
5
+ Dir.glob('tasks/*.rake').each { |r| import r }
27
6
 
28
7
  require 'rake/testtask'
29
8
  Rake::TestTask.new(:test) do |test|
30
9
  test.libs << 'lib' << 'test'
31
- test.pattern = 'test/**/test_*.rb'
32
- test.verbose = true
10
+ test.pattern = 'test/**/*_test.rb'
33
11
  end
34
12
 
35
- if defined? RUBY_ENGINE and RUBY_ENGINE == "ruby"
36
- require 'rcov/rcovtask'
37
- Rcov::RcovTask.new do |test|
38
- test.libs << 'test'
39
- test.pattern = 'test/**/test_*.rb'
40
- test.verbose = true
41
- test.rcov_opts << '--exclude "gems/*"'
13
+ if RUBY_VERSION =~ /1.9/
14
+ require 'simplecov'
15
+ desc "Simplecov"
16
+ Rake::TestTask.new do |t|
17
+ t.name = 'simplecov'
18
+ t.loader = :direct
19
+ t.libs.push 'test', 'spec', Dir.pwd
20
+ t.test_files = FileList['test/**/*_test.rb']
21
+
22
+ t.ruby_opts.push '-r', 'simplecov', '-e', 'SimpleCov.start()'.inspect
42
23
  end
43
24
  end
44
25
 
45
26
  task :default => :test
46
-
47
- Dir.glob('tasks/*.rake').each { |r| import r }
@@ -1,320 +1,33 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
1
  # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "as_dialed_from/version"
5
4
 
6
5
  Gem::Specification.new do |s|
7
- s.name = %q{as_dialed_from}
8
- s.version = "0.2.2"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Justin Campbell"]
12
- s.date = %q{2011-10-07}
6
+ s.name = "as_dialed_from"
7
+ s.version = AsDialedFrom::VERSION
8
+ s.authors = ["Justin Campbell"]
9
+ s.email = ["jcampbell@justincampbell.me"]
10
+ s.homepage = "http://github.com/Movitas/as_dialed_from"
11
+ s.summary = %q{Figure out how a number should be dialed from another country}
13
12
  s.description = %q{Figure out how a number should be dialed from another country. A fork of a port of Google's libphonenumber.}
14
- s.email = %q{jcampbell@movitas.com}
15
- s.extra_rdoc_files = [
16
- "LICENSE",
17
- "README.md"
18
- ]
19
- s.files = [
20
- ".rvmrc",
21
- ".travis.yml",
22
- "Gemfile",
23
- "Guardfile",
24
- "LICENSE",
25
- "README.md",
26
- "Rakefile",
27
- "VERSION",
28
- "as_dialed_from.gemspec",
29
- "lib/as_dialed_from.rb",
30
- "lib/as_dialed_from/metadata.rb",
31
- "lib/as_dialed_from/number.rb",
32
- "resources/PhoneNumberMetaData.xml",
33
- "resources/country_codes.yml",
34
- "resources/territories/.gitkeep",
35
- "resources/territories/AC.yml",
36
- "resources/territories/AD.yml",
37
- "resources/territories/AE.yml",
38
- "resources/territories/AF.yml",
39
- "resources/territories/AG.yml",
40
- "resources/territories/AI.yml",
41
- "resources/territories/AL.yml",
42
- "resources/territories/AM.yml",
43
- "resources/territories/AN.yml",
44
- "resources/territories/AO.yml",
45
- "resources/territories/AR.yml",
46
- "resources/territories/AS.yml",
47
- "resources/territories/AT.yml",
48
- "resources/territories/AU.yml",
49
- "resources/territories/AW.yml",
50
- "resources/territories/AX.yml",
51
- "resources/territories/AZ.yml",
52
- "resources/territories/BA.yml",
53
- "resources/territories/BB.yml",
54
- "resources/territories/BD.yml",
55
- "resources/territories/BE.yml",
56
- "resources/territories/BF.yml",
57
- "resources/territories/BG.yml",
58
- "resources/territories/BH.yml",
59
- "resources/territories/BI.yml",
60
- "resources/territories/BJ.yml",
61
- "resources/territories/BL.yml",
62
- "resources/territories/BM.yml",
63
- "resources/territories/BN.yml",
64
- "resources/territories/BO.yml",
65
- "resources/territories/BR.yml",
66
- "resources/territories/BS.yml",
67
- "resources/territories/BT.yml",
68
- "resources/territories/BW.yml",
69
- "resources/territories/BY.yml",
70
- "resources/territories/BZ.yml",
71
- "resources/territories/CA.yml",
72
- "resources/territories/CC.yml",
73
- "resources/territories/CD.yml",
74
- "resources/territories/CF.yml",
75
- "resources/territories/CG.yml",
76
- "resources/territories/CH.yml",
77
- "resources/territories/CI.yml",
78
- "resources/territories/CK.yml",
79
- "resources/territories/CL.yml",
80
- "resources/territories/CM.yml",
81
- "resources/territories/CN.yml",
82
- "resources/territories/CO.yml",
83
- "resources/territories/CR.yml",
84
- "resources/territories/CU.yml",
85
- "resources/territories/CV.yml",
86
- "resources/territories/CX.yml",
87
- "resources/territories/CY.yml",
88
- "resources/territories/CZ.yml",
89
- "resources/territories/DE.yml",
90
- "resources/territories/DJ.yml",
91
- "resources/territories/DK.yml",
92
- "resources/territories/DM.yml",
93
- "resources/territories/DO.yml",
94
- "resources/territories/DZ.yml",
95
- "resources/territories/EC.yml",
96
- "resources/territories/EE.yml",
97
- "resources/territories/EG.yml",
98
- "resources/territories/ER.yml",
99
- "resources/territories/ES.yml",
100
- "resources/territories/ET.yml",
101
- "resources/territories/FI.yml",
102
- "resources/territories/FJ.yml",
103
- "resources/territories/FK.yml",
104
- "resources/territories/FM.yml",
105
- "resources/territories/FO.yml",
106
- "resources/territories/FR.yml",
107
- "resources/territories/GA.yml",
108
- "resources/territories/GB.yml",
109
- "resources/territories/GD.yml",
110
- "resources/territories/GE.yml",
111
- "resources/territories/GF.yml",
112
- "resources/territories/GG.yml",
113
- "resources/territories/GH.yml",
114
- "resources/territories/GI.yml",
115
- "resources/territories/GL.yml",
116
- "resources/territories/GM.yml",
117
- "resources/territories/GN.yml",
118
- "resources/territories/GP.yml",
119
- "resources/territories/GQ.yml",
120
- "resources/territories/GR.yml",
121
- "resources/territories/GT.yml",
122
- "resources/territories/GU.yml",
123
- "resources/territories/GW.yml",
124
- "resources/territories/GY.yml",
125
- "resources/territories/HK.yml",
126
- "resources/territories/HN.yml",
127
- "resources/territories/HR.yml",
128
- "resources/territories/HT.yml",
129
- "resources/territories/HU.yml",
130
- "resources/territories/ID.yml",
131
- "resources/territories/IE.yml",
132
- "resources/territories/IL.yml",
133
- "resources/territories/IM.yml",
134
- "resources/territories/IN.yml",
135
- "resources/territories/IO.yml",
136
- "resources/territories/IQ.yml",
137
- "resources/territories/IR.yml",
138
- "resources/territories/IS.yml",
139
- "resources/territories/IT.yml",
140
- "resources/territories/JE.yml",
141
- "resources/territories/JM.yml",
142
- "resources/territories/JO.yml",
143
- "resources/territories/JP.yml",
144
- "resources/territories/KE.yml",
145
- "resources/territories/KG.yml",
146
- "resources/territories/KH.yml",
147
- "resources/territories/KI.yml",
148
- "resources/territories/KM.yml",
149
- "resources/territories/KN.yml",
150
- "resources/territories/KP.yml",
151
- "resources/territories/KR.yml",
152
- "resources/territories/KW.yml",
153
- "resources/territories/KY.yml",
154
- "resources/territories/KZ.yml",
155
- "resources/territories/LA.yml",
156
- "resources/territories/LB.yml",
157
- "resources/territories/LC.yml",
158
- "resources/territories/LI.yml",
159
- "resources/territories/LK.yml",
160
- "resources/territories/LR.yml",
161
- "resources/territories/LS.yml",
162
- "resources/territories/LT.yml",
163
- "resources/territories/LU.yml",
164
- "resources/territories/LV.yml",
165
- "resources/territories/LY.yml",
166
- "resources/territories/MA.yml",
167
- "resources/territories/MC.yml",
168
- "resources/territories/MD.yml",
169
- "resources/territories/ME.yml",
170
- "resources/territories/MF.yml",
171
- "resources/territories/MG.yml",
172
- "resources/territories/MH.yml",
173
- "resources/territories/MK.yml",
174
- "resources/territories/ML.yml",
175
- "resources/territories/MM.yml",
176
- "resources/territories/MN.yml",
177
- "resources/territories/MO.yml",
178
- "resources/territories/MP.yml",
179
- "resources/territories/MQ.yml",
180
- "resources/territories/MR.yml",
181
- "resources/territories/MS.yml",
182
- "resources/territories/MT.yml",
183
- "resources/territories/MU.yml",
184
- "resources/territories/MV.yml",
185
- "resources/territories/MW.yml",
186
- "resources/territories/MX.yml",
187
- "resources/territories/MY.yml",
188
- "resources/territories/MZ.yml",
189
- "resources/territories/NA.yml",
190
- "resources/territories/NC.yml",
191
- "resources/territories/NE.yml",
192
- "resources/territories/NF.yml",
193
- "resources/territories/NG.yml",
194
- "resources/territories/NI.yml",
195
- "resources/territories/NL.yml",
196
- "resources/territories/NO.yml",
197
- "resources/territories/NP.yml",
198
- "resources/territories/NR.yml",
199
- "resources/territories/NU.yml",
200
- "resources/territories/NZ.yml",
201
- "resources/territories/OM.yml",
202
- "resources/territories/PA.yml",
203
- "resources/territories/PE.yml",
204
- "resources/territories/PF.yml",
205
- "resources/territories/PG.yml",
206
- "resources/territories/PH.yml",
207
- "resources/territories/PK.yml",
208
- "resources/territories/PL.yml",
209
- "resources/territories/PM.yml",
210
- "resources/territories/PR.yml",
211
- "resources/territories/PS.yml",
212
- "resources/territories/PT.yml",
213
- "resources/territories/PW.yml",
214
- "resources/territories/PY.yml",
215
- "resources/territories/QA.yml",
216
- "resources/territories/RE.yml",
217
- "resources/territories/RO.yml",
218
- "resources/territories/RS.yml",
219
- "resources/territories/RU.yml",
220
- "resources/territories/RW.yml",
221
- "resources/territories/SA.yml",
222
- "resources/territories/SB.yml",
223
- "resources/territories/SC.yml",
224
- "resources/territories/SD.yml",
225
- "resources/territories/SE.yml",
226
- "resources/territories/SG.yml",
227
- "resources/territories/SH.yml",
228
- "resources/territories/SI.yml",
229
- "resources/territories/SJ.yml",
230
- "resources/territories/SK.yml",
231
- "resources/territories/SL.yml",
232
- "resources/territories/SM.yml",
233
- "resources/territories/SN.yml",
234
- "resources/territories/SO.yml",
235
- "resources/territories/SR.yml",
236
- "resources/territories/ST.yml",
237
- "resources/territories/SV.yml",
238
- "resources/territories/SY.yml",
239
- "resources/territories/SZ.yml",
240
- "resources/territories/TC.yml",
241
- "resources/territories/TD.yml",
242
- "resources/territories/TF.yml",
243
- "resources/territories/TG.yml",
244
- "resources/territories/TH.yml",
245
- "resources/territories/TJ.yml",
246
- "resources/territories/TK.yml",
247
- "resources/territories/TL.yml",
248
- "resources/territories/TM.yml",
249
- "resources/territories/TN.yml",
250
- "resources/territories/TO.yml",
251
- "resources/territories/TR.yml",
252
- "resources/territories/TT.yml",
253
- "resources/territories/TV.yml",
254
- "resources/territories/TW.yml",
255
- "resources/territories/TZ.yml",
256
- "resources/territories/UA.yml",
257
- "resources/territories/UG.yml",
258
- "resources/territories/US.yml",
259
- "resources/territories/UY.yml",
260
- "resources/territories/UZ.yml",
261
- "resources/territories/VA.yml",
262
- "resources/territories/VC.yml",
263
- "resources/territories/VE.yml",
264
- "resources/territories/VG.yml",
265
- "resources/territories/VI.yml",
266
- "resources/territories/VN.yml",
267
- "resources/territories/VU.yml",
268
- "resources/territories/WF.yml",
269
- "resources/territories/WS.yml",
270
- "resources/territories/YE.yml",
271
- "resources/territories/YT.yml",
272
- "resources/territories/ZA.yml",
273
- "resources/territories/ZM.yml",
274
- "resources/territories/ZW.yml",
275
- "tasks/as_dialed_from.rake",
276
- "test/as_dialed_from/metadata_test.rb",
277
- "test/as_dialed_from/number_test.rb",
278
- "test/as_dialed_from_test.rb",
279
- "test/test_helper.rb"
280
- ]
281
- s.homepage = %q{http://github.com/Movitas/as_dialed_from}
282
- s.licenses = ["Apache"]
13
+
14
+ s.rubyforge_project = "as_dialed_from"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- test/*`.split("\n")
283
18
  s.require_paths = ["lib"]
284
- s.rubygems_version = %q{1.6.2}
285
- s.summary = %q{Figure out how a number should be dialed from another country}
286
19
 
287
- if s.respond_to? :specification_version then
288
- s.specification_version = 3
20
+ s.add_development_dependency 'guard-test'
21
+ s.add_development_dependency 'shoulda'
22
+ s.add_development_dependency 'test-unit'
23
+ s.add_development_dependency 'xml-simple'
289
24
 
290
- if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
291
- s.add_development_dependency(%q<xml-simple>, [">= 0"])
292
- s.add_development_dependency(%q<test-unit>, [">= 0"])
293
- s.add_development_dependency(%q<guard-test>, [">= 0"])
294
- s.add_development_dependency(%q<rb-fsevent>, [">= 0"])
295
- s.add_development_dependency(%q<growl>, [">= 0"])
296
- s.add_development_dependency(%q<rcov>, [">= 0"])
297
- s.add_development_dependency(%q<bundler>, [">= 0"])
298
- s.add_development_dependency(%q<jeweler>, [">= 0"])
299
- else
300
- s.add_dependency(%q<xml-simple>, [">= 0"])
301
- s.add_dependency(%q<test-unit>, [">= 0"])
302
- s.add_dependency(%q<guard-test>, [">= 0"])
303
- s.add_dependency(%q<rb-fsevent>, [">= 0"])
304
- s.add_dependency(%q<growl>, [">= 0"])
305
- s.add_dependency(%q<rcov>, [">= 0"])
306
- s.add_dependency(%q<bundler>, [">= 0"])
307
- s.add_dependency(%q<jeweler>, [">= 0"])
308
- end
309
- else
310
- s.add_dependency(%q<xml-simple>, [">= 0"])
311
- s.add_dependency(%q<test-unit>, [">= 0"])
312
- s.add_dependency(%q<guard-test>, [">= 0"])
313
- s.add_dependency(%q<rb-fsevent>, [">= 0"])
314
- s.add_dependency(%q<growl>, [">= 0"])
315
- s.add_dependency(%q<rcov>, [">= 0"])
316
- s.add_dependency(%q<bundler>, [">= 0"])
317
- s.add_dependency(%q<jeweler>, [">= 0"])
25
+ if RUBY_VERSION =~ /1.9/
26
+ s.add_development_dependency 'simplecov'
318
27
  end
319
- end
320
28
 
29
+ if RUBY_PLATFORM =~ /darwin/
30
+ s.add_development_dependency 'growl'
31
+ s.add_development_dependency 'rb-fsevent'
32
+ end
33
+ end
@@ -2,51 +2,51 @@ require 'net/http'
2
2
  require 'yaml'
3
3
 
4
4
  module AsDialedFrom
5
-
5
+
6
6
  class Metadata
7
7
  RESOURCES_DIRECTORY = File.dirname(__FILE__) + "/../../resources/"
8
8
  TERRITORIES_DIRECTORY = RESOURCES_DIRECTORY + "/territories"
9
9
  LOCAL_XML_FILE = RESOURCES_DIRECTORY + "/PhoneNumberMetaData.xml"
10
10
  COUNTRY_CODES_FILE = "#{RESOURCES_DIRECTORY}/country_codes.yml"
11
-
11
+
12
12
  UPSTREAM_URL = "http://libphonenumber.googlecode.com/svn/trunk/resources/PhoneNumberMetaData.xml"
13
-
13
+
14
14
  attr_accessor :data
15
-
15
+
16
16
  def initialize; end
17
-
17
+
18
18
  def self.for_region(region_code)
19
19
  YAML::load_file "#{TERRITORIES_DIRECTORY}/#{region_code}.yml"
20
20
  end
21
-
21
+
22
22
  def self.country_code_to_region
23
23
  YAML::load_file COUNTRY_CODES_FILE
24
24
  end
25
-
25
+
26
26
  def self.download
27
27
  file = File.new LOCAL_XML_FILE, "w"
28
28
  file.write Net::HTTP.get(URI.parse(UPSTREAM_URL))
29
29
  file.close
30
30
  end
31
-
31
+
32
32
  def self.parse
33
33
  require 'xmlsimple'
34
-
34
+
35
35
  puts "Parsing XML file"
36
-
36
+
37
37
  xml = File.read LOCAL_XML_FILE
38
38
  phone_number_meta_data = XmlSimple.xml_in xml, { 'KeyAttr' => 'id', 'ForceArray' => false }
39
39
  territories = phone_number_meta_data['territories']['territory']
40
-
40
+
41
41
  country_code_to_region_code_map = {}
42
-
42
+
43
43
  print "Writing territories "
44
-
44
+
45
45
  territories.each do |territory, data|
46
46
  print "#{territory} "
47
-
47
+
48
48
  hash ||= {}
49
-
49
+
50
50
  %w[
51
51
  countryCode
52
52
  internationalPrefix
@@ -55,31 +55,31 @@ module AsDialedFrom
55
55
  ].each do |xml_attribute|
56
56
  hash[underscore(xml_attribute).to_sym] = data[xml_attribute] if data[xml_attribute]
57
57
  end
58
-
58
+
59
59
  hash[:national_number_pattern] = data['generalDesc']['nationalNumberPattern'] if data['generalDesc'] and data['generalDesc']['nationalNumberPattern']
60
-
60
+
61
61
  file = File.new "#{TERRITORIES_DIRECTORY}/#{territory}.yml", "w"
62
62
  file.write hash.to_yaml
63
63
  file.close
64
-
64
+
65
65
  country_code_to_region_code_map[data['countryCode']] ||= []
66
-
66
+
67
67
  if data['mainCountryForCode']
68
68
  country_code_to_region_code_map[data['countryCode']].insert 0, territory
69
69
  else
70
70
  country_code_to_region_code_map[data['countryCode']].push territory
71
71
  end
72
72
  end
73
-
73
+
74
74
  puts "\nWriting country code map"
75
-
75
+
76
76
  file = File.new COUNTRY_CODES_FILE, "w"
77
77
  file.write country_code_to_region_code_map.to_yaml
78
78
  file.close
79
-
79
+
80
80
  puts "Done!"
81
81
  end
82
-
82
+
83
83
  def self.underscore(camel_cased_word)
84
84
  word = camel_cased_word.to_s.dup
85
85
  word.gsub!(/::/, '/')
@@ -89,7 +89,7 @@ module AsDialedFrom
89
89
  word.downcase!
90
90
  word
91
91
  end
92
-
92
+
93
93
  end
94
-
94
+
95
95
  end
@@ -1,30 +1,32 @@
1
1
  # encoding: UTF-8
2
2
 
3
3
  module AsDialedFrom
4
-
4
+
5
5
  class Number
6
-
6
+
7
7
  attr_reader :number
8
-
8
+
9
9
  def initialize(number)
10
10
  @number = number
11
-
11
+
12
12
  # Pre-compute stuff
13
13
  country_code
14
14
  metadata
15
-
15
+
16
16
  @number
17
17
  end
18
-
18
+
19
19
  def as_dialed_from(from_country)
20
+ from_country = 1 if from_country.nil? or (from_country.is_a? String and from_country.empty?)
21
+
20
22
  from_country = self.class.determine_country_code(from_country) if from_country.size > 3
21
-
23
+
22
24
  # Convert numeric country code to region id
23
25
  from_country = Metadata.country_code_to_region[from_country.to_s][0] if from_country.is_a? Integer or from_country.to_i.nonzero?
24
-
26
+
25
27
  from_metadata = Metadata.for_region(from_country)
26
28
  raise "Could not find valid metadata for from_country" unless from_metadata
27
-
29
+
28
30
  if from_country == Metadata.country_code_to_region[country_code][0]
29
31
  # If we're calling within the same country, just prepend the national number with the national prefix
30
32
  "#{leading_zero}#{metadata[:national_prefix]}#{national_number}"
@@ -33,47 +35,47 @@ module AsDialedFrom
33
35
  "#{self.class.exit_code(from_metadata[:international_prefix])}#{country_code}#{leading_zero}#{national_number}"
34
36
  end
35
37
  end
36
-
38
+
37
39
  def country_code
38
40
  @country_code ||= self.class.determine_country_code(@number)
39
41
  end
40
-
42
+
41
43
  def national_number
42
44
  @number.gsub /^(\+)?(#{country_code})/, ""
43
45
  end
44
-
46
+
45
47
  def leading_zero
46
48
  "0" if metadata[:leading_zero_possible]
47
49
  end
48
-
50
+
49
51
  private
50
-
52
+
51
53
  def self.determine_country_code(number)
52
54
  number = number.to_s
53
-
55
+
54
56
  number.delete! "+"
55
-
57
+
56
58
  # Test the leading digits to find a valid country_code
57
59
  # Country codes are not ambiguous (ex. 1 is valid, and there is no 1X or 1XX)
58
60
  (1..3).each do |length|
59
61
  possible_country_code = number[0,length]
60
-
62
+
61
63
  return possible_country_code if Metadata.country_code_to_region[possible_country_code]
62
64
  end
63
-
65
+
64
66
  raise "No valid country code was present"
65
67
  end
66
-
68
+
67
69
  def self.exit_code(international_prefix)
68
70
  international_prefix.delete("[]").match international_prefix
69
71
  end
70
-
72
+
71
73
  def metadata
72
74
  @metadata ||= Metadata.for_region(Metadata.country_code_to_region[country_code][0])
73
75
  raise "Could not find valid metadata for number" unless @metadata
74
76
  @metadata
75
77
  end
76
-
78
+
77
79
  end
78
-
80
+
79
81
  end
@@ -0,0 +1,5 @@
1
+ # encoding: UTF-8
2
+
3
+ module AsDialedFrom
4
+ VERSION = '0.2.3'
5
+ end
@@ -12,7 +12,7 @@ namespace :update do
12
12
  task :download do
13
13
  AsDialedFrom::Metadata.download
14
14
  end
15
-
15
+
16
16
  desc "Parses XML into YAML files"
17
17
  task :parse do
18
18
  AsDialedFrom::Metadata.parse
@@ -1,26 +1,26 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require File.expand_path(File.dirname(__FILE__) + '/../test_helper')
3
+ require 'test_helper'
4
4
 
5
5
  class MetadataTest < Test::Unit::TestCase
6
-
7
- test "load US metadata" do
6
+
7
+ should "load US metadata" do
8
8
  metadata = AsDialedFrom::Metadata.for_region "US"
9
9
  assert_equal "1", metadata[:country_code]
10
10
  assert_equal "011", metadata[:international_prefix]
11
11
  assert_equal "1", metadata[:national_prefix]
12
12
  end
13
-
14
- test "load MX metadata" do
13
+
14
+ should "load MX metadata" do
15
15
  metadata = AsDialedFrom::Metadata.for_region "MX"
16
16
  assert_equal "52", metadata[:country_code]
17
17
  assert_equal "0[09]", metadata[:international_prefix]
18
18
  assert_equal "01", metadata[:national_prefix]
19
19
  end
20
-
21
- test "under_score camelCased words" do
20
+
21
+ should "under_score camelCased words" do
22
22
  assert_equal "one_two_three", AsDialedFrom::Metadata.underscore("oneTwoThree")
23
23
  assert_equal "one_two_three", AsDialedFrom::Metadata.underscore("OneTwoThree")
24
24
  end
25
-
25
+
26
26
  end
@@ -1,9 +1,9 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require File.expand_path(File.dirname(__FILE__) + "/../test_helper")
3
+ require 'test_helper'
4
+
5
+ class NumberTest < Test::Unit::TestCase
4
6
 
5
- class Number < Test::Unit::TestCase
6
-
7
7
  ALPHA_NUMERIC_NUMBER = "+180074935247"
8
8
  AR_MOBILE = "+5491187654321"
9
9
  AR_NUMBER = "+541187654321"
@@ -28,49 +28,49 @@ class Number < Test::Unit::TestCase
28
28
  US_LOCAL_NUMBER = "+12530000"
29
29
  US_SHORT_BY_ONE_NUMBER = "+1650253000"
30
30
  US_TOLLFREE = "+18002530000"
31
-
32
- test "should require an argument" do
31
+
32
+ should "should require an argument" do
33
33
  assert_raise(ArgumentError) { AsDialedFrom::Number.new }
34
34
  end
35
-
36
- test "should instantiate with a valid phone number" do
35
+
36
+ should "should instantiate with a valid phone number" do
37
37
  assert AsDialedFrom::Number.new US_NUMBER
38
38
  end
39
-
40
- test "should determine country code from string" do
39
+
40
+ should "should determine country code from string" do
41
41
  assert_equal "1", AsDialedFrom::Number.new(US_NUMBER ).country_code
42
42
  assert_equal "52", AsDialedFrom::Number.new(MX_NUMBER1).country_code
43
43
  assert_equal "39", AsDialedFrom::Number.new(IT_NUMBER ).country_code
44
44
  end
45
-
46
- test "should raise an error if no valid country code was found" do
47
- assert_raise(RuntimeError) { AsDialedFrom::Number.new "+9991234567890" }
45
+
46
+ should "should raise an error if no valid country code was found" do
47
+ assert_raise(RuntimeError) { AsDialedFrom::Number.new "+9991234567890" }
48
48
  end
49
-
50
- test "should return national number" do
49
+
50
+ should "should return national number" do
51
51
  assert_equal "6502530000", AsDialedFrom::Number.new(US_NUMBER).send(:national_number)
52
52
  end
53
-
54
- test "should return a number to dial using as_dialed_from" do
53
+
54
+ should "should return a number to dial using as_dialed_from" do
55
55
  # Intra-country calls
56
56
  assert_equal "16502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from("US")
57
57
  assert_equal "013312345678", AsDialedFrom::Number.new(MX_NUMBER1).as_dialed_from("MX")
58
-
58
+
59
59
  # MX cell numbers
60
60
  assert_equal "0112345678900", AsDialedFrom::Number.new(MX_MOBILE1).as_dialed_from("MX")
61
61
  assert_equal "0115212345678900", AsDialedFrom::Number.new(MX_MOBILE1).as_dialed_from("US")
62
-
62
+
63
63
  # US <-> MX
64
64
  assert_equal "0016502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from("MX")
65
65
  assert_equal "011523312345678", AsDialedFrom::Number.new(MX_NUMBER1).as_dialed_from("US")
66
-
66
+
67
67
  assert_equal "0019002530000", AsDialedFrom::Number.new(US_PREMIUM).as_dialed_from("DE")
68
68
  # assert_equal "16502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from("BS")
69
69
  assert_equal "0016502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from("PL")
70
70
  assert_equal "8~1016502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from("RU")
71
71
  assert_equal "011447912345678", AsDialedFrom::Number.new(GB_MOBILE).as_dialed_from("US")
72
72
  assert_equal "00491234", AsDialedFrom::Number.new(DE_SHORT_NUMBER).as_dialed_from("GB")
73
-
73
+
74
74
  # assert_equal "1234", AsDialedFrom::Number.new(DE_SHORT_NUMBER).as_dialed_from("DE")
75
75
  assert_equal "011390236618300", AsDialedFrom::Number.new(IT_NUMBER).as_dialed_from("US")
76
76
  assert_equal "0236618300", AsDialedFrom::Number.new(IT_NUMBER).as_dialed_from("IT")
@@ -78,18 +78,26 @@ class Number < Test::Unit::TestCase
78
78
  assert_equal "65218000", AsDialedFrom::Number.new(SG_NUMBER).as_dialed_from("SG")
79
79
  assert_equal "0115491187654321", AsDialedFrom::Number.new(AR_MOBILE).as_dialed_from("US")
80
80
  end
81
-
82
- test "as_dialed_from should accept a country code string as input" do
81
+
82
+ should "as_dialed_from should accept a country code string as input" do
83
83
  assert_equal "16502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from("1")
84
84
  end
85
-
86
- test "as_dialed_from should accept a country code integer as input" do
85
+
86
+ should "as_dialed_from should accept a country code integer as input" do
87
87
  assert_equal "16502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from(1)
88
88
  end
89
-
90
- test "as_dialed_from should accept a caller id number as input" do
89
+
90
+ should "as_dialed_from should accept a caller id number as input" do
91
91
  assert_equal "16502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from(US_NUMBER)
92
92
  assert_equal "0016502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from(MX_NUMBER1)
93
93
  end
94
94
 
95
+ should "as_dialed_from should accept nil as input" do
96
+ assert_equal "16502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from(nil)
97
+ end
98
+
99
+ should "as_dialed_from should accept an empty string as input" do
100
+ assert_equal "16502530000", AsDialedFrom::Number.new(US_NUMBER).as_dialed_from("")
101
+ end
102
+
95
103
  end
@@ -1,11 +1,11 @@
1
1
  # encoding: UTF-8
2
2
 
3
- require File.expand_path(File.dirname(__FILE__) + "/test_helper")
3
+ require 'test_helper'
4
4
 
5
5
  class AsDialedFromTest < Test::Unit::TestCase
6
-
7
- test "prototype string with as_dialed_from method" do
6
+
7
+ should "prototype string with as_dialed_from method" do
8
8
  assert_equal "12155551212", "+12155551212".as_dialed_from("US")
9
9
  end
10
-
10
+
11
11
  end
data/test/test_helper.rb CHANGED
@@ -1 +1,4 @@
1
- require File.dirname(__FILE__) + '/../lib/as_dialed_from.rb'
1
+ require 'as_dialed_from'
2
+
3
+ require 'shoulda'
4
+ require 'test/unit'
metadata CHANGED
@@ -1,145 +1,102 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: as_dialed_from
3
- version: !ruby/object:Gem::Version
4
- hash: 19
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 2
10
- version: 0.2.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Justin Campbell
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-10-07 00:00:00 -04:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
22
- prerelease: false
23
- type: :development
24
- requirement: &id001 !ruby/object:Gem::Requirement
12
+ date: 2012-01-11 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: guard-test
16
+ requirement: &70120542680220 !ruby/object:Gem::Requirement
25
17
  none: false
26
- requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- hash: 3
30
- segments:
31
- - 0
32
- version: "0"
33
- name: xml-simple
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- prerelease: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
37
22
  type: :development
38
- requirement: &id002 !ruby/object:Gem::Requirement
39
- none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- hash: 3
44
- segments:
45
- - 0
46
- version: "0"
47
- name: test-unit
48
- version_requirements: *id002
49
- - !ruby/object:Gem::Dependency
50
23
  prerelease: false
51
- type: :development
52
- requirement: &id003 !ruby/object:Gem::Requirement
24
+ version_requirements: *70120542680220
25
+ - !ruby/object:Gem::Dependency
26
+ name: shoulda
27
+ requirement: &70120542679720 !ruby/object:Gem::Requirement
53
28
  none: false
54
- requirements:
55
- - - ">="
56
- - !ruby/object:Gem::Version
57
- hash: 3
58
- segments:
59
- - 0
60
- version: "0"
61
- name: guard-test
62
- version_requirements: *id003
63
- - !ruby/object:Gem::Dependency
64
- prerelease: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
65
33
  type: :development
66
- requirement: &id004 !ruby/object:Gem::Requirement
67
- none: false
68
- requirements:
69
- - - ">="
70
- - !ruby/object:Gem::Version
71
- hash: 3
72
- segments:
73
- - 0
74
- version: "0"
75
- name: rb-fsevent
76
- version_requirements: *id004
77
- - !ruby/object:Gem::Dependency
78
34
  prerelease: false
79
- type: :development
80
- requirement: &id005 !ruby/object:Gem::Requirement
35
+ version_requirements: *70120542679720
36
+ - !ruby/object:Gem::Dependency
37
+ name: test-unit
38
+ requirement: &70120542679180 !ruby/object:Gem::Requirement
81
39
  none: false
82
- requirements:
83
- - - ">="
84
- - !ruby/object:Gem::Version
85
- hash: 3
86
- segments:
87
- - 0
88
- version: "0"
89
- name: growl
90
- version_requirements: *id005
91
- - !ruby/object:Gem::Dependency
92
- prerelease: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
93
44
  type: :development
94
- requirement: &id006 !ruby/object:Gem::Requirement
95
- none: false
96
- requirements:
97
- - - ">="
98
- - !ruby/object:Gem::Version
99
- hash: 3
100
- segments:
101
- - 0
102
- version: "0"
103
- name: rcov
104
- version_requirements: *id006
105
- - !ruby/object:Gem::Dependency
106
45
  prerelease: false
46
+ version_requirements: *70120542679180
47
+ - !ruby/object:Gem::Dependency
48
+ name: xml-simple
49
+ requirement: &70120542678740 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
107
55
  type: :development
108
- requirement: &id007 !ruby/object:Gem::Requirement
56
+ prerelease: false
57
+ version_requirements: *70120542678740
58
+ - !ruby/object:Gem::Dependency
59
+ name: simplecov
60
+ requirement: &70120542678260 !ruby/object:Gem::Requirement
109
61
  none: false
110
- requirements:
111
- - - ">="
112
- - !ruby/object:Gem::Version
113
- hash: 3
114
- segments:
115
- - 0
116
- version: "0"
117
- name: bundler
118
- version_requirements: *id007
119
- - !ruby/object:Gem::Dependency
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
120
67
  prerelease: false
68
+ version_requirements: *70120542678260
69
+ - !ruby/object:Gem::Dependency
70
+ name: growl
71
+ requirement: &70120542677660 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
121
77
  type: :development
122
- requirement: &id008 !ruby/object:Gem::Requirement
78
+ prerelease: false
79
+ version_requirements: *70120542677660
80
+ - !ruby/object:Gem::Dependency
81
+ name: rb-fsevent
82
+ requirement: &70120542677020 !ruby/object:Gem::Requirement
123
83
  none: false
124
- requirements:
125
- - - ">="
126
- - !ruby/object:Gem::Version
127
- hash: 3
128
- segments:
129
- - 0
130
- version: "0"
131
- name: jeweler
132
- version_requirements: *id008
133
- description: Figure out how a number should be dialed from another country. A fork of a port of Google's libphonenumber.
134
- email: jcampbell@movitas.com
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70120542677020
91
+ description: Figure out how a number should be dialed from another country. A fork
92
+ of a port of Google's libphonenumber.
93
+ email:
94
+ - jcampbell@justincampbell.me
135
95
  executables: []
136
-
137
96
  extensions: []
138
-
139
- extra_rdoc_files:
140
- - LICENSE
141
- - README.md
142
- files:
97
+ extra_rdoc_files: []
98
+ files:
99
+ - .gitignore
143
100
  - .rvmrc
144
101
  - .travis.yml
145
102
  - Gemfile
@@ -152,6 +109,7 @@ files:
152
109
  - lib/as_dialed_from.rb
153
110
  - lib/as_dialed_from/metadata.rb
154
111
  - lib/as_dialed_from/number.rb
112
+ - lib/as_dialed_from/version.rb
155
113
  - resources/PhoneNumberMetaData.xml
156
114
  - resources/country_codes.yml
157
115
  - resources/territories/.gitkeep
@@ -400,39 +358,32 @@ files:
400
358
  - test/as_dialed_from/number_test.rb
401
359
  - test/as_dialed_from_test.rb
402
360
  - test/test_helper.rb
403
- has_rdoc: true
404
361
  homepage: http://github.com/Movitas/as_dialed_from
405
- licenses:
406
- - Apache
362
+ licenses: []
407
363
  post_install_message:
408
364
  rdoc_options: []
409
-
410
- require_paths:
365
+ require_paths:
411
366
  - lib
412
- required_ruby_version: !ruby/object:Gem::Requirement
367
+ required_ruby_version: !ruby/object:Gem::Requirement
413
368
  none: false
414
- requirements:
415
- - - ">="
416
- - !ruby/object:Gem::Version
417
- hash: 3
418
- segments:
419
- - 0
420
- version: "0"
421
- required_rubygems_version: !ruby/object:Gem::Requirement
369
+ requirements:
370
+ - - ! '>='
371
+ - !ruby/object:Gem::Version
372
+ version: '0'
373
+ required_rubygems_version: !ruby/object:Gem::Requirement
422
374
  none: false
423
- requirements:
424
- - - ">="
425
- - !ruby/object:Gem::Version
426
- hash: 3
427
- segments:
428
- - 0
429
- version: "0"
375
+ requirements:
376
+ - - ! '>='
377
+ - !ruby/object:Gem::Version
378
+ version: '0'
430
379
  requirements: []
431
-
432
- rubyforge_project:
433
- rubygems_version: 1.6.2
380
+ rubyforge_project: as_dialed_from
381
+ rubygems_version: 1.8.10
434
382
  signing_key:
435
383
  specification_version: 3
436
384
  summary: Figure out how a number should be dialed from another country
437
- test_files: []
438
-
385
+ test_files:
386
+ - test/as_dialed_from/metadata_test.rb
387
+ - test/as_dialed_from/number_test.rb
388
+ - test/as_dialed_from_test.rb
389
+ - test/test_helper.rb