rutcl 1.0.0 → 1.0.1
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.
- 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
|