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