Sha256: 8ec4371d3a060e2d241b76d678769161b80ab63f2a855cd0264e46623b9d44d6

Contents?: true

Size: 1.1 KB

Versions: 16

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true
require 'store_as_int'

module BetterRecord
  module ExchangeRateInteger
    module TableDefinition
      def exchange_rate_integer(*args, **opts)
        args.each do |name|
          column name, :exchange_rate_integer, **opts
        end
      end
    end

    class Type < ActiveRecord::Type::Value
      def cast(value)
        convert_to_exchange_rate(value)
      end

      def deserialize(value)
        super(convert_to_exchange_rate(value))
      end

      def serialize(value)
        super(convert_to_exchange_rate(value).value)
      end

      private
        def convert_to_exchange_rate(value)
          return StoreAsInt::ExchangeRate.new(0) unless value
          if (!value.kind_of?(Numeric))
            begin
              exchange_rate_to_i = (value.gsub(/\%/, '').presence || 0).to_d * StoreAsInt::ExchangeRate.base
              StoreAsInt::ExchangeRate.new(exchange_rate_to_i.to_i)
            rescue
              StoreAsInt::ExchangeRate.new
            end
          else
            StoreAsInt::ExchangeRate.new(value)
          end
        end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
better_record-0.20.2 lib/better_record/exchange_rate_integer.rb
better_record-0.19.10 lib/better_record/exchange_rate_integer.rb
better_record-0.19.9 lib/better_record/exchange_rate_integer.rb
better_record-0.19.8 lib/better_record/exchange_rate_integer.rb
better_record-0.19.7 lib/better_record/exchange_rate_integer.rb
better_record-0.19.6 lib/better_record/exchange_rate_integer.rb
better_record-0.19.4 lib/better_record/exchange_rate_integer.rb
better_record-0.19.2 lib/better_record/exchange_rate_integer.rb
better_record-0.19.1 lib/better_record/exchange_rate_integer.rb
better_record-0.19.0 lib/better_record/exchange_rate_integer.rb
better_record-0.18.3 lib/better_record/exchange_rate_integer.rb
better_record-0.18.2 lib/better_record/exchange_rate_integer.rb
better_record-0.18.1 lib/better_record/exchange_rate_integer.rb
better_record-0.18.0 lib/better_record/exchange_rate_integer.rb
better_record-0.17.9 lib/better_record/exchange_rate_integer.rb
better_record-0.17.8 lib/better_record/exchange_rate_integer.rb