Skip to content

Design Decisions ​

This gem is opinionated. Those opinions are part of its value.

Atomic integers, not decimal storage ​

The atomic value is always an integer count of the smallest unit. That keeps equality, hashing, and persistence crisp.

One class, registry-driven types ​

Type identity lives in the registry because adding a new symbol should be a configuration action, not a subclass ceremony.

Directional rates only ​

Rates are directional because real conversion systems are directional.

Display units are not conversions ​

Showing gold in grams is still showing gold. The type has not changed.

Explicit remainder ​

split and allocate return remainder explicitly because silent distribution bakes in a business preference.

Lockable global registry ​

The global registry is a practical boot-time configuration surface. lock! exists so the convenience of a shared registry does not imply ongoing runtime mutability.

Built for precise money, token, commodity, and inventory workflows.