ruby-units 1.3.2 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. data/CHANGELOG.txt +25 -7
  2. data/LICENSE.txt +1 -1
  3. data/README.md +68 -55
  4. data/RakeFile +27 -18
  5. data/TODO +2 -1
  6. data/VERSION +1 -1
  7. data/lib/ruby-units.rb +2 -2
  8. data/lib/ruby_units.rb +2 -2
  9. data/lib/ruby_units/array.rb +4 -2
  10. data/lib/ruby_units/date.rb +17 -4
  11. data/lib/ruby_units/definition.rb +100 -0
  12. data/lib/ruby_units/fixnum.rb +6 -4
  13. data/lib/ruby_units/math.rb +32 -2
  14. data/lib/ruby_units/numeric.rb +2 -1
  15. data/lib/ruby_units/object.rb +8 -1
  16. data/lib/ruby_units/string.rb +10 -109
  17. data/lib/ruby_units/string/extra.rb +45 -11
  18. data/lib/ruby_units/time.rb +11 -2
  19. data/lib/ruby_units/unit.rb +722 -434
  20. data/lib/ruby_units/unit_definitions.rb +3 -252
  21. data/lib/ruby_units/unit_definitions/base.rb +103 -0
  22. data/lib/ruby_units/unit_definitions/prefix.rb +40 -0
  23. data/lib/ruby_units/unit_definitions/standard.rb +705 -0
  24. data/lib/ruby_units/version.rb +1 -0
  25. data/ruby-units.gemspec +15 -20
  26. metadata +46 -35
  27. data/Gemfile +0 -12
  28. data/Manifest.txt +0 -19
  29. data/autotest/discover.rb +0 -1
  30. data/spec/ruby-units/array_spec.rb +0 -14
  31. data/spec/ruby-units/complex_spec.rb +0 -37
  32. data/spec/ruby-units/date_spec.rb +0 -38
  33. data/spec/ruby-units/math_spec.rb +0 -63
  34. data/spec/ruby-units/numeric_spec.rb +0 -12
  35. data/spec/ruby-units/object_spec.rb +0 -7
  36. data/spec/ruby-units/string/extra_spec.rb +0 -45
  37. data/spec/ruby-units/string_spec.rb +0 -20
  38. data/spec/ruby-units/time_spec.rb +0 -28
  39. data/spec/ruby-units/unit_spec.rb +0 -965
  40. data/spec/spec_helper.rb +0 -5
  41. data/test/test_cache.rb +0 -26
  42. data/test/test_ruby-units.rb +0 -976
@@ -1,10 +1,11 @@
1
- # this patch is necessary for ruby 1.8 because cases where
2
- # Integers are divided by Units don't work quite right
3
-
4
1
  if RUBY_VERSION < "1.9"
2
+ # :nocov_19:
5
3
  class Fixnum
6
4
  alias quo_without_units quo
7
-
5
+
6
+ # @note this patch is necessary for ruby 1.8 because cases where Integers are divided by Units don't work quite right
7
+ # @param [Numeric]
8
+ # @return [Unit, Integer]
8
9
  def quo_with_units(other)
9
10
  case other
10
11
  when Unit
@@ -17,4 +18,5 @@ if RUBY_VERSION < "1.9"
17
18
  alias quo quo_with_units
18
19
  alias / quo_with_units
19
20
  end
21
+ # :nocov_19:
20
22
  end
@@ -1,10 +1,11 @@
1
- # Math will convert unit objects to radians and then attempt to use the value for
2
- # trigonometric functions.
3
1
  require 'mathn'
4
2
 
3
+ # Math will convert unit objects to radians and then attempt to use the value for
4
+ # trigonometric functions.
5
5
  module Math
6
6
 
7
7
  alias :unit_sqrt :sqrt
8
+ # @return [Numeric]
8
9
  def sqrt(n)
9
10
  if Unit === n
10
11
  (n**(Rational(1,2))).to_unit
@@ -12,12 +13,15 @@ module Math
12
13
  unit_sqrt(n)
13
14
  end
14
15
  end
16
+ # @return [Numeric]
15
17
  module_function :unit_sqrt
18
+ # @return [Numeric]
16
19
  module_function :sqrt
17
20
 
18
21
  #:nocov:
19
22
  if self.respond_to?(:cbrt)
20
23
  alias :unit_cbrt :cbrt
24
+ # @return [Numeric]
21
25
  def cbrt(n)
22
26
  if Unit === n
23
27
  (n**(Rational(1,3))).to_unit
@@ -25,55 +29,76 @@ module Math
25
29
  unit_cbrt(n)
26
30
  end
27
31
  end
32
+ # @return [Numeric]
28
33
  module_function :unit_cbrt
