Class: BraDocuments::Formatter

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

Constant Summary collapse

NOT_NUMBER =
/\D/
FORMATS =
{
  cpf: { pattern: /\A(\d{3})(\d{3})(\d{3})(\d{2})\z/, mask: '%s.%s.%s-%s' },
  cnpj: { pattern: /\A(\d{2})(\d{3})(\d{3})(\d{4})(\d{2})\z/, mask: '%s.%s.%s/%s-%s' }
}.freeze

Class Method Summary collapse

Class Method Details

.format(number, as:) ⇒ Object

Formats a only numbers CPF or CNPJ in their own mask

BraDocuments::Formatter.format(‘86027265892’, as: :cpf) # => “860.272.658-92” BraDocuments::Formatter.format(‘53855973879456’, as: :cnpj) # => “53.855.973/8794-56”

Raises:

  • (ArgumentError)


16
17
18
19
20
21
22
23
24
25
# File 'lib/bra_documents/formatter.rb', line 16

def format(number, as:)
  raise ArgumentError, "\"#{number.inspect}\" must be a String." unless number.is_a?(String)
  unless known_format?(as)
    raise ArgumentError, "Format \"#{as}\" is not know. Known formats: #{known_formats.join(', ')}."
  end

  format_data = FORMATS[as]

  Kernel.format(format_data[:mask], *format_data[:pattern].match(number).captures)
end

.raw(number) ⇒ Object

Formats removing all not number caracters from string.

BraDocuments::Formatter.raw(‘860.272.658-9’) # => “286027265892” BraDocuments::Formatter.format(‘53.855.973/8794-56’) # => “53855973879456”

Raises:

  • (ArgumentError)


31
32
33
34
35
# File 'lib/bra_documents/formatter.rb', line 31

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

  number.gsub(NOT_NUMBER, '')
end