unite 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: aebeae667614cd23ebc795fa7930b6d55a95cce1
4
+ data.tar.gz: 62f3c66b9baec8a9ab0970322489ac43fa1dbd50
5
+ SHA512:
6
+ metadata.gz: 0a5f0ee539de7142b8b26a510dd4f2aa6bb1d16fdc1a403f8c7434ca610562d319a2060284dedeefa67e835145e9e78f53c83f0ffa911cd8115e9a9e3e37190d
7
+ data.tar.gz: c88e6b42a7d06a16037a3a3c931df650a9852abffa00d39e4ffda5d4cc6971a59e4d6890de230c32a5f72b7b6344efdc304f2a2d860723fcc97fd6686d97613b
data/.bundle/config ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ BUNDLE_BIN: bin
data/.rspec CHANGED
@@ -1,4 +1,4 @@
1
1
  --colour
2
2
  --format d
3
3
  --profile
4
- --backtrace
4
+ --backtrace
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.0.0-p247
data/Gemfile CHANGED
@@ -6,13 +6,13 @@ gemspec
6
6
  group :test do
7
7
  gem 'SystemTimer', :platform => :mri_18
8
8
  gem 'ruby-debug', :platform => :mri_18
9
- gem 'linecache19', '>= 0.5.13', :platform => :mri_19
10
- gem 'ruby-debug-base19', '>= 0.11.26', :platform => :mri_19
11
- gem 'ruby-debug19', :platform => :mri_19, :require => 'ruby-debug'
9
+ gem 'debugger', :platform => :mri_19
10
+ gem 'byebug', :platform => :mri_20
12
11
  gem 'mocha'
13
12
  gem 'rspec'
14
13
  gem 'shoulda-matchers', :git => 'git://github.com/thoughtbot/shoulda-matchers.git', :require => 'false'
15
14
  gem 'fabrication'
16
15
  gem 'guard-rspec'
17
16
  gem 'guard-bundler'
17
+ gem 'guard'
18
18
  end
data/Gemfile.lock CHANGED
@@ -8,7 +8,7 @@ GIT
8
8
  PATH
9
9
  remote: .
10
10
  specs:
11
- unite (1.1.1)
11
+ unite (1.3.0)
12
12
  activemodel (>= 3.0.0)
13
13
  activesupport (>= 3.0.0)
14
14
 
@@ -22,9 +22,17 @@ GEM
22
22
  i18n (~> 0.6)
23
23
  activesupport (3.1.3)
24
24
  multi_json (~> 1.0)
25
- archive-tar-minitar (0.5.2)
26
- builder (3.0.0)
25
+ builder (3.0.4)
26
+ byebug (2.3.1)
27
+ columnize (~> 0.3.6)
28
+ debugger-linecache (~> 1.2.0)
27
29
  columnize (0.3.6)
30
+ debugger (1.6.2)
31
+ columnize (>= 0.3.1)
32
+ debugger-linecache (~> 1.2.0)
33
+ debugger-ruby_core_source (~> 1.2.3)
34
+ debugger-linecache (1.2.0)
35
+ debugger-ruby_core_source (1.2.3)
28
36
  diff-lcs (1.1.3)
29
37
  fabrication (1.2.0)
30
38
  ffi (1.0.11)
@@ -36,11 +44,9 @@ GEM
36
44
  guard (>= 0.2.2)
37
45
  guard-rspec (0.6.0)
38
46
  guard (>= 0.10.0)
39
- i18n (0.6.0)
47
+ i18n (0.6.5)
40
48
  linecache (0.46)
41
49
  rbx-require-relative (> 0.0.4)
42
- linecache19 (0.5.13)
43
- ruby_core_source (>= 0.1.4)
44
50
  metaclass (0.0.1)
45
51
  mocha (0.10.1)
46
52
  metaclass (~> 0.0.1)
@@ -59,16 +65,6 @@ GEM
59
65
  ruby-debug-base (~> 0.10.4.0)
60
66
  ruby-debug-base (0.10.4)
61
67
  linecache (>= 0.3)
