quantify 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +20 -0
- data/Examples.rb +104 -0
- data/README +7 -0
- data/lib/quantify/config.rb +379 -0
- data/lib/quantify/core_extensions.rb +63 -0
- data/lib/quantify/dimensions.rb +523 -0
- data/lib/quantify/exception.rb +21 -0
- data/lib/quantify/inflections.rb +63 -0
- data/lib/quantify/quantify.rb +37 -0
- data/lib/quantify/quantity.rb +325 -0
- data/lib/quantify/unit/base_unit.rb +518 -0
- data/lib/quantify/unit/compound_base_unit.rb +91 -0
- data/lib/quantify/unit/compound_unit.rb +321 -0
- data/lib/quantify/unit/non_si_unit.rb +20 -0
- data/lib/quantify/unit/prefix/base_prefix.rb +42 -0
- data/lib/quantify/unit/prefix/non_si_prefix.rb +10 -0
- data/lib/quantify/unit/prefix/prefix.rb +73 -0
- data/lib/quantify/unit/prefix/si_prefix.rb +10 -0
- data/lib/quantify/unit/si_unit.rb +10 -0
- data/lib/quantify/unit/unit.rb +217 -0
- data/lib/quantify.rb +26 -0
- data/spec/dimension_spec.rb +294 -0
- data/spec/quantity_spec.rb +250 -0
- data/spec/unit_spec.rb +687 -0
- metadata +103 -0
    
        data/COPYING
    ADDED
    
    | @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            Copyright (c) 2011 by Andrew Berkeley (andrew.berkeley.is@googlemail.com)
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| 4 | 
            +
            of this software and associated documentation files (the "Software"), to deal
         | 
| 5 | 
            +
            in the Software without restriction, including without limitation the rights
         | 
| 6 | 
            +
            to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
         | 
| 7 | 
            +
            copies of the Software, and to permit persons to whom the Software is
         | 
| 8 | 
            +
            furnished to do so, subject to the following conditions:
         | 
| 9 | 
            +
             | 
| 10 | 
            +
            The above copyright notice and this permission notice shall be included in
         | 
| 11 | 
            +
            all copies or substantial portions of the Software.
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
         | 
| 14 | 
            +
            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
         | 
| 15 | 
            +
            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
         | 
| 16 | 
            +
            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
         | 
| 17 | 
            +
            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
         | 
| 18 | 
            +
            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
         | 
| 19 | 
            +
            THE SOFTWARE.
         | 
| 20 | 
            +
             | 
    
        data/Examples.rb
    ADDED
    
    | @@ -0,0 +1,104 @@ | |
| 1 | 
            +
            ## Example ##
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            unit = Unit.km                                               #=> #<Quantify::Unit::SI:0xb75c9718 ... >
         | 
| 4 | 
            +
            unit.name                                                    #=> 'kilometre'
         | 
| 5 | 
            +
            unit.symbol                                                  #=> 'kg'
         | 
| 6 | 
            +
            unit.dimensions                                              #=> #<Quantify::Dimensions:0xb75c4254 .. >
         | 
| 7 | 
            +
            unit.measures                                                #=> 'length'
         | 
| 8 | 
            +
            unit.alternatives :name                                      #=> ['metre', 'megametre', 'gigametre', 'terametre', 'angstrom',
         | 
| 9 | 
            +
                                                                         #    'astronomical unit', 'baromil', 'chain', 'dram', 'ell', 'fathom',
         | 
| 10 | 
            +
                                                                         #    'fermi', 'foot us survey', 'foot', 'furlong', 'hand', 'inch',
         | 
| 11 | 
            +
                                                                         #    'nautical league', 'statute league', 'light year', 'line',
         | 
| 12 | 
            +
                                                                         #    'link', 'yard']
         | 
| 13 | 
            +
            other_unit = Unit.hour
         | 
| 14 | 
            +
            other_unit.name                                              #=> 'hour'
         | 
| 15 | 
            +
            other_unit.symbol                                            #=> 'h'
         | 
| 16 | 
            +
            other_unit.measures                                          #=> 'time'
         | 
| 17 | 
            +
            other_unit.alternatives :symbol                              #=> [ 's', 'ks', 'Ms', 'Gs', 'Ts', 'd', 'min' ]
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            another_unit = unit / other_unit                             #=> #<Quantify::Unit::Compound:0xb74af323 ... >
         | 
| 20 | 
            +
            another_unit.name                                            #=> 'kilometer per hour'
         | 
| 21 | 
            +
            another_unit.symbol                                          #=> 'km h^-1'
         | 
| 22 | 
            +
            another_unit.measures                                        #=> 'velocity'
         | 
| 23 | 
            +
             | 
| 24 | 
            +
            last_unit = Unit.m
         | 
| 25 | 
            +
            last.unit.measures                                           #=> 'length'
         | 
| 26 | 
            +
            square = last_unit ** 2                                      #=> #<Quantify::Unit::Compound:0xb446f12f ... >
         | 
| 27 | 
            +
            square.symbol                                                #=> 'm^2'
         | 
| 28 | 
            +
            square.measures                                              #=> 'area'
         | 
| 29 | 
            +
             | 
| 30 | 
            +
            ----
         | 
| 31 | 
            +
             | 
| 32 | 
            +
            # Define quantity - method 1
         | 
| 33 | 
            +
            quantity = Quantity.new(1234.5678, :lb)                      #=> #<Quantify::Quantity:0xjk39d570 ... >
         | 
| 34 | 
            +
            quantity.value                                               #=> 1234.5678
         | 
| 35 | 
            +
            quantity.unit                                                #=> #<Quantify::Unit::NonSI:0xb182124 ... >
         | 
| 36 | 
            +
            quantity.unit.symbol                                         #=> 'lb'
         | 
| 37 | 
            +
             | 
| 38 | 
            +
            # Define quantity - method 2
         | 
| 39 | 
            +
            string = quantity.to_s                                       #=> "1234.5678 lb"
         | 
| 40 | 
            +
            quantity = Quantity.parse(string)                            #=> #<Quantify::Quantity:0xj982b4f9 ... >
         | 
| 41 | 
            +
            quantity.to_s                                                #=> "1234.5678 lb"
         | 
| 42 | 
            +
             | 
| 43 | 
            +
            # Define quantity - method 3
         | 
| 44 | 
            +
            quantity = 1234.5678.lb                                      #=> #<Quantify::Quantity:02387f7340 ... >
         | 
| 45 | 
            +
            quantity.to_s                                                #=> "1234.5678 lb"
         | 
| 46 | 
            +
             | 
| 47 | 
            +
            # Multiply by scalar
         | 
| 48 | 
            +
            new_quantity = quantity * 4                                  #=> #<Quantify::Quantity:87b37f720 ... >
         | 
| 49 | 
            +
            new_quantity.to_s                                            #=> "4938.2712 lb"
         | 
| 50 | 
            +
             | 
| 51 | 
            +
            # Convert unit
         | 
| 52 | 
            +
            converted_quantity = new_quantity.to_kg                      #=> #<Quantify::Quantity:0b8787a688 ... >
         | 
| 53 | 
            +
            converted_quantity.to_s                                      #=> "2239.96213731074 kg"
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            ----
         | 
| 56 | 
            +
             | 
| 57 | 
            +
            # One line conversion of a quantity to a new unit
         | 
| 58 | 
            +
            # 5000 litres into US petroleum barrels
         | 
| 59 | 
            +
             | 
