magick_numbers 0.1.3

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.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
5
+ .rvmrc
data/Gemfile ADDED
@@ -0,0 +1,5 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem "rspec"
4
+ # Specify your gem's dependencies in nip_number.gemspec
5
+ gemspec
data/README.markdown ADDED
File without changes
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,40 @@
1
+ module MagickNumbers
2
+
3
+ class Base
4
+
5
+ attr_reader :magick_number, :regexp, :mask, :modulo, :length, :magick_array
6
+
7
+ def initialize(num)
8
+ @magick_number = num.to_s.gsub('-', '')
9
+ end
10
+
11
+ def valid?
12
+ validate
13
+ end
14
+
15
+ def validate
16
+ validate_regexp && validate_length && validate_sum_control
17
+ end
18
+
19
+ def validate_regexp
20
+ regexp =~ magick_number
21
+ end
22
+
23
+ def validate_length
24
+ magick_number.size == length
25
+ end
26
+
27
+ def validate_sum_control
28
+ mod = checksum % modulo
29
+ mod = 0 if mod == 10
30
+ mod === magick_array.shift
31
+ end
32
+
33
+ def checksum
34
+ @magick_array = magick_number.split( "").collect &:to_i
35
+ checksum = mask.inject(0) {|sum, weight| sum + weight * magick_array.shift}
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,32 @@
1
+ module MagickNumbers
2
+ class Nip < MagickNumbers::Base
3
+
4
+ def initialize(num)
5
+ super(num)
6
+ @mask = [ 6, 5, 7, 2, 3, 4, 5, 6, 7]
7
+ @modulo = 11
8
+ @regexp = /^(PL)?[0-9]*/
9
+ # @magick_number = num.to_s.gsub('-', '')
10
+
11
+ end
12
+
13
+
14
+
15
+ def validate_length
16
+ @magick_number.size == (international? ? 12 : 10)
17
+ end
18
+
19
+ def international?
20
+ /^PL/ =~ @magick_number
21
+ end
22
+
23
+ def validate_sum_control
24
+ magick_number.slice!(0..1) if international?
25
+ mod = checksum % modulo
26
+ mod === magick_array.shift
27
+ end
28
+
29
+
30
+ end
31
+
32
+ end
File without changes
@@ -0,0 +1,20 @@
1
+ module MagickNumbers
2
+ class Pesel < MagickNumbers::Base
3
+
4
+ def initialize(num)
5
+ super num
6
+ @mask = [ 1, 3, 7, 9, 1, 3, 7, 9, 1, 3]
7
+ @modulo = 10
8
+ @regexp = /\d{11}/
9
+ @length = 11
10
+ end
11
+
12
+ def validate_sum_control
13
+ mod = checksum % modulo
14
+ mod = 10 - mod
15
+ mod = 0 if mod == 10
16
+ mod === magick_array.shift
17
+ end
18
+ end
19
+
20
+ end
@@ -0,0 +1,22 @@
1
+ module MagickNumbers
2
+ class Regon
3
+
4
+ def initialize(num)
5
+ @factory = if(/^\d{9}$/ =~ num)
6
+ Regon9.new num
7
+ elsif(/^\d{14}$/ =~ num)
8
+ Regon14.new num
9
+ else
10
+ nil
11
+ end
12
+
13
+ end
14
+
15
+ def valid?
16
+ return @factory.valid? if @factory
17
+ false
18
+ end
19
+
20
+ end
21
+
22
+ end
@@ -0,0 +1,14 @@
1
+ module MagickNumbers
2
+
3
+ class Regon14 < MagickNumbers::Base
4
+ def initialize(num)
5
+ super num
6
+ @mask = [2, 4, 8, 5, 0, 9, 7, 3, 6, 1, 2, 4, 8]
7
+ @modulo = 11
8
+ @regexp = /^\d{14}$/
9
+ @length = 14
10
+ end
11
+
12
+ end
13
+
14
+ end
@@ -0,0 +1,15 @@
1
+ module MagickNumbers
2
+
3
+ class Regon9 < MagickNumbers::Base
4
+ def initialize(num)
5
+ super num
6
+ @mask = [8, 9, 2, 3, 4, 5, 6, 7]
7
+ @modulo = 11
8
+ @regexp = /^\d{9}$/
9
+ @length = 9
10
+
11
+ end
12
+
13
+ end
14
+
15
+ end
@@ -0,0 +1,3 @@
1
+ module MagickNumbers
2
+ VERSION = "0.1.3"
3
+ end
@@ -0,0 +1 @@
1
+ Dir[File.expand_path(File.dirname(__FILE__) + '/magick_numbers/*.rb')].each {|f| require f}
@@ -0,0 +1,21 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "magick_numbers/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "magick_numbers"
7
+ s.version = MagickNumbers::VERSION
8
+ s.platform = Gem::Platform::RUBY
9
+ s.authors = ["Mariusz Nosinski"]
10
+ s.email = ["marioosh@5dots.pl"]
11
+ s.homepage = "http://github.com/marioosh/magick_numbers"
12
+ s.summary = %q{Basic library to validate numbers like PESEL, NIP, etc}
13
+ s.description = %q{Magick numbers validates popular numbers like polish PESEL, NIP, REGON, or global ISBN, EAN, etc.}
14
+
15
+ s.rubyforge_project = "magick_numbers"
16
+
17
+ s.files = `git ls-files`.split("\n")
18
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
19
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
20
+ s.require_paths = ["lib"]
21
+ end
data/spec/nip_spec.rb ADDED
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'rspec'
3
+
4
+ describe "Nip" do
5
+
6
+ it "should be valid"do
7
+ valid_numbers = %w[123-456-32-18 1234563218 123-45-63-218 PL123-456-32-18]
8
+ valid_numbers.each do |n|
9
+ nip = MagickNumbers::Nip.new(n)
10
+ nip.should be_valid
11
+ end
12
+ end
13
+
14
+ it "should be invalid" do
15
+ invalid_numbers = %w[PL5912158688 PP5911158688 591-116-86-88 591-11-48-688 PL_591-115-86-88 PL591 591-11-58-6887]
16
+ invalid_numbers.each do |n|
17
+ nip = MagickNumbers::Nip.new(n)
18
+ nip.should_not be_valid
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'rspec'
3
+
4
+ describe "Pesel" do
5
+
6
+ it "should be valid"do
7
+ valid_numbers = %w[44051401359 02070803628]
8
+ valid_numbers.each do |n|
9
+ pesel = MagickNumbers::Pesel.new(n)
10
+ pesel.should be_valid
11
+ end
12
+ end
13
+
14
+ it "should be invalid" do
15
+ invalid_numbers = %w[44051401358 02070803629]
16
+ invalid_numbers.each do |n|
17
+ pesel = MagickNumbers::Pesel.new(n)
18
+ pesel.should_not be_valid
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+ require 'rspec'
3
+
4
+ describe "Regon" do
5
+
6
+ it "should be valid"do
7
+ valid_numbers = %w[192598184 123456785 12345678512347]
8
+ valid_numbers.each do |n|
9
+ regon = MagickNumbers::Regon.new(n)
10
+ regon.should be_valid
11
+ end
12
+ end
13
+
14
+ it "should be invalid" do
15
+ invalid_numbers = %w[192598284 1925982843 19259828 123456786 12345638512347]
16
+ invalid_numbers.each do |n|
17
+ regon = MagickNumbers::Regon.new(n)
18
+ regon.should_not be_valid
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,3 @@
1
+ Dir[File.expand_path(File.dirname(__FILE__) + "/../lib/**/*.rb")].each { |f| require f}
2
+ require 'rspec'
3
+
metadata ADDED
@@ -0,0 +1,77 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: magick_numbers
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.1.3
6
+ platform: ruby
7
+ authors:
8
+ - Mariusz Nosinski
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-31 00:00:00 +02:00
14
+ default_executable:
15
+ dependencies: []
16
+
17
+ description: Magick numbers validates popular numbers like polish PESEL, NIP, REGON, or global ISBN, EAN, etc.
18
+ email:
19
+ - marioosh@5dots.pl
20
+ executables: []
21
+
22
+ extensions: []
23
+
24
+ extra_rdoc_files: []
25
+
26
+ files:
27
+ - .gitignore
28
+ - Gemfile
29
+ - README.markdown
30
+ - Rakefile
31
+ - lib/magick_numbers.rb
32
+ - lib/magick_numbers/base.rb
33
+ - lib/magick_numbers/nip.rb
34
+ - lib/magick_numbers/nip_number.rb
35
+ - lib/magick_numbers/pesel.rb
36
+ - lib/magick_numbers/regon.rb
37
+ - lib/magick_numbers/regon14.rb
38
+ - lib/magick_numbers/regon9.rb
39
+ - lib/magick_numbers/version.rb
40
+ - magick_numbers.gemspec
41
+ - spec/nip_spec.rb
42
+ - spec/pesel_spec.rb
43
+ - spec/regon_spec.rb
44
+ - spec/spec_helper.rb
45
+ has_rdoc: true
46
+ homepage: http://github.com/marioosh/magick_numbers
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options: []
51
+
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ none: false
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ version: "0"
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ">="
64
+ - !ruby/object:Gem::Version
65
+ version: "0"
66
+ requirements: []
67
+
68
+ rubyforge_project: magick_numbers
69
+ rubygems_version: 1.6.2
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: Basic library to validate numbers like PESEL, NIP, etc
73
+ test_files:
74
+ - spec/nip_spec.rb
75
+ - spec/pesel_spec.rb
76
+ - spec/regon_spec.rb
77
+ - spec/spec_helper.rb