romanianvalidators 0.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.
data/.gitignore ADDED
@@ -0,0 +1,5 @@
1
+ *.swp
2
+ *.gem
3
+ *.rbc
4
+ Gemfile.lock
5
+ .rvmrc
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ rvm:
3
+ - 1.8.7
4
+ - ree
5
+ - jruby-18mode
6
+ - rbx-18mode
7
+ - 1.9.2
8
+ - 1.9.3
9
+ - jruby-19mode
10
+ - rbx-19mode
11
+ - ruby-head
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source :rubygems
2
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2007, 2012 Mihai Târnovan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,18 @@
1
+ # Romanian Validators
2
+
3
+ Rails validators for:
4
+
5
+ * Cod Numeric Personal (CNP)
6
+ * Cod de identificare fiscală (CIF) and
7
+ * IBAN (only Romanian format as published by Romanian National Bank).
8
+
9
+ # Installation
10
+
11
+
12
+ # TODO
13
+
14
+ * test more edge cases; test nil, blank; test messages
15
+
16
+ ## Copyright
17
+
18
+ Copyright (c) 2007-2012 Mihai Târnovan. MIT LICENSE. See LICENSE for details.
data/Rakefile ADDED
@@ -0,0 +1,49 @@
1
+ require 'rubygems'
2
+ require 'rubygems/specification'
3
+
4
+ require 'bundler'
5
+ Bundler::GemHelper.install_tasks
6
+
7
+ require 'rake/testtask'
8
+ Rake::TestTask.new do |t|
9
+ t.libs << "test"
10
+ t.pattern = "test/**/*_test.rb"
11
+ t.verbose = true
12
+ t.warning = true
13
+ end
14
+
15
+ # -*- encoding: utf-8 -*-
16
+ $:.unshift File.expand_path("../lib", __FILE__)
17
+ require 'romanianvalidators'
18
+
19
+ def gemspec
20
+ @gemspec ||= begin
21
+ file = File.expand_path('../romanianvalidators.gemspec', __FILE__)
22
+ eval(File.read(file), binding, file)
23
+ end
24
+ end
25
+
26
+ desc "Run the full spec suite"
27
+ task :full => ["test"]
28
+
29
+ desc "install the gem locally"
30
+ task :install => :package do
31
+ sh %{gem install pkg/#{gemspec.name}-#{gemspec.version}}
32
+ end
33
+
34
+ desc "validate the gemspec"
35
+ task :gemspec do
36
+ gemspec.validate
37
+ end
38
+
39
+ desc "Build the gem"
40
+ task :gem => [:gemspec, :build] do
41
+ sh "gem build *.gemspec"
42
+ end
43
+
44
+ desc "Install RomanianValidators"
45
+ task :install => :gem do
46
+ sh "gem install pkg/#{gemspec.full_name}.gem"
47
+ end
48
+
49
+ task :default => :full
@@ -0,0 +1,27 @@
1
+ module ActiveModel
2
+ module Validations
3
+
4
+ class BicValidator < EachValidator
5
+ def validate_each(record, attribute, value)
6
+ allow_blank = options.fetch(:allow_blank, false)
7
+ allow_nil = options.fetch(:allow_nil, false)
8
+ record.errors.add_on_empty(attribute) if value.nil? && !allow_nil
9
+ record.errors.add_on_blank(attribute) if value.blank? && !allow_blank
10
+ record.errors.add(attribute) unless Bic.valid?(value)
11
+ end
12
+
13
+ # This is only a basic validation of a BIC
14
+ # http://www.swift.com/biconline/index.cfm?fuseaction=display_aboutbic
15
+ class Bic
16
+ def self.valid?(bic)
17
+ country_codes = %w[AF AL DZ AS AD AO AI AG AR AM AW AU AT AZ BS BH BD BB BY BE BZ BJ BM BT BO BA BW BR BN BG BF BI KH CM CA CV KY CF TD CL CN CO KM CG CD CK CR CI HR CU CY CZ DK DJ DM DO EC EG SV GQ ER EE ET FK FO FJ FI FR GF PF GA GM GE DE GH GI GR GL GD GP GU GT GN GW GY HT VA HN HK HU IS IN ID IR IQ IE IL IT JM JP JO KZ KE KI KP KR KW KG LA LV LB LS LR LY LI LT LU MO MK MG MW MY MV ML MT MH MQ MR MU MX FM MD MC MN MS MA MZ MM NA NR NP NL AN NC NZ NI NE NG NU NF MP NO OM PK PW PA PG PY PE PH PN PL PT PR QA RE RO RU RW SH KN LC PM VC WS SM ST SA SN SC SL SG SK SI SB SO ZA ES LK SD SR SJ SZ SE CH SY TW TJ TZ TH TG TK TO TT TN TR TM TC TV UG UA AE GB US UY UZ VU VE VN VG VI WF EH YE ZM ZW]
18
+ return false unless bic.size == 8 || bic.size == 11 # length 8 or 11
19
+ return false unless (bic[0..3]=~(/[^A-Z]/)).nil? # first 4 must be letters only
20
+ return true if country_codes.include?(bic[4..5])
21
+ false
22
+ end
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,32 @@
1
+ module ActiveModel
2
+ module Validations
3
+
4
+ class CifValidator < EachValidator
5
+ def validate_each(record, attribute, value)
6
+ allow_blank = options.fetch(:allow_blank, false)
7
+ allow_nil = options.fetch(:allow_nil, false)
8
+ record.errors.add_on_empty(attribute) if value.nil? && !allow_nil
9
+ record.errors.add_on_blank(attribute) if value.blank? && !allow_blank
10
+ record.errors.add(attribute) unless Cif.valid?(value)
11
+ end
12
+
13
+ # Algoritmul de validare al unui cod CUI
14
+ # Pas preliminar: Se testeaza daca codul respecta formatul unui cod CUI. Adica lungimea maxima sa fie de 10 cifre si sa contina doar caractere numerice.
15
+ # Pas 1: Se foloseste cheia de testare "753217532". Se inverseaza ordinea cifrelor codului CUI precum si a cheii de testare.
16
+ # Pas 2: Se ignora prima cifra din codul CUI inversat (aceasta este cifra de control) si se inmulteste fiecare cifra cu cifra corespunzatoare din cheia de testare inversata.
17
+ # Pas 3: Se aduna toate produsele obtinute. Suma rezultata se inmulteste cu 10 si apoi se afla restul impartirii la 11.
18
+ # Pas 4: Pentru un CUI valid cifra obtinuta, in urma operatiei MODULO 11, va trebui sa corespunda cu cifra de control a codului CUI initial .
19
+ class Cif
20
+ def self.valid?(cif)
21
+ return false if cif.nil?
22
+ return false if cif.size > 10 || cif.size < 2
23
+ return false unless (cif=~(/[^0-9]/)).nil?
24
+ rk = "235712357".freeze # reversed test key (753217532)
25
+ rc = cif.reverse.freeze
26
+ (1..(cif.size - 1)).inject(0) {|sum, n| sum += rk[n-1].chr.to_i * rc[n].chr.to_i} * 10 % 11 % 10 == rc[0].chr.to_i
27
+ end
28
+ end
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,54 @@
1
+ module ActiveModel
2
+ module Validations
3
+
4
+ class CnpValidator < EachValidator
5
+ def validate_each(record, attribute, value)
6
+ allow_blank = options.fetch(:allow_blank, false)
7
+ allow_nil = options.fetch(:allow_nil, false)
8
+ record.errors.add_on_empty(attribute) if value.nil? && !allow_nil
9
+ record.errors.add_on_blank(attribute) if value.blank? && !allow_blank
10
+ record.errors.add(attribute) unless Cnp.valid?(value)
11
+ end
12
+
13
+ # Algoritm de validare CNP
14
+ # Pas preliminar: Se testeaza daca codul respecta formatul unui cod CNP.
15
+ # Adica prima cifra sa fie cuprinsa in intervalul 1 - 6 sau sa fie 9 pentru straini.
16
+ # Urmatoarele sase cifre trebuie sa constituie o data calendaristica valida in formatul AALLZZ.
17
+ #
18
+ # Pas 1:
19
+ # Se foloseste cheia de testare "279146358279". Primele douasprezece cifre se inmultesc pe rand de la
20
+ # stanga spre dreapta cu cifra corespunzatoare din cheia de testare.
21
+ #
22
+ # Pas 2: Cele douasprezece produse obtinute se aduna si suma obtinuta se imparte la 11. Restul impartirii
23
+ # reprezinta cifra de control. Pentru un CNP valid acest rest va trebui sa coincida cu cifra de pe
24
+ # pozitia treisprezece din CNP-ul initial.
25
+ class Cnp
26
+ def self.valid?(cnp)
27
+ return false unless (cnp=~(/[^0-9]/)).nil? && cnp.size == 13
28
+ require 'date'
29
+ begin
30
+ year = case
31
+ when
32
+ cnp[0].chr == "1" || cnp[0].chr == "2" then "19"
33
+ when
34
+ cnp[0].chr == "3" || cnp[0].chr == "4" then "18"
35
+ when
36
+ cnp[0].chr == "5" || cnp[0].chr == "6" then "20"
37
+ when
38
+ cnp[0].chr == "9" then "19" # oare se sare peste un an bisect intre 1800-2099 ?
39
+ else return false;
40
+ end
41
+
42
+ year = (year + cnp[1..2]).to_i
43
+ return false unless Date.valid_civil?(year,cnp[3..4].to_i,cnp[5..6].to_i)
44
+ rescue ArgumentError
45
+ return false
46
+ end
47
+ test_key = "279146358279"
48
+ (0..11).inject(0){|sum, n| sum += test_key[n].chr.to_i * cnp[n].chr.to_i} % 11 == cnp[12].chr.to_i
49
+ end
50
+ end
51
+ end
52
+
53
+ end
54
+ end
@@ -0,0 +1,29 @@
1
+ module ActiveModel
2
+ module Validations
3
+
4
+ class IbanValidator < EachValidator
5
+ def validate_each(record, attribute, value)
6
+ allow_blank = options.fetch(:allow_blank, false)
7
+ allow_nil = options.fetch(:allow_nil, false)
8
+ record.errors.add_on_empty(attribute) if value.nil? && !allow_nil
9
+ record.errors.add_on_blank(attribute) if value.blank? && !allow_blank
10
+ record.errors.add(attribute) unless Iban.valid?(value)
11
+ end
12
+
13
+ # Descrierea algoritmului:
14
+ # http://www.bnr.ro/files/d/Legislatie/EN/Reg_IBAN.pdf
15
+ class Iban
16
+ def self.valid?(iban)
17
+ return false if iban.size < 3
18
+ use_ord = "".respond_to?(:ord) # Ruby 1.9
19
+ (iban.slice(4,iban.size) + iban[0..3]).upcase.gsub(/[A-Z]/) do |s|
20
+ use_ord ? (s[0].ord - 55).to_s : (s[0].to_i - 55).to_s
21
+ end.to_i % 97 == 1
22
+ rescue
23
+ false
24
+ end
25
+ end
26
+ end
27
+
28
+ end
29
+ end
@@ -0,0 +1,23 @@
1
+ require 'active_model'
2
+
3
+ module ActiveModel
4
+ module Validations
5
+ def self.romanianvalidators
6
+ %w(cif cnp iban bic)
7
+ end
8
+
9
+ romanianvalidators.each do |validator_name|
10
+ require "active_model/validations/#{validator_name}_validator"
11
+ end
12
+
13
+ module HelperMethods
14
+ ActiveModel::Validations.romanianvalidators.each do |validator|
15
+ define_method('validates_' + validator) do |*fields|
16
+ options ||= (fields.delete fields.find { |f| f.kind_of? Hash}) || true
17
+ args = fields.push({ validator => options })
18
+ validates(*args)
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,19 @@
1
+ # -*- encoding: utf-8 -*-
2
+ Gem::Specification.new do |s|
3
+ s.name = 'romanianvalidators'
4
+ s.version = '0.1.0'
5
+ s.authors = ['Mihai Târnovan']
6
+ s.email = ['mihai.tarnovan@cubus.ro']
7
+ s.homepage = 'http://github.com/mtarnovan/romanianvalidators'
8
+ s.summary = %q{Collection of validations for Cod Numeric Personal (CNP), Cod de identificare fiscală (CIF) and IBAN (only Romanian format, as published by Romanian National Bank)}
9
+ s.description = %q{Collection of validations for Cod Numeric Personal (CNP), Cod de identificare fiscală (CIF) and IBAN (only Romanian format, as published by Romanian National Bank).}
10
+
11
+ s.add_development_dependency 'bundler'
12
+ s.add_development_dependency 'minitest'
13
+ s.add_dependency 'rake' , '>= 0.8.7'
14
+ s.add_dependency 'activemodel' , '>= 3.0.0'
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.rubyforge_project = "romanianvalidators"
19
+ end
@@ -0,0 +1,42 @@
1
+ ABNAROBU
2
+ BUCUROBU
3
+ BFROROBU
4
+ BPOSROBU
5
+ CARPRO22
6
+ BROMROBU
7
+ BITRROBU
8
+ BRMAROBU
9
+ BTRLRO22
10
+ CITIROBU
11
+ CBITROBU
12
+ CRCOROBU
13
+ DAROROBU
14
+ EGNAROBX
15
+ BSEAROBU
16
+ DAFBRO22
17
+ EXIMROBU
18
+ FNNBROBU
19
+ BACXROBU
20
+ INGBROBU
21
+ BRELROBU
22
+ MINDROBU
23
+ MIRBROBU
24
+ ETHNROBU
25
+ NBORROBP
26
+ BCUNROBU
27
+ PIRBROBU
28
+ MIROROBU
29
+ RZBRROBU
30
+ RNBRROBU
31
+ BRDEROBU
32
+ RNCBROBU
33
+ ROINROBU
34
+ TREZROBU
35
+ CRDZROBU
36
+ WBANRO22
37
+ CECEROBU
38
+ UGBIROBU
39
+ UNCRROBU
40
+ VBBUROBU
41
+ PORLROBU
42
+ RZBLROBU
@@ -0,0 +1,5 @@
1
+ 20959993
2
+ 18834610
3
+ 14752305
4
+ 21237710
5
+ 17732264
@@ -0,0 +1,6 @@
1
+ 1931113013515
2
+ 1850520034889
3
+ 1910320258878
4
+ 1900731088752
5
+ 1911104133697
6
+ 1920822296090
@@ -0,0 +1,64 @@
1
+ RO56TREZ0462107020101XXX
2
+ RO75TREZ0462116020201XXX
3
+ RO42TREZ04621030209XXXXX
4
+ RO57TREZ04621080206XXXXX
5
+ RO03TREZ0462107020201XXX
6
+ RO98TREZ04621030230XXXXX
7
+ RO24TREZ04621080230XXXXX
8
+ RO46TREZ04621170230XXXXX
9
+ RO43TREZ04621160250XXXXX
10
+ RO30TREZ046210402XXXXXXX
11
+ RO21TREZ04621070250XXXXX
12
+ RO04TREZ04621050201XXXXX
13
+ RO06TREZ0462107020102XXX
14
+ RO39TREZ04621050202XXXXX
15
+ RO50TREZ0462107020202XXX
16
+ RO22TREZ04621080205XXXXX
17
+ RO25TREZ0462116020202XXX
18
+ RO97TREZ0462107020203XXX
19
+ RO46TREZ046211502XXXXXXX
20
+ RO50TREZ04621150201XXXXX
21
+ RO71TREZ04621170203XXXXX
22
+ RO47TREZ04621160203XXXXX
23
+ RO98TREZ04621030230XXXXX
24
+ RO24TREZ04621080230XXXXX
25
+ RO45TREZ04621210230XXXXX
26
+ RO25TREZ04621170210XXXXX
27
+ RO25TREZ04621070203XXXXX
28
+ RO95TREZ04621170212XXXXX
29
+ RO25TREZ04621070203XXXXX
30
+ RO33TREZ04621170213XXXXX
31
+ RO56TREZ04621340202XXXXX
32
+ RO46TREZ04621170230XXXXX
33
+ RO91TREZ04621120207XXXXX
34
+ RO94TREZ04621220203XXXXX
35
+ RO78TREZ04621210206XXXXX
36
+ RO45TREZ04621350201XXXXX
37
+ RO59TREZ04621210211XXXXX
38
+ RO21TREZ04621330210XXXXX
39
+ RO59TREZ04621220202XXXXX
40
+ RO69TREZ04621330228XXXXX
41
+ RO40TREZ04621220207XXXXX
42
+ RO65TREZ04621300205XXXXX
43
+ RO75TREZ04621220208XXXXX
44
+ RO80TREZ04621350202XXXXX
45
+ RO45TREZ04621210230XXXXX
46
+ RO15TREZ04621360205XXXXX
47
+ RO69TREZ04621220230XXXXX
48
+ RO38TREZ04621360250XXXXX
49
+ RO22TREZ04621300201XXXXX
50
+ RO44TREZ04621390201XXXXX
51
+ RO92TREZ04621300203XXXXX
52
+ RO17TREZ04621390203XXXXX
53
+ RO46TREZ04621300210XXXXX
54
+ RO60TREZ04621390207XXXXX
55
+ RO68TREZ04621400201XXXXX
56
+ RO93TREZ04621370201XXXXX
57
+ RO90TREZ046500206X000079
58
+ RO90TREZ046500206X000079
59
+ RO28TREZ0465033XXX000299
60
+ RO28TREZ0465033XXX000299
61
+ RO93TREZ0465040XXX000331
62
+ RO93TREZ0465040XXX000331
63
+ RO50TREZ0465006XXX000186
64
+ RO50TREZ0465006XXX000186
@@ -0,0 +1,22 @@
1
+ require 'rubygems'
2
+
3
+ # silence warnings
4
+ old_w, $-w = $-w, false
5
+
6
+ require 'minitest/spec'
7
+ require 'minitest/mock'
8
+ require 'minitest/autorun'
9
+
10
+ # unsilence warnings
11
+ $-w = old_w
12
+
13
+ require 'romanianvalidators'
14
+
15
+ class TestRecord
16
+ include ActiveModel::Validations
17
+ attr_accessor :cnp, :bic, :cif, :iban
18
+
19
+ def initialize(attrs = {})
20
+ attrs.each_pair { |k,v| send("#{k}=", v) }
21
+ end
22
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper.rb'
3
+ valid_bics = File.read('test/data/valid_bics.txt').split
4
+
5
+ describe "BICs" do
6
+
7
+ describe "for valid BICs" do
8
+ valid_bics.each do |bic|
9
+ it "accepts valid BIC" do
10
+ subject = build_bic_record({:bic => bic})
11
+ subject.valid?.must_equal true
12
+ subject.errors.size.must_equal 0
13
+ end
14
+ end
15
+ end
16
+
17
+ describe "for invalid BICs" do
18
+ it "rejects invalid BICs and generates an error message" do
19
+ subject = build_bic_record :bic => '1'
20
+ subject.valid?.must_equal false
21
+ subject.errors.size.must_equal 1
22
+ end
23
+ end
24
+
25
+ def build_bic_record(attrs = {}, opts = {})
26
+ TestRecord.reset_callbacks(:validate)
27
+ TestRecord.validates :bic, :bic => true
28
+ TestRecord.new attrs
29
+ end
30
+
31
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper.rb'
3
+ valid_cifs = File.read('test/data/valid_cifs.txt').split
4
+
5
+ describe "Cod de identificare fiscală" do
6
+
7
+ describe "for valid CIFs" do
8
+ valid_cifs.each do |cif|
9
+ it "accepts valid CIF" do
10
+ subject = build_cif_record({:cif => cif})
11
+ subject.valid?.must_equal true
12
+ subject.errors.size.must_equal 0
13
+ end
14
+ end
15
+ end
16
+
17
+ describe "for invalid CIFs" do
18
+ it "rejects invalid CIFs and generates an error message" do
19
+ subject = build_cif_record :cif => '1'
20
+ subject.valid?.must_equal false
21
+ subject.errors.size.must_equal 1
22
+ end
23
+ end
24
+
25
+ def build_cif_record(attrs = {}, opts = {})
26
+ TestRecord.reset_callbacks(:validate)
27
+ TestRecord.validates :cif, :cif => true
28
+ TestRecord.new attrs
29
+ end
30
+
31
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper.rb'
3
+ valid_cnps = File.read('test/data/valid_cnps.txt').split
4
+
5
+ describe "Cod numeric personal" do
6
+
7
+ describe "for valid CNPs" do
8
+ valid_cnps.each do |cnp|
9
+ it "accepts valid CNP" do
10
+ subject = build_cnp_record({:cnp => cnp})
11
+ subject.valid?.must_equal true
12
+ subject.errors.size.must_equal 0
13
+ end
14
+ end
15
+ end
16
+
17
+ describe "for invalid CNPs" do
18
+ it "rejects invalid CNPs and generates an error message" do
19
+ subject = build_cnp_record :cnp => '1'
20
+ subject.valid?.must_equal false
21
+ subject.errors.size.must_equal 1
22
+ end
23
+ end
24
+
25
+ def build_cnp_record(attrs = {}, opts = {})
26
+ TestRecord.reset_callbacks(:validate)
27
+ TestRecord.validates :cnp, :cnp => true
28
+ TestRecord.new attrs
29
+ end
30
+
31
+ end
@@ -0,0 +1,31 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require 'test_helper.rb'
3
+ valid_ro_ibans = File.read('test/data/valid_ro_ibans.txt').split
4
+
5
+ describe "Iban (BNR only)" do
6
+
7
+ describe "for valid romanian IBANs" do
8
+ valid_ro_ibans.each do |iban|
9
+ it "accepts valid IBAN" do
10
+ subject = build_iban_record({:iban => iban})
11
+ subject.valid?.must_equal true
12
+ subject.errors.size.must_equal 0
13
+ end
14
+ end
15
+ end
16
+
17
+ describe "for invalid IBANs" do
18
+ it "rejects invalid IBANs and generates an error message" do
19
+ subject = build_iban_record :iban => '1'
20
+ subject.valid?.must_equal false
21
+ subject.errors.size.must_equal 1
22
+ end
23
+ end
24
+
25
+ def build_iban_record(attrs = {}, opts = {})
26
+ TestRecord.reset_callbacks(:validate)
27
+ TestRecord.validates :iban, :iban => true
28
+ TestRecord.new attrs
29
+ end
30
+
31
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: romanianvalidators
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Mihai Târnovan
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-11-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: bundler
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: minitest
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rake
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: 0.8.7
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: 0.8.7
62
+ - !ruby/object:Gem::Dependency
63
+ name: activemodel
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: 3.0.0
70
+ type: :runtime
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: 3.0.0
78
+ description: Collection of validations for Cod Numeric Personal (CNP), Cod de identificare
79
+ fiscală (CIF) and IBAN (only Romanian format, as published by Romanian National
80
+ Bank).
81
+ email:
82
+ - mihai.tarnovan@cubus.ro
83
+ executables: []
84
+ extensions: []
85
+ extra_rdoc_files: []
86
+ files:
87
+ - .gitignore
88
+ - .travis.yml
89
+ - Gemfile
90
+ - LICENSE
91
+ - README.md
92
+ - Rakefile
93
+ - lib/active_model/validations/bic_validator.rb
94
+ - lib/active_model/validations/cif_validator.rb
95
+ - lib/active_model/validations/cnp_validator.rb
96
+ - lib/active_model/validations/iban_validator.rb
97
+ - lib/romanianvalidators.rb
98
+ - romanianvalidators.gemspec
99
+ - test/data/valid_bics.txt
100
+ - test/data/valid_cifs.txt
101
+ - test/data/valid_cnps.txt
102
+ - test/data/valid_ro_ibans.txt
103
+ - test/test_helper.rb
104
+ - test/validations/bic_test.rb
105
+ - test/validations/cif_test.rb
106
+ - test/validations/cnp_test.rb
107
+ - test/validations/iban_test.rb
108
+ homepage: http://github.com/mtarnovan/romanianvalidators
109
+ licenses: []
110
+ post_install_message:
111
+ rdoc_options: []
112
+ require_paths:
113
+ - lib
114
+ required_ruby_version: !ruby/object:Gem::Requirement
115
+ none: false
116
+ requirements:
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ requirements: []
127
+ rubyforge_project: romanianvalidators
128
+ rubygems_version: 1.8.24
129
+ signing_key:
130
+ specification_version: 3
131
+ summary: Collection of validations for Cod Numeric Personal (CNP), Cod de identificare
132
+ fiscală (CIF) and IBAN (only Romanian format, as published by Romanian National
133
+ Bank)
134
+ test_files:
135
+ - test/data/valid_bics.txt
136
+ - test/data/valid_cifs.txt
137
+ - test/data/valid_cnps.txt
138
+ - test/data/valid_ro_ibans.txt
139
+ - test/test_helper.rb
140
+ - test/validations/bic_test.rb
141
+ - test/validations/cif_test.rb
142
+ - test/validations/cnp_test.rb
143
+ - test/validations/iban_test.rb