Module: Finrb::Validation
- Defined in:
- lib/finrb/validation.rb
Overview
Shared validation and decimal coercion for public financial inputs.
Class Method Summary collapse
- .decimal(value, name:) ⇒ Object
- .decimal_at_least(value, minimum:, name:, error: ArgumentError) ⇒ Object
- .decimal_between(value, minimum:, maximum:, name:, error: ArgumentError) ⇒ Object
- .decimal_greater_than(value, minimum:, name:, error: ArgumentError) ⇒ Object
- .non_negative_decimal(value, name:, error: ArgumentError, message: nil) ⇒ Object
- .non_zero_decimal(value, name:, error: ArgumentError) ⇒ Object
- .positive_decimal(value, name:, error: ArgumentError, message: nil) ⇒ Object
- .positive_integer(value, name:) ⇒ Object
Class Method Details
.decimal(value, name:) ⇒ Object
10 11 12 13 14 15 16 17 18 19 |
# File 'lib/finrb/validation.rb', line 10 def decimal(value, name:) raise(ArgumentError, "#{name} must be numeric.") unless value.is_a?(Numeric) decimal = value.is_a?(Flt::DecNum) ? value : Flt::DecNum.new(value.to_s) raise(ArgumentError, "#{name} must be finite.") unless decimal.finite? decimal rescue Flt::Num::Exception, FloatDomainError, Math::DomainError => e raise(ArgumentError, "#{name} must be a finite numeric value.", e.backtrace) end |
.decimal_at_least(value, minimum:, name:, error: ArgumentError) ⇒ Object
48 49 50 51 52 53 |
# File 'lib/finrb/validation.rb', line 48 def decimal_at_least(value, minimum:, name:, error: ArgumentError) decimal = decimal(value, name:) raise(error, "#{name} must be greater than or equal to #{minimum}.") if decimal < minimum decimal end |
.decimal_between(value, minimum:, maximum:, name:, error: ArgumentError) ⇒ Object
62 63 64 65 66 67 |
# File 'lib/finrb/validation.rb', line 62 def decimal_between(value, minimum:, maximum:, name:, error: ArgumentError) decimal = decimal(value, name:) raise(error, "#{name} must be between #{minimum} and #{maximum}, inclusive.") unless decimal.between?(minimum, maximum) decimal end |
.decimal_greater_than(value, minimum:, name:, error: ArgumentError) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/finrb/validation.rb', line 41 def decimal_greater_than(value, minimum:, name:, error: ArgumentError) decimal = decimal(value, name:) raise(error, "#{name} must be greater than #{minimum}.") if decimal <= minimum decimal end |
.non_negative_decimal(value, name:, error: ArgumentError, message: nil) ⇒ Object
34 35 36 37 38 39 |
# File 'lib/finrb/validation.rb', line 34 def non_negative_decimal(value, name:, error: ArgumentError, message: nil) decimal = decimal(value, name:) raise(error, || "#{name} must be greater than or equal to zero.") if decimal.negative? decimal end |
.non_zero_decimal(value, name:, error: ArgumentError) ⇒ Object
55 56 57 58 59 60 |
# File 'lib/finrb/validation.rb', line 55 def non_zero_decimal(value, name:, error: ArgumentError) decimal = decimal(value, name:) raise(error, "#{name} must be non-zero.") if decimal.zero? decimal end |
.positive_decimal(value, name:, error: ArgumentError, message: nil) ⇒ Object
27 28 29 30 31 32 |
# File 'lib/finrb/validation.rb', line 27 def positive_decimal(value, name:, error: ArgumentError, message: nil) decimal = decimal(value, name:) raise(error, || "#{name} must be greater than zero.") unless decimal.positive? decimal end |
.positive_integer(value, name:) ⇒ Object
21 22 23 24 25 |
# File 'lib/finrb/validation.rb', line 21 def positive_integer(value, name:) raise(ArgumentError, "#{name} must be a positive integer.") unless value.is_a?(Integer) && value.positive? value end |