validates_cpf 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -14,6 +14,14 @@ class User < ActiveRecord::Base
14
14
  validates :cpf, :cpf => true
15
15
  end
16
16
 
17
+ == Test
18
+
19
+ Only Rspec supported at the moment and has shoulda-matchers as dependecy.
20
+
21
+ === How?
22
+
23
+ You should use validates_as_cpf(:attribute) just like any other shoulda matcher.
24
+
17
25
  == Special Thanks
18
26
 
19
27
  This project is based on brcpfcnpj gem and his intention it to mantain a cleaner code to validate CPF and macros for test it.
@@ -0,0 +1,48 @@
1
+ module Shoulda
2
+ module Matchers
3
+ module ActiveModel
4
+ def validate_as_cpf(attr)
5
+ ValidateAsCpfMatcher.new(attr)
6
+ end
7
+
8
+ class ValidateAsCpfMatcher < ValidationMatcher
9
+ include Helpers
10
+
11
+ def initialize(attribute)
12
+ @attribute = attribute
13
+ end
14
+
15
+ def with_message(message)
16
+ @message = message if message
17
+ self
18
+ end
19
+
20
+ def description
21
+ "validate #{@attribute} as a valid CPF number"
22
+ end
23
+
24
+ def matches?(subject)
25
+ super(subject)
26
+
27
+ disallows_invalid_value &&
28
+ allows_valid_value &&
29
+ allows_nil_value
30
+ end
31
+
32
+ private
33
+
34
+ def disallows_invalid_value
35
+ disallows_value_of("123456", @message)
36
+ end
37
+
38
+ def allows_valid_value
39
+ allows_value_of("897.546.112-20", @message)
40
+ end
41
+
42
+ def allows_nil_value
43
+ allows_value_of(nil, @message)
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -18,6 +18,8 @@ class CPF
18
18
  @number
19
19
  end
20
20
 
21
+ private
22
+
21
23
  def check_cpf
22
24
  return false if @cleaned_number.length != 11 or @cleaned_number.scan(/\d/).uniq.length == 1
23
25
  @result == first_digit_verifier + second_digit_verifier
@@ -1,3 +1,3 @@
1
1
  module ValidatesCpf
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -0,0 +1,2 @@
1
+ class Admin < ActiveRecord::Base
2
+ end
@@ -0,0 +1,11 @@
1
+ class CreateAdmins < ActiveRecord::Migration
2
+ def self.up
3
+ create_table :admins do |u|
4
+ u.string :cpf
5
+ end
6
+ end
7
+
8
+ def self.down
9
+ drop_table :admins
10
+ end
11
+ end
@@ -0,0 +1,25 @@
1
+ require 'spec_helper'
2
+
3
+ describe Shoulda::Matchers::ActiveModel::ValidateAsCpfMatcher do
4
+ context "on a attribute which validates cpf" do
5
+ it "should require a valid CPF" do
6
+ @user = User.new(:cpf => '123456')
7
+ @user.should validate_as_cpf(:cpf)
8
+ end
9
+
10
+ it "should accept a nil CPF" do
11
+ @user = User.new(:cpf => nil)
12
+ @user.should validate_as_cpf(:cpf)
13
+ end
14
+ end
15
+
16
+ context "on a attribute which not validates cpf" do
17
+ before do
18
+ @user = Admin.new(:cpf => '123456')
19
+ end
20
+
21
+ it "should not require a valid CPF" do
22
+ @user.should_not validate_as_cpf(:cpf)
23
+ end
24
+ end
25
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,10 +1,12 @@
1
1
  require "rubygems"
2
2
  require "rspec"
3
3
  require "active_record"
4
+ require "shoulda-matchers"
4
5
 
5
- require File.expand_path(File.dirname(__FILE__) + "/../lib/validates_cpf")
6
+ Dir.glob(File.dirname(__FILE__) + "/../lib/**/*.rb").each { |file| require file }
7
+ Dir.glob(File.dirname(__FILE__) + "/fake_app/**/*.rb").each { |file| require file }
6
8
 
7
9
  ActiveRecord::Base.establish_connection(:adapter => "sqlite3", :database => ":memory:")
8
- require File.dirname(__FILE__) + "/fake_app/db/create_users"
9
10
 
10
- CreateUsers.migrate(:up)
11
+ CreateUsers.migrate(:up)
12
+ CreateAdmins.migrate(:up)
@@ -1,7 +1,5 @@
1
1
  require 'spec_helper'
2
2
 
3
- require File.expand_path(File.dirname(__FILE__) + "/../../lib/validates_cpf/cpf")
4
-
5
3
  describe CPF do
6
4
  context "should be invalid with" do
7
5
  it "blank number" do
@@ -1,5 +1,4 @@
1
1
  require 'spec_helper'
2
- require File.expand_path(File.dirname(__FILE__) + "/fake_app/user")
3
2
 
4
3
  describe CpfValidator do
5
4
  context "when cpf is invalid" do
@@ -12,6 +12,7 @@ Gem::Specification.new do |s|
12
12
  s.description = %q{Validates CPF, the simple way.}
13
13
 
14
14
  s.add_dependency("activerecord", ">= 3.0.0")
15
+ s.add_dependency("shoulda-matchers")
15
16
 
16
17
  s.rubyforge_project = "validates_cpf"
17
18
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: validates_cpf
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2012-02-20 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activerecord
16
- requirement: &8077760 !ruby/object:Gem::Requirement
16
+ requirement: &8557480 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,21 @@ dependencies:
21
21
  version: 3.0.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *8077760
24
+ version_requirements: *8557480
25
+ - !ruby/object:Gem::Dependency
26
+ name: shoulda-matchers
27
+ requirement: &8556960 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *8556960
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: rspec
27
- requirement: &8076240 !ruby/object:Gem::Requirement
38
+ requirement: &8555240 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '0'
33
44
  type: :development
34
45
  prerelease: false
35
- version_requirements: *8076240
46
+ version_requirements: *8555240
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: sqlite3
38
- requirement: &8075700 !ruby/object:Gem::Requirement
49
+ requirement: &8554720 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,7 +54,7 @@ dependencies:
43
54
  version: '0'
44
55
  type: :development
45
56
  prerelease: false
46
- version_requirements: *8075700
57
+ version_requirements: *8554720
47
58
  description: Validates CPF, the simple way.
48
59
  email: plribeiro3000@gmail.com
49
60
  executables: []
@@ -55,11 +66,15 @@ files:
55
66
  - Gemfile
56
67
  - README.rdoc
57
68
  - Rakefile
69
+ - lib/shoulda-matchers/validate_as_cpf_matcher.rb
58
70
  - lib/validates_cpf.rb
59
71
  - lib/validates_cpf/cpf.rb
60
72
  - lib/validates_cpf/version.rb
73
+ - spec/fake_app/admin.rb
74
+ - spec/fake_app/db/create_admins.rb
61
75
  - spec/fake_app/db/create_users.rb
62
76
  - spec/fake_app/user.rb
77
+ - spec/shoulda-matchers/validate_as_cpf_matcher_spec.rb
63
78
  - spec/spec_helper.rb
64
79
  - spec/validates_cpf/cpf_spec.rb
65
80
  - spec/validates_cpf_spec.rb