| 60 | 
            +
            5000.L.to_bbl.value                                          #=> 31.4490528488754
         | 
| 61 | 
            +
             | 
| 62 | 
            +
            ----
         | 
| 63 | 
            +
             | 
| 64 | 
            +
            # Complex example
         | 
| 65 | 
            +
             | 
| 66 | 
            +
            # Define energy units
         | 
| 67 | 
            +
            kW = Unit.kW                                                 #=> #<Quantify::Unit::SI:0xb7586620 ... >
         | 
| 68 | 
            +
            kW.name                                                      #=> 'kilowatt'
         | 
| 69 | 
            +
            kW.measures                                                  #=> 'power'
         | 
| 70 | 
            +
             | 
| 71 | 
            +
            h = Unit.h                                                   #=> #<Quantify::Unit::NonSI:0xb7582994 ... >
         | 
| 72 | 
            +
            h.symbol                                                     #=> 'h'
         | 
| 73 | 
            +
            h.measures                                                   #=> 'time'
         | 
| 74 | 
            +
             | 
| 75 | 
            +
            # Create compound unit for energy
         | 
| 76 | 
            +
            kWh = kW / h                                                 #=> #<Quantify::Unit::Compound:0xb756b0b4 ... >
         | 
| 77 | 
            +
            kWh.name                                                     #=> 'kilowatt hour'
         | 
| 78 | 
            +
            kWh.measures                                                 #=> 'energy'
         | 
| 79 | 
            +
            kWh.alternatives :symbol                                     #=> ['J', 'kJ', 'MJ', 'GJ', 'TJ', 'BTU', 'cal', 'CHU',
         | 
| 80 | 
            +
                                                                         #    'dyn cm', 'eV', 'erg', 'Eh']
         | 
| 81 | 
            +
            kWh.alternative :name                                        #=> ['joule', 'kilojoule', 'megajoule', 'gigajoule',
         | 
| 82 | 
            +
                                                                         #    'terajoule', 'british thermal unit', 'calorie',
         | 
| 83 | 
            +
                                                                         #    'celsius heat unit', 'dyne centimetre', 'electron volt',
         | 
| 84 | 
            +
                                                                         #    'erg', 'hartree']
         | 
| 85 | 
            +
             | 
| 86 | 
            +
            # Create mass unit
         | 
| 87 | 
            +
            kg = Unit.kg                                                 #=> #<Quantify::Unit::SI:0xb758b594 ... >
         | 
| 88 | 
            +
             | 
| 89 | 
            +
            # Create emission factor compound unit
         | 
| 90 | 
            +
            kg_per_kWh = kg / kWh                                        #=> #<Quantify::Unit::Compound:0xb746f093 ... >
         | 
| 91 | 
            +
            kg_per_kWh.symbol                                            #=> "kg_kW^-1_h^-1
         | 
| 92 | 
            +
            kg_per_kWh.name                                              #=> 'kilogram per kilowatt hour'
         | 
| 93 | 
            +
             | 
| 94 | 
            +
            # Create emission factor quantity
         | 
| 95 | 
            +
            emission_factor = Quantity.new(0.54, kg_per_kWh)             #=> #<Quantify::Quantity:0xb75cd570 ... >
         | 
| 96 | 
            +
            emission_factor.to_s                                         #=> "0.54 kg kW^-1 h^-1"
         | 
| 97 | 
            +
             | 
| 98 | 
            +
            # Create consumption quantity
         | 
| 99 | 
            +
            consumption = Quantity.new(9885.5, kWh)                      #=> #<Quantify::Quantity:0xb7j4k3570 ... >
         | 
| 100 | 
            +
            consumption.to_s                                             #=> "9885.5 kWh"
         | 
| 101 | 
            +
             | 
| 102 | 
            +
            # Calculate emissions
         | 
| 103 | 
            +
            emissions = consumption * emission_factor                    #=> #<Quantify::Quantity:0xb456g2s70 ... >
         | 
| 104 | 
            +
            emissions.to_s                                               #=> "5338.17 kg"
         | 
    
        data/README
    ADDED
    
    
| @@ -0,0 +1,379 @@ | |
| 1 | 
            +
            include Quantify
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            # Configure known dimensions, prefixes and units.
         | 
| 4 | 
            +
            # Order must be maintained for initialization of all objects to be successful:
         | 
| 5 | 
            +
            #
         | 
| 6 | 
            +
            #  * dimensions,
         | 
| 7 | 
            +
            #  * prefixes,
         | 
| 8 | 
            +
            #  * units.
         | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
            # A basic collection of
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            Dimensions.configure do
         | 
| 13 | 
            +
             | 
| 14 | 
            +
              # Load the standard, widely-recognised physical quantities.
         | 
| 15 | 
            +
             | 
| 16 | 
            +
              # Base quantities
         | 
| 17 | 
            +
              load :physical_quantity => 'mass', :mass => 1
         | 
| 18 | 
            +
              load :physical_quantity => 'length', :length => 1
         | 
| 19 | 
            +
              load :physical_quantity => 'time', :time => 1
         | 
| 20 | 
            +
              load :physical_quantity => 'electric current', :electric_current => 1
         | 
| 21 | 
            +
              load :physical_quantity => 'temperature', :temperature => 1
         | 
| 22 | 
            +
              load :physical_quantity => 'luminous intensity', :luminous_intensity => 1
         | 
| 23 | 
            +
              load :physical_quantity => 'amount of substance', :amount_of_substance => 1
         | 
| 24 | 
            +
              load :physical_quantity => 'information', :information => 1
         | 
| 25 | 
            +
              load :physical_quantity => 'currency', :currency => 1
         | 
| 26 | 
            +
              load :physical_quantity => 'item', :item => 1
         | 
| 27 | 
            +
              load :physical_quantity => 'dimensionless'
         | 
| 28 | 
            +
             | 
| 29 | 
            +
              # Derived quantities
         | 
| 30 | 
            +
              load :physical_quantity => 'acceleration', :length => 1, :time => -2
         | 
| 31 | 
            +
              load :physical_quantity => 'area', :length => 2
         | 
| 32 | 
            +
              load :physical_quantity => 'action', :mass => 1, :length => 2, :time => -1
         | 
| 33 | 
            +
              load :physical_quantity => 'angular monentum', :length => 2, :mass => 1, :time => -1
         | 
| 34 | 
            +
              load :physical_quantity => 'conductivity', :length => -3, :mass => -1, :time => 3, :electric_current => 2
         | 
| 35 | 
            +
              load :physical_quantity => 'density', :mass => 1, :length => -3
         | 
| 36 | 
            +
              load :physical_quantity => 'electric charge', :electric_current => 1, :time => 1
         | 
| 37 | 
            +
              load :physical_quantity => 'electric charge_density', :electric_current => 1, :time => 1, :length => -3
         | 
| 38 | 
            +
              load :physical_quantity => 'electric conductance', :electric_current => 2, :time => 3, :mass => -1, :length => -2
         | 
| 39 | 
            +
              load :physical_quantity => 'electric displacement', :length => -2, :time => 1, :electric_current => 1
         | 
| 40 | 
            +
              load :physical_quantity => 'electric field strength', :length => 1, :mass => 1, :time => -3, :electric_current => -1
         | 
| 41 | 
            +
              load :physical_quantity => 'electric polarisability', :mass => -1, :time => 4, :electric_current => 2
         | 
