piliponi 1.0.2 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e17b42c405d47c28ce0322084f2807d51bfaca6d
4
+ data.tar.gz: a4bd72acdc0c0c7ae91f1a05e3d7cc8f27800f02
5
+ SHA512:
6
+ metadata.gz: db1d7ff2967a5fe8478e129d412e7d82635b7b5b2a80012640ca602e0b82a40dd4918ca3c4b6d4d29385747eaad930c3f8b4547089bc555182b5ada6414bf640
7
+ data.tar.gz: d7210b10f80175e02137bb9a500b6629e28bcae974934b237d8cf7b8ec7c7bb79148d10e1a7c8c10380cbc1c8244f0106e9a382b67266ec3c06938413932b9c4
data/README.md CHANGED
@@ -19,7 +19,7 @@ Or install it yourself as:
19
19
  $ gem install piliponi
20
20
 
21
21
  ## Usage
22
- Include piliponi to your class to use its methods
22
+ Include piliponi to your class to use its methods or access it directly as singleton methods.
23
23
 
24
24
  class Dummy
25
25
  include Piliponi
@@ -27,38 +27,52 @@ Include piliponi to your class to use its methods
27
27
 
28
28
  dummy = Dummy.new
29
29
 
30
+
30
31
  ###Plausible
31
32
  Check if the number is a probable mobile number
32
33
 
33
- dummy.plausible? "091700000001" #true
34
- dummy.plausible? "NotaNumber" #false
34
+ Piliponi.plausible? "09170000001" #true
35
+ dummy.plausible? "091700000001" #true
36
+ dummy.plausible? "NotaNumber" #false
35
37
 
36
38
  ###Clean
37
39
  Removes Non-numeric characters
38
40
 
39
- dummy.clean "+639-17-000-0001" #639170000001
41
+ Piliponi.clean "+639-17-000-0001" #639170000001
42
+ dummy.clean "+639-17-000-0001" #639170000001
40
43
 
41
44
  ###Telco
42
45
  Returns local Telco coverage of a given number
43
46
 
47
+ Piliponi.telco "09170000001" #globe
44
48
  dummy.telco "09170000001" #globe
45
49
 
46
50
  ###Normalization
47
51
  Returns formatted numbers as specified
48
52
 
49
53
  ####Local
54
+
55
+ Piliponi.normalize("0917-000-0000", format: :local) #09170000000
50
56
  dummy.normalize("0917-000-0000", format: :local) #09170000000
51
57
 
52
58
  ####International
59
+
60
+ Piliponi.normalize("0917-000-0000", format: :international) #+639170000000
53
61
  dummy.normalize("0917-000-0000", format: :international) #+639170000000
54
62
 
55
63
  ####Pure
64
+
65
+ Piliponi.normalize("0917-000-0000", format: :pure) #9170000000
56
66
  dummy.normalize("0917-000-0000", format: :pure) #9170000000
57
67
 
58
68
  ####Erroneous Numbers
69
+
70
+ Piliponi.normalize("wat", format: :pure) #Piliponi::InvalidPhoneNumberException
59
71
  dummy.normalize("wat", format: :pure) #Piliponi::InvalidPhoneNumberException
60
72
 
61
73
  ####Wrong format
74
+
75
+ Piliponi.normalize("0917-000-0000", format: :none) #Piliponi::FormatNotRecognizedException
62
76
  dummy.normalize("0917-000-0000", format: :none) #Piliponi::FormatNotRecognizedException
63
77
 
64
78
  ##Needs
