as_dialed_from 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
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