abn 1.3.0 → 2.0.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/CHANGELOG +18 -0
- data/README.rdoc +24 -1
- data/lib/abn.rb +2 -40
- data/spec/abn_spec.rb +9 -50
- metadata +83 -10
data/CHANGELOG
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
v2.0.0
|
2
|
+
- remove ActiveRecord validation macro, it gets messy to maintain
|
3
|
+
support for AR 2.x and 3.x so I opted to keep things simple and
|
4
|
+
remove it
|
5
|
+
- modernise package - clean out the Rakefile, use bundler for load
|
6
|
+
path management, etc.
|
7
|
+
|
8
|
+
v1.3
|
9
|
+
- [Dan Cheail] Added an ActiveRecord validation macro, validates_abn_correctness_of
|
10
|
+
|
11
|
+
v1.2
|
12
|
+
- Merged some cleanup and safety patches by Bodaniel Jeanes
|
13
|
+
|
14
|
+
v1.1
|
15
|
+
- Small tweak to add compatability with MRI < 1.8.7
|
16
|
+
|
17
|
+
v1.0
|
18
|
+
- Initial Release
|
data/README.rdoc
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
A small
|
1
|
+
A small library for validating Australian Business Numbers (ABN)
|
2
2
|
|
3
3
|
= Installation
|
4
4
|
|
@@ -17,6 +17,29 @@ A small class for validating Australian Business Numbers (ABN)
|
|
17
17
|
ABN.valid?("12042168744")
|
18
18
|
=> false
|
19
19
|
|
20
|
+
== With ActiveRecord
|
21
|
+
|
22
|
+
Version 1.3 of this gem had an active record mixin for validating ABN fields in
|
23
|
+
models. I removed it in version 2.0 to avoid complications of supporting active
|
24
|
+
record 2.x and 3.x.
|
25
|
+
|
26
|
+
To validate an ABN field in your model add the ABN gem to your Gemfile and
|
27
|
+
use the following pattern:
|
28
|
+
|
29
|
+
class Business < ActiveRecord::Base
|
30
|
+
|
31
|
+
validate :validate_abn
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def validate_abn
|
36
|
+
if self.abn.present && !ABN.valid?(self.abn)
|
37
|
+
self.errors.add(:abn, "is not a valid ABN")
|
38
|
+
false
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
20
43
|
= Further Reading
|
21
44
|
|
22
45
|
- http://www.clearwater.com.au/?action=code
|
data/lib/abn.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
class ABN
|
2
2
|
|
3
3
|
module Version #:nodoc:
|
4
|
-
Major =
|
5
|
-
Minor =
|
4
|
+
Major = 2
|
5
|
+
Minor = 0
|
6
6
|
Tiny = 0
|
7
7
|
|
8
8
|
String = [Major, Minor, Tiny].join('.')
|
@@ -43,41 +43,3 @@ class ABN
|
|
43
43
|
new(abn).valid?
|
44
44
|
end
|
45
45
|
end
|
46
|
-
|
47
|
-
module ABNValidations
|
48
|
-
class << self
|
49
|
-
def enable
|
50
|
-
ActiveRecord::Base.extend ABNValidations
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
|
55
|
-
# Validates whether the value of the specified attribute conforms to the Australian Business Number (ABN) format.
|
56
|
-
#
|
57
|
-
# +validates_abn_correctness_of+ will automatically non-destructively strip any formatting and whitespace before
|
58
|
-
# validation
|
59
|
-
def validates_abn_correctness_of(*args)
|
60
|
-
|
61
|
-
# Set up our configuration for this validation
|
62
|
-
configuration = { :on => :save, :allow_nil => false, :message => "is not a valid ABN" }
|
63
|
-
configuration.update(args.extract_options!)
|
64
|
-
|
65
|
-
# iterate through each field we've set up to validate the local numericality of
|
66
|
-
validates_each(args, configuration) do |instance, attr_name, value|
|
67
|
-
|
68
|
-
# get our raw value (ie, what was last sent to the instance...)
|
69
|
-
raw_value = instance.send("#{attr_name}_before_type_cast") || value
|
70
|
-
|
71
|
-
# skip our processing if we've got a legal nil...
|
72
|
-
next if (configuration[:allow_nil] and raw_value.nil?)
|
73
|
-
|
74
|
-
unless ABN.valid?(raw_value)
|
75
|
-
instance.errors.add(attr_name, configuration[:message])
|
76
|
-
end
|
77
|
-
end
|
78
|
-
end
|
79
|
-
end
|
80
|
-
|
81
|
-
if defined?(ActiveRecord)
|
82
|
-
ABNValidations.enable
|
83
|
-
end
|
data/spec/abn_spec.rb
CHANGED
@@ -1,55 +1,10 @@
|
|
1
|
-
|
1
|
+
require "rubygems"
|
2
|
+
require "bundler"
|
3
|
+
Bundler.setup
|
2
4
|
|
3
|
-
require
|
4
|
-
require 'active_record'
|
5
|
-
require 'spec'
|
6
|
-
require 'abn'
|
5
|
+
require "abn"
|
7
6
|
|
8
|
-
|
9
|
-
# We gotta shove this somewhere...
|
10
|
-
ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :dbfile => ":memory:")
|
11
|
-
|
12
|
-
# And finally...
|
13
|
-
ActiveRecord::Schema.define(:version => 1) do
|
14
|
-
create_table :businesses do |t|
|
15
|
-
t.string :abn
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
class Business < ActiveRecord::Base
|
20
|
-
validates_abn_correctness_of :abn
|
21
|
-
end
|
22
|
-
|
23
|
-
describe "The ABN validation plugin" do
|
24
|
-
it "should just plain work." do
|
25
|
-
b = Business.new
|
26
|
-
|
27
|
-
b.abn = "12 042 168 743"
|
28
|
-
b.should be_valid
|
29
|
-
|
30
|
-
b.abn = "12042168743"
|
31
|
-
b.should be_valid
|
32
|
-
|
33
|
-
b.abn = 12042168743
|
34
|
-
b.should be_valid
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
b.abn = "12 042 168 744"
|
39
|
-
b.should_not be_valid
|
40
|
-
|
41
|
-
b.abn = "12042168744"
|
42
|
-
b.should_not be_valid
|
43
|
-
|
44
|
-
b.abn = 12042168744
|
45
|
-
b.should_not be_valid
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
|
50
|
-
def bad_parameter; (1..11).to_a; end
|
51
|
-
|
52
|
-
describe "The ABN class" do
|
7
|
+
describe ABN, "valid? class method" do
|
53
8
|
it "should identify a valid ABN" do
|
54
9
|
ABN.valid?("12042168743").should be_true
|
55
10
|
ABN.valid?(12042168743).should be_true
|
@@ -75,10 +30,13 @@ describe "The ABN class" do
|
|
75
30
|
end
|
76
31
|
|
77
32
|
it "should have a problem with invalid parameter type that has a #length of 11" do
|
33
|
+
bad_parameter = (1..11).to_a
|
78
34
|
bad_parameter.length.should eql(11)
|
79
35
|
ABN.valid?(bad_parameter).should be_false
|
80
36
|
end
|
37
|
+
end
|
81
38
|
|
39
|
+
describe ABN, "to_s instance method" do
|
82
40
|
it "should be able to format a valid ABN" do
|
83
41
|
ABN.new("12042168743").to_s.should eql("12 042 168 743")
|
84
42
|
end
|
@@ -94,6 +52,7 @@ describe "The ABN class" do
|
|
94
52
|
end
|
95
53
|
|
96
54
|
it "should not format an invalid parameter type that has a #length of 11" do
|
55
|
+
bad_parameter = (1..11).to_a
|
97
56
|
bad_parameter.length.should eql(11)
|
98
57
|
ABN.new(bad_parameter).to_s.should eql("")
|
99
58
|
end
|
metadata
CHANGED
@@ -1,7 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: abn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
hash: 15
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
- 0
|
10
|
+
version: 2.0.0
|
5
11
|
platform: ruby
|
6
12
|
authors:
|
7
13
|
- James Healy
|
@@ -9,12 +15,69 @@ autorequire:
|
|
9
15
|
bindir: bin
|
10
16
|
cert_chain: []
|
11
17
|
|
12
|
-
date:
|
18
|
+
date: 2010-12-04 00:00:00 +11:00
|
13
19
|
default_executable:
|
14
|
-
dependencies:
|
15
|
-
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: rake
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :development
|
34
|
+
version_requirements: *id001
|
35
|
+
- !ruby/object:Gem::Dependency
|
36
|
+
name: rcov
|
37
|
+
prerelease: false
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
hash: 3
|
44
|
+
segments:
|
45
|
+
- 0
|
46
|
+
version: "0"
|
47
|
+
type: :development
|
48
|
+
version_requirements: *id002
|
49
|
+
- !ruby/object:Gem::Dependency
|
50
|
+
name: roodi
|
51
|
+
prerelease: false
|
52
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
53
|
+
none: false
|
54
|
+
requirements:
|
55
|
+
- - ">="
|
56
|
+
- !ruby/object:Gem::Version
|
57
|
+
hash: 3
|
58
|
+
segments:
|
59
|
+
- 0
|
60
|
+
version: "0"
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: rspec
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - ~>
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
hash: 3
|
72
|
+
segments:
|
73
|
+
- 2
|
74
|
+
- 0
|
75
|
+
version: "2.0"
|
76
|
+
type: :development
|
77
|
+
version_requirements: *id004
|
16
78
|
description: a (very) small library for working with Australian Business Numbers.
|
17
|
-
email:
|
79
|
+
email:
|
80
|
+
- jimmy@deefa.com
|
18
81
|
executables: []
|
19
82
|
|
20
83
|
extensions: []
|
@@ -23,10 +86,14 @@ extra_rdoc_files: []
|
|
23
86
|
|
24
87
|
files:
|
25
88
|
- lib/abn.rb
|
89
|
+
- CHANGELOG
|
26
90
|
- MIT-LICENSE
|
27
91
|
- README.rdoc
|
92
|
+
- spec/abn_spec.rb
|
28
93
|
has_rdoc: true
|
29
|
-
homepage: http://github.com/yob/abn
|
94
|
+
homepage: http://github.com/yob/abn
|
95
|
+
licenses: []
|
96
|
+
|
30
97
|
post_install_message:
|
31
98
|
rdoc_options:
|
32
99
|
- --title
|
@@ -35,23 +102,29 @@ rdoc_options:
|
|
35
102
|
require_paths:
|
36
103
|
- lib
|
37
104
|
required_ruby_version: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
38
106
|
requirements:
|
39
107
|
- - ">="
|
40
108
|
- !ruby/object:Gem::Version
|
109
|
+
hash: 3
|
110
|
+
segments:
|
111
|
+
- 0
|
41
112
|
version: "0"
|
42
|
-
version:
|
43
113
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
44
115
|
requirements:
|
45
116
|
- - ">="
|
46
117
|
- !ruby/object:Gem::Version
|
118
|
+
hash: 3
|
119
|
+
segments:
|
120
|
+
- 0
|
47
121
|
version: "0"
|
48
|
-
version:
|
49
122
|
requirements: []
|
50
123
|
|
51
124
|
rubyforge_project: yob-projects
|
52
|
-
rubygems_version: 1.3.
|
125
|
+
rubygems_version: 1.3.7
|
53
126
|
signing_key:
|
54
|
-
specification_version:
|
127
|
+
specification_version: 3
|
55
128
|
summary: a (very) small library for working with Australian Business Numbers.
|
56
129
|
test_files:
|
57
130
|
- spec/abn_spec.rb
|