62
- ruby-debug-base19 (0.11.26)
63
- columnize (>= 0.3.1)
64
- linecache19 (>= 0.5.11)
65
- ruby_core_source (>= 0.1.4)
66
- ruby-debug19 (0.11.6)
67
- columnize (>= 0.3.1)
68
- linecache19 (>= 0.5.11)
69
- ruby-debug-base19 (>= 0.11.19)
70
- ruby_core_source (0.1.5)
71
- archive-tar-minitar (>= 0.5.2)
72
68
  thor (0.14.6)
73
69
 
74
70
  PLATFORMS
@@ -76,14 +72,14 @@ PLATFORMS
76
72
 
77
73
  DEPENDENCIES
78
74
  SystemTimer
75
+ byebug
76
+ debugger
79
77
  fabrication
78
+ guard
80
79
  guard-bundler
81
80
  guard-rspec
82
- linecache19 (>= 0.5.13)
83
81
  mocha
84
82
  rspec
85
83
  ruby-debug
86
- ruby-debug-base19 (>= 0.11.26)
87
- ruby-debug19
88
84
  shoulda-matchers!
89
85
  unite!
data/README CHANGED
@@ -1,3 +1,35 @@
1
1
  gem install unite
2
2
 
3
- gem 'unite'
3
+ gem 'unite'
4
+
5
+
6
+ Based on
7
+
8
+ http://www.cs.utexas.edu/users/novak/units95.html
9
+
10
+
11
+ Handles the following dimensions
12
+
13
+ [:length, :time, :temperature, :mass, :current, :substance, :luminosity, :money]
14
+
15
+
16
+ Note: Conversion of Money is not currently supported
17
+
18
+
19
+ Can use Unite::Quantity to represent values or include the functionality into your own objects.
20
+
21
+ Look at https://github.com/stellard/unite/blob/master/lib/unite/quantity.rb for a minum implementation
22
+
23
+ Examples: (needs more info here)
24
+
25
+ Unite::Quantity.init("1000*km")
26
+ Unite::Quantity.init("1000","km")
27
+
28
+ Unit definitions are found here
29
+
30
+ https://github.com/stellard/unite/blob/master/lib/unite/lookup/definitions.rb
31
+
32
+ Specs show good examples of use.
33
+
34
+ I will add more to readme
35
+
data/bin/autospec ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'autospec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('unite', 'autospec')
data/bin/byebug ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'byebug' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('unite', 'byebug')
data/bin/guard ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'guard' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('unite', 'guard')
data/bin/htmldiff ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'htmldiff' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('unite', 'htmldiff')
data/bin/ldiff ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'ldiff' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('unite', 'ldiff')
data/bin/rake2thor ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rake2thor' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('unite', 'rake2thor')
data/bin/rspec ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'rspec' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('unite', 'rspec')
data/bin/thor ADDED
@@ -0,0 +1,16 @@
1
+ #!/usr/bin/env ruby
2
+ #
3
+ # This file was generated by Bundler.
4
+ #
5
+ # The application 'thor' is installed as part of a gem, and
6
+ # this file is here to facilitate running it.
7
+ #
8
+
9
+ require 'pathname'
10
+ ENV['BUNDLE_GEMFILE'] ||= File.expand_path("../../Gemfile",
11
+ Pathname.new(__FILE__).realpath)
12
+
13
+ require 'rubygems'
14
+ require 'bundler/setup'
15
+
16
+ load Gem.bin_path('unite', 'thor')
@@ -7,7 +7,7 @@ module Unite
7
7
 
8
8
  extend ::ActiveSupport::Concern
9
9
  include Comparison
10
- include Fraction
10
+ include SiFactor
11
11
 
12
12
  included do
13
13
 
@@ -18,27 +18,37 @@ module Unite
18
18
  end
19
19
 
20
20
  def convert_to other
21
- other = other.clone.tap{|o| o.value = BigDecimal.new(1) } #this is so that only the unit is used for the conversion
22
- new_value = self.converted_value(other)
21
+ other = cast_to_unit other
22
+ new_value, new_numerator, new_denominator = converted(other)
23
23
  return nil if new_value.nil?
