Method: Stellar::Price.from

Defined in:
lib/stellar/price.rb

.from(number) ⇒ Object

Raises:

  • (ArgumentError)


6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'lib/stellar/price.rb', line 6

def self.from(number)
  number = BigDecimal(number, 0) if number.is_a?(String)
  number = number.to_r if number.respond_to?(:to_r)

  raise ArgumentError, "Couldn't convert #{number.class} to rational number" unless number.is_a?(Rational)

  best_r = number.rationalize(1.0e-7)

  if best_r.numerator > MAX_PRECISION || best_r.denominator > MAX_PRECISION
    raise ArgumentError, "Couldn't find valid price approximation for #{number}"
  end

  new(n: best_r.numerator, d: best_r.denominator)
end