@@ -0,0 +1,59 @@
1
+ module Core
2
+ class ::FormatNotRecognizedException < Exception; end;
3
+ class ::InvalidPhoneNumberException < Exception; end;
4
+
5
+ def plausible? number
6
+ return false if number.nil?
7
+
8
+ clean_num = clean(number)
9
+ size = clean_num.size
10
+
11
+ ((clean_num[0] == "9" && size == 10) ||
12
+ (clean_num[0..1] == "63" && size == 12) ||
13
+ (clean_num[0..1] == "09" && size == 11)) &&
14
+ telco?(clean_num) != "unknown"
15
+ end
16
+
17
+ def normalize(number, options={})
18
+ formats = [:pure, :local, :international]
19
+ format = options[:format].intern
20
+
21
+ raise FormatNotRecognizedException unless formats.include?(format)
22
+
23
+ return send "_nf_#{format}", clean(number) if plausible?(number)
24
+ raise InvalidPhoneNumberException
25
+ end
26
+
27
+ def clean(number=nil)
28
+ number.tr('^0-9','') if number
29
+ end
30
+
31
+ def telco? number=nil
32
+ PiliponiApi.new.lookup prefix(clean number)
33
+ end
34
+
35
+ def prefix number=nil
36
+ hash = { '0' => [0,3], '6' => [2,4], '9' => [0,2] }
37
+ start, finish = hash[number[0]].first, hash[number[0]].last
38
+ clean_prefix(number[start..finish])
39
+ end
40
+
41
+ def clean_prefix(number)
42
+ number = "0#{number}" if number[0] != '0'; number
43
+ end
44
+
45
+ private
46
+
47
+ def _nf_pure(number)
48
+ number[-10..-1]
49
+ end
50
+
51
+ def _nf_local(number)
52
+ '0' << _nf_pure(number)
53
+ end
54
+
55
+ def _nf_international(number)
56
+ '+63' << _nf_pure(number)
57
+ end
58
+
59
+ end
@@ -1,4 +1,4 @@
1
- module Piliponi
1
+ module Core
2
2
  class PiliponiApi
3
3
  def lookup(prefix)
4
4
  smart = %w{0813 0918 0947 0998 0999}
@@ -0,0 +1,11 @@
1
+ module SingletonMethodSupport
2
+
3
+ module SingletonMethods
4
+ include Core
5
+ end
6
+
7
+ def self.included(base)
8
+ base.extend SingletonMethods
9
+ end
10
+
11
+ end
@@ -1,3 +1,3 @@
1
1
  module Piliponi
2
- VERSION = "1.0.2"
2
+ VERSION = "1.1.0"
3
3
  end
data/lib/piliponi.rb CHANGED
@@ -1,61 +1,9 @@
1
+ require "piliponi/core"
1
2
  require "piliponi/version"
2
3
  require "piliponi/piliponi_api"
4
+ require "piliponi/support"
3
5
 
4
6
  module Piliponi
5
- class ::FormatNotRecognizedException < Exception; end;
6
- class ::InvalidPhoneNumberException < Exception; end;
7
-
8
- def plausible? number
9
- return false if number.nil?
10
-
11
- clean_num = clean(number)
12
- size = clean_num.size
13
-
14
- ((clean_num[0] == "9" && size == 10) ||
15
- (clean_num[0..1] == "63" && size == 12) ||
16
- (clean_num[0..1] == "09" && size == 11)) &&
17
- telco?(clean_num) != "unknown"
18
- end
19
-
20
- def normalize(number, options={})
21
- formats = [:pure, :local, :international]
22
- format = options[:format].intern
23
-
24
- raise FormatNotRecognizedException unless formats.include?(format)
25
-
26
- return send "_nf_#{format}", clean(number) if plausible?(number)
27
- raise InvalidPhoneNumberException
28
- end
29
-
30
- def clean(number=nil)
31
- number.tr('^0-9','') if number
32
- end
33
-
34
- def telco? number=nil
35
- PiliponiApi.new.lookup prefix(clean number)
36
- end
37
-
38
- def prefix number=nil
39
- hash = { '0' => [0,3], '6' => [2,4], '9' => [0,2] }
40
- start, finish = hash[number[0]].first, hash[number[0]].last
41
- clean_prefix(number[start..finish])
42
- end
43
-
44
- def clean_prefix(number)
45
- number = "0#{number}" if number[0] != '0'; number
46
- end
47
-
48
- private
49
-
50
- def _nf_pure(number)
51
- number[-10..-1]
52
- end
53
-
54
- def _nf_local(number)
55
- '0' << _nf_pure(number)
56
- end
57
-
58
- def _nf_international(number)
59
- '+63' << _nf_pure(number)
60
- end
7
+ include Core
8
+ include SingletonMethodSupport
61
9
  end
@@ -5,111 +5,255 @@ class Dummy
5
5
  end
6
6
 
7
7
  describe Piliponi do
8
- let!(:dummy) { Dummy.new }
9
8
 
