ruby-units 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8e6acf899cc64a4b47d9bed66ea695ee59e3d26b
4
- data.tar.gz: 6c04d8f9069b6944cb0ca0f32adf74a722b9036d
3
+ metadata.gz: 448201b21f6913329bfbd81fff22ea949e74ba81
4
+ data.tar.gz: 1021947fecb0fbd41a2cda3dcce5d1a16a31cf61
5
5
  SHA512:
6
- metadata.gz: 594ca11e51bcd2090f715ff431059045ec981cf758f9b72771faa8978d1dee8ac3677dc4b78b3552dc9786ffa3c62ee7f377569213dd6b43b5245a4b8ffc3f36
7
- data.tar.gz: 8ce5144320bb529a3b4c6eea632e17a424997f458a1efd18b4a6fa6ec5ceb9c7dd2fbf4f93ce349e528cb745327c118690518370cda3327aa3ecabb50b7c4e5d
6
+ metadata.gz: 73e1a0a5ff0bf2c7cad7313296f1be2cf666394be7697e82ef0daf8c0d15ce8973ba2a9c4a40589d7bbdf381d5665fc71f237547ef6e10e19303e45fb36457c1
7
+ data.tar.gz: 5a41f0e985f8cc118674a29e64fc8b66b9c0cebd81bc622f4986469b0c5fe994c7276204fe1fcd87c81d63ce1e681d8a12f46ded7057f0f127b94ed56f185879
data/README.md CHANGED
@@ -7,6 +7,13 @@ Kevin C. Olbrich, Ph.D.
7
7
 
