summaryrefslogtreecommitdiff
path: root/lib/quantity_type.rb
blob: 5ba4e8e768a7d96e8f9862394b75a4b0de23e630 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class QuantityType < ActiveRecord::Type::Float
  def cast(value)
    return nil if value.nil?

    if value.is_a? Quantity
      value.to(:lbs)
    elsif value.is_a? Hash
      Quantity.new(value[:amount].to_f, value[:unit].to_sym)
    else
      Quantity.new(value.to_f, :lbs)
    end
  end

  def serialize(value)
    if value.is_a? Quantity
      super(value.to(:lbs).to_f)
    else
      super(value)
    end
  end
end