34
+ # @return [Numeric]
29
35
  module_function :cbrt
30
36
  end
31
37
  #:nocov:
32
38
 
33
39
  alias :unit_sin :sin
40
+ # @return [Numeric]
34
41
  def sin(n)
35
42
  Unit === n ? unit_sin(n.convert_to('radian').scalar) : unit_sin(n)
36
43
  end
44
+ # @return [Numeric]
37
45
  module_function :unit_sin
46
+ # @return [Numeric]
38
47
  module_function :sin
39
48
 
40
49
  alias :unit_cos :cos
50
+ # @return [Numeric]
41
51
  def cos(n)
42
52
  Unit === n ? unit_cos(n.convert_to('radian').scalar) : unit_cos(n)
43
53
  end
54
+ # @return [Numeric]
44
55
  module_function :unit_cos
56
+ # @return [Numeric]
45
57
  module_function :cos
46
58
 
47
59
  alias :unit_sinh :sinh
60
+ # @return [Numeric]
48
61
  def sinh(n)
49
62
  Unit === n ? unit_sinh(n.convert_to('radian').scalar) : unit_sinh(n)
50
63
  end
64
+ # @return [Numeric]
51
65
  module_function :unit_sinh
66
+ # @return [Numeric]
52
67
  module_function :sinh
53
68
 
54
69
  alias :unit_cosh :cosh
70
+ # @return [Numeric]
55
71
  def cosh(n)
56
72
  Unit === n ? unit_cosh(n.convert_to('radian').scalar) : unit_cosh(n)
57
73
  end
74
+ # @return [Numeric]
58
75
  module_function :unit_cosh
76
+ # @return [Numeric]
59
77
  module_function :cosh
60
78
 
61
79
  alias :unit_tan :tan
80
+ # @return [Numeric]
62
81
  def tan(n)
63
82
  Unit === n ? unit_tan(n.convert_to('radian').scalar) : unit_tan(n)
64
83
  end
84
+ # @return [Numeric]
65
85
  module_function :tan
86
+ # @return [Numeric]
66
87
  module_function :unit_tan
67
88
 
68
89
  alias :unit_tanh :tanh
90
+ # @return [Numeric]
69
91
  def tanh(n)
70
92
  Unit === n ? unit_tanh(n.convert_to('radian').scalar) : unit_tanh(n)
71
93
  end
94
+ # @return [Numeric]
72
95
  module_function :unit_tanh
96
+ # @return [Numeric]
73
97
  module_function :tanh
74
98
 
75
99
  alias :unit_hypot :hypot
76
100
  # Convert parameters to consistent units and perform the function
101
+ # @return [Numeric]
77
102
  def hypot(x,y)
78
103
  if Unit === x && Unit === y
79
104
  (x**2 + y**2)**(1/2)
@@ -81,10 +106,13 @@ module Math
81
106
  unit_hypot(x,y)
82
107
  end
83
108
  end
109
+ # @return [Numeric]
84
110
  module_function :unit_hypot
111
+ # @return [Numeric]
85
112
  module_function :hypot
86
113
 
87
114
  alias :unit_atan2 :atan2
115
+ # @return [Numeric]
88
116
  def atan2(x,y)
89
117
  case
90
118
  when (x.is_a?(Unit) && y.is_a?(Unit)) && (x !~ y)
@@ -95,7 +123,9 @@ module Math
95
123
  Math::unit_atan2(x,y)
96
124
  end
97
125
  end
126
+ # @return [Numeric]
98
127
  module_function :unit_atan2
128
+ # @return [Numeric]
99
129
  module_function :atan2
100
130
 
101
131
  end
@@ -1,5 +1,6 @@
1
- # make a unitless unit with a given scalar
2
1
  class Numeric
2
+ # make a unitless unit with a given scalar
3
+ # @return (see Unit#initialize)
3
4
  def to_unit(other = nil)
4
5
  other ? Unit.new(self, other) : Unit.new(self)
5
6
  end
@@ -1,8 +1,15 @@
1
1
  class Object
2
+
3
+ # Shortcut for creating Unit object
4
+ # @example
5
+ # Unit("1 mm")
6
+ # U("1 mm")
7
+ # @return [Unit]
2
8
  def Unit(*other)
3
9
  other.to_unit
4
10
  end
5
-
6
11
  alias :U :Unit
12
+
13
+ # @deprecated
7
14
  alias :u :Unit
8
15
  end
@@ -1,14 +1,18 @@
1
1
  require 'time'
2
- # make a string into a unit
3
2
  class String
3
+ # make a string into a unit
4
+ # @return (see Unit#initialize)
4
5
  def to_unit(other = nil)
5
6
  other ? Unit.new(self).convert_to(other) : Unit.new(self)
6
7
  end
7
8
  alias :unit :to_unit
