quantify 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|