10
- context "#plausible?" do
11
- it "works" do
12
- lambda do
13
- dummy.plausible?("whatevs")
14
- end.should_not raise_error
15
- end
9
+ describe "as Instance Methods" do
10
+ let!(:piliponi) { Dummy.new }
16
11
 
17
- it "returns true given 9170000001" do
18
- dummy.plausible?("9170000001").should eq(true)
19
- end
12
+ context "#plausible?" do
20
13
 
21
- it "returns true given 639170000001" do
22
- dummy.plausible?("639170000001").should eq(true)
23
- end
14
+ it "works" do
15
+ lambda do
16
+ piliponi.plausible?("whatevs")
17
+ end.should_not raise_error
18
+ end
24
19
 
25
- it "returns true given +639170000001" do
26
- dummy.plausible?("+639170000001").should eq(true)
27
- end
20
+ it "returns true given 9170000001" do
21
+ piliponi.plausible?("9170000001").should eq(true)
22
+ end
28
23
 
29
- it "returns false given a non-numerical string" do
30
- dummy.plausible?("wawa").should eq(false)
31
- end
24
+ it "returns true given 639170000001" do
25
+ piliponi.plausible?("639170000001").should eq(true)
26
+ end
32
27
 
33
- end
28
+ it "returns true given +639170000001" do
29
+ piliponi.plausible?("+639170000001").should eq(true)
30
+ end
34
31
 
35
- context "#clean" do
36
- it "removes characters" do
37
- dummy.clean("+639170000001").should eq("639170000001")
38
- end
32
+ it "returns false given a non-numerical string" do
33
+ piliponi.plausible?("wawa").should eq(false)
34
+ end
39
35
 
40
- it "returns nil if no number is placed" do
41
- dummy.clean.should be_nil
42
36
  end
43
- end
44
37
 
45
- context "#normalize" do
46
- let(:number) { '(0919) 363-2598' }
38
+ context "#clean" do
39
+
40
+ it "removes characters" do
41
+ piliponi.clean("+639170000001").should eq("639170000001")
42
+ end
43
+
44
+ it "returns nil if no number is placed" do
45
+ piliponi.clean.should be_nil
46
+ end
47
47
 
48
- it "formats to 09XXXXXXXX" do
49
- dummy.normalize(number, {format: 'local'}).should eq('09193632598')
50
48
  end
51
49
 
52
- it "formats to +639XXXXXXX" do
53
- dummy.normalize(number, {format: 'international'}).should eq('+639193632598')
50
+ context "#normalize" do
51
+ let(:number) { '(0919) 363-2598' }
52
+
53
+ it "formats to 09XXXXXXXX" do
54
+ piliponi.normalize(number, {format: 'local'}).should eq('09193632598')
55
+ end
56
+
57
+ it "formats to +639XXXXXXX" do
58
+ piliponi.normalize(number, {format: 'international'}).should eq('+639193632598')
59
+ end
60
+
61
+ it "formats to 9XXXXXXX" do
62
+ piliponi.normalize(number, {format: 'pure'}).should eq('9193632598')
63
+ end
64
+
65
+ context "when the format passed is not recognized" do
66
+
67
+ it "raises FormatNotRecognizedException" do
68
+ expect{
69
+ piliponi.normalize(number, format: :foo)
70
+ }.to raise_error(FormatNotRecognizedException)
71
+
72
+ expect{
73
+ piliponi.normalize(number, format: :foo)
74
+ }.to raise_error(FormatNotRecognizedException)
75
+ end
76
+
77
+ end
78
+
79
+ context "when the number is not valid" do
80
+
81
+ it "raises InvalidPhoneNumberException" do
82
+ expect{
83
+ piliponi.normalize("notanumber", format: :local)
84
+ }.to raise_error(InvalidPhoneNumberException)
85
+ end
86
+
87
+ end
54
88
  end
55
89
 
56
- it "formats to 9XXXXXXX" do
57
- dummy.normalize(number, {format: 'pure'}).should eq('9193632598')
90
+ context "#telco?" do
91
+
92
+ it "returns smart for 09XX" do
93
+ piliponi.telco?('09181234567').should eq('smart')
94
+ end
95
+
96
+ it "returns globe for 09XX" do
97
+ piliponi.telco?("09170000000").should eq("globe")
98
+ end
99
+
100
+ it "returns sun for 09XX" do
101
+ piliponi.telco?("09220000000").should eq("sun")
102
+ end
103
+
104
+ it "returns talk and text/ addict or red" do
105
+ piliponi.telco?("09070000000").should eq("smart_others")
106
+ end
107
+
58
108
  end
