phony 1.9.0 → 2.0.0.beta1

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.
Files changed (53) hide show
  1. data/README.textile +1 -1
  2. data/lib/phony.rb +28 -15
  3. data/lib/phony/countries.rb +609 -210
  4. data/lib/phony/countries/austria.rb +6 -1
  5. data/lib/phony/countries/bangladesh.rb +55 -0
  6. data/lib/phony/countries/belarus.rb +130 -0
  7. data/lib/phony/countries/georgia.rb +91 -0
  8. data/lib/phony/countries/germany.rb +20 -6
  9. data/lib/phony/countries/india.rb +50 -0
  10. data/lib/phony/countries/indonesia.rb +50 -0
  11. data/lib/phony/countries/italy.rb +38 -67
  12. data/lib/phony/countries/japan.rb +412 -0
  13. data/lib/phony/countries/kyrgyzstan.rb +118 -0
  14. data/lib/phony/countries/latvia.rb +40 -0
  15. data/lib/phony/countries/libya.rb +114 -0
  16. data/lib/phony/countries/malaysia.rb +7 -5
  17. data/lib/phony/countries/moldova.rb +50 -0
  18. data/lib/phony/countries/montenegro.rb +27 -0
  19. data/lib/phony/countries/namibia.rb +35 -0
  20. data/lib/phony/countries/nepal.rb +71 -0
  21. data/lib/phony/countries/netherlands.rb +3 -2
  22. data/lib/phony/countries/pakistan.rb +119 -0
  23. data/lib/phony/countries/paraguay.rb +145 -0
  24. data/lib/phony/countries/russia_kazakhstan_abhasia_south_osetia.rb +6 -6
  25. data/lib/phony/countries/serbia.rb +34 -0
  26. data/lib/phony/countries/somali.rb +22 -0
  27. data/lib/phony/countries/south_korea.rb +1 -1
  28. data/lib/phony/countries/sweden.rb +1 -1
  29. data/lib/phony/countries/taiwan.rb +51 -0
  30. data/lib/phony/countries/tajikistan.rb +76 -0
  31. data/lib/phony/countries/turkmenistan.rb +73 -0
  32. data/lib/phony/countries/ukraine.rb +614 -0
  33. data/lib/phony/countries/uruguay.rb +51 -0
  34. data/lib/phony/countries/zimbabwe.rb +37 -0
  35. data/lib/phony/country.rb +41 -0
  36. data/lib/phony/country_codes.rb +45 -18
  37. data/lib/phony/dsl.rb +33 -7
  38. data/lib/phony/local_splitters/fixed.rb +14 -1
  39. data/lib/phony/local_splitters/regex.rb +12 -1
  40. data/lib/phony/national_code.rb +7 -3
  41. data/lib/phony/national_splitters/default.rb +13 -1
  42. data/lib/phony/national_splitters/dsl.rb +9 -7
  43. data/lib/phony/national_splitters/fixed.rb +6 -0
  44. data/lib/phony/national_splitters/none.rb +6 -0
  45. data/lib/phony/national_splitters/regex.rb +6 -0
  46. data/lib/phony/national_splitters/variable.rb +7 -1
  47. data/spec/lib/phony/countries_spec.rb +684 -16
  48. data/spec/lib/phony/local_splitters/regex_spec.rb +41 -0
  49. data/spec/lib/phony/validations_spec.rb +542 -10
  50. data/spec/lib/phony_spec.rb +20 -6
  51. metadata +29 -9
  52. data/lib/phony/validator.rb +0 -26
  53. data/lib/phony/validators.rb +0 -88
@@ -60,6 +60,20 @@ describe Phony do
60
60
  it "should not normalize a number with a correct zero inside" do
61
61
  Phony.normalize('+390909709511').should == '390909709511'
62
62
  end
63
+
64
+ context 'special trunk prefixes' do
65
+ it 'normalizes Hungary' do
66
+ Phony.normalize('36 0630245506').should == '3630245506'
67
+ end
68
+ it 'normalizes Russia' do
69
+ Phony.normalize('7 8 342 1234567').should == '73421234567'
70
+ end
71
+ it 'normalizes Lithuania' do
72
+ Phony.normalize('370 8 5 1234567').should == '37051234567'
73
+ end
74
+ it 'normalizes Belarus'
75
+ end
76
+
63
77
  end
64
78
  end
