Sha256: df58945894f27b8b0b3809d04d7dbd844431f8a93e7ddfcf1d10520b416e4e93

Contents?: true

Size: 732 Bytes

Versions: 12

Compression:

Stored size: 732 Bytes

Contents

# frozen_string_literal: true

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

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

  def serialize(value)
    new_val = convert_to_money(value)
    super(new_val ? new_val.value : nil)
  end

  private
    def convert_to_money(value)
      return nil unless value
      if (!value.kind_of?(Numeric))
        begin
          dollars_to_cents = (value.gsub(/\$/, '').presence || 0).to_d * 100
          StoreAsInt.money(dollars_to_cents.to_i)
        rescue
          StoreAsInt::Money.new
        end
      else
        StoreAsInt.money(value)
      end
    end
end

ActiveRecord::Type.register(:money_column, MoneyType)

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
better_record-0.11.5 config/initializers/active_record/money_type.rb
better_record-0.11.4 config/initializers/active_record/money_type.rb
better_record-0.10.10 config/initializers/active_record/money_type.rb
better_record-0.10.9 config/initializers/active_record/money_type.rb
better_record-0.10.8 config/initializers/active_record/money_type.rb
better_record-0.10.7 config/initializers/active_record/money_type.rb
better_record-0.10.6 config/initializers/active_record/money_type.rb
better_record-0.10.5 config/initializers/active_record/money_type.rb
better_record-0.10.4 config/initializers/active_record/money_type.rb
better_record-0.10.3 config/initializers/active_record/money_type.rb
better_record-0.10.2 config/initializers/active_record/money_type.rb
better_record-0.10.1 config/initializers/active_record/money_type.rb