59
109
 
60
- context "when the format passed is not recognized" do
61
- it "raises FormatNotRecognizedException" do
62
- expect{
63
- dummy.normalize(number, format: :foo)
64
- }.to raise_error(FormatNotRecognizedException)
110
+ context '#prefix' do
111
+ describe '09171231234' do
112
+
113
+ it 'returns 0917' do
114
+ expect(piliponi.prefix('09171231234')).to eq '0917'
115
+ expect(piliponi.prefix('639171231234')).to eq '0917'
116
+ expect(piliponi.prefix('9171231234')).to eq '0917'
117
+ end
118
+
65
119
  end
66
120
  end
67
121
 
68
- context "when the number is not valid" do
69
- it "raises InvalidPhoneNumberException" do
70
- expect{
71
- dummy.normalize("notanumber", format: :local)
72
- }.to raise_error(InvalidPhoneNumberException)
122
+ context '#clean_prefix' do
123
+ describe '0917' do
124
+
125
+ it 'retunrs 0917' do
126
+ expect(piliponi.prefix('0917')).to eq '0917'
127
+ expect(piliponi.prefix('63917')).to eq '0917'
128
+ expect(piliponi.prefix('917')).to eq '0917'
129
+ end
130
+
73
131
  end
74
132
  end
75
133
  end
76
134
 
77
- context "#telco?" do
78
- it "returns smart for 09XX" do
79
- dummy.telco?('09181234567').should eq('smart')
135
+ describe "as Singleton Methods" do
136
+
137
+ context "#plausible?" do
138
+
139
+ it "works" do
140
+ lambda do
141
+ Piliponi.plausible?("whatevs")
142
+ end.should_not raise_error
143
+ end
144
+
145
+ it "returns true given 9170000001" do
146
+ Piliponi.plausible?("9170000001").should eq(true)
147
+ end
148
+
149
+ it "returns true given 639170000001" do
150
+ Piliponi.plausible?("639170000001").should eq(true)
151
+ end
152
+
153
+ it "returns true given +639170000001" do
154
+ Piliponi.plausible?("+639170000001").should eq(true)
155
+ end
156
+
157
+ it "returns false given a non-numerical string" do
158
+ Piliponi.plausible?("wawa").should eq(false)
159
+ end
160
+
80
161
  end
81
162
 
82
- it "returns globe for 09XX" do
83
- dummy.telco?("09170000000").should eq("globe")
163
+ context "#clean" do
164
+
165
+ it "removes characters" do
166
+ Piliponi.clean("+639170000001").should eq("639170000001")
167
+ end
168
+
169
+ it "returns nil if no number is placed" do
170
+ Piliponi.clean.should be_nil
171
+ end
172
+
84
173
  end
85
174
 
86
- it "returns sun for 09XX" do
87
- dummy.telco?("09220000000").should eq("sun")
175
+ context "#normalize" do
176
+ let(:number) { '(0919) 363-2598' }
177
+
178
+ it "formats to 09XXXXXXXX" do
179
+ Piliponi.normalize(number, {format: 'local'}).should eq('09193632598')
180
+ end
181
+
182
+ it "formats to +639XXXXXXX" do
183
+ Piliponi.normalize(number, {format: 'international'}).should eq('+639193632598')
184
+ end
185
+
186
+ it "formats to 9XXXXXXX" do
187
+ Piliponi.normalize(number, {format: 'pure'}).should eq('9193632598')
188
+ end
189
+
190
+ context "when the format passed is not recognized" do
191
+
192
+ it "raises FormatNotRecognizedException" do
193
+ expect{
194
+ Piliponi.normalize(number, format: :foo)
195
+ }.to raise_error(FormatNotRecognizedException)
196
+
197
+ expect{
198
+ Piliponi.normalize(number, format: :foo)
199
+ }.to raise_error(FormatNotRecognizedException)
200
+ end
201
+
202
+ end
203
+
204
+ context "when the number is not valid" do
205
+
206
+ it "raises InvalidPhoneNumberException" do
207
+ expect{
208
+ Piliponi.normalize("notanumber", format: :local)
209
+ }.to raise_error(InvalidPhoneNumberException)
210
+ end
211
+
212
+ end
88
213
  end