| 42 | 
            +
              load :physical_quantity => 'electric polarisation', :length => -2, :time => 1, :electric_current => 1
         | 
| 43 | 
            +
              load :physical_quantity => 'electric potential difference', :mass => 1, :length => 2, :electric_current => -1, :time => -3
         | 
| 44 | 
            +
              load :physical_quantity => 'electric resistance', :mass => 1, :length => 2, :electric_current => -2, :time => -3
         | 
| 45 | 
            +
              load :physical_quantity => 'electrical capacitance', :electric_current => 2, :time => 4, :mass => -1, :length => -2
         | 
| 46 | 
            +
              load :physical_quantity => 'energy', :mass => 1, :length => 2, :time => -2
         | 
| 47 | 
            +
              load :physical_quantity => 'entropy', :length => 2, :mass => 1, :time => -2, :temperature => -1
         | 
| 48 | 
            +
              load :physical_quantity => 'force', :length => 1, :mass => 1, :time => -2
         | 
| 49 | 
            +
              load :physical_quantity => 'frequency', :time => -1
         | 
| 50 | 
            +
              load :physical_quantity => 'heat capacity', :length => 2, :mass => 1, :time => -2, :temperature => -1
         | 
| 51 | 
            +
              load :physical_quantity => 'illuminance', :luminous_intensity => 1, :length => -2
         | 
| 52 | 
            +
              load :physical_quantity => 'impedance', :length => 2, :mass => 1, :time => -3, :electric_current => -2
         | 
| 53 | 
            +
              load :physical_quantity => 'inductance', :mass => 1, :length => 2, :time => -2, :electric_current => -2
         | 
| 54 | 
            +
              load :physical_quantity => 'irradiance', :mass => 1, :time => -3
         | 
| 55 | 
            +
              load :physical_quantity => 'luminous flux', :luminous_intensity => 1
         | 
| 56 | 
            +
              load :physical_quantity => 'magnetic field strength', :length => -1, :electric_current => 1
         | 
| 57 | 
            +
              load :physical_quantity => 'magnetic flux', :mass => 1, :length => 2, :time => -2, :electric_current => -1
         | 
| 58 | 
            +
              load :physical_quantity => 'magnetic flux density', :mass => 1, :electric_current => -1, :time => -2
         | 
| 59 | 
            +
              load :physical_quantity => 'magnetic dipole moment', :length => 2, :electric_current => 1
         | 
| 60 | 
            +
              load :physical_quantity => 'magnetic vector potential', :mass => 1, :length => 1, :time => -2, :electric_current => -1
         | 
| 61 | 
            +
              load :physical_quantity => 'magnetisation', :length => -1, :electric_current => 1
         | 
| 62 | 
            +
              load :physical_quantity => 'moment of inertia', :length => 2, :mass => 1
         | 
| 63 | 
            +
              load :physical_quantity => 'momentum', :length => 1, :mass => 1, :time => -1
         | 
| 64 | 
            +
              load :physical_quantity => 'number density', :item => 1, :length => -3
         | 
| 65 | 
            +
              load :physical_quantity => 'permeability', :mass => 1, :length => 1, :time => -2, :electric_current => -2
         | 
| 66 | 
            +
              load :physical_quantity => 'permittivity', :mass => -1, :length => -3, :time => 4, :electric_current => 2
         | 
| 67 | 
            +
              load :physical_quantity => 'plane angle' # length / length = dimensionsless
         | 
| 68 | 
            +
              load :physical_quantity => 'power', :mass => 1, :length => 2, :time => -3
         | 
| 69 | 
            +
              load :physical_quantity => 'pressure', :mass => 1, :length => -1, :time => -2
         | 
| 70 | 
            +
              load :physical_quantity => 'radiation absorbed dose', :length => 2, :time => -2
         | 
| 71 | 
            +
              load :physical_quantity => 'radiation dose equivalent', :length => 2, :time => -2
         | 
| 72 | 
            +
              load :physical_quantity => 'radioactivity', :time => -1
         | 
| 73 | 
            +
              load :physical_quantity => 'solid angle' # area / area = dimensionless
         | 
| 74 | 
            +
              load :physical_quantity => 'surface tension', :mass => 1, :time => -2
         | 
| 75 | 
            +
              load :physical_quantity => 'velocity', :length => 1, :time => -1
         | 
| 76 | 
            +
              load :physical_quantity => 'dynamic viscosity', :length => -1, :mass => 1, :time => -1
         | 
| 77 | 
            +
              load :physical_quantity => 'kinematic viscosity', :length => 2, :time => -1
         | 
| 78 | 
            +
              load :physical_quantity => 'volume', :length => 3
         | 
| 79 | 
            +
              load :physical_quantity => 'energy density', :length => -1, :mass => 1, :time => -2
         | 
| 80 | 
            +
              load :physical_quantity => 'thermal resistance', :temperature => 1, :mass => -1, :time => 3
         | 
| 81 | 
            +
              load :physical_quantity => 'catalytic activity', :amount_of_substance => 1, :time => -1
         | 
| 82 | 
            +
             | 
| 83 | 
            +
            end
         | 
| 84 | 
            +
             | 
| 85 | 
            +
            Unit::Prefix::SI.configure do
         | 
| 86 | 
            +
             | 
| 87 | 
            +
              load :name => 'deca', :symbol => 'da', :factor => 1e1
         | 
| 88 | 
            +
              load :name => 'hecto', :symbol => 'h', :factor => 1e2
         | 
| 89 | 
            +
              load :name => 'kilo', :symbol => 'k', :factor => 1e3
         | 
| 90 | 
            +
              load :name => 'mega', :symbol => 'M', :factor => 1e6
         | 
| 91 | 
            +
              load :name => 'giga', :symbol => 'G', :factor => 1e9
         | 
| 92 | 
            +
              load :name => 'tera', :symbol => 'T', :factor => 1e12
         | 
| 93 | 
            +
              load :name => 'peta', :symbol => 'P', :factor => 1e15
         | 
| 94 | 
            +
              load :name => 'exa', :symbol => 'E', :factor => 1e18
         | 
| 95 | 
            +
              load :name => 'zetta', :symbol => 'Z', :factor => 1e21
         | 
| 96 | 
            +
              load :name => 'yotta', :symbol => 'Y', :factor => 1e24
         | 
| 97 | 
            +
              load :name => 'deci', :symbol => 'd', :factor => 1e-1
         | 
| 98 | 
            +
              load :name => 'centi', :symbol => 'c', :factor => 1e-2
         | 
| 99 | 
            +
              load :name => 'milli', :symbol => 'm', :factor => 1e-3
         | 
| 100 | 
            +
              load :name => 'micro', :symbol => 'μ', :factor => 1e-6
         | 
| 101 | 
            +
              load :name => 'nano', :symbol => 'n', :factor => 1e-9
         | 
| 102 | 
            +
              load :name => 'pico', :symbol => 'p', :factor => 1e-12
         | 
| 103 | 
            +
              load :name => 'femto', :symbol => 'f', :factor => 1e-15
         | 
| 104 | 
            +
              load :name => 'atto', :symbol => 'a', :factor => 1e-18
         | 
| 105 | 
            +
              load :name => 'zepto', :symbol => 'z', :factor => 1e-21
         | 
| 106 | 
            +
              load :name => 'yocto', :symbol => 'y', :factor => 1e-24
         | 
| 107 | 
            +
             | 
| 108 | 
            +
            end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
            Unit::Prefix::NonSI.configure do
         | 