24
- self.class.new :value => new_value, :numerator => other.numerator, :denominator => other.denominator
24
+ self.class.new :value => new_value, :numerator => new_numerator, :denominator => new_denominator
25
+ end
26
+
27
+ def convert_to! other
28
+ other = cast_to_unit other
29
+ compatible! other
30
+ new_value, new_numerator, new_denominator = converted(other)
31
+ self.value = new_value
32
+ self.numerator = new_numerator
33
+ self.denominator = new_denominator
34
+ self
25
35
  end
26
36
 
27
37
  protected
28
38
 
29
- def converted_value other
30
- return nil unless self.compatible?(other)
31
- self.si_factor / other.si_factor
39
+ def cast_to_unit other
40
+ other = Unit.init(other.is_a?(String) ? other : other.unit)
32
41
  end
33
42
 
34
- def si_factor
35
- value * (get_si_factor(numerator) / get_si_factor(denominator))
43
+ def converted other
44
+ new_value = self.converted_value(other)
45
+ return [nil, nil, nil] if new_value.nil?
46
+ return [new_value, other.numerator, other.denominator]
36
47
  end
37
48
 
38
- def get_si_factor unit_array
39
- expand_unit_array(unit_array).map do |element|
40
- Lookup.find!(element).si_factor
41
- end.inject(BigDecimal.new(1)) {|product, factor| product*factor}
49
+ def converted_value other
50
+ return nil unless self.compatible?(other)
51
+ self.si_factor / other.si_factor
42
52
  end
43
53
 
44
54
  end
@@ -23,12 +23,16 @@ module Unite
23
23
 
24
24
  # also include the dimensionless dimension "none"
25
25
  LIST = VECTOR_LIST + [:none]
26
- UNITS = ['meter', 'second', 'kelvin', 'kilogram', 'ampere', 'mole', 'candela', 'GBP', '']
26
+ UNITS = ['km', 's', 'K', 'kg', 'A', 'mol', 'cd', 'GBP', '']
27
27
  INDICIES = Hash[*LIST.each_with_index.map{|d,i| [d,i]}.flatten]
28
28
 
29
29
 
30
- def si_unit dimension
31
- UNITS[INDICIES[dimension.to_sym]]
30
+ def si_unit dimension_name_or_index
31
+ if dimension_name_or_index.kind_of? Fixnum
32
+ UNITS[dimension_name_or_index]
33
+ else
34
+ UNITS[INDICIES[dimension_name_or_index.to_sym]]
35
+ end
32
36
  end
33
37
 
34
38
  def blank_dimension_vector
@@ -1,8 +1,8 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Unite
3
- class InvalidFormat < RuntimeError
3
+ class InvalidFormat < RuntimeError
4
4
  end
5
-
5
+
6
6
  module Fraction
7
7
  extend ::ActiveSupport::Concern
8
8
 
@@ -20,30 +20,18 @@ module Unite
20
20
  self.denominator ||= []
21
21
  end
22
22
 
23
-
24
- def expression=string
25
- unless string.blank? || string.strip == '/'
26
- num_denom = string.split('/')
27
- raise(InvalidFormat, string) if num_denom.length > 2 || num_denom.empty?
28
- self.numerator = num_denom[0].split('*').map(&:strip)
29
- self.denominator = (num_denom[1].nil? ? [] : num_denom[1].split('*')).map(&:strip)
30
- self.value = extract_value!(:numerator) / extract_value!(:denominator)
31
- reduce
32
- else
33
- self.value = BigDecimal.new(0)
34
- self.numerator = []
35
- self.denominator = []
36
- end
23
+ def expression= string
24
+ self.value, self.numerator, self.denominator = parse_expression string
25
+ reduce
26
+ expression
37
27
  end
38
28
 