89
214
 
90
- it "returns talk and text/ addict or red" do
91
- dummy.telco?("09070000000").should eq("smart_others")
215
+ context "#telco?" do
216
+
217
+ it "returns smart for 09XX" do
218
+ Piliponi.telco?('09181234567').should eq('smart')
219
+ end
220
+
221
+ it "returns globe for 09XX" do
222
+ Piliponi.telco?("09170000000").should eq("globe")
223
+ end
224
+
225
+ it "returns sun for 09XX" do
226
+ Piliponi.telco?("09220000000").should eq("sun")
227
+ end
228
+
229
+ it "returns talk and text/ addict or red" do
230
+ Piliponi.telco?("09070000000").should eq("smart_others")
231
+ end
232
+
92
233
  end
93
- end
94
234
 
95
- context '#prefix' do
96
- describe '09171231234' do
97
- it 'returns 0917' do
98
- expect(dummy.prefix('09171231234')).to eq '0917'
99
- expect(dummy.prefix('639171231234')).to eq '0917'
100
- expect(dummy.prefix('9171231234')).to eq '0917'
235
+ context '#prefix' do
236
+ describe '09171231234' do
237
+
238
+ it 'returns 0917' do
239
+ expect(Piliponi.prefix('09171231234')).to eq '0917'
240
+ expect(Piliponi.prefix('639171231234')).to eq '0917'
241
+ expect(Piliponi.prefix('9171231234')).to eq '0917'
242
+ end
243
+
101
244
  end
102
245
  end
103
- end
104
246
 
105
- context '#clean_prefix' do
106
- describe '0917' do
107
- it 'retunrs 0917' do
108
- expect(dummy.prefix('0917')).to eq '0917'
109
- expect(dummy.prefix('63917')).to eq '0917'
110
- expect(dummy.prefix('917')).to eq '0917'
247
+ context '#clean_prefix' do
248
+ describe '0917' do
249
+
250
+ it 'retunrs 0917' do
251
+ expect(Piliponi.prefix('0917')).to eq '0917'
252
+ expect(Piliponi.prefix('63917')).to eq '0917'
253
+ expect(Piliponi.prefix('917')).to eq '0917'
254
+ end
255
+
111
256
  end
112
257
  end
113
258
  end
114
-
115
259
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: piliponi
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
5
- prerelease:
4
+ version: 1.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Ace Dimasuhid
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-09-13 00:00:00.000000000 Z
11
+ date: 2013-11-06 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: bundler
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,33 +27,29 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rspec
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - '>='
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - '>='
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  description: Philippine Mobile Phone Formatter
@@ -73,7 +66,9 @@ files:
73
66
  - README.md
74
67
  - Rakefile
75
68
  - lib/piliponi.rb
69
+ - lib/piliponi/core.rb
76
70
  - lib/piliponi/piliponi_api.rb
71
+ - lib/piliponi/support.rb
77
72
  - lib/piliponi/version.rb
78
73
  - piliponi.gemspec
79
74
  - spec/piliponi_spec.rb
@@ -81,27 +76,26 @@ files:
81
76
  homepage: ''
82
77
  licenses:
83
78
  - MIT
79
+ metadata: {}
84
80
  post_install_message:
85
81
  rdoc_options: []
86
82
  require_paths:
87
83
  - lib
88
84
  required_ruby_version: !ruby/object:Gem::Requirement
89
- none: false
90
85
  requirements:
91
- - - ! '>='
86
+ - - '>='
92
87
  - !ruby/object:Gem::Version
93
88
  version: '0'
94
89
  required_rubygems_version: !ruby/object:Gem::Requirement
95
- none: false
96
90
  requirements:
97
- - - ! '>='
91
+ - - '>='
98
92
  - !ruby/object:Gem::Version
99
93
  version: '0'
100
94
  requirements: []
101
95
  rubyforge_project:
102
- rubygems_version: 1.8.24
96
+ rubygems_version: 2.0.6
103
97
  signing_key:
104
- specification_version: 3
98
+ specification_version: 4
105
99
  summary: Mobile Phone Number Formatter for the Philippines
106
100
  test_files:
107
101
  - spec/piliponi_spec.rb