Sha256: 6575d8c9971d483bcc328b64663aed1386fe48202a15a371c7aea093128ec647

Contents?: true

Size: 1.01 KB

Versions: 16

Compression:

Stored size: 1.01 KB

Contents

# frozen_string_literal: true
require 'store_as_int'

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

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

      def deserialize(value)
        super(convert_to_money(value))
      end

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

      private
        def convert_to_money(value)
          return StoreAsInt::Money.new(0) unless value
          if (!value.kind_of?(Numeric))
            begin
              dollars_to_cents = (value.gsub(/\$/, '').presence || 0).to_d * StoreAsInt::Money.base
              StoreAsInt::Money.new(dollars_to_cents.to_i)
            rescue
              StoreAsInt::Money.new
            end
          else
            StoreAsInt::Money.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/money_integer.rb
better_record-0.19.10 lib/better_record/money_integer.rb
better_record-0.19.9 lib/better_record/money_integer.rb
better_record-0.19.8 lib/better_record/money_integer.rb
better_record-0.19.7 lib/better_record/money_integer.rb
better_record-0.19.6 lib/better_record/money_integer.rb
better_record-0.19.4 lib/better_record/money_integer.rb
better_record-0.19.2 lib/better_record/money_integer.rb
better_record-0.19.1 lib/better_record/money_integer.rb
better_record-0.19.0 lib/better_record/money_integer.rb
better_record-0.18.3 lib/better_record/money_integer.rb
better_record-0.18.2 lib/better_record/money_integer.rb
better_record-0.18.1 lib/better_record/money_integer.rb
better_record-0.18.0 lib/better_record/money_integer.rb
better_record-0.17.9 lib/better_record/money_integer.rb
better_record-0.17.8 lib/better_record/money_integer.rb