8
9
  alias :u :to_unit
9
- alias :unit_format :%
10
-
11
- # format unit output using formating codes '%0.2f' % '1 mm'.unit => '1.00 mm'
10
+
11
+
12
+ alias :unit_format :%
13
+ # format unit output using formating codes
14
+ # @example '%0.2f' % '1 mm'.unit => '1.00 mm'
15
+ # @return [String]
12
16
  def %(*args)
13
17
  return "" if self.empty?
14
18
  case
@@ -23,112 +27,9 @@ class String
23
27
  end
24
28
  end
25
29
 
26
- #needed for compatibility with Rails, which defines a String.from method
27
- # if self.public_instance_methods.include? 'from'
28
- # alias :old_from :from
29
- # end
30
-
31
- # # "5 min".from("now")
32
- # def from(time_point = ::Time.now)
33
- # return old_from(time_point) if self.respond_to?(:old_from) && time_point.instance_of?(Integer)
34
- # self.unit.from(time_point)
35
- # end
36
- #
37
- # alias :after :from
38
-
39
- # def from_now
40
- # self.from('now')
41
- # end
42
- #
43
- # # "5 min".ago
44
- # def ago
45
- # self.unit.ago
46
- # end
47
- #
48
- # def before(time_point = ::Time.now)
49
- # self.unit.before(time_point)
50
- # end
51
- #
52
- # def before_now
53
- # self.before('now')
54
- # end
55
- #
56
- # def since(time_point = ::Time.now)
57
- # self.unit.since(time_point)
58
- # end
59
- #
60
- # def until(time_point = ::Time.now)
61
- # self.unit.until(time_point)
62
- # end
63
- #
30
+ # @param (see Unit#convert_to)
31
+ # @return (see Unit#convert_to)
64
32
  def convert_to(other)
65
33
  self.unit.convert_to(other)
66
34
  end
67
- #
68
- # unless String.instance_methods.include?(:to)
69
- # def to(other)
70
- # warn "string.to is deprecated, use string.convert_to if you must, but the best would be Unit('unit').convert_to('target unit')"
71
- # convert_to(other)
72
- # end
73
- # end
74
- #
75
- # def time(options = {})
76
- # self.to_time(options) rescue self.to_datetime(options)
77
- # end
78
- #
79
- # def to_time(options = {})
80
- # begin
81
- # #raises exception when Chronic not defined or when it returns a nil (i.e., can't parse the input)
82
- # r = Chronic.parse(self,options)
83
- # raise(ArgumentError, 'Invalid Time String') unless r
84
- # return r
85
- # rescue Exception => e
86
- # puts e.inspect
87
- # case
88
- # when self == "now"
89
- # Time.now
90
- # when Time.respond_to?(:parse)
91
- # Time.parse(self)
92
- # else
93
- # Time.local(*ParseDate.parsedate(self))
94
- # end
95
- # end
96
- # end
97
- #
98
- # def to_datetime(options = {})
99
- # begin
100
- # # raises an exception if Chronic.parse = nil or if Chronic not defined
101
- # r = Chronic.parse(self,options).send(:to_datetime)
102
- # rescue NameError => e
103
- # r = case
104
- # when self.to_s == "now"
105
- # DateTime.now
106
- # else
107
- # DateTime.parse(self)
108
- # end
109
- # end
110
- # raise RuntimeError, "Invalid Time String (#{self.to_s})" if r == DateTime.new
111
- # return r
112
- # end
113
- #
114
- # def to_date(options={})
115
- # begin
116
- # r = Chronic.parse(self,options).to_date
117
- # rescue
118
- # r = case
119
- # when self == "today"
120
- # Date.today
121
- # when RUBY_VERSION < "1.9"
122
- # Date.civil(*ParseDate.parsedate(self)[0..5].compact)
123
- # else
124
- # Date.parse(self)
125
- # end
126
- # end
127
- # raise RuntimeError, 'Invalid Date String' if r == Date.new
128
- # return r
129
- # end
130
- #
131
- # def datetime(options = {})
132
- # self.to_datetime(options) rescue self.to_time(options)
133
- # end
134
35
  end
@@ -1,3 +1,5 @@
1
+ require 'time'
2
+
1
3
  #
2
4
  # String Extras
3
5
  #
@@ -6,16 +8,13 @@
6
8
  #
7
9
  # in most cases it is better to do something like
8
10
  #
9
- # Unit("1 m").convert_to("ft")
10
- #
11
- # instead of
12
- #
13
- # "1 m".convert_to("ft")
11
+ # @example
12
+ # Unit("1 m").convert_to("ft")
13
+ # instead of
14
+ # "1 m".convert_to("ft")
14
15
  #
15
16
  # to use these methods:
