Project

quantified

0.05
No commit activity in last 3 years
No release in over 3 years
Pretty quantifiable measurements which feel like ActiveSupport::Duration.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
 Dependencies

Development

 Project Readme

Quantified Build Status

Pretty quantifiable measurements which feel like ActiveSupport::Duration.

Access whichever included attributes you want like so:

require 'quantified/mass'
require 'quantified/length'

Add methods to Numeric (only plural, must correspond with plural unit names):

Mass.numeric_methods :grams, :kilograms, :ounces, :pounds
Length.numeric_methods :metres, :centimetres, :inches, :feet

Then you can do things like this:

1.feet == 12.inches
# => true

18.inches.to_feet
# => #<Quantified::Length: 1.5 feet>

(2.5).feet.in_millimetres.to_s
# => "762.0 millimetres"

You can easily define new attributes. Here's length.rb:

module Quantified
  class Length < Attribute
    system :metric do
      primitive :metre

      one :centimetre, :is => Length.new(0.01, :metres)
      one :millimetre, :is => Length.new(0.1, :centimetres)
      one :kilometre, :is => Length.new(1000, :metres)
    end

    system :imperial do
      primitive :inch
      one :inch, :is => Length.new(2.540, :centimetres)

      one :foot, :plural => :feet, :is => Length.new(12, :inches)
      one :yard, :is => Length.new(3, :feet)
      one :mile, :is => Length.new(5280, :feet)
    end
  end
end

You can add a custom coder to an ActiveRecord model to deserialize attributes:

class Package < ActiveRecord::Base
  serialize :weight, Quantified::Mass.ounces
  serialize :length, Quantified::Length.inches
  serialize :width, Quantified::Length.inches
end