65
79
 
@@ -150,16 +164,16 @@ describe Phony do
150
164
  end
151
165
  describe '"unsupported" countries' do
152
166
  it 'should format as a single block' do
153
- Phony.format('88032155605220').should == '+880 32155605220'
167
+ Phony.format('88132155605220').should == '+881 32155605220'
154
168
  end
155
169
  it 'should format as a single block, regardless of format' do
156
- Phony.format('8801819372205', :format => :international).should == '+880 1819372205'
170
+ Phony.format('8811819372205', :format => :international).should == '+881 1819372205'
157
171
  end
158
172
  it 'should format as a single block, respecting custom spaces' do
159
- Phony.format('8801819372205', :spaces => :-).should == '+880-1819372205'
173
+ Phony.format('8811819372205', :spaces => :-).should == '+881-1819372205'
160
174
  end
161
175
  it 'should format as a single block, even without spaces' do
162
- Phony.format('8801819372205', :spaces => '').should == '+8801819372205'
176
+ Phony.format('8811819372205', :spaces => '').should == '+8811819372205'
163
177
  end
164
178
  end
165
179
  end
@@ -219,10 +233,10 @@ describe Phony do
219
233
  end
220
234
  context '"unsupported" countries' do
221
235
  it 'handles formatting' do
222
- Phony.format('88032155605220').should == '+880 32155605220'
236
+ Phony.format('88132155605220').should == '+881 32155605220'
223
237
  end
224
238
  it 'handles normalizing' do
225
- Phony.normalize('+880-321 5560 5220').should == '88032155605220'
239
+ Phony.normalize('+881-321 5560 5220').should == '88132155605220'
226
240
  end
227
241
  end
228
242
  end
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: phony
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.9.0
5
- prerelease:
4
+ version: 2.0.0.beta1
5
+ prerelease: 6
6
6
  platform: ruby
7
7
  authors:
8
8
  - Florian Hanke
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-21 00:00:00.000000000 Z
12
+ date: 2013-04-18 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! 'Fast international phone number (E164 standard) normalizing, splitting
15
15
  and formatting. Lots of formatting options: International (+.., 00..), national
@@ -21,17 +21,40 @@ extra_rdoc_files:
21
21
  - README.textile
22
22
  files:
23
23
  - lib/phony/countries/austria.rb
24
+ - lib/phony/countries/bangladesh.rb
25
+ - lib/phony/countries/belarus.rb
24
26
  - lib/phony/countries/brazil.rb
25
27
  - lib/phony/countries/china.rb
28
+ - lib/phony/countries/georgia.rb
26
29
  - lib/phony/countries/germany.rb
30
+ - lib/phony/countries/india.rb
31
+ - lib/phony/countries/indonesia.rb
27
32
  - lib/phony/countries/ireland.rb
28
33
  - lib/phony/countries/italy.rb
34
+ - lib/phony/countries/japan.rb
35
+ - lib/phony/countries/kyrgyzstan.rb
36
+ - lib/phony/countries/latvia.rb
37
+ - lib/phony/countries/libya.rb
29
38
  - lib/phony/countries/malaysia.rb
39
+ - lib/phony/countries/moldova.rb
40
+ - lib/phony/countries/montenegro.rb
41
+ - lib/phony/countries/namibia.rb
42
+ - lib/phony/countries/nepal.rb
30
43
  - lib/phony/countries/netherlands.rb
44
+ - lib/phony/countries/pakistan.rb
45
+ - lib/phony/countries/paraguay.rb
31
46
  - lib/phony/countries/russia_kazakhstan_abhasia_south_osetia.rb
47
+ - lib/phony/countries/serbia.rb
48
+ - lib/phony/countries/somali.rb
32
49
  - lib/phony/countries/south_korea.rb
33
50
  - lib/phony/countries/sweden.rb
51
+ - lib/phony/countries/taiwan.rb
52
+ - lib/phony/countries/tajikistan.rb
53
+ - lib/phony/countries/turkmenistan.rb
54
+ - lib/phony/countries/ukraine.rb
34
55
  - lib/phony/countries/united_kingdom.rb
56
+ - lib/phony/countries/uruguay.rb
57
+ - lib/phony/countries/zimbabwe.rb
35
58
  - lib/phony/countries.rb
36
59
  - lib/phony/country.rb
37
60
  - lib/phony/country_codes.rb