8
8
  Project page: [http://github.com/olbrich/ruby-units](http://github.com/olbrich/ruby-units)
9
9
 
10
+ Notes
11
+ -----
12
+
13
+ This version removes 'mathn' as a dependency. Mathn alters the behavior of some mathematical operators, which
14
+ frequently causes unexpected behavior and can be a source of difficult to diagnose bugs. Mathn is also scheduled to be removed from
15
+ the Ruby standard library.
16
+
10
17
  Introduction
11
18
  ------------
12
19
 
@@ -276,16 +283,6 @@ Currently there is only one configuration you can set:
276
283
 
277
284
  ### NOTES
278
285
 
279
- #### Mathn
280
-
281
- Note that the current implementation of ruby-units requires 'mathn' from the ruby standard library.
282
- This tends to change the behavior of integer math in ways that many people do not expect, and can be the source
283
- of numerous bugs and odd behaviors. If you encounter what appears to be a bug in your code that seems to be related
284
-
285
- to the use of ruby-units, try to reproduce the bug by just including 'mathn' by itself.
286
-
287
- If you identify a bug in a gem or code that uses mathn, please file a bug report or create a pull request to fix it.
288
-
289
286
  #### Performance vs. Accuracy
290
287
 
291
288
  Ruby units was originally intended to provide a robust and accurate way to do arbitrary unit conversions.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.1.0
1
+ 2.2.0
@@ -1,5 +1,3 @@
1
- require 'mathn'
2
-
3
1
  # Math will convert unit objects to radians and then attempt to use the value for
4
2
  # trigonometric functions.
5
3
  module Math
@@ -100,7 +98,7 @@ module Math
100
98
  # @return [Numeric]
101
99
  def hypot(x, y)
102
100
  if RubyUnits::Unit === x && RubyUnits::Unit === y
103
- (x**2 + y**2)**(1 / 2)
101
+ (x**2 + y**2)**Rational(1, 2)
104
102
  else
105
103
  unit_hypot(x, y)
106
104
  end
@@ -587,23 +587,23 @@ module RubyUnits
587
587
 
588
588
  num = []
589
589
  den = []
590
- q = 1
591
- @numerator.compact.each do |unit|
592
- if @@prefix_values[unit]
593
- q *= @@prefix_values[unit]
590
+ q = Rational(1)
591
+ @numerator.compact.each do |num_unit|
592
+ if @@prefix_values[num_unit]
593
+ q *= @@prefix_values[num_unit]
594
594
  else
595
- q *= @@unit_values[unit][:scalar] if @@unit_values[unit]
596
- num << @@unit_values[unit][:numerator] if @@unit_values[unit] && @@unit_values[unit][:numerator]
597
- den << @@unit_values[unit][:denominator] if @@unit_values[unit] && @@unit_values[unit][:denominator]
595
+ q *= @@unit_values[num_unit][:scalar] if @@unit_values[num_unit]
596
+ num << @@unit_values[num_unit][:numerator] if @@unit_values[num_unit] && @@unit_values[num_unit][:numerator]
597
+ den << @@unit_values[num_unit][:denominator] if @@unit_values[num_unit] && @@unit_values[num_unit][:denominator]
598
598
  end
599
599
  end
600
- @denominator.compact.each do |unit|
601
- if @@prefix_values[unit]
602
- q /= @@prefix_values[unit]
600
+ @denominator.compact.each do |num_unit|
601
+ if @@prefix_values[num_unit]
602
+ q /= @@prefix_values[num_unit]
603
603
  else
604
- q /= @@unit_values[unit][:scalar] if @@unit_values[unit]
605
- den << @@unit_values[unit][:numerator] if @@unit_values[unit] && @@unit_values[unit][:numerator]
606
- num << @@unit_values[unit][:denominator] if @@unit_values[unit] && @@unit_values[unit][:denominator]
604
+ q /= @@unit_values[num_unit][:scalar] if @@unit_values[num_unit]
605
+ den << @@unit_values[num_unit][:numerator] if @@unit_values[num_unit] && @@unit_values[num_unit][:numerator]
606
+ num << @@unit_values[num_unit][:denominator] if @@unit_values[num_unit] && @@unit_values[num_unit][:denominator]
607
607
  end
608
608
  end
609
609
 
@@ -833,7 +833,7 @@ module RubyUnits
833
833
  RubyUnits::Unit.new(scalar: (other.scalar + convert_to(other.temperature_scale).scalar), numerator: other.numerator, denominator: other.denominator, signature: other.signature)
834
834
  end
835
835
  else
836
- @q ||= ((@@cached_units[units].scalar / @@cached_units[units].base_scalar) rescue units.to_unit.to_base.scalar)
836
+ @q ||= (Rational(@@cached_units[units].scalar, @@cached_units[units].base_scalar) rescue units.to_unit.to_base.scalar)
837
837
  RubyUnits::Unit.new(scalar: (base_scalar + other.base_scalar) * @q, numerator: @numerator, denominator: @denominator, signature: @signature)
838
838
  end
839
839
  else
@@ -870,7 +870,7 @@ module RubyUnits
870
870
  elsif other.temperature?
871
871
  raise ArgumentError, 'Cannot subtract a temperature from a differential degree unit'
872
872
  else
873
- @q ||= ((@@cached_units[units].scalar / @@cached_units[units].base_scalar) rescue (units.to_unit.scalar / units.to_unit.to_base.scalar))
873
+ @q ||= (Rational(@@cached_units[units].scalar, @@cached_units[units].base_scalar) rescue Rational(units.to_unit.scalar, units.to_unit.to_base.scalar))
874
874
  RubyUnits::Unit.new(scalar: (base_scalar - other.base_scalar) * @q, numerator: @numerator, denominator: @denominator, signature: @signature)
875
875
  end
876
876
  else
@@ -914,12 +914,16 @@ module RubyUnits
914
914
  when Unit
915
915
  raise ZeroDivisionError if other.zero?
916
916
  raise ArgumentError, 'Cannot divide with temperatures' if [other, self].any?(&:temperature?)
917
- opts = RubyUnits::Unit.eliminate_terms(@scalar / other.scalar, @numerator + other.denominator, @denominator + other.numerator)
917
+ sc = Rational(@scalar, other.scalar)
918
+ sc = sc.numerator if sc.denominator == 1
919
+ opts = RubyUnits::Unit.eliminate_terms(sc, @numerator + other.denominator, @denominator + other.numerator)
918
920
  opts[:signature] = @signature - other.signature
919
921
  RubyUnits::Unit.new(opts)
920
922
  when Numeric
921
923
  raise ZeroDivisionError if other.zero?
922
- RubyUnits::Unit.new(scalar: @scalar / other, numerator: @numerator, denominator: @denominator, signature: @signature)
924
+ sc = Rational(@scalar, other)
925
+ sc = sc.numerator if sc.denominator == 1
926
+ RubyUnits::Unit.new(scalar: sc, numerator: @numerator, denominator: @denominator, signature: @signature)
923
927
  else
924
928
  x, y = coerce(other)
925
929
  y / x
@@ -972,11 +976,11 @@ module RubyUnits
972
976
  return power(other)
973
977
  when Float
974
978
  return self**other.to_i if other == other.to_i
975
- valid = (1..9).map { |x| 1 / x }
979
+ valid = (1..9).map { |n| Rational(1, n) }
976
980
  raise ArgumentError, 'Not a n-th root (1..9), use 1/n' unless valid.include? other.abs
977
- return root((1 / other).to_int)
981
+ return root(Rational(1, other).to_int)
978
982
  when Complex
979
- raise ArgumentError, 'exponentiation of complex numbers is not yet supported.'
983
+ raise ArgumentError, 'exponentiation of complex numbers is not supported.'
980
984
  else
981
985
  raise ArgumentError, 'Invalid Exponent'
982
986
  end
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: ruby-units 2.1.0 ruby lib
5
+ # stub: ruby-units 2.2.0 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "ruby-units".freeze
9
- s.version = "2.1.0"
9
+ s.version = "2.2.0"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0".freeze) if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib".freeze]
13
13
  s.authors = ["Kevin Olbrich, Ph.D.".freeze]
14
- s.date = "2016-12-30"
14
+ s.date = "2017-08-07"
15
15
  s.description = "Provides classes and methods to perform unit math and conversions".freeze
16
16
  s.email = ["kevin.olbrich+ruby_units@gmail.com".freeze]
17
17
  s.extra_rdoc_files = [
@@ -45,7 +45,7 @@ Gem::Specification.new do |s|
45
45
  ]
46
46
  s.homepage = "https://github.com/olbrich/ruby-units".freeze
47
47
  s.licenses = ["MIT".freeze]
48
- s.rubygems_version = "2.6.8".freeze
48
+ s.rubygems_version = "2.6.11".freeze
49
49
  s.summary = "A class that performs unit conversions and unit math".freeze
50
50
 
51
51
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby-units
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kevin Olbrich, Ph.D.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-12-30 00:00:00.000000000 Z
11
+ date: 2017-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -146,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
146
146
  version: '0'
147
147
  requirements: []
148
148
  rubyforge_project:
149
- rubygems_version: 2.6.8
149
+ rubygems_version: 2.6.11
150
150
  signing_key:
151
151
  specification_version: 4
152
152
  summary: A class that performs unit conversions and unit math