39
- def expression
40
- numertor_string = ([value] + (numerator || [])).join('*')
41
- denominator.empty? ? numertor_string : "#{numertor_string}/#{denominator.join('*')}"
29
+ def expression precision = 2
30
+ denominator_expression.blank? ? numerator_expression(precision) : "#{numerator_expression(precision)}/#{denominator_expression}"
42
31
  end
43
32
 
44
33
  def unit
45
- numertor_string = (numerator.blank? && !denominator.blank?) ? '1.0' : (numerator || []).join('*')
46
- denominator.blank? ? numertor_string : "#{numertor_string}/#{denominator.join('*')}"
34
+ unit_array_to_string self.numerator, self.denominator
47
35
  end
48
36
 
49
37
  def expanded_numerator
@@ -60,20 +48,27 @@ module Unite
60
48
  end
61
49
 
62
50
  def reduce
63
- expand
51
+ new_unit = normalized_unit
52
+ convert_to!(normalized_unit) unless new_unit == unit || !self.respond_to?(:convert_to!)
53
+ end
64
54
 
65
- self.denominator.delete_if do |unit|
66
- if nindex = self.numerator.index(unit)
67
- self.numerator.delete_at(nindex)
68
- end
69
- end
55
+ private
70
56
 
57
+ def with_expanded_units
58
+ expand
59
+ result = yield
71
60
  self.numerator = reduce_unit_array(self.numerator)
72
61
  self.denominator = reduce_unit_array(self.denominator)
62
+ result
63
+ end
73
64
 
65
+ def numerator_expression precision
66
+ ([value.round(precision)] + (numerator || [])).join('*')
74
67
  end
75
68
 
76
- private
69
+ def denominator_expression
70
+ denominator.join('*')
71
+ end
77
72
 
78
73
  def expand
79
74
  self.numerator = expanded_numerator
@@ -84,9 +79,13 @@ module Unite
84
79
  [].tap{|rejected| array.delete_if { |v| yield(v) && rejected << v }}
85
80
  end
86
81
 
87
- def extract_value! method
82
+ def split_string string
83
+ (string.nil? ? [] : string.split('*')).map(&:strip)
84
+ end
85
+
86
+ def extract_value! array
88
87
  number_regex = /\A[-+]?\d*\.?\d+([eE][-+]?\d+)?\Z/
89
- seperate!(self.send(method)){|x| number_regex =~ x }.map{|n| BigDecimal.new(n)}.
88
+ seperate!(array){|x| number_regex =~ x }.map{|n| BigDecimal.new(n)}.
90
89
  inject(BigDecimal.new(1)){|product, number| product*number }
91
90
  end
92
91
 
@@ -103,6 +102,25 @@ module Unite
103
102
  end
104
103
  end
105
104
 
105
+ def parse_expression string
106
+ unless string.blank? || string.strip == '/'
107
+ num_denom = string.split('/')
108
+ raise(InvalidFormat, string) if num_denom.length > 2 || num_denom.empty?
109
+ top = split_string(num_denom[0])
110
+ bottom = split_string(num_denom[1])
111
+ value = extract_value!(top) / extract_value!(bottom)
112
+ numerator = []
113
+ denominator = []
114
+ sift_units top, numerator, denominator
115
+ sift_units bottom, denominator, numerator
116
+ else
117
+ value = BigDecimal.new(0)
118
+ numerator = []
119
+ denominator = []
120
+ end
121
+ return [value, numerator, denominator]
122
+ end
123
+
106
124
  def expand_unit_array array
107
125
  array.collect do |unit|
108
126
  if /\A([^\^\s]+)(\^(\d+))?\Z/ =~ unit
@@ -114,5 +132,63 @@ module Unite
114
132
  end
115
133
  end.flatten.compact
116
134
  end
