orgno_validator 0.0.1
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 +17 -0
- data/Gemfile +4 -0
- data/Rakefile +21 -0
- data/lib/orgno_validator.rb +47 -0
- data/orgno_validator.gemspec +18 -0
- data/spec/orgno_validator_spec.rb +72 -0
- data/spec/spec_helper.rb +20 -0
- metadata +76 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'bundler'
|
2
|
+
require 'rake/testtask'
|
3
|
+
require 'rake/rdoctask'
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
Bundler::GemHelper.install_tasks
|
7
|
+
|
8
|
+
RSpec::Core::RakeTask.new do |t|
|
9
|
+
t.rspec_opts = %w(--format documentation --colour)
|
10
|
+
end
|
11
|
+
|
12
|
+
Rake::RDocTask.new do |rdoc|
|
13
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
14
|
+
|
15
|
+
rdoc.rdoc_dir = 'rdoc'
|
16
|
+
rdoc.title = "orgno_validator #{version}"
|
17
|
+
rdoc.rdoc_files.include('README*')
|
18
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
19
|
+
end
|
20
|
+
|
21
|
+
task :default => 'spec'
|
@@ -0,0 +1,47 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
class OrgnoValidator < ActiveModel::EachValidator
|
4
|
+
|
5
|
+
def validate_each(record, attribute, value)
|
6
|
+
unless OrgnoValidator.valid_orgno?(value)
|
7
|
+
record.errors.add(attribute, options[:message] || :invalid)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
BASE_MOD_11_WEIGHTS = [2, 3, 4, 5, 6, 7]
|
14
|
+
ORGNO_LENGTH = 9
|
15
|
+
|
16
|
+
class << self
|
17
|
+
attr_accessor :orgno_mod_11_weights
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.mod_11_weights_generator(length)
|
21
|
+
weights = []
|
22
|
+
(0..length-2).each do |index|
|
23
|
+
base_index = index % BASE_MOD_11_WEIGHTS.length
|
24
|
+
weights << BASE_MOD_11_WEIGHTS[base_index]
|
25
|
+
end
|
26
|
+
weights.reverse!
|
27
|
+
end
|
28
|
+
|
29
|
+
@orgno_mod_11_weights = OrgnoValidator.mod_11_weights_generator(ORGNO_LENGTH)
|
30
|
+
|
31
|
+
def self.valid_orgno?(orgno)
|
32
|
+
return false if !orgno || orgno.to_s.length != ORGNO_LENGTH
|
33
|
+
|
34
|
+
orgno_digits = orgno.to_s.each_char.map { |d| d.to_i }
|
35
|
+
sum = 0
|
36
|
+
|
37
|
+
(0..orgno_digits.length-2).each do |i|
|
38
|
+
sum += orgno_digits[i].to_i * @orgno_mod_11_weights[i]
|
39
|
+
end
|
40
|
+
|
41
|
+
remainder = sum % 11
|
42
|
+
control_digit = remainder == 0 ? 0 : 11 - remainder
|
43
|
+
|
44
|
+
return false if control_digit == 10
|
45
|
+
return control_digit == orgno_digits.last
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
Gem::Specification.new do |gem|
|
4
|
+
gem.authors = ["André Bonkowski"]
|
5
|
+
gem.email = ["andre@kodemaker.no"]
|
6
|
+
gem.description = %q{Validate Norwegian "organisasjonsnummer"}
|
7
|
+
gem.summary = %q{Simple validator that validate Norwegian "organisasjonsnummer}
|
8
|
+
gem.homepage = ""
|
9
|
+
|
10
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
11
|
+
gem.files = `git ls-files`.split("\n")
|
12
|
+
gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
13
|
+
gem.name = "orgno_validator"
|
14
|
+
gem.require_paths = ["lib"]
|
15
|
+
gem.version = '0.0.1'
|
16
|
+
gem.add_dependency("activemodel", ">= 0")
|
17
|
+
gem.add_development_dependency("rspec", ">= 0")
|
18
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
class TestCompany < TestModel
|
4
|
+
validates :orgno, :orgno => true
|
5
|
+
end
|
6
|
+
|
7
|
+
class TestCompanyAllowsNil < TestModel
|
8
|
+
validates :orgno, :orgno => {:allow_nil => true}
|
9
|
+
end
|
10
|
+
|
11
|
+
class TestCompanyAllowsNilFalse < TestModel
|
12
|
+
validates :orgno, :orgno => {:allow_nil => false}
|
13
|
+
end
|
14
|
+
|
15
|
+
class TestCompanyWithMessage < TestModel
|
16
|
+
validates :organisasjonsnummer, :orgno => {:message => 'is not looking very good!'}
|
17
|
+
end
|
18
|
+
|
19
|
+
describe OrgnoValidator do
|
20
|
+
|
21
|
+
describe "validation" do
|
22
|
+
context "given the valid orgno" do
|
23
|
+
[ "810243562", "948776901", "957929621"].each do |orgno|
|
24
|
+
it "#{orgno.inspect} should be valid" do
|
25
|
+
TestCompany.new(:orgno => orgno).should be_valid
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "given the invalid orgno" do
|
31
|
+
[ "810243561", "948776900", "957929620"].each do |orgno|
|
32
|
+
it "#{orgno.inspect} should not be valid" do
|
33
|
+
TestCompany.new(:orgno => orgno).should_not be_valid
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
describe "error messages" do
|
40
|
+
context "when the message is not defined" do
|
41
|
+
subject { TestCompany.new :orgno => '948776900' }
|
42
|
+
before { subject.valid? }
|
43
|
+
|
44
|
+
it "should add the default message" do
|
45
|
+
subject.errors[:orgno].should include "is invalid"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "when the message is defined" do
|
50
|
+
subject { TestCompanyWithMessage.new :organisasjonsnummer => '948776900' }
|
51
|
+
before { subject.valid? }
|
52
|
+
|
53
|
+
it "should add the customized message" do
|
54
|
+
subject.errors[:organisasjonsnummer].should include "is not looking very good!"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "nil email" do
|
60
|
+
it "should not be valid when :allow_nil option is missing" do
|
61
|
+
TestCompany.new(:orgno => nil).should_not be_valid
|
62
|
+
end
|
63
|
+
|
64
|
+
it "should be valid when :allow_nil options is set to true" do
|
65
|
+
TestCompanyAllowsNil.new(:orgno => nil).should be_valid
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should not be valid when :allow_nil option is set to false" do
|
69
|
+
TestCompanyAllowsNilFalse.new(:orgno => nil).should_not be_valid
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rspec'
|
3
|
+
require 'active_model'
|
4
|
+
|
5
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
7
|
+
|
8
|
+
require 'orgno_validator'
|
9
|
+
|
10
|
+
class TestModel
|
11
|
+
include ActiveModel::Validations
|
12
|
+
|
13
|
+
def initialize(attributes = {})
|
14
|
+
@attributes = attributes
|
15
|
+
end
|
16
|
+
|
17
|
+
def read_attribute_for_validation(key)
|
18
|
+
@attributes[key]
|
19
|
+
end
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,76 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: orgno_validator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- André Bonkowski
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2011-11-16 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: activemodel
|
16
|
+
requirement: &70364189810140 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70364189810140
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rspec
|
27
|
+
requirement: &70364189808940 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70364189808940
|
36
|
+
description: Validate Norwegian "organisasjonsnummer"
|
37
|
+
email:
|
38
|
+
- andre@kodemaker.no
|
39
|
+
executables: []
|
40
|
+
extensions: []
|
41
|
+
extra_rdoc_files: []
|
42
|
+
files:
|
43
|
+
- .gitignore
|
44
|
+
- Gemfile
|
45
|
+
- Rakefile
|
46
|
+
- lib/orgno_validator.rb
|
47
|
+
- orgno_validator.gemspec
|
48
|
+
- spec/orgno_validator_spec.rb
|
49
|
+
- spec/spec_helper.rb
|
50
|
+
homepage: ''
|
51
|
+
licenses: []
|
52
|
+
post_install_message:
|
53
|
+
rdoc_options: []
|
54
|
+
require_paths:
|
55
|
+
- lib
|
56
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
63
|
+
none: false
|
64
|
+
requirements:
|
65
|
+
- - ! '>='
|
66
|
+
- !ruby/object:Gem::Version
|
67
|
+
version: '0'
|
68
|
+
requirements: []
|
69
|
+
rubyforge_project:
|
70
|
+
rubygems_version: 1.8.10
|
71
|
+
signing_key:
|
72
|
+
specification_version: 3
|
73
|
+
summary: Simple validator that validate Norwegian "organisasjonsnummer
|
74
|
+
test_files:
|
75
|
+
- spec/orgno_validator_spec.rb
|
76
|
+
- spec/spec_helper.rb
|