defmodule SoftBank.Note do import Kernel, except: [abs: 1] @moduledoc """ Defines a `SoftBank.Note` struct along with convenience methods for working with currencies. """ defstruct amount: Money.new(:USD, 0), currency: Application.compile_env(:note, :default_currency, :USD) @doc ~S""" Create a new `SoftBank.Note` struct using a default currency. The default currency can be set in the system Mix config. ## Example Config: config :note, default_currency: :USD ## Example: SoftBank.Note.new(123) %SoftBank.Note{amount: 123, currency: :USD} """ def new(amount, currency \\ nil) do currency = case is_nil(currency) do true -> Application.get_env(:note, :default_currency) false -> currency end if currency do Money.new(currency, amount) else raise ArgumentError, "to use SoftBank.Note.new/1 you must set a default currency in your application config." end end end