| 111 | 
            +
             | 
| 112 | 
            +
              # The 'MM' prefix is considered bad practice, but is nevertheless commonly
         | 
| 113 | 
            +
              # used in the US, so could added here to provide this support.
         | 
| 114 | 
            +
              # 
         | 
| 115 | 
            +
              # load :name => 'million ', :symbol => 'MM', :factor => 1e6
         | 
| 116 | 
            +
              # load :name => 'billion ', :symbol => 'B', :factor => 1e9
         | 
| 117 | 
            +
             | 
| 118 | 
            +
            end
         | 
| 119 | 
            +
             | 
| 120 | 
            +
            Unit::Base.configure do
         | 
| 121 | 
            +
             | 
| 122 | 
            +
              load :name => 'unity', :physical_quantity => 'dimensionless', :symbol => '1', :label => '1'
         | 
| 123 | 
            +
              load :name => 'percent', :physical_quantity => 'dimensionless', :symbol => '%', :label => '%'
         | 
| 124 | 
            +
             | 
| 125 | 
            +
            end
         | 
| 126 | 
            +
             | 
| 127 | 
            +
            Unit::SI.configure do
         | 
| 128 | 
            +
             | 
| 129 | 
            +
              # Load SI units.
         | 
| 130 | 
            +
              #
         | 
| 131 | 
            +
              # Conversion factors between units are specified relative to the standard -
         | 
| 132 | 
            +
              # SI - units and therefore these implicitly represent a factor of 1.
         | 
| 133 | 
            +
              #
         | 
| 134 | 
            +
              # This is initialized by default in the Unit::Base class and therefore does not
         | 
| 135 | 
            +
              # need to be declared here. SI units therefore require only their physical quantity
         | 
| 136 | 
            +
              # to be specified.
         | 
| 137 | 
            +
              #
         | 
| 138 | 
            +
              load :name => 'ampere', :physical_quantity => 'electric_current', :symbol => 'A', :label => 'A'
         | 
| 139 | 
            +
              load :name => 'amagat', :physical_quantity => 'number_density', :symbol => 'η', :label => 'η'
         | 
| 140 | 
            +
              load :name => 'bit', :physical_quantity => 'information', :symbol => 'bit', :label => 'bit'
         | 
| 141 | 
            +
              load :name => 'bequerel', :physical_quantity => 'radioactivity', :symbol => 'Bq', :label => 'Bq'
         | 
| 142 | 
            +
              load :name => 'candela', :physical_quantity => 'luminous_intensity', :symbol => 'cd', :label => 'cd'
         | 
| 143 | 
            +
              load :name => 'coloumb', :physical_quantity => 'electric_charge', :symbol => 'C', :label => 'C'
         | 
| 144 | 
            +
              load :name => 'farad', :physical_quantity => 'electrical_capacitance', :symbol => 'F', :label => 'F'
         | 
| 145 | 
            +
              load :name => 'gray', :physical_quantity => 'radiation_absorbed_dose', :symbol => 'Gy', :label => 'Gy'
         | 
| 146 | 
            +
              load :name => 'hertz', :physical_quantity => 'frequency', :symbol => 'Hz', :label => 'Hz'
         | 
| 147 | 
            +
              load :name => 'henry', :physical_quantity => 'inductance', :symbol => 'H', :label => 'H'
         | 
| 148 | 
            +
              load :name => 'joule', :physical_quantity => 'energy', :symbol => 'J', :label => 'J'
         | 
| 149 | 
            +
              load :name => 'katal', :physical_quantity => 'catalytic activity', :symbol => 'kat', :label => 'kat'
         | 
| 150 | 
            +
              load :name => 'kelvin', :physical_quantity => 'temperature', :symbol => 'K', :label => 'K'
         | 
| 151 | 
            +
              load :name => 'lumen', :physical_quantity => 'luminous_flux', :symbol => 'lm', :label => 'lm'
         | 
| 152 | 
            +
              load :name => 'lux', :physical_quantity => 'illuminance', :symbol => 'lx', :label => 'lx'
         | 
| 153 | 
            +
              load :name => 'metre', :physical_quantity => 'length', :symbol => 'm', :label => 'm'
         | 
| 154 | 
            +
              load :name => 'mole', :physical_quantity => 'amount_of_substance', :symbol => 'mol', :label => 'mol'
         | 
| 155 | 
            +
              load :name => 'newton', :physical_quantity => 'force', :symbol => 'N', :label => 'N'
         | 
| 156 | 
            +
              load :name => 'ohm', :physical_quantity => 'electric_resistance', :symbol => 'Ω', :label => 'Ohm'
         | 
| 157 | 
            +
              load :name => 'pascal', :physical_quantity => 'pressure', :symbol => 'Pa', :label => 'Pa'
         | 
| 158 | 
            +
              load :name => 'radian', :physical_quantity => 'plane_angle', :symbol => 'rad', :label => 'rad'
         | 
| 159 | 
            +
              load :name => 'second', :physical_quantity => 'time', :symbol => 's', :label => 's'
         | 
| 160 | 
            +
              load :name => 'siemens', :physical_quantity => 'electric_conductance', :symbol => 'S', :label => 'S'
         | 
| 161 | 
            +
              load :name => 'sievert', :physical_quantity => 'radiation_dose_equivalent', :symbol => 'Sv', :label => 'Sv'
         | 
| 162 | 
            +
              load :name => 'steridian', :physical_quantity => 'solid_angle', :symbol => 'sr', :label => 'sr'
         | 
| 163 | 
            +
              load :name => 'tesla', :physical_quantity => 'magnetic_flux_density', :symbol => 'T', :label => 'T'
         | 
| 164 | 
            +
              load :name => 'volt', :physical_quantity => 'electric_potential_difference', :symbol => 'V', :label => 'V'
         | 
| 165 | 
            +
              load :name => 'watt', :physical_quantity => 'power', :symbol => 'W', :label => 'W'
         | 
| 166 | 
            +
              load :name => 'weber', :physical_quantity => 'magnetic_flux', :symbol => 'Wb', :label => 'Wb'
         | 
| 167 | 
            +
             | 
| 168 | 
            +
              # The kilogram is unusual in being the SI unit of mass yet containing the
         | 
| 169 | 
            +
              # 'kilo' prefix.
         | 
| 170 | 
            +
              #
         | 
| 171 | 
            +
              # The :gram unit is therefore defined explicitly to act as a base for
         | 
| 172 | 
            +
              # handling SI prefixes.
         | 
| 173 | 
            +
              #
         | 
| 174 | 
            +
              # All mass unit factors are nevertheless specified relative to the SI unit
         | 
| 175 | 
            +
              # (kilogram), in consistency with all other unit types
         | 
| 176 | 
            +
              #
         | 
| 177 | 
            +
              load :name => 'kilogram', :physical_quantity => :mass, :symbol => 'kg', :label => 'kg'
         | 
| 178 | 
            +
              load :name => 'gram', :physical_quantity => :mass, :factor => 1e-3, :symbol => 'g', :label => 'g'
         | 
| 179 | 
            +
             | 
| 180 | 
            +
              # Define units on the basis of unit operations
         | 
| 181 | 
            +
             | 
| 182 | 
            +
              construct_and_load metre**2
         | 
| 183 | 
            +
              construct_and_load metre**3
         | 
| 184 | 
            +
              construct_and_load(metre/second)
         | 
| 185 | 
            +
              construct_and_load(metre/second**2)
         | 