@@ -45,8 +68,6 @@ files:
45
68
  - lib/phony/national_splitters/none.rb
46
69
  - lib/phony/national_splitters/regex.rb
47
70
  - lib/phony/national_splitters/variable.rb
48
- - lib/phony/validator.rb
49
- - lib/phony/validators.rb
50
71
  - lib/phony/vanity.rb
51
72
  - lib/phony.rb
52
73
  - README.textile
@@ -79,12 +100,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
79
100
  required_rubygems_version: !ruby/object:Gem::Requirement
80
101
  none: false
81
102
  requirements:
82
- - - ! '>='
103
+ - - ! '>'
83
104
  - !ruby/object:Gem::Version
84
- version: '0'
105
+ version: 1.3.1
85
106
  requirements: []
86
107
  rubyforge_project:
87
- rubygems_version: 1.8.23
108
+ rubygems_version: 1.8.10
88
109
  signing_key:
89
110
  specification_version: 3
90
111
  summary: Fast international phone number (E164 standard) normalizing, splitting and
@@ -104,4 +125,3 @@ test_files:
104
125
  - spec/lib/phony/validations_spec.rb
105
126
  - spec/lib/phony/vanity_spec.rb
106
127
  - spec/lib/phony_spec.rb
107
- has_rdoc: false
@@ -1,26 +0,0 @@
1
- module Phony
2
-
3
- class Validator
4
-
5
- attr_reader :ndc_checks
6
-
7
- def initialize
8
- @ndc_checks = []
9
- end
10
-
11
- def plausible? ndc, rest
12
- ndc_checks && ndc_checks.each do |ndc_check|
13
- return false if ndc_check === ndc
14
- end
15
-
16
- true
17
- end
18
-
19
- def ndc_check ndc
20
- @ndc_checks << ndc
21
- self
22
- end
23
-
24
- end
25
-
26
- end
@@ -1,88 +0,0 @@
1
- # # Number: A possible phone number, E164 or not.
2
- # # Hints: Information that helps or constricts the plausibility check.
3
- # #
4
- # plausible? number, hints = {}
5
- #
6
-
7
- # plausible? number # Uses the definitions from the country definition to plausibility check.
8
- # plausible? number, cc: 1 # => Checks cc.
9
- # plausible? number, pattern: /[^5]/ # Uses def, checks against split.
10
- # plausible? number, country: 1, pattern: [3, 4, 3] # Uses given country – adds cc.
11
- #
12
-
13
- # Basic plausibility is:
14
- # * Max digits are 15.
15
- # * Min digits are 2 (?)
16
- #
17
-
18
- module Phony
19
-
20
- class Validators
21
-
22
- def initialize
23
- @validators = {}
24
- end
25
-
26
- def self.instance
27
- @instance ||= new
28
- end
29
-
30
- # Add a specific country validator.
31
- #
32
- def add cc, validator
33
- @validators[cc] = validator
34
- end
35
-
36
- # Is the given number plausible?
37
- #
38
- def plausible? number, hints = {}
39
- normalized = CountryCodes.instance.clean number
40
-
41
- # False if it fails the basic check.
42
- #
43
- return false unless (4..15) === normalized.size
44
-
45
- # Hint based checking.
46
- #
47
- cc, ndc, *rest = Phony.split normalized
48
-
49
- # Element based checking.
50
- #
51
- # Note: ndc == false means the country has none.
52
- #
53
- return false if ndc.nil?
54
- return false if ndc && ndc.empty?
55
-
56
- # A valid range for the rest is 0 or 3+ total digits.
57
- #
58
- return false if (1..2) === rest.reduce(0) { |total, string| total + string.size }
59
-
60
- # CC.
61
- #
62
- cc_needed = hints[:cc]
63
- return false if cc_needed && !(cc_needed === cc)
64
-
65
- # NDC.
66
- #
67
- ndc_needed = hints[:ndc]
68
- return false if ndc_needed && !(ndc_needed === ndc)
69
-
70
- # Country specific checks.
71
- #
72
- validator = validator_for cc
73
- validator.plausible? ndc, rest
74
- rescue StandardError
75
- return false
76
- end
77
-
78
- def validator_for cc
79
- @validators[cc] || default_validator
80
- end
81
-
82
- def default_validator
83
- @default_validator ||= Validator.new
84
- end
85
-
86
- end
87
-
88
- end