135
+
136
+ def sift_units array, top, bottom
137
+ #move negative exponents to the bottom and keep positive on the top
138
+ array.each do |u|
139
+ u.match(/\A^([^\^\s]+)(\^(-?)(\d+))?\z/)
140
+ unit = Regexp.last_match(1)
141
+ power = Regexp.last_match(4)
142
+ expression = "#{unit}#{power.blank? ? "": "^#{power}"}"
143
+ if Regexp.last_match(3) == "-"
144
+ bottom << expression
145
+ else
146
+ top << expression
147
+ end
148
+ end
149
+ return [top, bottom]
150
+ end
151
+
152
+ def normalized_unit
153
+ with_expanded_units do
154
+ numerator_lookup_array = lookup_units numerator
155
+ denominator_lookup_array = lookup_units denominator
156
+
157
+ units_in_use = {}
158
+ (numerator_lookup_array + denominator_lookup_array).each do |unit|
159
+ dimension_int = unit.dimension_int
160
+ units_in_use[dimension_int] ||= unit
161
+ end
162
+
163
+ new_numerator = normalize_units numerator_lookup_array, units_in_use
164
+ new_denominator = normalize_units denominator_lookup_array, units_in_use
165
+
166
+
167
+ new_denominator.delete_if do |unit|
168
+ if nindex = new_numerator.index(unit)
169
+ new_numerator.delete_at(nindex)
170
+ end
171
+ end
172
+
173
+ new_denominator = reduce_unit_array(new_denominator)
174
+ new_numerator = reduce_unit_array(new_numerator)
175
+
176
+ unit_array_to_string new_numerator, new_denominator
177
+ end
178
+ end
179
+
180
+ def normalize_units array, in_use_hash
181
+ array.map { |unit| in_use_hash[unit.dimension_int] || unit }.map(&:name)
182
+ end
183
+
184
+ def lookup_units array
185
+ array.map{ |unit| Lookup.find!(unit) }
186
+ end
187
+
188
+ def unit_array_to_string num, denom
189
+ numertor_string = (num.blank? && !denominator.blank?) ? '1.0' : (num || []).join('*')
190
+ denom.blank? ? numertor_string : "#{numertor_string}/#{denom.join('*')}"
191
+ end
192
+
117
193
  end
118
194
  end
@@ -12,15 +12,15 @@ module Unite
12
12
  Lookup.add_property Property.new(:name => :none, :expression => '')
13
13
 
14
14
  #TIME
15
- Lookup.add SimpleUnit.new(:name => "s", :si_factor => 1, :dimension => :time)
16
- Lookup.add SimpleUnit.new(:name => "hr", :si_factor => 3600, :dimension => :time)
15
+ Lookup.add SimpleUnit.new(:name => "s", :si_factor => 1, :dimension => :time, :aliases => ['second', 'seconds'])
16
+ Lookup.add SimpleUnit.new(:name => "h", :si_factor => 3600, :dimension => :time, :aliases => ['hour', 'hours', 'hr'])
17
17
 
18
- Lookup.add DerivedUnit.new(:name => "day", :expression => '24*hr')
18
+ Lookup.add DerivedUnit.new(:name => "day", :expression => '24*hr', :aliases => ['days'])
19
19
 
20
20
  Lookup.add_property Property.new(:name => :time, :expression => 'hr')
21
21
 
22
22
  #LENGTH
23
- Lookup.add SimpleUnit.new(:name => "m", :si_factor => 1, :dimension => :length)
23
+ Lookup.add SimpleUnit.new(:name => "m", :si_factor => 1, :dimension => :length, :aliases => ['meter', 'meters'])
24
24
  Lookup.add SimpleUnit.new(:name => "cm", :si_factor => 0.01, :dimension => :length)
25
25
  Lookup.add SimpleUnit.new(:name => "dm", :si_factor => 0.1, :dimension => :length)
26
26
  Lookup.add SimpleUnit.new(:name => "km", :si_factor => 1000, :dimension => :length)
@@ -36,19 +36,18 @@ module Unite
36
36
 
37
37
 
38
38
  #MASS