| 186 | 
            +
             | 
| 187 | 
            +
              construct_and_load(1/centimetre) do |unit|
         | 
| 188 | 
            +
                unit.name = 'inverse centimetre'
         | 
| 189 | 
            +
              end
         | 
| 190 | 
            +
             | 
| 191 | 
            +
              construct_and_load(centimetre/second**2) do |unit|
         | 
| 192 | 
            +
                unit.name = 'galileo'
         | 
| 193 | 
            +
                unit.symbol = 'Gal'
         | 
| 194 | 
            +
                unit.label = 'galileo'
         | 
| 195 | 
            +
              end
         | 
| 196 | 
            +
             | 
| 197 | 
            +
              # add required prefixed unit individually
         | 
| 198 | 
            +
             | 
| 199 | 
            +
              kilometre.load
         | 
| 200 | 
            +
             | 
| 201 | 
            +
              micrometre.load do |unit|
         | 
| 202 | 
            +
                unit.name = 'micron'
         | 
| 203 | 
            +
              end
         | 
| 204 | 
            +
             | 
| 205 | 
            +
              centiradian.load do |unit|
         | 
| 206 | 
            +
                unit.label = 'centiradian'
         | 
| 207 | 
            +
              end
         | 
| 208 | 
            +
             | 
| 209 | 
            +
              # Add required prefixes on a multiple basis.
         | 
| 210 | 
            +
              # prefix_and_load(:kilo,:metre)
         | 
| 211 | 
            +
              # prefix_and_load([:kilo,:mega,:giga,:tera],[:metre,:gram,:second])
         | 
| 212 | 
            +
             | 
| 213 | 
            +
              # Declare unit which are to act as equivalent units, prevailing over equivalent
         | 
| 214 | 
            +
              # compound units
         | 
| 215 | 
            +
              
         | 
| 216 | 
            +
              si_base_units.each { |unit| unit.acts_as_equivalent_unit = true }
         | 
| 217 | 
            +
             | 
| 218 | 
            +
              cubic_metre.acts_as_equivalent_unit = true
         | 
| 219 | 
            +
             | 
| 220 | 
            +
              joule.acts_as_equivalent_unit = true
         | 
| 221 | 
            +
             | 
| 222 | 
            +
              newton.acts_as_equivalent_unit = true
         | 
| 223 | 
            +
             | 
| 224 | 
            +
              watt.acts_as_equivalent_unit = true
         | 
| 225 | 
            +
             | 
| 226 | 
            +
              pascal.acts_as_equivalent_unit = true
         | 
| 227 | 
            +
             | 
| 228 | 
            +
              square_metre.acts_as_equivalent_unit = true
         | 
| 229 | 
            +
             | 
| 230 | 
            +
            end
         | 
| 231 | 
            +
             | 
| 232 | 
            +
            Unit::NonSI.configure do
         | 
| 233 | 
            +
             | 
| 234 | 
            +
              # Non-SI units. These units are measures of quantities which do not conform
         | 
| 235 | 
            +
              # to the SI system. They are therefore represent by a conversion factor which
         | 
| 236 | 
            +
              # is defined relative to the corresponding SI unit for that quantity.
         | 
| 237 | 
            +
             | 
| 238 | 
            +
              load :name => 'acre', :physical_quantity => 'area', :factor => 4046.8564224, :symbol => 'acre', :label => 'acre'
         | 
| 239 | 
            +
              load :name => 'angstrom', :physical_quantity => 'length', :factor => 100e-12, :symbol => 'Å', :label => 'Å'
         | 
| 240 | 
            +
              load :name => 'arcminute', :physical_quantity => 'plane angle', :factor => Math::PI/10800, :symbol => '′', :label => '′'
         | 
| 241 | 
            +
              load :name => 'arcsecond', :physical_quantity => 'plane angle', :factor => Math::PI/648000, :symbol => '″', :label => '″'
         | 
| 242 | 
            +
              load :name => 'are', :physical_quantity => 'area', :factor => 100.0, :symbol => 'a', :label => 'a'
         | 
| 243 | 
            +
              load :name => 'astronomical unit', :physical_quantity => 'length', :factor => 149.5979e9, :symbol => 'AU', :label => 'ua'
         | 
| 244 | 
            +
              load :name => 'atmosphere', :physical_quantity => 'pressure', :factor => 101.325e3, :symbol => 'atm', :label => 'atm'
         | 
| 245 | 
            +
              load :name => 'bar', :physical_quantity => 'pressure', :factor => 100e3, :symbol => 'bar', :label => 'bar'
         | 
| 246 | 
            +
              load :name => 'barn', :physical_quantity => 'area', :factor => 100e-30, :symbol => 'b', :label => 'b'
         | 
| 247 | 
            +
              load :name => 'biot', :physical_quantity => 'electric current', :factor => 10.0, :symbol => 'Bi', :label => 'Bi'
         | 
| 248 | 
            +
              load :name => 'boiler horsepower', :physical_quantity => 'power', :factor => 9.80950e3, :symbol => 'bhp', :label => 'bhp'
         | 
| 249 | 
            +
              load :name => 'british thermal unit (59 °F)', :physical_quantity => 'energy', :factor => 1054.804, :symbol => 'BTU', :label => 'BTU_FiftyNineF'
         | 
| 250 | 
            +
              load :name => 'british thermal unit (39 °F)', :physical_quantity => 'energy', :factor => 1059.67, :symbol => 'BTU', :label => 'BTU_ThirtyNineF'
         | 
| 251 | 
            +
              load :name => 'british thermal unit (60 °F)', :physical_quantity => 'energy', :factor => 1054.68, :symbol => 'BTU', :label => 'BTU_SixtyF'
         | 
| 252 | 
            +
              load :name => 'british thermal unit (63 °F)', :physical_quantity => 'energy', :factor => 1054.6, :symbol => 'BTU', :label => 'BTU_SixtyThreeF'
         | 
| 253 | 
            +
              load :name => 'british thermal unit (ISO)', :physical_quantity => 'energy', :factor => 1055.056, :symbol => 'BTU', :label => 'BTU_ISO'
         | 
| 254 | 
            +
              load :name => 'british thermal unit (IT)', :physical_quantity => 'energy', :factor => 1055.05585262, :symbol => 'BTU', :label => 'BTU_IT'
         | 
| 255 | 
            +
              load :name => 'british thermal unit (mean)', :physical_quantity => 'energy', :factor => 1055.87, :symbol => 'BTU', :label => 'BTU_Mean'
         | 
| 256 | 
            +
              load :name => 'british thermal unit (thermochemical)', :physical_quantity => 'energy', :factor => 1054.35026444, :symbol => 'BTU', :label => 'BTU_Thermochemical'
         | 
| 257 | 
            +
              load :name => 'bushel uk', :physical_quantity => 'volume', :factor => 36.36872e-3, :symbol => 'bu (Imp)', :label => 'bu_imp'
         | 
| 258 | 
            +
              load :name => 'bushel us', :physical_quantity => 'volume', :factor => 35.23907e-3, :symbol => 'bu (US lvl)', :label => 'bu_us'
         | 
| 259 | 
            +
              load :name => 'byte', :physical_quantity => 'information', :factor => 8, :symbol => 'byte', :label => 'byte'
         | 
| 260 | 
            +
              load :name => 'calorie', :physical_quantity => 'energy', :factor => 4.1868, :symbol => 'cal', :label => 'cal'
         | 
