quantify 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,7 @@
1
+ A gem to support for physical quantities and unit conversions
2
+
3
+ Licensed under the MIT license (See COPYING file for details)
4
+
5
+ Author: Andrew Berkeley (andrew.berkeley.is@googlemail.com)
6
+
7
+ Homepage: https://github.com/spatchcock/quantify
@@ -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