piliponi 1.0.2 → 1.1.0

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.
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