valvat 0.3.3 → 0.3.4

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES.md CHANGED
@@ -1,6 +1,12 @@
1
1
  ### dev
2
2
 
3
- [full changelog](http://github.com/yolk/valvat/compare/v0.3.3...master)
3
+ [full changelog](http://github.com/yolk/valvat/compare/v0.3.4...master)
4
+
5
+ ### 0.3.4 / 2011-08-01
6
+
7
+ [full changelog](http://github.com/yolk/valvat/compare/v0.3,3...v0.3.4)
8
+
9
+ * Normalize all input on initialization (by [SpoBo](https://github.com/SpoBo))
4
10
 
5
11
  ### 0.3.3 / 2011-06-02
6
12
 
data/lib/valvat.rb CHANGED
@@ -1,36 +1,36 @@
1
1
  class Valvat
2
2
  def initialize(raw)
3
- @raw = raw || ""
3
+ @raw = Valvat::Utils.normalize(raw || "")
4
4
  @vat_country_code, @to_s_wo_country = to_a
5
5
  end
6
-
6
+
7
7
  attr_reader :raw, :vat_country_code, :to_s_wo_country
8
-
8
+
9
9
  def valid?
10
10
  Valvat::Syntax.validate(self)
11
11
  end
12
-
12
+
13
13
  def exists?
14
14
  Valvat::Lookup.validate(self)
15
15
  end
16
16
  alias_method :exist?, :exists?
17
-
17
+
18
18
  def iso_country_code
19
19
  Valvat::Utils.vat_country_to_iso_country(vat_country_code)
20
20
  end
21
-
21
+
22
22
  def european?
23
23
  Valvat::Utils::EU_COUNTRIES.include?(iso_country_code)
24
24
  end
25
-
25
+
26
26
  def to_a
27
27
  Valvat::Utils.split(raw)
28
28
  end
29
-
29
+
30
30
  def to_s
31
31
  raw
32
32
  end
33
-
33
+
34
34
  def inspect
35
35
  "#<Valvat #{[raw, iso_country_code].compact.join(" ")}>"
36
36
  end
@@ -5,31 +5,31 @@ require 'valvat/lookup'
5
5
  module ActiveModel
6
6
  module Validations
7
7
  class ValvatValidator < ::ActiveModel::EachValidator
8
-
8
+
9
9
  def validate_each(record, attribute, value)
10
10
  vat = Valvat(value)
11
11
  iso_country_code = vat.iso_country_code
12
12
  is_valid = true
13
-
13
+
14
14
  if options[:match_country]
15
15
  iso_country_code = (record.send(options[:match_country]) || "").upcase
16
16
  is_valid = iso_country_code == vat.iso_country_code
17
17
  end
18
-
18
+
19
19
  if is_valid
20
20
  is_valid = options[:lookup] ? vat.valid? && vat.exists? : vat.valid?
21
-
21
+
22
22
  if is_valid.nil?
23
23
  is_valid = options[:lookup] != :fail_if_down
24
24
  end
25
25
  end
26
-
26
+
27
27
  unless is_valid
28
- iso_country_code = "eu" if iso_country_code.blank?
29
- record.errors.add(attribute, :invalid_vat,
30
- :message => options[:message],
28
+ iso_country_code = "eu" if iso_country_code.blank?
29
+ record.errors.add(attribute, :invalid_vat,
30
+ :message => options[:message],
31
31
  :country_adjective => I18n.t(
32
- :"valvat.country_adjectives.#{iso_country_code.downcase}",
32
+ :"valvat.country_adjectives.#{iso_country_code.downcase}",
33
33
  :default => [:"valvat.country_adjectives.eu", "european"]
34
34
  )
35
35
  )
@@ -41,4 +41,4 @@ end
41
41
 
42
42
  %w(en de).each do |locale|
43
43
  I18n.load_path << "#{File.dirname(__FILE__)}/locales/#{locale}.yml"
44
- end
44
+ end
data/lib/valvat/lookup.rb CHANGED
@@ -4,11 +4,11 @@ require 'yaml'
4
4
 
5
5
  class Valvat
6
6
  module Lookup
7
-
7
+
8
8
  def self.validate(vat)
9
9
  vat = Valvat(vat)
10
10
  return false unless vat.european?
11
-
11
+
12
12
  begin
13
13
  client.request("n1", "checkVat") do
14
14
  soap.body = {"n1:countryCode" => vat.vat_country_code, "n1:vatNumber" => vat.to_s_wo_country}
@@ -37,4 +37,4 @@ class Valvat
37
37
  end
38
38
  end
39
39
  end
40
- end
40
+ end
data/lib/valvat/syntax.rb CHANGED
@@ -2,7 +2,7 @@ require 'valvat'
2
2
 
3
3
  class Valvat
4
4
  module Syntax
5
-
5
+
6
6
  VAT_PATTERNS = {
7
7
  'AT' => /\AATU[0-9]{8}\Z/, # Austria
8
8
  'BE' => /\ABE[0-9]{10}\Z/, # Belgium
@@ -40,4 +40,4 @@ class Valvat
40
40
  end
41
41
  end
42
42
 
43
- end
43
+ end
data/lib/valvat/utils.rb CHANGED
@@ -1,27 +1,27 @@
1
1
  class Valvat
2
2
  module Utils
3
-
3
+
4
4
  EU_COUNTRIES = %w(AT BE BG CY CZ DE DK EE ES FI FR GB GR HU IE IT LT LU LV MT NL PL PT RO SE SI SK)
5
5
  COUNTRY_PATTERN = /\A([A-Z]{2})(.+)\Z/
6
6
  NORMALIZE_PATTERN = /[-\.:_\s,;]+/
7
-
7
+
8
8
  def self.split(vat)
9
- COUNTRY_PATTERN =~ vat
9
+ COUNTRY_PATTERN =~ vat
10
10
  result = [$1, $2]
11
11
  iso_country = vat_country_to_iso_country(result[0])
12
12
  EU_COUNTRIES.include?(iso_country) ? result : [nil, nil]
13
13
  end
14
-
14
+
15
15
  def self.normalize(vat)
16
16
  vat.upcase.gsub(NORMALIZE_PATTERN, "")
17
17
  end
18
-
18
+
19
19
  def self.vat_country_to_iso_country(vat_country)
20
20
  vat_country == "EL" ? "GR" : vat_country
21
21
  end
22
-
22
+
23
23
  def self.iso_country_to_vat_country(iso_country)
24
24
  iso_country == "GR" ? "EL" : iso_country
25
25
  end
26
26
  end
27
- end
27
+ end
@@ -1,3 +1,3 @@
1
1
  class Valvat
2
- VERSION = "0.3.3"
2
+ VERSION = "0.3.4"
3
3
  end
data/spec/spec_helper.rb CHANGED
@@ -9,13 +9,13 @@ $fakeweb = true
9
9
  class ModelBase
10
10
  include ActiveModel::Serialization
11
11
  include ActiveModel::Validations
12
-
12
+
13
13
  attr_accessor :attributes
14
-
14
+
15
15
  def initialize(attributes = {})
16
16
  @attributes = attributes
17
17
  end
18
-
18
+
19
19
  def read_attribute_for_validation(key)
20
20
  @attributes[key]
21
21
  end
@@ -29,4 +29,4 @@ def without_any_web_requests!
29
29
  after(:all) do
30
30
  FakeWeb.allow_net_connect = true
31
31
  end
32
- end
32
+ end
@@ -1,36 +1,36 @@
1
1
  require 'spec_helper'
2
2
 
3
- class Invoice < ModelBase
3
+ class Invoice < ModelBase
4
4
  validates :vat_number, :valvat => true
5
5
  end
6
6
 
7
- class InvoiceWithLookup < ModelBase
7
+ class InvoiceWithLookup < ModelBase
8
8
  validates :vat_number, :valvat => {:lookup => true}
9
9
  end
10
10
 
11
- class InvoiceWithLookupAndFailIfDown < ModelBase
11
+ class InvoiceWithLookupAndFailIfDown < ModelBase
12
12
  validates :vat_number, :valvat => {:lookup => :fail_if_down}
13
13
  end
14
14
 
15
- class InvoiceAllowBlank < ModelBase
15
+ class InvoiceAllowBlank < ModelBase
16
16
  validates :vat_number, :valvat => {:allow_blank => true}
17
17
  end
18
18
 
19
- class InvoiceAllowBlankOnAll < ModelBase
19
+ class InvoiceAllowBlankOnAll < ModelBase
20
20
  validates :vat_number, :valvat => true, :allow_blank => true
21
21
  end
22
22
 
23
- class InvoiceCheckCountry < ModelBase
23
+ class InvoiceCheckCountry < ModelBase
24
24
  validates :vat_number, :valvat => {:match_country => :country}
25
-
25
+
26
26
  def country
27
27
  @attributes[:country]
28
28
  end
29
29
  end
30
30
 
31
- class InvoiceCheckCountryWithLookup < ModelBase
31
+ class InvoiceCheckCountryWithLookup < ModelBase
32
32
  validates :vat_number, :valvat => {:match_country => :country, :lookup => true}
33
-
33
+
34
34
  def country
35
35
  @attributes[:country]
36
36
  end
@@ -42,34 +42,34 @@ describe Invoice do
42
42
  Invoice.new(:vat_number => "DE259597697").should be_valid
43
43
  end
44
44
  end
45
-
45
+
46
46
  context "with invalid vat number" do
47
47
  let(:invoice) { Invoice.new(:vat_number => "DE259597697123") }
48
-
48
+
49
49
  it "should not be valid" do
50
50
  invoice.should_not be_valid
51
51
  end
52
-
52
+
53
53
  it "should add default (country specific) error message" do
54
54
  invoice.valid?
55
55
  invoice.errors[:vat_number].should eql(["is not a valid German vat number"])
56
56
  end
57
-
57
+
58
58
  context "with i18n translation in place" do
59
59
  before do
60
60
  I18n.backend.store_translations(:en, :activemodel => {
61
61
  :errors => {:models => {:invoice => {:invalid_vat => "is ugly."}}}
62
62
  })
63
63
  end
64
-
64
+
65
65
  after { I18n.reload! }
66
-
66
+
67
67
  it "should use translation" do
68
68
  invoice.valid?
69
69
  invoice.errors[:vat_number].should eql(["is ugly."])
70
70
  end
71
71
  end
72
-
72
+
73
73
  context "with i18n translation with country adjective placeholder in place" do
74
74
  before do
75
75
  I18n.backend.store_translations(:en, :activemodel => {
@@ -92,7 +92,7 @@ describe Invoice do
92
92
  end
93
93
  end
94
94
  end
95
-
95
+
96
96
  context "with blank vat number" do
97
97
  it "should not be valid" do
98
98
  Invoice.new(:vat_number => "").should_not be_valid
@@ -107,29 +107,29 @@ describe InvoiceWithLookup do
107
107
  Valvat::Syntax.stub(:validate => true)
108
108
  Valvat::Lookup.stub(:validate => false)
109
109
  end
110
-
110
+
111
111
  it "should not be valid" do
112
112
  InvoiceWithLookup.new(:vat_number => "DE123").should_not be_valid
113
113
  end
114
114
  end
115
-
115
+
116
116
  context "with valid and existing vat number" do
117
117
  before do
118
118
  Valvat::Syntax.stub(:validate => true)
119
119
  Valvat::Lookup.stub(:validate => true)
120
120
  end
121
-
121
+
122
122
  it "should be valid" do
123
123
  InvoiceWithLookup.new(:vat_number => "DE123").should be_valid
124
124
  end
125
125
  end
126
-
126
+
127
127
  context "with valid vat number and VIES country service down" do
128
128
  before do
129
129
  Valvat::Syntax.stub(:validate => true)
130
130
  Valvat::Lookup.stub(:validate => nil)
131
131
  end
132
-
132
+
133
133
  it "should be valid" do
134
134
  InvoiceWithLookup.new(:vat_number => "DE123").should be_valid
135
135
  end
@@ -142,7 +142,7 @@ describe InvoiceWithLookupAndFailIfDown do
142
142
  Valvat::Syntax.stub(:validate => true)
143
143
  Valvat::Lookup.stub(:validate => nil)
144
144
  end
145
-
145
+
146
146
  it "should not be valid" do
147
147
  InvoiceWithLookupAndFailIfDown.new(:vat_number => "DE123").should_not be_valid
148
148
  end
@@ -172,29 +172,29 @@ describe InvoiceCheckCountry do
172
172
  InvoiceCheckCountry.new(:country => nil, :vat_number => "DE259597697").should_not be_valid
173
173
  InvoiceCheckCountry.new(:country => "", :vat_number => "DE259597697").should_not be_valid
174
174
  end
175
-
175
+
176
176
  it "should be not valid on wired country" do
177
177
  InvoiceCheckCountry.new(:country => "XAXXX", :vat_number => "DE259597697").should_not be_valid
178
178
  InvoiceCheckCountry.new(:country => "ZO", :vat_number => "DE259597697").should_not be_valid
179
179
  end
180
-
180
+
181
181
  it "should be not valid on mismatching (eu) country" do
182
182
  InvoiceCheckCountry.new(:country => "FR", :vat_number => "DE259597697").should_not be_valid
183
183
  InvoiceCheckCountry.new(:country => "AT", :vat_number => "DE259597697").should_not be_valid
184
184
  InvoiceCheckCountry.new(:country => "DE", :vat_number => "ATU65931334").should_not be_valid
185
185
  end
186
-
186
+
187
187
  it "should be valid on matching country" do
188
188
  InvoiceCheckCountry.new(:country => "DE", :vat_number => "DE259597697").should be_valid
189
189
  InvoiceCheckCountry.new(:country => "AT", :vat_number => "ATU65931334").should be_valid
190
190
  end
191
-
191
+
192
192
  it "should give back error message with country from :country_match" do
193
193
  invoice = InvoiceCheckCountry.new(:country => "FR", :vat_number => "DE259597697")
194
194
  invoice.valid?
195
195
  invoice.errors[:vat_number].should eql(["is not a valid French vat number"])
196
196
  end
197
-
197
+
198
198
  it "should give back error message with country from :country_match even on invalid vat number" do
199
199
  invoice = InvoiceCheckCountry.new(:country => "FR", :vat_number => "DE259597697123")
200
200
  invoice.valid?
@@ -207,16 +207,16 @@ describe InvoiceCheckCountryWithLookup do
207
207
  Valvat::Syntax.stub(:validate => true)
208
208
  Valvat::Lookup.stub(:validate => true)
209
209
  end
210
-
210
+
211
211
  it "avoids lookup or syntax check on failed because of mismatching country" do
212
212
  Valvat::Syntax.should_not_receive(:validate)
213
213
  Valvat::Lookup.should_not_receive(:validate)
214
214
  InvoiceCheckCountryWithLookup.new(:country => "FR", :vat_number => "DE259597697").valid?
215
215
  end
216
-
216
+
217
217
  it "check syntax and looup on matching country" do
218
218
  Valvat::Syntax.should_receive(:validate).and_return(true)
219
219
  Valvat::Lookup.should_receive(:validate).and_return(true)
220
220
  InvoiceCheckCountryWithLookup.new(:country => "DE", :vat_number => "DE259597697").valid?
221
221
  end
222
- end
222
+ end
@@ -3,41 +3,41 @@ require 'spec_helper'
3
3
  describe Valvat::Lookup do
4
4
  context "#validate" do
5
5
  context "existing vat number" do
6
-
6
+
7
7
  it "returns true" do
8
8
  Valvat::Lookup.validate("BE0817331995").should eql(true)
9
9
  end
10
-
10
+
11
11
  it "allows Valvat instance as input" do
12
12
  Valvat::Lookup.validate(Valvat.new("BE0817331995")).should eql(true)
13
13
  end
14
14
  end
15
-
15
+
16
16
  context "not existing vat number" do
17
17
  it "returns false" do
18
18
  Valvat::Lookup.validate("BE08173319921").should eql(false)
19
19
  end
20
20
  end
21
-
21
+
22
22
  context "invalid country code / input" do
23
23
  without_any_web_requests!
24
-
24
+
25
25
  it "returns false" do
26
26
  Valvat::Lookup.validate("AE259597697").should eql(false)
27
27
  Valvat::Lookup.validate("").should eql(false)
28
28
  end
29
29
  end
30
-
30
+
31
31
  # TODO : Reactivate with coorect "down" response
32
32
  # context "country web service down" do
33
33
  # before do
34
34
  # json = "{\"error_message\": \"Member State service unavailable.\", \"error_code\": 1, \"error\": true}"
35
35
  # FakeWeb.register_uri(:get, "http://isvat.appspot.com/DE/259597697/", :body => json)
36
36
  # end if $fakeweb
37
- #
37
+ #
38
38
  # it "returns nil" do
39
39
  # Valvat::Lookup.validate("DE259597697").should eql(nil)
40
40
  # end
41
41
  # end
42
42
  end
43
- end
43
+ end
@@ -4,7 +4,7 @@ describe Valvat::Syntax do
4
4
  context "#validate" do
5
5
  it "validates a DE vat number" do
6
6
  Valvat::Syntax.validate("DE345889003").should eql(true)
7
-
7
+
8
8
  Valvat::Syntax.validate("DE34588900").should eql(false)
9
9
  Valvat::Syntax.validate("DE3458890090").should eql(false)
10
10
  Valvat::Syntax.validate("DE34588900C").should eql(false)
@@ -12,7 +12,7 @@ describe Valvat::Syntax do
12
12
 
13
13
  it "validates a AT vat number" do
14
14
  Valvat::Syntax.validate("ATU03458890").should eql(true)
15
-
15
+
16
16
  Valvat::Syntax.validate("ATU034588908").should eql(false)
17
17
  Valvat::Syntax.validate("ATU0345908").should eql(false)
18
18
  Valvat::Syntax.validate("ATU0345889Y").should eql(false)
@@ -20,7 +20,7 @@ describe Valvat::Syntax do
20
20
 
21
21
  it "should validate BE vat number" do
22
22
  Valvat::Syntax.validate("BE0817331995").should eql(true)
23
-
23
+
24
24
  Valvat::Syntax.validate("BE081733199").should eql(false)
25
25
  Valvat::Syntax.validate("BE08173319944").should eql(false)
26
26
  Valvat::Syntax.validate("BE081733199H").should eql(false)
@@ -228,14 +228,14 @@ describe Valvat::Syntax do
228
228
 
229
229
  it "validates a SK vat number" do
230
230
  Valvat::Syntax.validate("SK5683075682").should eql(true)
231
-
231
+
232
232
  Valvat::Syntax.validate("SK56830756821").should eql(false)
233
233
  Valvat::Syntax.validate("SK568307568").should eql(false)
234
234
  end
235
235
 
236
236
  it "validates a SI vat number" do
237
237
  Valvat::Syntax.validate("SI74357893").should eql(true)
238
-
238
+
239
239
  Valvat::Syntax.validate("SI743578931").should eql(false)
240
240
  Valvat::Syntax.validate("SI7435789").should eql(false)
241
241
  end
@@ -266,10 +266,10 @@ describe Valvat::Syntax do
266
266
  Valvat::Syntax.validate("xxxxxxxxxx").should eql(false)
267
267
  Valvat::Syntax.validate("BEFR").should eql(false)
268
268
  end
269
-
269
+
270
270
  it "allows Valvat instance as input" do
271
271
  Valvat::Syntax.validate(Valvat.new("DE345889003")).should eql(true)
272
272
  Valvat::Syntax.validate(Valvat.new("DE34588900X")).should eql(false)
273
273
  end
274
274
  end
275
- end
275
+ end
@@ -6,12 +6,12 @@ describe Valvat::Utils do
6
6
  Valvat::Utils.split("DE345889003").should eql(["DE", "345889003"])
7
7
  Valvat::Utils.split("ESX4588900X").should eql(["ES", "X4588900X"])
8
8
  end
9
-
9
+
10
10
  it "returns two nils on non-european iso codes as array" do
11
11
  Valvat::Utils.split("US345889003").should eql([nil, nil])
12
12
  Valvat::Utils.split("RUX4588900X").should eql([nil, nil])
13
13
  end
14
-
14
+
15
15
  it "returns two nils on non-sense input as array" do
16
16
  Valvat::Utils.split("DE").should eql([nil, nil])
17
17
  Valvat::Utils.split("X345889003").should eql([nil, nil])
@@ -19,51 +19,51 @@ describe Valvat::Utils do
19
19
  Valvat::Utils.split("1234").should eql([nil, nil])
20
20
  Valvat::Utils.split(" ").should eql([nil, nil])
21
21
  end
22
-
22
+
23
23
  it "returns EL (language iso code) on greek vat" do
24
24
  Valvat::Utils.split("EL999999999").should eql(["EL", "999999999"])
25
25
  end
26
26
  end
27
-
27
+
28
28
  context "#normalize" do
29
29
  it "returns vat number with upcase chars" do
30
30
  Valvat::Utils.normalize("de345889003").should eql("DE345889003")
31
31
  Valvat::Utils.normalize("EsX4588900y").should eql("ESX4588900Y")
32
32
  end
33
-
33
+
34
34
  it "returns trimmed vat number" do
35
35
  Valvat::Utils.normalize(" DE345889003").should eql("DE345889003")
36
36
  Valvat::Utils.normalize(" DE345889003 ").should eql("DE345889003")
37
37
  Valvat::Utils.normalize("DE345889003 ").should eql("DE345889003")
38
38
  end
39
-
39
+
40
40
  it "does not change already normalized vat numbers" do
41
41
  Valvat::Utils.normalize("DE345889003").should eql("DE345889003")
42
42
  Valvat::Utils.normalize("ESX4588900X").should eql("ESX4588900X")
43
43
  end
44
-
44
+
45
45
  it "removes spaces" do
46
46
  Valvat::Utils.normalize("DE 345889003").should eql("DE345889003")
47
47
  Valvat::Utils.normalize("ESX 458 8900 X").should eql("ESX4588900X")
48
48
  end
49
-
49
+
50
50
  it "removes special chars" do
51
51
  Valvat::Utils.normalize("DE.345-889_00:3,;").should eql("DE345889003")
52
52
  end
53
53
  end
54
-
54
+
55
55
  context "#vat_country_to_iso_country" do
56
56
  it "returns iso country code on greek iso language 'EL'" do
57
57
  Valvat::Utils.vat_country_to_iso_country("EL").should eql("GR")
58
58
  end
59
-
59
+
60
60
  Valvat::Utils::EU_COUNTRIES.each do |iso|
61
61
  it "returns unchanged iso country code '#{iso}'" do
62
62
  Valvat::Utils.vat_country_to_iso_country(iso).should eql(iso)
63
63
  end
64
64
  end
65
65
  end
66
-
66
+
67
67
  context "#iso_country_to_vat_country" do
68
68
  it "returns vat country on greek iso country code 'GR'" do
69
69
  Valvat::Utils.iso_country_to_vat_country("GR").should eql("EL")
@@ -75,4 +75,4 @@ describe Valvat::Utils do
75
75
  end
76
76
  end
77
77
  end
78
- end
78
+ end
data/spec/valvat_spec.rb CHANGED
@@ -9,42 +9,47 @@ describe Valvat do
9
9
  lambda{ Valvat.new("a", "b") }.should raise_error(ArgumentError)
10
10
  lambda{ Valvat.new("a") }.should_not raise_error
11
11
  end
12
+
13
+ it "normalizes input string" do
14
+ Valvat.new("de25.9597,69 7").to_s.should eql("DE259597697")
15
+ Valvat.new("de25.9597,69 7").iso_country_code.should eql("DE")
16
+ end
12
17
  end
13
-
18
+
14
19
  context "Valvat()" do
15
20
  it "initializes new Valvat instance on string" do
16
21
  Valvat("abc").should be_kind_of(Valvat)
17
22
  end
18
-
23
+
19
24
  it "returns same Valvat instance on Valvat instance" do
20
25
  vat = Valvat.new("abc")
21
26
  Valvat(vat).should be_kind_of(Valvat)
22
27
  Valvat(vat).object_id.should eql(vat.object_id)
23
28
  end
24
29
  end
25
-
30
+
26
31
  context "on european vat number" do
27
32
  let(:de_vat) { Valvat.new("DE259597697") } # valid & exists
28
33
  let(:at_vat) { Valvat.new("ATU458890031") } # invalid
29
34
  let(:gr_vat) { Valvat.new("EL999943280") } # valid & exists
30
-
35
+
31
36
  context "#valid?" do
32
37
  it "returns true on valid numbers" do
33
38
  de_vat.should be_valid
34
39
  gr_vat.should be_valid
35
40
  end
36
-
41
+
37
42
  it "returns false on invalid numbers" do
38
43
  at_vat.should_not be_valid
39
44
  end
40
45
  end
41
-
46
+
42
47
  context "#exist(s)?" do
43
48
  context "on existing vat numbers" do
44
49
  before do
45
50
  Valvat::Lookup.stub(:validate => true)
46
51
  end
47
-
52
+
48
53
  it "returns true" do
49
54
  de_vat.exists?.should eql(true)
50
55
  gr_vat.exists?.should eql(true)
@@ -52,41 +57,41 @@ describe Valvat do
52
57
  gr_vat.exist?.should eql(true)
53
58
  end
54
59
  end
55
-
60
+
56
61
  context "on not existing vat numbers" do
57
62
  before do
58
63
  Valvat::Lookup.stub(:validate => false)
59
64
  end
60
-
65
+
61
66
  it "returns false" do
62
67
  at_vat.exists?.should eql(false)
63
68
  at_vat.exist?.should eql(false)
64
69
  end
65
70
  end
66
71
  end
67
-
68
- context "#iso_country_code" do
72
+
73
+ context "#iso_country_code" do
69
74
  it "returns iso country code on iso_country_code" do
70
75
  de_vat.iso_country_code.should eql("DE")
71
76
  at_vat.iso_country_code.should eql("AT")
72
77
  end
73
-
78
+
74
79
  it "returns GR iso country code on greek vat number" do
75
80
  gr_vat.iso_country_code.should eql("GR")
76
81
  end
77
82
  end
78
-
79
- context "#vat_country_code" do
83
+
84
+ context "#vat_country_code" do
80
85
  it "returns iso country code on iso_country_code" do
81
86
  de_vat.vat_country_code.should eql("DE")
82
87
  at_vat.vat_country_code.should eql("AT")
83
88
  end
84
-
89
+
85
90
  it "returns EL iso language code on greek vat number" do
86
91
  gr_vat.vat_country_code.should eql("EL")
87
92
  end
88
93
  end
89
-
94
+
90
95
  context "#european?" do
91
96
  it "returns true" do
92
97
  de_vat.should be_european
@@ -94,7 +99,7 @@ describe Valvat do
94
99
  gr_vat.should be_european
95
100
  end
96
101
  end
97
-
102
+
98
103
  context "#to_s" do
99
104
  it "returns full vat number" do
100
105
  de_vat.to_s.should eql("DE259597697")
@@ -102,7 +107,7 @@ describe Valvat do
102
107
  gr_vat.to_s.should eql("EL999943280")
103
108
  end
104
109
  end
105
-
110
+
106
111
  context "#inspect" do
107
112
  it "returns vat number with iso country code" do
108
113
  de_vat.inspect.should eql("#<Valvat DE259597697 DE>")
@@ -110,7 +115,7 @@ describe Valvat do
110
115
  gr_vat.inspect.should eql("#<Valvat EL999943280 GR>")
111
116
  end
112
117
  end
113
-
118
+
114
119
  context "#to_a" do
115
120
  it "calls Valvat::Utils.split with raw vat number and returns result" do
116
121
  de_vat # initialize
@@ -119,70 +124,70 @@ describe Valvat do
119
124
  end
120
125
  end
121
126
  end
122
-
127
+
123
128
  context "on vat number from outside of europe" do
124
129
  let(:us_vat) { Valvat.new("US345889003") }
125
130
  let(:ch_vat) { Valvat.new("CH445889003") }
126
-
131
+
127
132
  context "#valid?" do
128
133
  it "returns false" do
129
134
  us_vat.should_not be_valid
130
135
  ch_vat.should_not be_valid
131
136
  end
132
137
  end
133
-
138
+
134
139
  context "#exist?" do
135
140
  without_any_web_requests!
136
-
141
+
137
142
  it "returns false" do
138
143
  us_vat.should_not be_exist
139
144
  ch_vat.should_not be_exist
140
145
  end
141
146
  end
142
-
143
- context "#iso_country_code" do
147
+
148
+ context "#iso_country_code" do
144
149
  it "returns nil" do
145
150
  us_vat.iso_country_code.should eql(nil)
146
151
  ch_vat.iso_country_code.should eql(nil)
147
152
  end
148
153
  end
149
-
150
- context "#vat_country_code" do
154
+
155
+ context "#vat_country_code" do
151
156
  it "returns nil" do
152
157
  us_vat.vat_country_code.should eql(nil)
153
158
  ch_vat.vat_country_code.should eql(nil)
154
159
  end
155
160
  end
156
-
161
+
157
162
  context "#european?" do
158
163
  it "returns false" do
159
164
  us_vat.should_not be_european
160
165
  ch_vat.should_not be_european
161
166
  end
162
167
  end
163
-
168
+
164
169
  context "#to_s" do
165
170
  it "returns full given vat number" do
166
171
  us_vat.to_s.should eql("US345889003")
167
172
  ch_vat.to_s.should eql("CH445889003")
168
173
  end
169
174
  end
170
-
175
+
171
176
  context "#inspect" do
172
177
  it "returns vat number without iso country code" do
173
178
  us_vat.inspect.should eql("#<Valvat US345889003>")
174
179
  ch_vat.inspect.should eql("#<Valvat CH445889003>")
175
180
  end
176
181
  end
177
-
182
+
178
183
  end
179
-
184
+
180
185
  context "on non-sense/empty vat number" do
181
186
  let(:only_iso_vat) { Valvat.new("DE") }
182
187
  let(:num_vat) { Valvat.new("12445889003") }
183
188
  let(:empty_vat) { Valvat.new("") }
184
189
  let(:nil_vat) { Valvat.new("") }
185
-
190
+
186
191
  context "#valid?" do
187
192
  it "returns false" do
188
193
  only_iso_vat.should_not be_valid
@@ -191,10 +196,10 @@ describe Valvat do
191
196
  nil_vat.should_not be_valid
192
197
  end
193
198
  end
194
-
199
+
195
200
  context "#exist?" do
196
201
  without_any_web_requests!
197
-
202
+
198
203
  it "returns false" do
199
204
  only_iso_vat.should_not be_exist
200
205
  num_vat.should_not be_exist
@@ -202,8 +207,8 @@ describe Valvat do
202
207
  nil_vat.should_not be_exist
203
208
  end
204
209
  end
205
-
206
- context "#iso_country_code" do
210
+
211
+ context "#iso_country_code" do
207
212
  it "returns nil" do
208
213
  only_iso_vat.iso_country_code.should eql(nil)
209
214
  num_vat.iso_country_code.should eql(nil)
@@ -211,8 +216,8 @@ describe Valvat do
211
216
  nil_vat.iso_country_code.should eql(nil)
212
217
  end
213
218
  end
214
-
215
- context "#vat_country_code" do
219
+
220
+ context "#vat_country_code" do
216
221
  it "returns nil" do
217
222
  only_iso_vat.vat_country_code.should eql(nil)
218
223
  num_vat.vat_country_code.should eql(nil)
@@ -220,7 +225,7 @@ describe Valvat do
220
225
  nil_vat.vat_country_code.should eql(nil)
221
226
  end
222
227
  end
223
-
228
+
224
229
  context "#european?" do
225
230
  it "returns false" do
226
231
  only_iso_vat.should_not be_european
@@ -229,7 +234,7 @@ describe Valvat do
229
234
  nil_vat.should_not be_european
230
235
  end
231
236
  end
232
-
237
+
233
238
  context "#to_s" do
234
239
  it "returns full given vat number" do
235
240
  only_iso_vat.to_s.should eql("DE")
@@ -238,7 +243,7 @@ describe Valvat do
238
243
  nil_vat.to_s.should eql("")
239
244
  end
240
245
  end
241
-
246
+
242
247
  context "#inspect" do
243
248
  it "returns vat number without iso country code" do
244
249
  only_iso_vat.inspect.should eql("#<Valvat DE>")
@@ -247,6 +252,6 @@ describe Valvat do
247
252
  nil_vat.inspect.should eql("#<Valvat >")
248
253
  end
249
254
  end
250
-
255
+
251
256
  end
252
- end
257
+ end
data/valvat.gemspec CHANGED
@@ -12,23 +12,23 @@ Gem::Specification.new do |s|
12
12
  s.summary = %q{Validates european vat numbers. Standalone or as a ActiveModel validator.}
13
13
  s.description = <<-END
14
14
  Validates european vat numbers. Standalone or as a ActiveModel validator.
15
-
15
+
16
16
  * Simple syntax verification
17
17
  * Lookup via the VIES web service
18
18
  * Works standalone without any gem dependencies
19
19
  * (Optional) ActiveModel/Rails3 integration
20
20
  * I18n locales for country specific error messages
21
21
  END
22
-
23
-
24
-
22
+
23
+
24
+
25
25
  s.files = `git ls-files`.split("\n")
26
26
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
27
27
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
28
28
  s.require_paths = ["lib"]
29
-
29
+
30
30
  s.add_dependency 'savon', '>=0.8.2'
31
-
31
+
32
32
  s.add_development_dependency 'rspec', '>= 2.4.0'
33
33
  s.add_development_dependency 'guard-rspec', '>=0.1.9'
34
34
  s.add_development_dependency 'growl', '>=1.0.3'
metadata CHANGED
@@ -1,136 +1,103 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: valvat
3
- version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 0
7
- - 3
8
- - 3
9
- version: 0.3.3
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.4
5
+ prerelease:
10
6
  platform: ruby
11
- authors:
7
+ authors:
12
8
  - Sebastian Munz
13
9
  autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
-
17
- date: 2011-06-02 00:00:00 +02:00
18
- default_executable:
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2011-08-31 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: savon
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &2151804260 !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- segments:
29
- - 0
30
- - 8
31
- - 2
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
32
21
  version: 0.8.2
33
22
  type: :runtime
34
- version_requirements: *id001
35
- - !ruby/object:Gem::Dependency
36
- name: rspec
37
23
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *2151804260
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &2151803340 !ruby/object:Gem::Requirement
39
28
  none: false
40
- requirements:
41
- - - ">="
42
- - !ruby/object:Gem::Version
43
- segments:
44
- - 2
45
- - 4
46
- - 0
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
47
32
  version: 2.4.0
48
33
  type: :development
49
- version_requirements: *id002
50
- - !ruby/object:Gem::Dependency
51
- name: guard-rspec
52
34
  prerelease: false
53
- requirement: &id003 !ruby/object:Gem::Requirement
35
+ version_requirements: *2151803340
36
+ - !ruby/object:Gem::Dependency
37
+ name: guard-rspec
38
+ requirement: &2151801820 !ruby/object:Gem::Requirement
54
39
  none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- segments:
59
- - 0
60
- - 1
61
- - 9
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
62
43
  version: 0.1.9
63
44
  type: :development
64
- version_requirements: *id003
65
- - !ruby/object:Gem::Dependency
66
- name: growl
67
45
  prerelease: false
68
- requirement: &id004 !ruby/object:Gem::Requirement
46
+ version_requirements: *2151801820
47
+ - !ruby/object:Gem::Dependency
48
+ name: growl
49
+ requirement: &2151800560 !ruby/object:Gem::Requirement
69
50
  none: false
70
- requirements:
71
- - - ">="
72
- - !ruby/object:Gem::Version
73
- segments:
74
- - 1
75
- - 0
76
- - 3
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
77
54
  version: 1.0.3
78
55
  type: :development
79
- version_requirements: *id004
80
- - !ruby/object:Gem::Dependency
81
- name: rb-fsevent
82
56
  prerelease: false
83
- requirement: &id005 !ruby/object:Gem::Requirement
57
+ version_requirements: *2151800560
58
+ - !ruby/object:Gem::Dependency
59
+ name: rb-fsevent
60
+ requirement: &2151799240 !ruby/object:Gem::Requirement
84
61
  none: false
85
- requirements:
86
- - - ">="
87
- - !ruby/object:Gem::Version
88
- segments:
89
- - 0
90
- - 3
91
- - 9
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
92
65
  version: 0.3.9
93
66
  type: :development
94
- version_requirements: *id005
95
- - !ruby/object:Gem::Dependency
96
- name: activemodel
97
67
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
68
+ version_requirements: *2151799240
69
+ - !ruby/object:Gem::Dependency
70
+ name: activemodel
71
+ requirement: &2151797900 !ruby/object:Gem::Requirement
99
72
  none: false
100
- requirements:
101
- - - ">="
102
- - !ruby/object:Gem::Version
103
- segments:
104
- - 3
105
- - 0
106
- version: "3.0"
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '3.0'
107
77
  type: :development
108
- version_requirements: *id006
109
- - !ruby/object:Gem::Dependency
110
- name: fakeweb
111
78
  prerelease: false
112
- requirement: &id007 !ruby/object:Gem::Requirement
79
+ version_requirements: *2151797900
80
+ - !ruby/object:Gem::Dependency
81
+ name: fakeweb
82
+ requirement: &2151826140 !ruby/object:Gem::Requirement
113
83
  none: false
114
- requirements:
115
- - - ">="
116
- - !ruby/object:Gem::Version
117
- segments:
118
- - 1
119
- - 3
120
- - 0
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
121
87
  version: 1.3.0
122
88
  type: :development
123
- version_requirements: *id007
124
- description: " Validates european vat numbers. Standalone or as a ActiveModel validator.\n \n * Simple syntax verification\n * Lookup via the VIES web service\n * Works standalone without any gem dependencies\n * (Optional) ActiveModel/Rails3 integration\n * I18n locales for country specific error messages\n"
125
- email:
89
+ prerelease: false
90
+ version_requirements: *2151826140
91
+ description: ! " Validates european vat numbers. Standalone or as a ActiveModel validator.\n\n
92
+ \ * Simple syntax verification\n * Lookup via the VIES web service\n * Works standalone
93
+ without any gem dependencies\n * (Optional) ActiveModel/Rails3 integration\n *
94
+ I18n locales for country specific error messages\n"
95
+ email:
126
96
  - sebastian@yo.lk
127
97
  executables: []
128
-
129
98
  extensions: []
130
-
131
99
  extra_rdoc_files: []
132
-
133
- files:
100
+ files:
134
101
  - .gitignore
135
102
  - .rvmrc
136
103
  - CHANGES.md
@@ -154,39 +121,37 @@ files:
154
121
  - spec/valvat/utils_spec.rb
155
122
  - spec/valvat_spec.rb
156
123
  - valvat.gemspec
157
- has_rdoc: true
158
124
  homepage: https://github.com/yolk/valvat
159
125
  licenses: []
160
-
161
126
  post_install_message:
162
127
  rdoc_options: []
163
-
164
- require_paths:
128
+ require_paths:
165
129
  - lib
166
- required_ruby_version: !ruby/object:Gem::Requirement
130
+ required_ruby_version: !ruby/object:Gem::Requirement
167
131
  none: false
168
- requirements:
169
- - - ">="
170
- - !ruby/object:Gem::Version
171
- segments:
132
+ requirements:
133
+ - - ! '>='
134
+ - !ruby/object:Gem::Version
135
+ version: '0'
136
+ segments:
172
137
  - 0
173
- version: "0"
174
- required_rubygems_version: !ruby/object:Gem::Requirement
138
+ hash: 2750871567190462179
139
+ required_rubygems_version: !ruby/object:Gem::Requirement
175
140
  none: false
176
- requirements:
177
- - - ">="
178
- - !ruby/object:Gem::Version
179
- segments:
141
+ requirements:
142
+ - - ! '>='
143
+ - !ruby/object:Gem::Version
144
+ version: '0'
145
+ segments:
180
146
  - 0
181
- version: "0"
147
+ hash: 2750871567190462179
182
148
  requirements: []
183
-
184
149
  rubyforge_project:
185
- rubygems_version: 1.3.7
150
+ rubygems_version: 1.7.2
186
151
  signing_key:
187
152
  specification_version: 3
188
153
  summary: Validates european vat numbers. Standalone or as a ActiveModel validator.
189
- test_files:
154
+ test_files:
190
155
  - spec/spec_helper.rb
191
156
  - spec/valvat/active_model_spec.rb
192
157
  - spec/valvat/lookup_spec.rb