lib/conversions.rb in Fingertips-conversions-1.2.1 vs lib/conversions.rb in Fingertips-conversions-1.3.0

- old
+ new

@@ -1,31 +1,49 @@ +# Conversions makes it easy to convert between units. module Conversions - CONVERSION = { - :miles => { - :kilometres => 1.609344 - }, - :kilograms => { - :grams => 1000.0, - :pounds => 2.20462262, - :short_tons => 0.00110231131, - :tons => 0.00110231131 - }, - :tons => { - :pounds => 2000.0 - }, - :gallons => { - :litres => 3.7854118 - }, - :cubic_feet => { - :cubic_meters => 0.0283168466 - } - } + mattr_accessor :conversions + + # Clear all previously registered conversions + def self.clear + self.conversions = {} + end + clear + + # Load all the default conversions shipped with the code + def self.load_defaults + load File.expand_path('../conversions/defaults.rb', __FILE__) + end + + # Register a new conversion. This automatically also registers the inverse conversion. + # + # * _from_: The unit to convert from (ie. :miles, :stones, or :pints) + # * _to_: The unit to convert to + # * _rate_: The conversion rate from _from_ to _to_. (_from_ * _rate_ = _to_) + def self.register(from, to, rate) + conversions[from] ||= {} + conversions[from][to] = rate + conversions[to] ||= {} + conversions[to][from] = 1.0 / rate + end + + module Ext + # Convert from one unit to another. + # + # * _from_: The unit to convert from (ie. :miles, :stones, or :pints) + # * _to_: The unit to convert to + # * _options_: + # * :scale: The number of digits you want after the dot. + def convert(from, to, options={}) + Conversions::Unit.new(self, from).to(to, options) + end + end end require 'conversions/unit' -require 'conversions/ext' -require 'conversions/active_record_accessors' -Numeric.send :include, Conversions::Ext +Conversions.load_defaults +Numeric.send(:include, Conversions::Ext) + if defined?(ActiveRecord) - ActiveRecord::Base.send :extend, Conversions::ActiveRecordAccessors -end + require 'conversions/active_record_accessors' + ActiveRecord::Base.send(:extend, Conversions::ActiveRecordAccessors) +end \ No newline at end of file