| 261 | 
            +
              load :name => 'candle power', :physical_quantity => 'luminous flux', :factor => 4*Math::PI, :symbol => 'cp', :label => 'cp'
         | 
| 262 | 
            +
              load :name => 'carat', :physical_quantity => 'mass', :factor => 200e-6, :symbol => 'kt', :label => 'kt'
         | 
| 263 | 
            +
              load :name => 'celsius heat unit', :physical_quantity => 'energy', :factor => 1.0899101e3, :symbol => 'CHU', :label => 'CHU'
         | 
| 264 | 
            +
              load :name => 'centimetre of mercury', :physical_quantity => 'pressure', :factor => 1.333222e3, :symbol => 'cmHg', :label => 'cmHg'
         | 
| 265 | 
            +
              load :name => 'centimetre of water', :physical_quantity => 'pressure', :factor => 98.060616, :symbol => 'cmH2O', :label => 'cmH2O'
         | 
| 266 | 
            +
              load :name => 'chain', :physical_quantity => 'length', :factor => 20.1168, :symbol => 'ch', :label => 'ch'
         | 
| 267 | 
            +
              load :name => 'clo', :physical_quantity => 'thermal resistance', :factor => 0.155, :symbol => 'clo', :label => 'clo'
         | 
| 268 | 
            +
              load :name => 'cup', :physical_quantity => 'volume', :factor => 236.5882e-6, :symbol => 'c (US)', :label => 'c_us'
         | 
| 269 | 
            +
              load :name => 'curie', :physical_quantity => 'radioactivity', :factor => 37.0e9, :symbol => 'Ci', :label => 'Ci'
         | 
| 270 | 
            +
              load :name => 'day', :physical_quantity => 'time', :factor => 86.4e3, :symbol => 'd', :label => 'd'
         | 
| 271 | 
            +
              load :name => 'degree', :physical_quantity => 'plane angle', :factor => Math::PI/180.0, :symbol => '°', :label => '°'
         | 
| 272 | 
            +
              load :name => 'degree celsius', :physical_quantity => 'temperature', :scaling => 273.15, :symbol => '°C', :label => '°C'
         | 
| 273 | 
            +
              load :name => 'degree farenheit', :physical_quantity => 'temperature', :factor => 5.0/9.0, :scaling => 459.67, :symbol => '°F', :label => '°F'
         | 
| 274 | 
            +
              load :name => 'degree rankine', :physical_quantity => 'temperature', :factor => 5.0/9.0, :symbol => '°R', :label => '°R'
         | 
| 275 | 
            +
              load :name => 'dram', :physical_quantity => 'length', :factor => 1.771845e-3, :symbol => 'dram', :label => 'dram'
         | 
| 276 | 
            +
              load :name => 'dyne', :physical_quantity => 'force', :factor => 10e-6, :symbol => 'dyn', :label => 'dyn'
         | 
| 277 | 
            +
              load :name => 'dyne centimetre', :physical_quantity => 'energy', :factor => 100e-9, :symbol => 'dyn cm', :label => 'dyn_cm'
         | 
| 278 | 
            +
              load :name => 'electric horsepower', :physical_quantity => 'power', :factor => 746.0, :symbol => 'hp', :label => 'hp_elec'
         | 
| 279 | 
            +
              load :name => 'electron mass', :physical_quantity => 'mass', :factor => 9.10938188e-31, :symbol => 'me', :label => 'me'
         | 
| 280 | 
            +
              load :name => 'electron volt', :physical_quantity => 'energy', :factor => 160.218e-21, :symbol => 'eV', :label => 'eV'
         | 
| 281 | 
            +
              load :name => 'ell', :physical_quantity => 'length', :factor => 1.143, :symbol => 'ell', :label => 'ell'
         | 
| 282 | 
            +
              load :name => 'erg', :physical_quantity => 'energy', :factor => 100.0e-9, :symbol => 'erg', :label => 'erg'
         | 
| 283 | 
            +
              load :name => 'faraday', :physical_quantity => 'electric charge', :factor => 96.4853e3, :symbol => 'F', :label => 'Fd'
         | 
| 284 | 
            +
              load :name => 'fathom', :physical_quantity => 'length', :factor => 1.828804, :symbol => 'ftm', :label => 'ftm'
         | 
| 285 | 
            +
              load :name => 'fermi', :physical_quantity => 'length', :factor => 1e-15, :symbol => 'fm', :label => 'fm'
         | 
| 286 | 
            +
              load :name => 'foot', :physical_quantity => 'length', :factor => 0.3048, :symbol => 'ft', :label => 'ft'
         | 
| 287 | 
            +
              load :name => 'footcandle', :physical_quantity => :illuminance, :factor => 10.76391, :symbol => 'fc', :label => 'fc'
         | 
| 288 | 
            +
              load :name => 'foot of water', :physical_quantity => 'pressure', :factor => 2.988887e3, :symbol => 'ftH2O', :label => 'ftH2O'
         | 
| 289 | 
            +
              load :name => 'franklin', :physical_quantity => 'electric charge', :factor => 3.3356e-10, :symbol => 'Fr', :label => 'Fr'
         | 
| 290 | 
            +
              load :name => 'furlong', :physical_quantity => :length, :factor => 201.168, :symbol => 'fur', :label => 'fur'
         | 
| 291 | 
            +
              load :name => 'gamma', :physical_quantity => 'magnetic flux density', :factor => 1e-9, :symbol => 'γ', :label => 'γ'
         | 
| 292 | 
            +
              load :name => 'gauss', :physical_quantity => 'magnetic flux density', :factor => 100e-6, :symbol => 'G', :label => 'G'
         | 
| 293 | 
            +
              load :name => 'grad', :physical_quantity => 'plane_angle', :factor => Math::PI/200.0, :symbol => 'grad', :label => 'grade'
         | 
| 294 | 
            +
              load :name => 'grain', :physical_quantity => 'mass', :factor => 64.79891e-6, :symbol => 'gr', :label => 'gr'
         | 
| 295 | 
            +
              load :name => 'hartree', :physical_quantity => 'energy', :factor => 4.359748e-18, :symbol => 'Eh', :label => 'Eh'
         | 
| 296 | 
            +
              load :name => 'hectare', :physical_quantity => 'area', :factor => 10e3, :symbol => 'ha', :label => 'ha'
         | 
| 297 | 
            +
              load :name => 'hogshead', :physical_quantity => 'volume', :factor => 238.6697e-3, :symbol => 'hhd', :label => 'hhd'
         | 
| 298 | 
            +
              load :name => 'hour', :physical_quantity => 'time', :factor => 3.6e3, :symbol => 'h', :label => 'h'
         | 
| 299 | 
            +
              load :name => 'hundredweight long', :physical_quantity => 'mass', :factor => 50.802345, :symbol => 'cwt', :label => 'cwt_long'
         | 
| 300 | 
            +
              load :name => 'hundredweight short', :physical_quantity => 'mass', :factor => 45.359237, :symbol => 'cwt', :label => 'cwt_short'
         | 
| 301 | 
            +
              load :name => 'inch', :physical_quantity => 'length', :factor => 25.4e-3, :symbol => 'in', :label => 'in'
         | 
| 302 | 
            +
              load :name => 'inch of mercury', :physical_quantity => 'pressure', :factor => 3.386389e3, :symbol => 'inHg', :label => 'inHg'
         | 