39
- Lookup.add SimpleUnit.new(:name => "g", :si_factor => 1, :dimension => :mass)
40
- Lookup.add SimpleUnit.new(:name => "kg", :si_factor => 1000, :dimension => :mass)
41
- Lookup.add SimpleUnit.new(:name => "tonne", :si_factor => 1000000, :dimension => :mass)
42
- Lookup.add SimpleUnit.new(:name => "metric_tonne", :si_factor => 1000000, :dimension => :mass)
39
+ Lookup.add SimpleUnit.new(:name => "g", :si_factor => 1, :dimension => :mass, :aliases => ['gram'])
40
+ Lookup.add SimpleUnit.new(:name => "kg", :si_factor => 1000, :dimension => :mass, :aliases => ['kilogram'])
41
+ Lookup.add SimpleUnit.new(:name => "t", :si_factor => 1000000, :dimension => :mass, :aliases => ['tonne', 'metric_tonne'])
43
42
 
44
43
  Lookup.add SimpleUnit.new(:name => "long_ton", :si_factor => 1.01605e6, :dimension => :mass)
45
44
  Lookup.add SimpleUnit.new(:name => "short_ton", :si_factor => 907185, :dimension => :mass)
46
45
  Lookup.add SimpleUnit.new(:name => "lb", :si_factor => 453.592, :dimension => :mass)
47
46
 
48
- Lookup.add_property Property.new(:name => :mass, :expression => 'tonne')
47
+ Lookup.add_property Property.new(:name => :mass, :expression => 'g')
49
48
 
50
49
 
51
- #DIMENSIONLESS
50
+ #MONEY
52
51
  Lookup.add SimpleUnit.new(:name => "GBP", :si_factor => 1, :dimension => :money)
53
52
 
54
53
  #Right now only one currency is supported. It is too difficult to be able to convert them.
@@ -60,6 +59,23 @@ module Unite
60
59
  Lookup.add_property Property.new(:name => :money, :expression => 'GBP')
61
60
 
62
61
 
62
+ #TEMPERATURE
63
+ Lookup.add SimpleUnit.new(:name => "K", :si_factor => 1, :dimension => :temperature, :aliases => ['kelvin'])
64
+ Lookup.add_property Property.new(:name => :temperature, :expression => 'K')
65
+
66
+ #LUMINOSITY
67
+ Lookup.add SimpleUnit.new(:name => "cd", :si_factor => 1, :dimension => :luminosity, :aliases => ['candela'])
68
+ Lookup.add_property Property.new(:name => :luminosity, :expression => 'cd')
69
+
70
+ #CURRENT
71
+ Lookup.add SimpleUnit.new(:name => "A", :si_factor => 1, :dimension => :current, :aliases => ['amp', 'ampere'])
72
+ Lookup.add_property Property.new(:name => :current, :expression => 'A')
73
+
74
+ #MOLE
75
+ Lookup.add SimpleUnit.new(:name => "mol", :si_factor => 1, :dimension => :substance, :aliases => ['mole'])
76
+ Lookup.add_property Property.new(:name => :substance, :expression => 'mol')
77
+
78
+
63
79
  #DERIVED UNITS
64
80
 
65
81
  #ENERGY
@@ -6,7 +6,7 @@ module Unite
6
6
  include Dimension::Vector
7
7
  include Conversion
8
8
 
9
- attr_accessor :name, :numerator, :denominator, :value
9
+ attr_accessor :name, :numerator, :denominator, :value, :aliases
10
10
 
11
11
  alias :to_s :name
12
12
  validates_presence_of :name
@@ -19,6 +19,9 @@ module Unite
19
19
  super
20
20
  end
21
21
 
22
+ def aliases
23
+ @aliases ||= []
24
+ end
22
25
 
23
26
  end
24
27
  end
@@ -5,7 +5,7 @@ module Unite
5
5
  include ActiveModel::Validations
6
6
  include Dimension::Integer
7
7
 
8
- attr_accessor :dimension, :name, :si_factor
8
+ attr_accessor :dimension, :name, :si_factor, :aliases
9
9
  alias :to_s :name
10
10
 
11
11
  validates_inclusion_of :dimension, :in => Dimension::LIST
@@ -22,5 +22,9 @@ module Unite
22
22
  end
23
23
  end
24
24
 
25
+ def aliases
26
+ @aliases ||= []
27
+ end
28
+
25
29
  end
26
30
  end