rutcl 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/README.md +8 -8
- data/lib/rut.rb +33 -32
- data/rut.gemspec +1 -1
- data/test/unit/rut_computations_test.rb +31 -31
- data/test/unit/rut_formatting_test.rb +36 -36
- data/test/unit/rut_validations_test.rb +17 -17
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
YzEyZDQzMTA1YjQ3MzhlYTNlODRmZmUzZWI2MzgzNGRjNDAxMDI5Mw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ZmVlMGI2MjI1YWM4YzgzMDhlN2ZkNTZkN2YxN2UyZDMxMzJjYzY3YQ==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OGQyN2ViNTBjMTkwNzQwZGU3ODkzODc3MjdkMGQxYWM3YmIyMzYyM2E0NWM0
|
10
|
+
ODc3ZTFiNWYzZDRiZmQzNTBhMTU2YzNmNWE3YTUxOWVjYjMzODg3NDZlNzdm
|
11
|
+
MjJiZGIxMzExZDA2YWZkZDNmZjBjZjVkN2VkNzM5NTZhZGM4OWM=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YTUxOGQ5NmQxNmU4YzU3OTIyNGU2ZDU5YjQzNzU3ZjRlNzI1ODk1NmM2ZmJi
|
14
|
+
M2FhMjhjNjk2NmY2MTg1MjE4MDNhMDVjYjk2Y2JmYWU3YzlhMzVhMmFhNGM0
|
15
|
+
OWFlNGEyOTM1NTFkZjY0N2Y1NjY0NjRmZjc2NjhmNTkxOGQyMjQ=
|
data/README.md
CHANGED
@@ -24,24 +24,24 @@ La gema habilita la clase Rut, la que cuenta con tres métodos:
|
|
24
24
|
|
25
25
|
```ruby
|
26
26
|
# Validación
|
27
|
-
Rut.valid?("16365637k") #rut válido 16.365.637-k
|
27
|
+
Rutcl::Rut.valid?("16365637k") #rut válido 16.365.637-k
|
28
28
|
#=> true
|
29
|
-
Rut.valid?("163656370") #rut inválido 16.365.637-0
|
29
|
+
Rutcl::Rut.valid?("163656370") #rut inválido 16.365.637-0
|
30
30
|
#=> false
|
31
31
|
|
32
32
|
# Cómputo de dígito verificador
|
33
|
-
Rut.dv(1) #rut 1-9
|
33
|
+
Rutcl::Rut.dv(1) #rut 1-9
|
34
34
|
#=> 9
|
35
|
-
Rut.dv(16365637) #rut 16.365.637-k
|
35
|
+
Rutcl::Rut.dv(16365637) #rut 16.365.637-k
|
36
36
|
#=> "k"
|
37
37
|
|
38
38
|
# Formateo
|
39
|
-
Rut.pretty("16365637k")
|
39
|
+
Rutcl::Rut.pretty("16365637k")
|
40
40
|
#=> "16.365.637-k"
|
41
|
-
Rut.pretty("14569484-1")
|
41
|
+
Rutcl::Rut.pretty("14569484-1")
|
42
42
|
#=> "14.569.484-1"
|
43
|
-
Rut.pretty("14569484-0")
|
43
|
+
Rutcl::Rut.pretty("14569484-0")
|
44
44
|
ArgumentError: "El rut 14569484-0 es inválido"
|
45
|
-
Rut.pretty("14569484-0", false)
|
45
|
+
Rutcl::Rut.pretty("14569484-0", false)
|
46
46
|
#=> "14.569.484-0"
|
47
47
|
```
|
data/lib/rut.rb
CHANGED
@@ -1,42 +1,43 @@
|
|
1
1
|
#coding: utf-8
|
2
|
+
module Rutcl
|
3
|
+
class Rut
|
2
4
|
|
3
|
-
|
5
|
+
VERSION = "1.0.1"
|
4
6
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
7
|
+
class << self
|
8
|
+
def dv rut
|
9
|
+
raise ArgumentError, "El rut es nulo" if rut.nil?
|
10
|
+
if rut.is_a? String
|
11
|
+
raise ArgumentError, "El rut #{rut} debe ser un número" unless rut =~ /^\d{1,8}$/
|
12
|
+
end
|
13
|
+
rut = rut.to_s
|
14
|
+
x=9
|
15
|
+
t=0
|
16
|
+
rut.reverse.split(//).each do |d|
|
17
|
+
t+=d.to_i*x
|
18
|
+
x=(x==4) ? 9 : x - 1
|
19
|
+
end
|
20
|
+
r= t % 11
|
21
|
+
(r==10) ? "k" : r
|
19
22
|
end
|
20
|
-
r= t % 11
|
21
|
-
(r==10) ? "k" : r
|
22
|
-
end
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
24
|
+
def valid? rut
|
25
|
+
return true if pretty(rut) rescue false
|
26
|
+
end
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
28
|
+
def pretty rut, validate=true
|
29
|
+
if rut.is_a? String
|
30
|
+
rut.gsub! /[.\-\ ]/, ""
|
31
|
+
raise ArgumentError, "El rut está vacío" unless rut.length > 0
|
32
|
+
raise ArgumentError, "El rut '#{rut}' contiene caracteres inválidos" unless rut =~ /^\d{1,8}[\dkK]$/
|
33
|
+
end
|
34
|
+
rut = rut.to_s
|
35
|
+
thisdv = rut[-1, 1]
|
36
|
+
rut = rut[0, rut.length - 1]
|
37
|
+
raise ArgumentError, "El rut #{rut}-#{thisdv} es inválido" if validate && dv(rut).to_s.upcase != thisdv.upcase
|
38
|
+
rut = rut.reverse.gsub(/.{3}/, '\0.').gsub(/\.$/, '').reverse
|
39
|
+
"#{rut}-#{thisdv}"
|
33
40
|
end
|
34
|
-
rut = rut.to_s
|
35
|
-
thisdv = rut[-1, 1]
|
36
|
-
rut = rut[0, rut.length - 1]
|
37
|
-
raise ArgumentError, "El rut #{rut}-#{thisdv} es inválido" if validate && dv(rut).to_s.upcase != thisdv.upcase
|
38
|
-
rut = rut.reverse.gsub(/.{3}/, '\0.').gsub(/\.$/, '').reverse
|
39
|
-
"#{rut}-#{thisdv}"
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
data/rut.gemspec
CHANGED
@@ -5,7 +5,7 @@ require "rut"
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
7
|
spec.name = "rutcl"
|
8
|
-
spec.version = Rut::VERSION
|
8
|
+
spec.version = Rutcl::Rut::VERSION
|
9
9
|
spec.authors = ["Pablo Marambio"]
|
10
10
|
spec.email = ["yo@pablomarambio.cl"]
|
11
11
|
spec.description = "Validación y formato de RUTs chilenos"
|
@@ -1,51 +1,51 @@
|
|
1
1
|
#coding: utf-8
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
|
-
describe Rut do
|
4
|
+
describe Rutcl::Rut do
|
5
5
|
describe "dv" do
|
6
6
|
it "should only accept numbers" do
|
7
|
-
assert_raises(ArgumentError) { Rut.dv "hola" }
|
8
|
-
assert_raises(ArgumentError) { Rut.dv "1234a5678" }
|
7
|
+
assert_raises(ArgumentError) { Rutcl::Rut.dv "hola" }
|
8
|
+
assert_raises(ArgumentError) { Rutcl::Rut.dv "1234a5678" }
|
9
9
|
end
|
10
10
|
describe "calculations" do
|
11
11
|
describe "for numeric ruts" do
|
12
12
|
it "should work with short ruts" do
|
13
|
-
Rut.dv(1).must_equal 9
|
14
|
-
Rut.dv(2).must_equal 7
|
15
|
-
Rut.dv(12).must_equal 4
|
16
|
-
Rut.dv(104).must_equal "k"
|
17
|
-
Rut.dv(1000).must_equal 6
|
18
|
-
Rut.dv(10000).must_equal 5
|
19
|
-
Rut.dv(100001).must_equal 2
|
13
|
+
Rutcl::Rut.dv(1).must_equal 9
|
14
|
+
Rutcl::Rut.dv(2).must_equal 7
|
15
|
+
Rutcl::Rut.dv(12).must_equal 4
|
16
|
+
Rutcl::Rut.dv(104).must_equal "k"
|
17
|
+
Rutcl::Rut.dv(1000).must_equal 6
|
18
|
+
Rutcl::Rut.dv(10000).must_equal 5
|
19
|
+
Rutcl::Rut.dv(100001).must_equal 2
|
20
20
|
end
|
21
21
|
it "should work with large ruts" do
|
22
|
-
Rut.dv(7956772).must_equal 8
|
23
|
-
Rut.dv(8457638).must_equal 7
|
24
|
-
Rut.dv(5954893).must_equal "k"
|
25
|
-
Rut.dv(16365637).must_equal "k"
|
26
|
-
Rut.dv(18439790).must_equal 0
|
27
|
-
Rut.dv(11111111).must_equal 1
|
28
|
-
Rut.dv(14569484).must_equal 1
|
22
|
+
Rutcl::Rut.dv(7956772).must_equal 8
|
23
|
+
Rutcl::Rut.dv(8457638).must_equal 7
|
24
|
+
Rutcl::Rut.dv(5954893).must_equal "k"
|
25
|
+
Rutcl::Rut.dv(16365637).must_equal "k"
|
26
|
+
Rutcl::Rut.dv(18439790).must_equal 0
|
27
|
+
Rutcl::Rut.dv(11111111).must_equal 1
|
28
|
+
Rutcl::Rut.dv(14569484).must_equal 1
|
29
29
|
end
|
30
30
|
end
|
31
31
|
describe "for string ruts" do
|
32
32
|
it "should work correct dvs" do
|
33
|
-
Rut.dv("1").must_equal 9
|
34
|
-
Rut.dv("2").must_equal 7
|
35
|
-
Rut.dv("12").must_equal 4
|
36
|
-
Rut.dv("104").must_equal "k"
|
37
|
-
Rut.dv("1000").must_equal 6
|
38
|
-
Rut.dv("10000").must_equal 5
|
39
|
-
Rut.dv("100001").must_equal 2
|
33
|
+
Rutcl::Rut.dv("1").must_equal 9
|
34
|
+
Rutcl::Rut.dv("2").must_equal 7
|
35
|
+
Rutcl::Rut.dv("12").must_equal 4
|
36
|
+
Rutcl::Rut.dv("104").must_equal "k"
|
37
|
+
Rutcl::Rut.dv("1000").must_equal 6
|
38
|
+
Rutcl::Rut.dv("10000").must_equal 5
|
39
|
+
Rutcl::Rut.dv("100001").must_equal 2
|
40
40
|
end
|
41
41
|
it "should work with large ruts" do
|
42
|
-
Rut.dv("7956772").must_equal 8
|
43
|
-
Rut.dv("8457638").must_equal 7
|
44
|
-
Rut.dv("5954893").must_equal "k"
|
45
|
-
Rut.dv("16365637").must_equal "k"
|
46
|
-
Rut.dv("18439790").must_equal 0
|
47
|
-
Rut.dv("11111111").must_equal 1
|
48
|
-
Rut.dv("14569484").must_equal 1
|
42
|
+
Rutcl::Rut.dv("7956772").must_equal 8
|
43
|
+
Rutcl::Rut.dv("8457638").must_equal 7
|
44
|
+
Rutcl::Rut.dv("5954893").must_equal "k"
|
45
|
+
Rutcl::Rut.dv("16365637").must_equal "k"
|
46
|
+
Rutcl::Rut.dv("18439790").must_equal 0
|
47
|
+
Rutcl::Rut.dv("11111111").must_equal 1
|
48
|
+
Rutcl::Rut.dv("14569484").must_equal 1
|
49
49
|
end
|
50
50
|
end
|
51
51
|
end
|
@@ -1,61 +1,61 @@
|
|
1
1
|
#coding: utf-8
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
|
-
describe Rut do
|
4
|
+
describe Rutcl::Rut do
|
5
5
|
describe "pretty" do
|
6
6
|
describe "validations" do
|
7
7
|
it "should detect empty ruts" do
|
8
|
-
assert_raises(ArgumentError) { Rut.pretty "" }
|
9
|
-
assert_raises(ArgumentError) { Rut.pretty nil }
|
8
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "" }
|
9
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty nil }
|
10
10
|
end
|
11
11
|
it "should detect non-ruts" do
|
12
|
-
assert_raises(ArgumentError) { Rut.pretty "hola" }
|
13
|
-
assert_raises(ArgumentError) { Rut.pretty "14x569-484-1" }
|
14
|
-
assert_raises(ArgumentError) { Rut.pretty "14569a484-1" }
|
15
|
-
assert_raises(ArgumentError) { Rut.pretty "14569484/1" }
|
16
|
-
assert_raises(ArgumentError) { Rut.pretty "14 569x484 1" }
|
12
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "hola" }
|
13
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "14x569-484-1" }
|
14
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "14569a484-1" }
|
15
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "14569484/1" }
|
16
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "14 569x484 1" }
|
17
17
|
end
|
18
18
|
it "should detect invalid ruts" do
|
19
|
-
assert_raises(ArgumentError) { Rut.pretty "1-8" }
|
20
|
-
assert_raises(ArgumentError) { Rut.pretty "100.001-1" }
|
21
|
-
assert_raises(ArgumentError) { Rut.pretty "14.569.484-2" }
|
19
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "1-8" }
|
20
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "100.001-1" }
|
21
|
+
assert_raises(ArgumentError) { Rutcl::Rut.pretty "14.569.484-2" }
|
22
22
|
end
|
23
23
|
it "should dismiss invalid ruts if told so" do
|
24
|
-
Rut.pretty("1-8", false).must_be_instance_of String
|
25
|
-
Rut.pretty("100.001-1", false).must_be_instance_of String
|
26
|
-
Rut.pretty("14.569.484-2", false).must_be_instance_of String
|
24
|
+
Rutcl::Rut.pretty("1-8", false).must_be_instance_of String
|
25
|
+
Rutcl::Rut.pretty("100.001-1", false).must_be_instance_of String
|
26
|
+
Rutcl::Rut.pretty("14.569.484-2", false).must_be_instance_of String
|
27
27
|
end
|
28
28
|
end
|
29
29
|
describe "formatting" do
|
30
30
|
it "should work with unformatted ruts" do
|
31
|
-
Rut.pretty(19).must_equal "1-9"
|
32
|
-
Rut.pretty(124).must_equal "12-4"
|
33
|
-
Rut.pretty("104k").must_equal "104-k"
|
34
|
-
Rut.pretty("10006").must_equal "1.000-6"
|
35
|
-
Rut.pretty("100005").must_equal "10.000-5"
|
36
|
-
Rut.pretty("1000012").must_equal "100.001-2"
|
37
|
-
Rut.pretty("79567728").must_equal "7.956.772-8"
|
38
|
-
Rut.pretty("145694841").must_equal "14.569.484-1"
|
31
|
+
Rutcl::Rut.pretty(19).must_equal "1-9"
|
32
|
+
Rutcl::Rut.pretty(124).must_equal "12-4"
|
33
|
+
Rutcl::Rut.pretty("104k").must_equal "104-k"
|
34
|
+
Rutcl::Rut.pretty("10006").must_equal "1.000-6"
|
35
|
+
Rutcl::Rut.pretty("100005").must_equal "10.000-5"
|
36
|
+
Rutcl::Rut.pretty("1000012").must_equal "100.001-2"
|
37
|
+
Rutcl::Rut.pretty("79567728").must_equal "7.956.772-8"
|
38
|
+
Rutcl::Rut.pretty("145694841").must_equal "14.569.484-1"
|
39
39
|
end
|
40
40
|
it "should work with partially formatted ruts" do
|
41
|
-
Rut.pretty("1000-6").must_equal "1.000-6"
|
42
|
-
Rut.pretty("10000-5").must_equal "10.000-5"
|
43
|
-
Rut.pretty("100001-2").must_equal "100.001-2"
|
44
|
-
Rut.pretty("7956772-8").must_equal "7.956.772-8"
|
45
|
-
Rut.pretty("14569484-1").must_equal "14.569.484-1"
|
41
|
+
Rutcl::Rut.pretty("1000-6").must_equal "1.000-6"
|
42
|
+
Rutcl::Rut.pretty("10000-5").must_equal "10.000-5"
|
43
|
+
Rutcl::Rut.pretty("100001-2").must_equal "100.001-2"
|
44
|
+
Rutcl::Rut.pretty("7956772-8").must_equal "7.956.772-8"
|
45
|
+
Rutcl::Rut.pretty("14569484-1").must_equal "14.569.484-1"
|
46
46
|
end
|
47
47
|
it "should work with fully formatted ruts" do
|
48
|
-
Rut.pretty("1.000-6").must_equal "1.000-6"
|
49
|
-
Rut.pretty("10.000-5").must_equal "10.000-5"
|
50
|
-
Rut.pretty("100.001-2").must_equal "100.001-2"
|
51
|
-
Rut.pretty("7.956.772-8").must_equal "7.956.772-8"
|
52
|
-
Rut.pretty("14.569.484-1").must_equal "14.569.484-1"
|
48
|
+
Rutcl::Rut.pretty("1.000-6").must_equal "1.000-6"
|
49
|
+
Rutcl::Rut.pretty("10.000-5").must_equal "10.000-5"
|
50
|
+
Rutcl::Rut.pretty("100.001-2").must_equal "100.001-2"
|
51
|
+
Rutcl::Rut.pretty("7.956.772-8").must_equal "7.956.772-8"
|
52
|
+
Rutcl::Rut.pretty("14.569.484-1").must_equal "14.569.484-1"
|
53
53
|
end
|
54
54
|
it "should work with ruts with spaces" do
|
55
|
-
Rut.pretty("1 9").must_equal "1-9"
|
56
|
-
Rut.pretty(" 12 4").must_equal "12-4"
|
57
|
-
Rut.pretty("104 k").must_equal "104-k"
|
58
|
-
Rut.pretty("100 0 6").must_equal "1.000-6"
|
55
|
+
Rutcl::Rut.pretty("1 9").must_equal "1-9"
|
56
|
+
Rutcl::Rut.pretty(" 12 4").must_equal "12-4"
|
57
|
+
Rutcl::Rut.pretty("104 k").must_equal "104-k"
|
58
|
+
Rutcl::Rut.pretty("100 0 6").must_equal "1.000-6"
|
59
59
|
end
|
60
60
|
end
|
61
61
|
end
|
@@ -1,27 +1,27 @@
|
|
1
1
|
#coding: utf-8
|
2
2
|
require 'test_helper'
|
3
3
|
|
4
|
-
describe Rut do
|
4
|
+
describe Rutcl::Rut do
|
5
5
|
describe "validations" do
|
6
6
|
it "should detect invalid ruts" do
|
7
|
-
Rut.valid?(1).must_equal false
|
8
|
-
Rut.valid?(123).must_equal false
|
9
|
-
Rut.valid?("1040").must_equal false
|
10
|
-
Rut.valid?("10005").must_equal false
|
11
|
-
Rut.valid?("100003").must_equal false
|
12
|
-
Rut.valid?("1000011").must_equal false
|
13
|
-
Rut.valid?("79567729").must_equal false
|
14
|
-
Rut.valid?("14569484k").must_equal false
|
7
|
+
Rutcl::Rut.valid?(1).must_equal false
|
8
|
+
Rutcl::Rut.valid?(123).must_equal false
|
9
|
+
Rutcl::Rut.valid?("1040").must_equal false
|
10
|
+
Rutcl::Rut.valid?("10005").must_equal false
|
11
|
+
Rutcl::Rut.valid?("100003").must_equal false
|
12
|
+
Rutcl::Rut.valid?("1000011").must_equal false
|
13
|
+
Rutcl::Rut.valid?("79567729").must_equal false
|
14
|
+
Rutcl::Rut.valid?("14569484k").must_equal false
|
15
15
|
end
|
16
16
|
it "should recognize valid ruts" do
|
17
|
-
Rut.valid?(19).must_equal true
|
18
|
-
Rut.valid?(124).must_equal true
|
19
|
-
Rut.valid?("104k").must_equal true
|
20
|
-
Rut.valid?("10006").must_equal true
|
21
|
-
Rut.valid?("100005").must_equal true
|
22
|
-
Rut.valid?("1000012").must_equal true
|
23
|
-
Rut.valid?("79567728").must_equal true
|
24
|
-
Rut.valid?("145694841").must_equal true
|
17
|
+
Rutcl::Rut.valid?(19).must_equal true
|
18
|
+
Rutcl::Rut.valid?(124).must_equal true
|
19
|
+
Rutcl::Rut.valid?("104k").must_equal true
|
20
|
+
Rutcl::Rut.valid?("10006").must_equal true
|
21
|
+
Rutcl::Rut.valid?("100005").must_equal true
|
22
|
+
Rutcl::Rut.valid?("1000012").must_equal true
|
23
|
+
Rutcl::Rut.valid?("79567728").must_equal true
|
24
|
+
Rutcl::Rut.valid?("145694841").must_equal true
|
25
25
|
end
|
26
26
|
end
|
27
27
|
end
|