| 303 | 
            +
              load :name => 'inch of water', :physical_quantity => 'pressure', :factor => 249.0740, :symbol => 'inH2O', :label => 'inH2O'
         | 
| 304 | 
            +
              load :name => 'kilocalorie', :physical_quantity => 'energy', :factor => 4.1868e3, :symbol => 'kcal', :label => 'kcal'
         | 
| 305 | 
            +
              load :name => 'kilogram force', :physical_quantity => 'force', :factor => 9.80665, :symbol => 'kgf', :label => 'kgf'
         | 
| 306 | 
            +
              load :name => 'knot', :physical_quantity => 'velocity', :factor => 514.4444e-3, :symbol => 'kn', :label => 'kn'
         | 
| 307 | 
            +
              load :name => 'lambert', :physical_quantity => 'illuminance', :factor => 1e4, :symbol => 'La', :label => 'La'
         | 
| 308 | 
            +
              load :name => 'light year', :physical_quantity => 'length', :factor => 9.46073e15, :symbol => 'ly', :label => 'ly'
         | 
| 309 | 
            +
              load :name => 'line', :physical_quantity => 'length', :factor => 2.116667e-3, :symbol => 'ln', :label => 'ln'
         | 
| 310 | 
            +
              load :name => 'link', :physical_quantity => 'length', :factor => 201.168e-3, :symbol => 'lnk', :label => 'lnk'
         | 
| 311 | 
            +
              load :name => 'litre', :physical_quantity => 'volume', :factor => 1e-3, :symbol => 'L', :label => 'L'
         | 
| 312 | 
            +
              load :name => 'long ton', :physical_quantity => 'mass', :factor => 1.016047, :symbol => 'ton', :label => 'ton_uk'
         | 
| 313 | 
            +
              load :name => 'maxwell', :physical_quantity => 'magnetic flux', :factor => 10e-9, :symbol => 'Mx', :label => 'Mx'
         | 
| 314 | 
            +
              load :name => 'metric horsepower', :physical_quantity => 'power', :factor => 735.4988, :symbol => 'hp', :label => 'hp'
         | 
| 315 | 
            +
              load :name => 'mile', :physical_quantity => 'length', :factor => 1.609344e3, :symbol => 'mi', :label => 'mi'
         | 
| 316 | 
            +
              load :name => 'millibar', :physical_quantity => 'pressure', :factor => 100, :symbol => 'mbar', :label => 'mbar'
         | 
| 317 | 
            +
              load :name => 'millimetre of mercury', :physical_quantity => 'pressure', :factor => 1.333222e2, :symbol => 'mmHg', :label => 'mmHg'
         | 
| 318 | 
            +
              load :name => 'minute', :physical_quantity => 'time', :factor => 60.0, :symbol => 'min', :label => 'min'
         | 
| 319 | 
            +
              load :name => 'month', :physical_quantity => 'time', :factor => 2.551444e6, :symbol => 'month', :label => 'month'
         | 
| 320 | 
            +
              load :name => 'nautical league', :physical_quantity => 'length', :factor => 5.556e3, :symbol => 'nl', :label => 'nl'
         | 
| 321 | 
            +
              load :name => 'nautical mile', :physical_quantity => 'length', :factor => 1.852e3, :symbol => 'nmi', :label => 'nmi'
         | 
| 322 | 
            +
              load :name => 'ounce', :physical_quantity => 'mass', :factor => 28.34952e-3, :symbol => 'oz', :label => 'oz'
         | 
| 323 | 
            +
              load :name => 'parsec', :physical_quantity => 'length', :factor => 30.85678e15, :symbol => 'pc', :label => 'pc'
         | 
| 324 | 
            +
              load :name => 'pennyweight', :physical_quantity => 'mass', :factor => 1.555174e-3, :symbol => 'dwt', :label => 'dwt'
         | 
| 325 | 
            +
              load :name => 'petroleum barrel', :physical_quantity => 'volume', :factor => 158.9873e-3, :symbol => 'bbl', :label => 'bbl'
         | 
| 326 | 
            +
              load :name => 'point', :physical_quantity => 'length', :factor => 351.4598e-6, :symbol => 'pt', :label => 'pt'
         | 
| 327 | 
            +
              load :name => 'poncelot', :physical_quantity => 'power', :factor => 980.665, :symbol => 'p', :label => 'p'
         | 
| 328 | 
            +
              load :name => 'pound', :physical_quantity => 'mass', :factor => 0.45359237, :symbol => 'lb', :label => 'lb'
         | 
| 329 | 
            +
              load :name => 'poundal', :physical_quantity => 'force', :factor => 138.255, :symbol => 'pdl', :label => 'pdl'
         | 
| 330 | 
            +
              load :name => 'pound force', :physical_quantity => 'force', :factor => 4.448222, :symbol => 'lbf', :label => 'lbf'
         | 
| 331 | 
            +
              load :name => 'quad', :physical_quantity => 'energy', :factor => 1.055056e18, :symbol => 'quad', :label => 'quad'
         | 
| 332 | 
            +
              load :name => 'rad', :physical_quantity => 'radiation absorbed dose', :factor => 0.01, :symbol => 'rad', :label => 'rd'
         | 
| 333 | 
            +
              load :name => 'rem', :physical_quantity => 'radiation_dose_equivalent', :factor => 0.01, :symbol => 'rem', :label => 'rem'
         | 
| 334 | 
            +
              load :name => 'revolution', :physical_quantity => 'plane angle', :factor => 2*Math::PI, :symbol => 'rev', :label => 'rev'
         | 
| 335 | 
            +
              load :name => 'reyn', :physical_quantity => 'dynamic viscosity', :factor => 689.5e3, :symbol => 'reyn', :label => 'reyn'
         | 
| 336 | 
            +
              load :name => 'rood', :physical_quantity => 'area', :factor => 1.011714e3, :symbol => 'rood', :label => 'rood'
         | 
| 337 | 
            +
              load :name => 'rutherford', :physical_quantity => 'radioactivity', :factor => 1e6, :symbol => 'rd', :label => 'Rd'
         | 
| 338 | 
            +
              load :name => 'rydberg', :physical_quantity => 'energy', :factor => 2.179874e-18, :symbol => 'Ry', :label => 'Ry'
         | 
| 339 | 
            +
              load :name => 'short ton', :physical_quantity => 'mass', :factor => 907.1847, :symbol => 'ton', :label => 'ton_us'
         | 
| 340 | 
            +
              load :name => 'sidereal day', :physical_quantity => 'time', :factor => 86.16409053e3, :symbol => 'd', :label => 'day_sidereal'
         | 
| 341 | 
            +
              load :name => 'sidereal year', :physical_quantity => 'time', :factor => 31558823.803728, :symbol => 'yr', :label => 'year_sidereal'
         | 
| 342 | 
            +
              load :name => 'statute league', :physical_quantity => 'length', :factor => 4.828032e3, :symbol => 'lea', :label => 'lea'
         | 
| 343 | 
            +
              load :name => 'sphere', :physical_quantity => 'solid angle', :factor => 4*Math::PI, :symbol => 'sphere', :label => 'sphere'
         | 
| 344 | 
            +
              load :name => 'sthene', :physical_quantity => 'force', :factor => 1e3, :symbol => 'sn', :label => 'sn'
         | 
| 345 | 
            +
              load :name => 'stokes', :physical_quantity => 'kinematic viscosity', :factor => 100e-6, :symbol => 'St', :label => 'St'
         | 
