Sha256: ee7d7afe3f5ea2d34f734c782994e8e5ada2b9afacdd04c3556c6760c75f68c4

Contents?: true

Size: 760 Bytes

Versions: 10

Compression:

Stored size: 760 Bytes

Contents

# frozen_string_literal: true

class MoneyType < ActiveRecord::Type::Value
  def cast(value)
    return nil unless 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

10 entries across 10 versions & 1 rubygems

Version Path
better_record-0.10.0 config/initializers/active_record/money_type.rb
better_record-0.9.3 config/initializers/active_record/money_type.rb
better_record-0.9.1 config/initializers/active_record/money_type.rb
better_record-0.9.0 config/initializers/active_record/money_type.rb
better_record-0.8.6 config/initializers/active_record/money_type.rb
better_record-0.8.5 config/initializers/active_record/money_type.rb
better_record-0.8.4 config/initializers/active_record/money_type.rb
better_record-0.8.3 config/initializers/active_record/money_type.rb
better_record-0.8.2 config/initializers/active_record/money_type.rb
better_record-0.8.1 config/initializers/active_record/money_type.rb