cnpj-alfanumerico 0.1.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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 845275aa7787f592c19ac2d4da1e95a63742e372f754b5ef0b77acc75e26493a
4
+ data.tar.gz: b5aa48d8fe71f68e85c42c8977f308bd3da26fa72d87e445fdac25e391b6d520
5
+ SHA512:
6
+ metadata.gz: 83791adc5e4703e1b70a12a54e634dc3af452baaf7d7fa3220320c7dbaa4f33fbf9357ef9483a47dd640828ddfd2e2cfb70d9b549f7fb07f3f80e4844d3d2b59
7
+ data.tar.gz: 5e758b9dad50272e405f0efd36cdd7e309e9d5996fd1e75adaddd851d9107e55120963206ac1619e8ff74b81073fd8d4983dfc1b01fd4801f2adc13514f7c67b
@@ -0,0 +1,22 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "json"
5
+ require_relative "../lib/cnpj-alfanumerico"
6
+
7
+ command = ARGV.shift
8
+ value = ARGV.shift
9
+
10
+ case command
11
+ when "validate"
12
+ puts Cnpj::Alfanumerico.valid?(value)
13
+ when "generate"
14
+ puts Cnpj::Alfanumerico.generate(value)
15
+ when "format"
16
+ puts Cnpj::Alfanumerico.format(value)
17
+ when "split"
18
+ puts JSON.generate(Cnpj::Alfanumerico.split(value))
19
+ else
20
+ warn "Usage: cnpj-alfanumerico [validate|generate|format|split] VALUE"
21
+ exit 1
22
+ end
@@ -0,0 +1 @@
1
+ require_relative "cnpj/alfanumerico"
@@ -0,0 +1,46 @@
1
+ require "test_helper"
2
+
3
+ class CnpjAlfanumericoTest < Minitest::Test
4
+ def test_normalizes_punctuation_and_lowercase
5
+ assert_equal "12ABC34501DE35", Cnpj::Alfanumerico.normalize("12.abc.345/01de-35")
6
+ end
7
+
8
+ def test_maps_alphanumeric_values_using_ascii_minus_48
9
+ assert_equal 0, Cnpj::Alfanumerico.char_value("0")
10
+ assert_equal 9, Cnpj::Alfanumerico.char_value("9")
11
+ assert_equal 17, Cnpj::Alfanumerico.char_value("A")
12
+ assert_equal 42, Cnpj::Alfanumerico.char_value("Z")
13
+ end
14
+
15
+ def test_calculates_official_receita_example
16
+ assert_equal "35", Cnpj::Alfanumerico.calculate_check_digits("12ABC34501DE")
17
+ assert_equal "12ABC34501DE35", Cnpj::Alfanumerico.generate("12ABC34501DE")
18
+ assert_equal "12.ABC.345/01DE-35", Cnpj::Alfanumerico.format("12ABC34501DE35")
19
+ assert Cnpj::Alfanumerico.valid?("12.ABC.345/01DE-35")
20
+ end
21
+
22
+ def test_validates_legacy_numeric_cnpj
23
+ assert Cnpj::Alfanumerico.valid?("11.444.777/0001-61")
24
+ assert_equal "11.444.777/0001-61", Cnpj::Alfanumerico.format("11444777000161")
25
+ end
26
+
27
+ def test_rejects_invalid_values
28
+ refute Cnpj::Alfanumerico.valid?("12.ABC.345/01DE-36")
29
+ refute Cnpj::Alfanumerico.valid?("12.ABC.345/01DE-3X")
30
+ assert_raises(ArgumentError) { Cnpj::Alfanumerico.calculate_check_digits("ABC") }
31
+ end
32
+
33
+ def test_splits_and_asserts_valid_cnpj
34
+ assert_equal(
35
+ { raiz: "12ABC345", ordem: "01DE", dv: "35" },
36
+ Cnpj::Alfanumerico.split("12.ABC.345/01DE-35")
37
+ )
38
+ assert_equal "12ABC34501DE35", Cnpj::Alfanumerico.assert_valid!("12.ABC.345/01DE-35")
39
+ assert_raises(ArgumentError) { Cnpj::Alfanumerico.assert_valid!("12.ABC.345/01DE-36") }
40
+ end
41
+
42
+ def test_detects_formatted_values
43
+ assert Cnpj::Alfanumerico.formatted?("12.ABC.345/01DE-35")
44
+ refute Cnpj::Alfanumerico.formatted?("12ABC34501DE35")
45
+ end
46
+ end
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift File.expand_path("../lib", __dir__)
2
+ require "minitest/autorun"
3
+ require "cnpj-alfanumerico"
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cnpj-alfanumerico
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Miguel C. Honorio
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2026-05-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: minitest
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.25'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.25'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '13.2'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '13.2'
41
+ description: Implementa o calculo do digito verificador do CNPJ alfanumerico conforme
42
+ a Receita Federal, mantendo compatibilidade com CNPJ numerico.
43
+ email:
44
+ - miguel@prosulti.com.br
45
+ executables:
46
+ - cnpj-alfanumerico
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - exe/cnpj-alfanumerico
51
+ - lib/cnpj-alfanumerico.rb
52
+ - test/cnpj_alfanumerico_test.rb
53
+ - test/test_helper.rb
54
+ homepage: https://github.com/miguelcarloshonorio/cpnj_ruby_2026
55
+ licenses:
56
+ - MIT
57
+ metadata:
58
+ homepage_uri: https://github.com/miguelcarloshonorio/cpnj_ruby_2026
59
+ source_code_uri: https://github.com/miguelcarloshonorio/cpnj_ruby_2026
60
+ changelog_uri: https://github.com/miguelcarloshonorio/cpnj_ruby_2026/blob/main/CHANGELOG.md
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 2.7.6
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ requirements: []
76
+ rubygems_version: 3.4.19
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: Validacao, calculo e formatacao de CNPJ numerico e alfanumerico.
80
+ test_files: []