| 346 | 
            +
              load :name => 'stone', :physical_quantity => 'mass', :factor => 6.350293, :symbol => 'st', :label => 'st'
         | 
| 347 | 
            +
              load :name => 'therm', :physical_quantity => 'energy', :factor => 105.506e6, :symbol => 'thm', :label => 'thm'
         | 
| 348 | 
            +
              load :name => 'thermie', :physical_quantity => 'energy', :factor => 4.185407e6, :symbol => 'th', :label => 'th'
         | 
| 349 | 
            +
              load :name => 'tog', :physical_quantity => 'thermal resistance', :factor => 0.1, :symbol => 'tog', :label => 'tog'
         | 
| 350 | 
            +
              load :name => 'tonne', :physical_quantity => 'mass', :factor => 1000.0, :symbol => 't', :label => 't'
         | 
| 351 | 
            +
              load :name => 'unified atomic mass', :physical_quantity => 'mass', :factor => 1.66054e-27, :symbol => 'u', :label => 'u'
         | 
| 352 | 
            +
              load :name => 'uk barrel', :physical_quantity => 'volume', :factor => 163.6592e-3, :symbol => 'bl (Imp)', :label => 'bbl_imp'
         | 
| 353 | 
            +
              load :name => 'uk fluid ounce', :physical_quantity => 'volume', :factor => 28.41308e-6, :symbol => 'fl oz', :label => 'oz_fl_uk'
         | 
| 354 | 
            +
              load :name => 'uk gallon', :physical_quantity => 'volume', :factor => 4.546092e-3, :symbol => 'gal', :label => 'gal_uk'
         | 
| 355 | 
            +
              load :name => 'uk gill', :physical_quantity => 'volume', :factor => 142.0654e-6, :symbol => 'gi', :label => 'gi_uk'
         | 
| 356 | 
            +
              load :name => 'uk horsepower', :physical_quantity => 'power', :factor => 745.6999, :symbol => 'hp', :label => 'hp_uk'
         | 
| 357 | 
            +
              load :name => 'us dry gallon', :physical_quantity => 'volume', :factor => 4.40488377086e-3, :symbol => 'gal', :label => 'gallon_dry_us'
         | 
| 358 | 
            +
              load :name => 'us dry barrel', :physical_quantity => 'volume', :factor => 115.6271e-3, :symbol => 'bl (US)', :label => 'bbl_dry_us'
         | 
| 359 | 
            +
              load :name => 'us fluid ounce', :physical_quantity => 'volume', :factor => 29.57353e-6, :symbol => 'fl oz', :label => 'oz_fl'
         | 
| 360 | 
            +
              load :name => 'us gill', :physical_quantity => 'volume', :factor => 118.2941e-6, :symbol => 'gi', :label => 'gi_us'
         | 
| 361 | 
            +
              load :name => 'us liquid barrel', :physical_quantity => 'volume', :factor => 119.2405e-3, :symbol => 'fl bl (US)', :label => 'bbl_fl_us'
         | 
| 362 | 
            +
              load :name => 'us liquid gallon', :physical_quantity => 'volume', :factor => 3.785412e-3, :symbol => 'gal', :label => 'gal'
         | 
| 363 | 
            +
              load :name => 'us survey foot', :physical_quantity => 'length', :factor => 304.8e-3, :symbol => 'ft', :label => 'foot_survey_us'
         | 
| 364 | 
            +
              load :name => 'week', :physical_quantity => 'time', :factor => 604800, :symbol => 'wk', :label => 'week'
         | 
| 365 | 
            +
              load :name => 'yard', :physical_quantity => 'length', :factor => 0.9144, :symbol => 'yd', :label => 'yd'
         | 
| 366 | 
            +
              load :name => 'year', :physical_quantity => 'time', :factor => 31557600, :symbol => 'yr', :label => 'year'
         | 
| 367 | 
            +
             | 
| 368 | 
            +
              construct_and_load(kW*h) do |unit|
         | 
| 369 | 
            +
                unit.symbol = 'kWh'
         | 
| 370 | 
            +
                unit.label = 'kWh'
         | 
| 371 | 
            +
              end
         | 
| 372 | 
            +
             | 
| 373 | 
            +
              construct_and_load(pound_force/(inch**2)) do |unit|
         | 
| 374 | 
            +
                unit.symbol = 'psi'
         | 
| 375 | 
            +
              end
         | 
| 376 | 
            +
             | 
| 377 | 
            +
              non_si_base_units.each { |unit| unit.acts_as_equivalent_unit = true }
         | 
| 378 | 
            +
             | 
| 379 | 
            +
            end
         | 
| @@ -0,0 +1,63 @@ | |
| 1 | 
            +
             | 
| 2 | 
            +
            class String
         | 
| 3 | 
            +
             | 
| 4 | 
            +
              def standardize
         | 
| 5 | 
            +
                self.gsub("_"," ")
         | 
| 6 | 
            +
              end
         | 
| 7 | 
            +
             | 
| 8 | 
            +
              def to_power index
         | 
| 9 | 
            +
                name = self.clone
         | 
| 10 | 
            +
                case index
         | 
| 11 | 
            +
                when 1 then name
         | 
| 12 | 
            +
                when 2 then "square #{name}"
         | 
| 13 | 
            +
                when 3 then "cubic #{name}"
         | 
| 14 | 
            +
                else
         | 
| 15 | 
            +
                  ordinal = ActiveSupport::Inflector.ordinalize index
         | 
| 16 | 
            +
                  name << " to the #{ordinal} power"
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
              def words
         | 
| 21 | 
            +
                split(/\s+/)
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
             | 
| 24 | 
            +
              def word_count
         | 
| 25 | 
            +
                words.size
         | 
| 26 | 
            +
              end
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              def to_quantity
         | 
| 29 | 
            +
                Quantify::Quantity.parse self
         | 
| 30 | 
            +
              end
         | 
| 31 | 
            +
             | 
| 32 | 
            +
              alias :to_q :to_quantity
         | 
| 33 | 
            +
               
         | 
| 34 | 
            +
            end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
            class Symbol
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              def standardize
         | 
| 39 | 
            +
                self.to_s.standardize
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
              
         | 
| 42 | 
            +
            end
         | 
| 43 | 
            +
             | 
| 44 | 
            +
            class Numeric
         | 
| 45 | 
            +
             | 
| 46 | 
            +
              # Syntactic sugar for defining instances of the Quantity class.
         | 
| 47 | 
            +
              #
         | 
| 48 | 
            +
              # Enables quantities to be specified by using unit names, symbols or JScience
         | 
| 49 | 
            +
              # labels as argments on Numeric objects, e.g.
         | 
| 50 | 
            +
              #
         | 
| 51 | 
            +
              #   1.5.metre      is equivalent to Quantity. new 1.5, :metre
         | 
| 52 | 
            +
              #
         | 
| 53 | 
            +
              #   1000.t         is equivalent to Quantity. new 1000, :t
         | 
| 54 | 
            +
              #
         | 
| 55 | 
            +
              def method_missing(method, *args, &block)
         | 
| 56 | 
            +
                if unit = Unit.for(method.to_s)
         | 
| 57 | 
            +
                  Quantify::Quantity.new self, unit
         | 
| 58 | 
            +
                else
         | 
| 59 | 
            +
                  raise NoMethodError, "Undefined method `#{method}` for #{self}:#{self.class}"
         | 
| 60 | 
            +
                end
         | 
| 61 | 
            +
              end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
            end
         |