Class: BraDocuments::Matcher

Inherits:
Object
  • Object
show all
Defined in:
lib/bra_documents/matcher.rb

Constant Summary collapse

FORMATS =
{
  cpf: { formatted: /\A(\d{3}\.){2}\d{3}-\d{2}\z/, raw: /\A\d{11}\z/ },
  cnpj: { formatted: /\A\d{2}.\d{3}\.\d{3}\/\d{4}-\d{2}\z/, raw: /\A\d{14}\z/ }
}.freeze

Class Method Summary collapse

Class Method Details

.match?(number, kind:, mode:) ⇒ Boolean

Macthes with Brazilian CPF and CNPJ documents.

BraDocuments::Matcher.match?('11111111111', kind: :cpf, mode: :raw)
# => true

BraDocuments::Matcher.match?('11111111111', kind: :cpf, mode: :formatted)
# => false

BraDocuments::Matcher.match?('11111111111', kind: :cnpj, mode: :raw)
# => false

BraDocuments::Matcher.match?('90.978.812/0001-07', kind: :cnpj, mode: :formatted)
# => true

Returns:

  • (Boolean)

Raises:

  • (ArgumentError)


24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/bra_documents/matcher.rb', line 24

def match?(number, kind:, mode:)
  raise ArgumentError, "\"#{number.inspect}\" must be a String." unless number.is_a?(String)

  unless known_format?(kind)
    raise ArgumentError, "Unknown document kind \"#{kind.inspect}\". Known documents: #{known_formats.join(', ')}."
  end

  unless known_mode?(mode)
    raise ArgumentError, "Unknown document format mode \"#{mode.inspect}\". Known modes: #{known_modes.join(', ')}."
  end

  formats_to_match(kind, mode).any? { |format| format.match?(number) }
end