Module: Finrb

Defined in:
lib/finrb.rb,
lib/finrb/tvm.rb,
lib/finrb/rates.rb,
lib/finrb/config.rb,
lib/finrb/errors.rb,
lib/finrb/ratios.rb,
lib/finrb/yields.rb,
lib/finrb/returns.rb,
lib/finrb/version.rb,
lib/finrb/core_ext.rb,
lib/finrb/cashflows.rb,
lib/finrb/precision.rb,
lib/finrb/accounting.rb,
lib/finrb/validation.rb,
lib/finrb/transaction.rb,
lib/finrb/amortization.rb,
lib/finrb/numerical/brent.rb,
lib/finrb/numerical/rate_search.rb,
sig/finrb.rbs

Overview

The Finrb module adheres to the following conventions for financial calculations:

  • Positive values represent cash inflows (money received); negative values represent cash outflows (payments).
  • principal represents the outstanding balance of a loan or annuity.
  • rate represents the interest rate per period.

Defined Under Namespace

Modules: Accounting, Cashflow, CoreExt, Numerical, Precision, Ratios, Returns, TVM, Validation, Yields, _Configuration, _ConfigurationBuilder Classes: Amortization, ConvergenceError, DomainError, Error, Interest, InvalidCashflowError, Payment, Rate, Transaction

Constant Summary collapse

VERSION =

Returns:

  • (String)
'1.2.0'

Class Method Summary collapse

Class Method Details

.config_Configuration

Returns:



12
13
14
# File 'lib/finrb/config.rb', line 12

def self.config
  Thread.current[CONFIG_OVERRIDE_KEY] || (@config ||= DEFAULT_CONFIGURATION)
end

.configure {|builder| ... } ⇒ _Configuration

Atomically replace the process-wide defaults. Configure the application at startup; use with_config for temporary or concurrent overrides.

Yields:

  • (builder)

Yield Parameters:

Yield Returns:

  • (void)

Returns:

Raises:

  • (ArgumentError)


18
19
20
21
22
23
24
# File 'lib/finrb/config.rb', line 18

def self.configure
  raise(ArgumentError, 'configuration requires a block.') unless block_given?

  builder = ConfigurationBuilder.new(**config.to_h)
  yield(builder)
  @config = build_configuration(builder.to_h)
end

.with_config(**overrides) ⇒ void

This method returns an undefined value.

Apply a validated configuration only for the current execution context and restore the previous configuration even when the block raises.

Raises:

  • (ArgumentError)


28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/finrb/config.rb', line 28

def self.with_config(**overrides)
  raise(ArgumentError, 'configuration override requires a block.') unless block_given?

  unknown = overrides.keys - config.to_h.keys
  raise(ArgumentError, "unknown configuration options: #{unknown.join(', ')}") unless unknown.empty?

  previous = Thread.current[CONFIG_OVERRIDE_KEY]
  Thread.current[CONFIG_OVERRIDE_KEY] = build_configuration(config.to_h.merge(overrides))
  begin
    yield
  ensure
    Thread.current[CONFIG_OVERRIDE_KEY] = previous
  end
end