msisdn 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,4 @@
1
+ === 0.0.1 2009-11-06
2
+
3
+ * 1 major enhancement:
4
+ * Initial release
data/Manifest.txt ADDED
@@ -0,0 +1,13 @@
1
+ History.txt
2
+ Manifest.txt
3
+ PostInstall.txt
4
+ README.rdoc
5
+ Rakefile
6
+ config/hoe.rb
7
+ lib/msisdn.rb
8
+ msisdn.gemspec
9
+ script/console
10
+ script/destroy
11
+ script/generate
12
+ test/test_helper.rb
13
+ test/test_msisdn.rb
data/PostInstall.txt ADDED
@@ -0,0 +1,7 @@
1
+
2
+ For more information on msisdn, see http://msisdn.rubyforge.org
3
+
4
+ NOTE: Change this information in PostInstall.txt
5
+ You can also delete it if you don't want it.
6
+
7
+
data/README.rdoc ADDED
@@ -0,0 +1,48 @@
1
+ = msisdn
2
+
3
+ * http://github.com/armanddp/msisdn
4
+
5
+ == DESCRIPTION:
6
+
7
+ Basic msisdn processing and parsing
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+
12
+ == SYNOPSIS:
13
+
14
+ def parse_msisdn(number)
15
+ Msisdn.new number
16
+ end
17
+
18
+ == REQUIREMENTS:
19
+
20
+
21
+ == INSTALL:
22
+
23
+ * sudo gem install msisdn
24
+
25
+ == LICENSE:
26
+
27
+ (The MIT License)
28
+
29
+ Copyright (c) 2009 Armand du Plessis
30
+
31
+ Permission is hereby granted, free of charge, to any person obtaining
32
+ a copy of this software and associated documentation files (the
33
+ 'Software'), to deal in the Software without restriction, including
34
+ without limitation the rights to use, copy, modify, merge, publish,
35
+ distribute, sublicense, and/or sell copies of the Software, and to
36
+ permit persons to whom the Software is furnished to do so, subject to
37
+ the following conditions:
38
+
39
+ The above copyright notice and this permission notice shall be
40
+ included in all copies or substantial portions of the Software.
41
+
42
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
43
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
44
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
45
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
46
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
47
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
48
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ gem 'hoe', '>= 2.1.0'
3
+ require 'hoe'
4
+ require 'fileutils'
5
+ require './lib/msisdn'
6
+
7
+ Hoe.plugin :newgem
8
+ # Hoe.plugin :website
9
+ # Hoe.plugin :cucumber_features
10
+
11
+ # Generate all the Rake tasks
12
+ # Run 'rake -T' to see list of generated tasks (from gem root directory)
13
+ $hoe = Hoe.spec 'msisdn' do
14
+ self.developer 'Armand du Plessis', 'armanddp@agilisto.com'
15
+ self.rubyforge_name = self.name # TODO this is default value
16
+ # self.extra_deps = [['activesupport','>= 2.0.2']]
17
+
18
+ end
19
+
20
+ require 'newgem/tasks'
21
+ Dir['tasks/**/*.rake'].each { |t| load t }
22
+
23
+ # TODO - want other tests/tasks run by default? Add them to the list
24
+ # remove_task :default
25
+ # task :default => [:spec, :features]
data/config/hoe.rb ADDED
@@ -0,0 +1 @@
1
+ sadasd
data/lib/msisdn.rb ADDED
@@ -0,0 +1,67 @@
1
+ $:.unshift(File.dirname(__FILE__)) unless
2
+ $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
3
+
4
+ VERSION = "0.0.1"
5
+
6
+ class Msisdn
7
+ attr_accessor :original, :msisdn, :national_number, :dialing_code, :network, :country_code
8
+
9
+ INTERNATIONAL_COUNTRY_CODE = /^\+(1|2[1-689]\d|2[07]|3[0-469]|3[578]\d|4[0-13-9]|42\d|5[09]\d|5[1-8]|6[0-6]|6[7-9]\d|7|8[035789]\d|8[1246]|9[0-58]|9[679]\d)(\d+)/
10
+ INTERNATIONAL_COUNTRY_CODE_NO_PREFIX = /(1|2[1-689]\d|2[07]|3[0-469]|3[578]\d|4[0-13-9]|42\d|5[09]\d|5[1-8]|6[0-6]|6[7-9]\d|7|8[035789]\d|8[1246]|9[0-58]|9[679]\d)(\d+)/
11
+ EXACTLY_10_DIGITS = /^(\d{10})$/
12
+
13
+ def initialize(msisdn, default_country_code = nil)
14
+ msisdn.gsub!( /[\s()\-a-zA-Z]/, '')
15
+ @default_country_code = default_country_code
16
+
17
+ @original = @msisdn = msisdn
18
+ unless match_local(msisdn)
19
+ match_international
20
+ end
21
+ end
22
+
23
+ def to_s
24
+ @formatted_number
25
+ end
26
+
27
+ def international
28
+ return nil if @country_code.nil?
29
+ "#{@country_code}#{@network}#{@subscriber}"
30
+ end
31
+
32
+ private
33
+ def match_local(number)
34
+ if number =~ EXACTLY_10_DIGITS
35
+ @national_number = number
36
+ @country_code ||= @default_country_code
37
+ if @national_number =~ INTERNATIONAL_COUNTRY_CODE_NO_PREFIX # this also works for matching local numbers
38
+ @network, @subscriber = $1, $2
39
+ end
40
+ return true
41
+ end
42
+ false
43
+ end
44
+
45
+ def match_international
46
+ if @msisdn =~ INTERNATIONAL_COUNTRY_CODE
47
+ @country_code, @national_number = $1, $2
48
+ unless @national_number =~ /^0/
49
+ @national_number = @national_number.rjust(10, '0')
50
+ end
51
+ match_local @national_number
52
+ else
53
+ match_international_no_prefix
54
+ end
55
+ end
56
+
57
+ def match_international_no_prefix
58
+ if @msisdn =~ INTERNATIONAL_COUNTRY_CODE_NO_PREFIX
59
+ @country_code, @national_number = $1, $2
60
+ unless @national_number =~ /^0/
61
+ @national_number = @national_number.rjust(10, '0')
62
+ end
63
+ match_local @national_number
64
+ end
65
+ end
66
+
67
+ end
data/msisdn.gemspec ADDED
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{msisdn}
5
+ s.version = "0.0.1"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["Armand du Plessis"]
9
+ s.date = %q{2009-11-06}
10
+ s.description = %q{Basic msisdn processing and parsing}
11
+ s.email = ["armanddp@agilisto.com"]
12
+ s.extra_rdoc_files = ["History.txt", "Manifest.txt", "PostInstall.txt"]
13
+ s.files = ["History.txt", "Manifest.txt", "PostInstall.txt", "README.rdoc", "Rakefile", "config/hoe.rb", "lib/msisdn.rb", "msisdn.gemspec", "script/console", "script/destroy", "script/generate", "test/test_helper.rb", "test/test_msisdn.rb"]
14
+ s.homepage = %q{http://github.com/armanddp/msisdn}
15
+ s.rdoc_options = ["--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = %q{msisdn}
18
+ s.rubygems_version = %q{1.3.5}
19
+ s.summary = %q{Basic msisdn processing and parsing}
20
+ s.test_files = ["test/test_helper.rb", "test/test_msisdn.rb"]
21
+
22
+ end
data/script/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+ # File: script/console
3
+ irb = RUBY_PLATFORM =~ /(:?mswin|mingw)/ ? 'irb.bat' : 'irb'
4
+
5
+ libs = " -r irb/completion"
6
+ # Perhaps use a console_lib to store any extra methods I may want available in the cosole
7
+ # libs << " -r #{File.dirname(__FILE__) + '/../lib/console_lib/console_logger.rb'}"
8
+ libs << " -r #{File.dirname(__FILE__) + '/../lib/msisdn.rb'}"
9
+ puts "Loading msisdn gem"
10
+ exec "#{irb} #{libs} --simple-prompt"
data/script/destroy ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/destroy'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Destroy.new.run(ARGV)
data/script/generate ADDED
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__), '..'))
3
+
4
+ begin
5
+ require 'rubigen'
6
+ rescue LoadError
7
+ require 'rubygems'
8
+ require 'rubigen'
9
+ end
10
+ require 'rubigen/scripts/generate'
11
+
12
+ ARGV.shift if ['--help', '-h'].include?(ARGV[0])
13
+ RubiGen::Base.use_component_sources! [:rubygems, :newgem, :newgem_theme, :test_unit]
14
+ RubiGen::Scripts::Generate.new.run(ARGV)
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/msisdn'
@@ -0,0 +1,54 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class MsisdnTest < Test::Unit::TestCase
4
+
5
+ def test_international_dial_code
6
+ msisdn = Msisdn.new('+27825559629')
7
+ assert_equal '27', msisdn.country_code
8
+ end
9
+
10
+ def test_national_number_converter_with_default_code
11
+ msisdn = Msisdn.new('0825559629', '27')
12
+ assert_equal '27', msisdn.country_code
13
+ assert_equal '27825559629', msisdn.international
14
+ end
15
+
16
+ def test_national_number_converter_with_no_default_code
17
+ msisdn = Msisdn.new('0825559629')
18
+ assert_nil msisdn.country_code
19
+ end
20
+
21
+ def test_international_number_without_plus
22
+ msisdn = Msisdn.new('27825559629')
23
+ assert_equal '27', msisdn.country_code
24
+ assert_equal '27825559629', msisdn.international
25
+ end
26
+
27
+ def test_three_digit_international_code
28
+ msisdn = Msisdn.new('+995825559629')
29
+ assert_equal '995', msisdn.country_code
30
+ assert_equal '0825559629', msisdn.national_number
31
+ end
32
+
33
+ def test_american_international_number
34
+ msisdn = Msisdn.new '718-258-5200'
35
+ assert_equal '7182585200', msisdn.national_number
36
+ assert_nil msisdn.country_code
37
+ assert_nil msisdn.international
38
+ end
39
+
40
+ def test_russian_international_number_with_country_code
41
+ msisdn = Msisdn.new '79261234567'
42
+ assert_equal '9261234567', msisdn.national_number
43
+ assert_equal '7', msisdn.country_code
44
+ assert_equal '79261234567', msisdn.international
45
+ end
46
+
47
+ def test_russian_international_number_without_country_code_but_with_default
48
+ msisdn = Msisdn.new '926-123-4567', '7'
49
+ assert_equal '9261234567', msisdn.national_number
50
+ assert_equal '7', msisdn.country_code
51
+ assert_equal '79261234567', msisdn.international
52
+ end
53
+
54
+ end
metadata ADDED
@@ -0,0 +1,81 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: msisdn
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Armand du Plessis
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-06 00:00:00 +02:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.2
24
+ version:
25
+ description: Basic msisdn processing and parsing
26
+ email:
27
+ - armanddp@agilisto.com
28
+ executables: []
29
+
30
+ extensions: []
31
+
32
+ extra_rdoc_files:
33
+ - History.txt
34
+ - Manifest.txt
35
+ - PostInstall.txt
36
+ files:
37
+ - History.txt
38
+ - Manifest.txt
39
+ - PostInstall.txt
40
+ - README.rdoc
41
+ - Rakefile
42
+ - config/hoe.rb
43
+ - lib/msisdn.rb
44
+ - msisdn.gemspec
45
+ - script/console
46
+ - script/destroy
47
+ - script/generate
48
+ - test/test_helper.rb
49
+ - test/test_msisdn.rb
50
+ has_rdoc: true
51
+ homepage: http://github.com/armanddp/msisdn
52
+ licenses: []
53
+
54
+ post_install_message:
55
+ rdoc_options:
56
+ - --main
57
+ - README.rdoc
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ version: "0"
71
+ version:
72
+ requirements: []
73
+
74
+ rubyforge_project: msisdn
75
+ rubygems_version: 1.3.5
76
+ signing_key:
77
+ specification_version: 3
78
+ summary: Basic msisdn processing and parsing
79
+ test_files:
80
+ - test/test_helper.rb
81
+ - test/test_msisdn.rb