lackac/justcoin

View on GitHub
lib/justcoin/decimal_converter.rb

Summary

Maintainability
A
0 mins
Test Coverage
require "bigdecimal"

class Justcoin
  class DecimalConverter < Faraday::Middleware

    def call(env)
      convert_decimals(env.body) if env.body
      response = @app.call(env)
      parse_response response.env[:body]
      response
    end

    private

    def convert_decimals(body)
      %i(price amount).each do |key|
        case body[key]
        when BigDecimal
          body[key] = body[key].to_s("F")
        when Numeric
          body[key] = Float(body[key]).to_s
        end
      end
    end

    def parse_response(value)
      case value
      when Array
        value.map! {|v| parse_response(v)}
      when Hash, Hashie::Mash
        value.each do |k, v|
          value[k] = parse_response(v)
        end
      when /^\s*\d*\.\d+/
        value = BigDecimal.new(value)
      end
      value
    end

  end
end