16
17
  # require 'ruby-units/string/extra'
17
-
18
- require 'time'
19
18
  class String
20
19
 
21
20
  #needed for compatibility with Rails, which defines a String.from method
@@ -23,7 +22,11 @@ class String
23
22
  alias :old_from :from
24
23
  end
25
24
 
26
- # "5 min".from("now")
25
+ # @example
26
+ # "5 min".from("now")
27
+ # @param [Time] time_point
28
+ # @return (see Unit#from)
29
+ # @deprecated
27
30
  def from(time_point = ::Time.now)
28
31
  return old_from(time_point) if self.respond_to?(:old_from) && time_point.instance_of?(Integer)
29
32
  warn Kernel.caller.first + " called ruby-units/string#from, which is deprecated. Use Unit(string).from(string) instead"
@@ -32,49 +35,74 @@ class String
32
35
 
33
36
  alias :after :from
34
37
 
38
+ # @example
39
+ # "5 min".from_now
40
+ # @return (see Unit#from)
41
+ # @deprecated
35
42
  def from_now
36
43
  warn Kernel.caller.first + " called ruby-units/string#from_now, which is deprecated. Use Unit(string).from(Time.now) instead"
37
44
  self.from(Time.now)
38
45
  end
39
46
 
40
- # "5 min".ago
47
+ # @example
48
+ # "5 min".ago
49
+ # @return (see Unit#ago)
50
+ # @deprecated
41
51
  def ago
42
52
  warn Kernel.caller.first + " called ruby-units/string#ago, which is deprecated. Use Unit(string).ago instead"
43
53
  self.unit.ago
44
54
  end
45
55
 
56
+ # @example
57
+ # "5 min".before("now")
58
+ # @param [Time] time_point
59
+ # @return (see Unit#before)
60
+ # @deprecated
46
61
  def before(time_point = ::Time.now)
47
62
  warn Kernel.caller.first + " called ruby-units/string#before, which is deprecated. Use Unit(string).before(Time.now) instead"
48
63
  self.unit.before(time_point)
49
64
  end
50
-
65
+
66
+ # @example
67
+ # "5 min".before_now
68
+ # @return (see Unit#before)
69
+ # @deprecated
51
70
  def before_now
52
71
  warn Kernel.caller.first + " called ruby-units/string#before_now, which is deprecated. Use Unit(string).before(Time.now) instead"
53
72
  self.before(Time.now)
54
73
  end
55
74
 
75
+ # @return (see Unit#since)
76
+ # @deprecated
56
77
  def since(time_point = ::Time.now)
57
78
  warn Kernel.caller.first + " called ruby-units/string#since, which is deprecated. Use Unit(string).since(Time.now) instead"
58
79
  self.unit.since(time_point)
59
80
  end
60
81
 
82
+ # @return (see Unit#until)
83
+ # @deprecated
61
84
  def until(time_point = ::Time.now)
62
85
  warn Kernel.caller.first + " called ruby-units/string#until, which is deprecated. Use Unit(string).until(Time.now) instead"
63
86
  self.unit.until(time_point)
64
87
  end
65
88
 
66
-
67
89
  unless String.instance_methods.include?(:to)
90
+ # @deprecated
91
+ # @return (see #convert_to)
68
92
  def to(other)
69
93
  warn "string.to is deprecated, use string.convert_to if you must, but the best would be Unit('unit').convert_to('target unit')"
70
94
  convert_to(other)
71
95
  end
72
96
  end
73
97
 
98
+ # @deprecated
99
+ # @return (see #to_time)
74
100
  def time(options = {})
75
101
  self.to_time(options) rescue self.to_datetime(options)
76
102
  end
77
103
 
104
+ # @deprecated
105
+ # @return [Time]
78
106
  def to_time(options = {})
79
107
  begin
80
108
  #raises exception when Chronic not defined or when it returns a nil (i.e., can't parse the input)
@@ -93,6 +121,8 @@ class String
93
121
  end
94
122
  end
95
123
 
124
+ # @deprecated
125
+ # @return [DateTime]
96
126
  def to_datetime(options = {})
97
127
  begin
98
128
  # raises an exception if Chronic.parse = nil or if Chronic not defined
@@ -109,6 +139,8 @@ class String
109
139
  return r
110
140
  end
111
141
 
142
+ # @deprecated
143
+ # @return [Date]
112
144
  def to_date(options={})
113
145
  begin
114
146
  r = Chronic.parse(self,options).to_date
@@ -126,6 +158,8 @@ class String
126
158
  return r
127
159
  end
128
160
 
161
+ # @deprecated
162
+ # @return (see #to_datetime)
129
163
  def datetime(options = {})
130
164
  self.to_datetime(options) rescue self.to_time(options)
131
165
  end