Converte um numero natural (inteiro positivo) para seu equivalente em
algarismos romanos,
seguindo as regras clássicas (inclui notação subtrativa):
IV, IX, XL, XC, CD, CM).
Projeto orientado a objetos, com validação, errors específicos e testes RSpec.
- Requisitos
- Instalação
- Estrutura do Projeto
- Uso Rápido
- Erros
- Testes
- Qualidade e estilo
- Commits semânticos
- Notas de design
- Ruby 3.x (recomendado)
- Bundler
- RSpec (adicionado via bundle add rspec)
bundle install
lib/
roman_numeral_converter.rb
utils/
roman_dictionary.rb
spec/
roman_numeral_converter_spec.rb
README.mdrequire_relative "lib/roman_numeral_converter"
RomanNumeralConverter.new(1994).to_roman
# => "MCMXCIV"
RomanNumeralConverter.new(2024).to_roman
# => "MMXXIV"A classe expõe errors especifícos (subclasse de StandardError):
RomanNumeralConverter::NonIntegerError— quandonumbernão éInteger.RomanNumeralConverter::OutOfRangeError— quandonumberestá fora demin..max.
exemplo
begin
RomanNumeralConverter.new("10").to_roman
rescue RomanNumeralConverter::NonIntegerError => e
puts e.message
endExecutar a suíte RSpec:
bundle exec rspecA suite cobre:
- Validação de tipo e faixa
- Unidades básicas
- Notação subtrativa
- Casos representativos
- Restrições de forma (caracteres válidos, repetições e pares subtrativos)
- Limites (1 e 3.999)
- Imutabilidade do número armazenado
- Tabela de conversão congelada para imutabilidade
- Módulo RomanDictionary centraliza constantes/tabela
- Validação clara, mensagem de erro descritivas
Use Conventional Commits
- feat: nova funcionalidade
- fix: correção de bug
- test: alterações nos testes
- refactor: refatoração sem mudança de comportamento
- Intervalo configurável (min, max) para usos menos restritos.
- Erros especifícos ajudam a tratar falhas com precisão
MIT - use livremente com atribuição.