ruby-units 2.0.1 → 2.1.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 +4 -4
- data/CHANGELOG.txt +3 -0
- data/README.md +48 -1
- data/{Rakefile.rb → Rakefile} +0 -0
- data/VERSION +1 -1
- data/lib/ruby_units/cache.rb +17 -16
- data/lib/ruby_units/configuration.rb +41 -0
- data/lib/ruby_units/date.rb +3 -3
- data/lib/ruby_units/definition.rb +22 -24
- data/lib/ruby_units/math.rb +30 -34
- data/lib/ruby_units/namespaced.rb +1 -0
- data/lib/ruby_units/string.rb +3 -4
- data/lib/ruby_units/time.rb +9 -10
- data/lib/ruby_units/unit.rb +778 -765
- data/lib/ruby_units/unit_definitions/base.rb +42 -45
- data/lib/ruby_units/unit_definitions/prefix.rb +30 -30
- data/lib/ruby_units/unit_definitions/standard.rb +138 -135
- data/lib/ruby_units/version.rb +1 -1
- data/ruby-units.gemspec +34 -27
- metadata +34 -5
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8e6acf899cc64a4b47d9bed66ea695ee59e3d26b
         | 
| 4 | 
            +
              data.tar.gz: 6c04d8f9069b6944cb0ca0f32adf74a722b9036d
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 594ca11e51bcd2090f715ff431059045ec981cf758f9b72771faa8978d1dee8ac3677dc4b78b3552dc9786ffa3c62ee7f377569213dd6b43b5245a4b8ffc3f36
         | 
| 7 | 
            +
              data.tar.gz: 8ce5144320bb529a3b4c6eea632e17a424997f458a1efd18b4a6fa6ec5ceb9c7dd2fbf4f93ce349e528cb745327c118690518370cda3327aa3ecabb50b7c4e5d
         | 
    
        data/CHANGELOG.txt
    CHANGED
    
    | @@ -1,5 +1,8 @@ | |
| 1 1 | 
             
            Change Log for Ruby-units
         | 
| 2 2 | 
             
            =========================
         | 
| 3 | 
            +
            2016-12-28  2.1.0   * add support for ruby 2.4.0
         | 
| 4 | 
            +
                                * allow configuration for optional separator on output
         | 
| 5 | 
            +
                                * Fix issue #105 -- change 'grad' to 'gon'
         | 
| 3 6 | 
             
            2015-11-07  2.0.0   * remove support for ruby versions less than 2.0
         | 
| 4 7 | 
             
                                * remove `.unit` and `.u` from String
         | 
| 5 8 | 
             
                                * remove `.unit` from Date
         | 
    
        data/README.md
    CHANGED
    
    | @@ -118,6 +118,7 @@ Unit.new('1.5 mm').to_s("%0.2f")  # "1.50 mm".  Enter any valid format | |
| 118 118 | 
             
            Unit.new('1.5 mm').to_s("in")     # converts to inches before printing
         | 
| 119 119 | 
             
            Unit.new("2 m").to_s(:ft)         # returns 6'7"
         | 
| 120 120 | 
             
            Unit.new("100 kg").to_s(:lbs)     # returns 220 lbs, 7 oz
         | 
| 121 | 
            +
            Unit.new("100 kg").to_s(:stone)   # returns 15 stone, 10 lb
         | 
| 121 122 | 
             
            ```
         | 
| 122 123 |  | 
| 123 124 | 
             
            Time Helpers
         | 
| @@ -228,9 +229,21 @@ Unit.redefine!("cup") do |cup| | |
| 228 229 | 
             
            end
         | 
| 229 230 | 
             
            ```
         | 
| 230 231 |  | 
| 232 | 
            +
            ### Useful methods
         | 
| 233 | 
            +
             | 
| 234 | 
            +
            1. `scalar` will return the numeric portion of the unit without the attached units
         | 
| 235 | 
            +
            2. `base_scalar` will return the scalar in base units (SI)
         | 
| 236 | 
            +
            3. `units` will return the name of the units (without the scalar)
         | 
| 237 | 
            +
            4. `base` will return the unit converted to base units (SI)
         | 
| 238 | 
            +
             | 
| 239 | 
            +
            ### Storing in a database
         | 
| 240 | 
            +
             | 
| 241 | 
            +
            Units can be stored in a database as either the string representation or in two separate columns defining the scalar and the units.
         | 
| 242 | 
            +
            Note that if sorting by units is desired you will want to ensure that you are storing the scalars in a consistent unit (i.e, the base units).
         | 
| 243 | 
            +
             | 
| 231 244 | 
             
            ### Namespaced Class
         | 
| 232 245 |  | 
| 233 | 
            -
            Sometimes the default class 'Unit' may conflict with other gems or applications. Internally ruby-units defines itself using the RubyUnits namespace. The actual class of a unit is the RubyUnits::Unit. For simplicity and backwards  | 
| 246 | 
            +
            Sometimes the default class 'Unit' may conflict with other gems or applications. Internally ruby-units defines itself using the RubyUnits namespace. The actual class of a unit is the RubyUnits::Unit. For simplicity and backwards compatibility, the '::Unit' class is defined as an alias to '::RubyUnits::Unit'.
         | 
| 234 247 |  | 
| 235 248 | 
             
            To load ruby-units without this alias...
         | 
| 236 249 |  | 
| @@ -245,3 +258,37 @@ gem 'ruby-units', require: 'ruby_units/namespaced' | |
| 245 258 | 
             
            ```
         | 
| 246 259 |  | 
| 247 260 | 
             
            Note: when using the namespaced version, the Unit.new('unit string') helper will not be defined.
         | 
| 261 | 
            +
             | 
| 262 | 
            +
            ### Configuration
         | 
| 263 | 
            +
             | 
| 264 | 
            +
            Configuration options can be set like:
         | 
| 265 | 
            +
             | 
| 266 | 
            +
            ```
         | 
| 267 | 
            +
            RubyUnits.configure do |config|
         | 
| 268 | 
            +
              config.separator = false
         | 
| 269 | 
            +
            end
         | 
| 270 | 
            +
            ```
         | 
| 271 | 
            +
             | 
| 272 | 
            +
            Currently there is only one configuration you can set:
         | 
| 273 | 
            +
             | 
| 274 | 
            +
            1. separator (true/false): should a space be used to separate the scalar from the unit part during output.
         | 
| 275 | 
            +
             | 
| 276 | 
            +
             | 
| 277 | 
            +
            ### NOTES
         | 
| 278 | 
            +
             | 
| 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 | 
            +
            #### Performance vs. Accuracy
         | 
| 290 | 
            +
             | 
| 291 | 
            +
            Ruby units was originally intended to provide a robust and accurate way to do arbitrary unit conversions.  
         | 
| 292 | 
            +
            In some cases, these conversions can result in the creation and garbage collection of a lot of intermediate objects during
         | 
| 293 | 
            +
            calculations.  This in turn can have a negative impact on performance.  The design of ruby-units has emphasized accuracy
         | 
| 294 | 
            +
            over speed.  YMMV if you are doing a lot of math involving units.
         | 
    
        data/{Rakefile.rb → Rakefile}
    RENAMED
    
    | 
            File without changes
         | 
    
        data/VERSION
    CHANGED
    
    | @@ -1 +1 @@ | |
| 1 | 
            -
            2.0 | 
| 1 | 
            +
            2.1.0
         | 
    
        data/lib/ruby_units/cache.rb
    CHANGED
    
    | @@ -1,20 +1,21 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
               | 
| 3 | 
            -
             | 
| 4 | 
            -
             | 
| 5 | 
            -
                 | 
| 6 | 
            -
                  key | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
                   | 
| 11 | 
            -
             | 
| 1 | 
            +
            module RubyUnits
         | 
| 2 | 
            +
              class Unit < Numeric
         | 
| 3 | 
            +
                @@cached_units = {}
         | 
| 4 | 
            +
             | 
| 5 | 
            +
                class Cache
         | 
| 6 | 
            +
                  def self.get(key = nil)
         | 
| 7 | 
            +
                    key.nil? ? @@cached_units : @@cached_units[key]
         | 
| 8 | 
            +
                  end
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                  def self.set(key, value)
         | 
| 11 | 
            +
                    @@cached_units[key] = value
         | 
| 12 | 
            +
                  end
         | 
| 12 13 |  | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 14 | 
            +
                  def self.clear
         | 
| 15 | 
            +
                    @@cached_units = {}
         | 
| 16 | 
            +
                    @@base_unit_cache = {}
         | 
| 17 | 
            +
                    Unit.new(1)
         | 
| 18 | 
            +
                  end
         | 
| 17 19 | 
             
                end
         | 
| 18 | 
            -
                
         | 
| 19 20 | 
             
              end
         | 
| 20 21 | 
             
            end
         | 
| @@ -0,0 +1,41 @@ | |
| 1 | 
            +
            # allow for optional configuration of RubyUnits
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # Usage:
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            #     RubyUnits.configure do |config|
         | 
| 6 | 
            +
            #       config.separator = false
         | 
| 7 | 
            +
            #     end
         | 
| 8 | 
            +
            module RubyUnits
         | 
| 9 | 
            +
              class << self
         | 
| 10 | 
            +
                attr_writer :configuration
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def self.configuration
         | 
| 14 | 
            +
                @configuration ||= Configuration.new
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
             | 
| 17 | 
            +
              def self.reset
         | 
| 18 | 
            +
                @configuration = Configuration.new
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              def self.configure
         | 
| 22 | 
            +
                yield configuration
         | 
| 23 | 
            +
              end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
              # holds actual configuration values for RubyUnits
         | 
| 26 | 
            +
              class Configuration
         | 
| 27 | 
            +
                # used to separate the scalar from the unit when generating output.
         | 
| 28 | 
            +
                # set to nil to prevent adding a space to the string representation of a unit
         | 
| 29 | 
            +
                # separators other than ' ' and '' may work, but you may encounter problems
         | 
| 30 | 
            +
                attr_reader :separator
         | 
| 31 | 
            +
             | 
| 32 | 
            +
                def initialize
         | 
| 33 | 
            +
                  self.separator = true
         | 
| 34 | 
            +
                end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                def separator=(value)
         | 
| 37 | 
            +
                  raise ArgumentError, "configuration 'separator' may only be true or false" unless value.class == TrueClass || value.class == FalseClass
         | 
| 38 | 
            +
                  @separator = value ? ' ' : nil
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
              end
         | 
| 41 | 
            +
            end
         | 
    
        data/lib/ruby_units/date.rb
    CHANGED
    
    | @@ -3,7 +3,7 @@ require 'date' | |
| 3 3 | 
             
            # Allow date objects to do offsets by a time unit
         | 
| 4 4 | 
             
            # Date.today + Unit.new("1 week") => gives today+1 week
         | 
| 5 5 | 
             
            class Date
         | 
| 6 | 
            -
               | 
| 6 | 
            +
              alias unit_date_add +
         | 
| 7 7 | 
             
              # @param [Object] other
         | 
| 8 8 | 
             
              # @return [Unit]
         | 
| 9 9 | 
             
              def +(other)
         | 
| @@ -16,7 +16,7 @@ class Date | |
| 16 16 | 
             
                end
         | 
| 17 17 | 
             
              end
         | 
| 18 18 |  | 
| 19 | 
            -
               | 
| 19 | 
            +
              alias unit_date_sub -
         | 
| 20 20 | 
             
              # @param [Object] other
         | 
| 21 21 | 
             
              # @return [Unit]
         | 
| 22 22 | 
             
              def -(other)
         | 
| @@ -46,7 +46,7 @@ class Date | |
| 46 46 | 
             
              end
         | 
| 47 47 | 
             
              # :nocov_19:
         | 
| 48 48 |  | 
| 49 | 
            -
               | 
| 49 | 
            +
              alias units_datetime_inspect inspect
         | 
| 50 50 | 
             
              # @deprecated
         | 
| 51 51 | 
             
              def inspect(dump = false)
         | 
| 52 52 | 
             
                return units_datetime_inspect if dump
         | 
| @@ -1,8 +1,6 @@ | |
| 1 1 | 
             
            class RubyUnits::Unit < Numeric
         | 
| 2 | 
            -
             | 
| 3 2 | 
             
              # Handle the definition of units
         | 
| 4 3 | 
             
              class Definition
         | 
| 5 | 
            -
             | 
| 6 4 | 
             
                # @return [Array]
         | 
| 7 5 | 
             
                attr_writer :aliases
         | 
| 8 6 |  | 
| @@ -30,14 +28,14 @@ class RubyUnits::Unit < Numeric | |
| 30 28 | 
             
                #     unit.definition = RubyUnits::Unit.new("7/4 inches")
         | 
| 31 29 | 
             
                #   end
         | 
| 32 30 | 
             
                #
         | 
| 33 | 
            -
                def initialize( | 
| 31 | 
            +
                def initialize(name, definition = [])
         | 
| 34 32 | 
             
                  yield self if block_given?
         | 
| 35 | 
            -
                  self.name     ||=  | 
| 36 | 
            -
                  @aliases      ||= ( | 
| 37 | 
            -
                  @scalar       ||=  | 
| 38 | 
            -
                  @kind         ||=  | 
| 39 | 
            -
                  @numerator    ||=  | 
| 40 | 
            -
                  @denominator  ||=  | 
| 33 | 
            +
                  self.name     ||= name.gsub(/[<>]/, '')
         | 
| 34 | 
            +
                  @aliases      ||= (definition[0] || [name])
         | 
| 35 | 
            +
                  @scalar       ||= definition[1]
         | 
| 36 | 
            +
                  @kind         ||= definition[2]
         | 
| 37 | 
            +
                  @numerator    ||= definition[3] || RubyUnits::Unit::UNITY_ARRAY
         | 
| 38 | 
            +
                  @denominator  ||= definition[4] || RubyUnits::Unit::UNITY_ARRAY
         | 
| 41 39 | 
             
                  @display_name ||= @aliases.first
         | 
| 42 40 | 
             
                end
         | 
| 43 41 |  | 
| @@ -46,14 +44,14 @@ class RubyUnits::Unit < Numeric | |
| 46 44 | 
             
                # @return [String, nil]
         | 
| 47 45 | 
             
                # @todo refactor Unit and Unit::Definition so we don't need to wrap units with angle brackets
         | 
| 48 46 | 
             
                def name
         | 
| 49 | 
            -
                  "<#{@name}>" if  | 
| 47 | 
            +
                  "<#{@name}>" if defined?(@name) && @name
         | 
| 50 48 | 
             
                end
         | 
| 51 49 |  | 
| 52 50 | 
             
                # set the name, strip off '<' and '>'
         | 
| 53 51 | 
             
                # @param [String]
         | 
| 54 52 | 
             
                # @return [String]
         | 
| 55 | 
            -
                def name=( | 
| 56 | 
            -
                  @name =  | 
| 53 | 
            +
                def name=(name_value)
         | 
| 54 | 
            +
                  @name = name_value.gsub(/[<>]/, '')
         | 
| 57 55 | 
             
                end
         | 
| 58 56 |  | 
| 59 57 | 
             
                # alias array must contain the name of the unit and entries must be unique
         | 
| @@ -66,35 +64,35 @@ class RubyUnits::Unit < Numeric | |
| 66 64 | 
             
                # @param [Unit] unit
         | 
| 67 65 | 
             
                # @return [Unit::Definition]
         | 
| 68 66 | 
             
                def definition=(unit)
         | 
| 69 | 
            -
                   | 
| 70 | 
            -
                  @scalar | 
| 71 | 
            -
                  @kind | 
| 72 | 
            -
                  @numerator | 
| 73 | 
            -
                  @denominator | 
| 67 | 
            +
                  base         = unit.to_base
         | 
| 68 | 
            +
                  @scalar      = base.scalar
         | 
| 69 | 
            +
                  @kind        = base.kind
         | 
| 70 | 
            +
                  @numerator   = base.numerator
         | 
| 71 | 
            +
                  @denominator = base.denominator
         | 
| 74 72 | 
             
                  self
         | 
| 75 73 | 
             
                end
         | 
| 76 74 |  | 
| 77 75 | 
             
                # is this definition for a prefix?
         | 
| 78 76 | 
             
                # @return [Boolean]
         | 
| 79 77 | 
             
                def prefix?
         | 
| 80 | 
            -
                   | 
| 78 | 
            +
                  kind == :prefix
         | 
| 81 79 | 
             
                end
         | 
| 82 80 |  | 
| 83 81 | 
             
                # Is this definition the unity definition?
         | 
| 84 82 | 
             
                # @return [Boolean]
         | 
| 85 83 | 
             
                def unity?
         | 
| 86 | 
            -
                   | 
| 84 | 
            +
                  prefix? && scalar == 1
         | 
| 87 85 | 
             
                end
         | 
| 88 86 |  | 
| 89 87 | 
             
                # is this a base unit?
         | 
| 90 88 | 
             
                # units are base units if the scalar is one, and the unit is defined in terms of itself.
         | 
| 91 89 | 
             
                # @return [Boolean]
         | 
| 92 90 | 
             
                def base?
         | 
| 93 | 
            -
                  ( | 
| 94 | 
            -
             | 
| 95 | 
            -
             | 
| 96 | 
            -
             | 
| 97 | 
            -
             | 
| 91 | 
            +
                  (denominator     == RubyUnits::Unit::UNITY_ARRAY) &&
         | 
| 92 | 
            +
                    (numerator       != RubyUnits::Unit::UNITY_ARRAY) &&
         | 
| 93 | 
            +
                    (numerator.size  == 1) &&
         | 
| 94 | 
            +
                    (scalar          == 1) &&
         | 
| 95 | 
            +
                    (numerator.first == self.name)
         | 
| 98 96 | 
             
                end
         | 
| 99 97 | 
             
              end
         | 
| 100 98 | 
             
            end
         | 
    
        data/lib/ruby_units/math.rb
    CHANGED
    
    | @@ -1,14 +1,13 @@ | |
| 1 1 | 
             
            require 'mathn'
         | 
| 2 2 |  | 
| 3 | 
            -
            # Math will convert unit objects to radians and then attempt to use the value for | 
| 4 | 
            -
            # trigonometric functions. | 
| 3 | 
            +
            # Math will convert unit objects to radians and then attempt to use the value for
         | 
| 4 | 
            +
            # trigonometric functions.
         | 
| 5 5 | 
             
            module Math
         | 
| 6 | 
            -
             | 
| 7 | 
            -
              alias :unit_sqrt :sqrt
         | 
| 6 | 
            +
              alias unit_sqrt sqrt
         | 
| 8 7 | 
             
              # @return [Numeric]
         | 
| 9 8 | 
             
              def sqrt(n)
         | 
| 10 | 
            -
                if RubyUnits::Unit | 
| 11 | 
            -
                  (n** | 
| 9 | 
            +
                if n.is_a?(RubyUnits::Unit)
         | 
| 10 | 
            +
                  (n**Rational(1, 2)).to_unit
         | 
| 12 11 | 
             
                else
         | 
| 13 12 | 
             
                  unit_sqrt(n)
         | 
| 14 13 | 
             
                end
         | 
| @@ -19,12 +18,12 @@ module Math | |
| 19 18 | 
             
              module_function :sqrt
         | 
| 20 19 |  | 
| 21 20 | 
             
              #:nocov:
         | 
| 22 | 
            -
              if  | 
| 23 | 
            -
                alias  | 
| 21 | 
            +
              if respond_to?(:cbrt)
         | 
| 22 | 
            +
                alias unit_cbrt cbrt
         | 
| 24 23 | 
             
                # @return [Numeric]
         | 
| 25 24 | 
             
                def cbrt(n)
         | 
| 26 25 | 
             
                  if RubyUnits::Unit === n
         | 
| 27 | 
            -
                    (n** | 
| 26 | 
            +
                    (n**Rational(1, 3)).to_unit
         | 
| 28 27 | 
             
                  else
         | 
| 29 28 | 
             
                    unit_cbrt(n)
         | 
| 30 29 | 
             
                  end
         | 
| @@ -35,18 +34,18 @@ module Math | |
| 35 34 | 
             
                module_function :cbrt
         | 
| 36 35 | 
             
              end
         | 
| 37 36 | 
             
              #:nocov:
         | 
| 38 | 
            -
             | 
| 39 | 
            -
              alias  | 
| 37 | 
            +
             | 
| 38 | 
            +
              alias unit_sin sin
         | 
| 40 39 | 
             
              # @return [Numeric]
         | 
| 41 40 | 
             
              def sin(n)
         | 
| 42 | 
            -
             | 
| 41 | 
            +
                RubyUnits::Unit === n ? unit_sin(n.convert_to('radian').scalar) : unit_sin(n)
         | 
| 43 42 | 
             
              end
         | 
| 44 43 | 
             
              # @return [Numeric]
         | 
| 45 44 | 
             
              module_function :unit_sin
         | 
| 46 45 | 
             
              # @return [Numeric]
         | 
| 47 46 | 
             
              module_function :sin
         | 
| 48 47 |  | 
| 49 | 
            -
              alias  | 
| 48 | 
            +
              alias unit_cos cos
         | 
| 50 49 | 
             
              # @return [Numeric]
         | 
| 51 50 | 
             
              def cos(n)
         | 
| 52 51 | 
             
                RubyUnits::Unit === n ? unit_cos(n.convert_to('radian').scalar) : unit_cos(n)
         | 
| @@ -55,8 +54,8 @@ module Math | |
| 55 54 | 
             
              module_function :unit_cos
         | 
| 56 55 | 
             
              # @return [Numeric]
         | 
| 57 56 | 
             
              module_function :cos
         | 
| 58 | 
            -
             | 
| 59 | 
            -
              alias  | 
| 57 | 
            +
             | 
| 58 | 
            +
              alias unit_sinh sinh
         | 
| 60 59 | 
             
              # @return [Numeric]
         | 
| 61 60 | 
             
              def sinh(n)
         | 
| 62 61 | 
             
                RubyUnits::Unit === n ? unit_sinh(n.convert_to('radian').scalar) : unit_sinh(n)
         | 
| @@ -66,7 +65,7 @@ module Math | |
| 66 65 | 
             
              # @return [Numeric]
         | 
| 67 66 | 
             
              module_function :sinh
         | 
| 68 67 |  | 
| 69 | 
            -
              alias  | 
| 68 | 
            +
              alias unit_cosh cosh
         | 
| 70 69 | 
             
              # @return [Numeric]
         | 
| 71 70 | 
             
              def cosh(n)
         | 
| 72 71 | 
             
                RubyUnits::Unit === n ? unit_cosh(n.convert_to('radian').scalar) : unit_cosh(n)
         | 
| @@ -76,17 +75,17 @@ module Math | |
| 76 75 | 
             
              # @return [Numeric]
         | 
| 77 76 | 
             
              module_function :cosh
         | 
| 78 77 |  | 
| 79 | 
            -
              alias  | 
| 78 | 
            +
              alias unit_tan tan
         | 
| 80 79 | 
             
              # @return [Numeric]
         | 
| 81 80 | 
             
              def tan(n)
         | 
| 82 | 
            -
             | 
| 81 | 
            +
                RubyUnits::Unit === n ? unit_tan(n.convert_to('radian').scalar) : unit_tan(n)
         | 
| 83 82 | 
             
              end
         | 
| 84 83 | 
             
              # @return [Numeric]
         | 
| 85 84 | 
             
              module_function :tan
         | 
| 86 85 | 
             
              # @return [Numeric]
         | 
| 87 86 | 
             
              module_function :unit_tan
         | 
| 88 87 |  | 
| 89 | 
            -
              alias  | 
| 88 | 
            +
              alias unit_tanh tanh
         | 
| 90 89 | 
             
              # @return [Numeric]
         | 
| 91 90 | 
             
              def tanh(n)
         | 
| 92 91 | 
             
                RubyUnits::Unit === n ? unit_tanh(n.convert_to('radian').scalar) : unit_tanh(n)
         | 
| @@ -96,36 +95,33 @@ module Math | |
| 96 95 | 
             
              # @return [Numeric]
         | 
| 97 96 | 
             
              module_function :tanh
         | 
| 98 97 |  | 
| 99 | 
            -
              alias  | 
| 98 | 
            +
              alias unit_hypot hypot
         | 
| 100 99 | 
             
              # Convert parameters to consistent units and perform the function
         | 
| 101 100 | 
             
              # @return [Numeric]
         | 
| 102 | 
            -
              def hypot(x,y)
         | 
| 101 | 
            +
              def hypot(x, y)
         | 
| 103 102 | 
             
                if RubyUnits::Unit === x && RubyUnits::Unit === y
         | 
| 104 | 
            -
                  (x**2 + y**2)**(1/2)
         | 
| 103 | 
            +
                  (x**2 + y**2)**(1 / 2)
         | 
| 105 104 | 
             
                else
         | 
| 106 | 
            -
                  unit_hypot(x,y)
         | 
| 105 | 
            +
                  unit_hypot(x, y)
         | 
| 107 106 | 
             
                end
         | 
| 108 107 | 
             
              end
         | 
| 109 108 | 
             
              # @return [Numeric]
         | 
| 110 109 | 
             
              module_function :unit_hypot
         | 
| 111 110 | 
             
              # @return [Numeric]
         | 
| 112 111 | 
             
              module_function :hypot
         | 
| 113 | 
            -
             | 
| 114 | 
            -
              alias  | 
| 115 | 
            -
              # @return [Numeric]
         | 
| 116 | 
            -
              def atan2(x,y)
         | 
| 117 | 
            -
                 | 
| 118 | 
            -
                 | 
| 119 | 
            -
                   | 
| 120 | 
            -
                when (x.is_a?(RubyUnits::Unit) && y.is_a?(RubyUnits::Unit)) && (x =~ y)
         | 
| 121 | 
            -
                  Math::unit_atan2(x.base_scalar, y.base_scalar)
         | 
| 112 | 
            +
             | 
| 113 | 
            +
              alias unit_atan2 atan2
         | 
| 114 | 
            +
              # @return [Numeric]
         | 
| 115 | 
            +
              def atan2(x, y)
         | 
| 116 | 
            +
                raise ArgumentError, 'Incompatible RubyUnits::Units' if (x.is_a?(RubyUnits::Unit) && y.is_a?(RubyUnits::Unit)) && !x.compatible?(y)
         | 
| 117 | 
            +
                if (x.is_a?(RubyUnits::Unit) && y.is_a?(RubyUnits::Unit)) && x.compatible?(y)
         | 
| 118 | 
            +
                  Math.unit_atan2(x.base_scalar, y.base_scalar)
         | 
| 122 119 | 
             
                else
         | 
| 123 | 
            -
                  Math | 
| 120 | 
            +
                  Math.unit_atan2(x, y)
         | 
| 124 121 | 
             
                end
         | 
| 125 122 | 
             
              end
         | 
| 126 123 | 
             
              # @return [Numeric]
         | 
| 127 124 | 
             
              module_function :unit_atan2
         | 
| 128 125 | 
             
              # @return [Numeric]
         | 
| 129 126 | 
             
              module_function :atan2
         | 
| 130 | 
            -
               
         | 
| 131 127 | 
             
            end
         | 
| @@ -3,6 +3,7 @@ $LOAD_PATH << File.dirname(__FILE__) | |
| 3 3 |  | 
| 4 4 | 
             
            # require_relative this file to avoid creating an class alias from Unit to RubyUnits::Unit
         | 
| 5 5 | 
             
            require_relative 'version'
         | 
| 6 | 
            +
            require_relative 'configuration'
         | 
| 6 7 | 
             
            require_relative 'definition'
         | 
| 7 8 | 
             
            require_relative 'cache'
         | 
| 8 9 | 
             
            require_relative 'array'
         | 
    
        data/lib/ruby_units/string.rb
    CHANGED
    
    | @@ -6,19 +6,18 @@ class String | |
| 6 6 | 
             
                other ? RubyUnits::Unit.new(self).convert_to(other) : RubyUnits::Unit.new(self)
         | 
| 7 7 | 
             
              end
         | 
| 8 8 |  | 
| 9 | 
            -
               | 
| 9 | 
            +
              alias original_format %
         | 
| 10 10 | 
             
              # format unit output using formating codes
         | 
| 11 11 | 
             
              # @example '%0.2f' % '1 mm'.to_unit => '1.00 mm'
         | 
| 12 12 | 
             
              # @return [String]
         | 
| 13 13 | 
             
              def format_with_unit(*other)
         | 
| 14 | 
            -
                 | 
| 15 | 
            -
                when other.first.is_a?(RubyUnits::Unit)
         | 
| 14 | 
            +
                if other.first.is_a?(RubyUnits::Unit)
         | 
| 16 15 | 
             
                  other.first.to_s(self)
         | 
| 17 16 | 
             
                else
         | 
| 18 17 | 
             
                  original_format(*other)
         | 
| 19 18 | 
             
                end
         | 
| 20 19 | 
             
              end
         | 
| 21 | 
            -
               | 
| 20 | 
            +
              alias % format_with_unit
         | 
| 22 21 |  | 
| 23 22 | 
             
              # @param (see RubyUnits::Unit#convert_to)
         | 
| 24 23 | 
             
              # @return (see RubyUnits::Unit#convert_to)
         | 
    
        data/lib/ruby_units/time.rb
    CHANGED
    
    | @@ -5,7 +5,6 @@ require 'time' | |
| 5 5 | 
             
            # is in years, decades, or centuries.  This leads to less precise values, but ones that match the
         | 
| 6 6 | 
             
            # calendar better.
         | 
| 7 7 | 
             
            class Time
         | 
| 8 | 
            -
             | 
| 9 8 | 
             
              class << self
         | 
| 10 9 | 
             
                alias unit_time_at at
         | 
| 11 10 | 
             
              end
         | 
| @@ -15,15 +14,15 @@ class Time | |
| 15 14 | 
             
              # @param [Time] arg
         | 
| 16 15 | 
             
              # @param [Integer] ms
         | 
| 17 16 | 
             
              # @return [RubyUnits::Unit, Time]
         | 
| 18 | 
            -
              def self.at(arg, ms=nil)
         | 
| 17 | 
            +
              def self.at(arg, ms = nil)
         | 
| 19 18 | 
             
                case arg
         | 
| 20 19 | 
             
                when Time
         | 
| 21 20 | 
             
                  unit_time_at(arg)
         | 
| 22 21 | 
             
                when RubyUnits::Unit
         | 
| 23 22 | 
             
                  if ms
         | 
| 24 | 
            -
                    unit_time_at(arg.convert_to( | 
| 23 | 
            +
                    unit_time_at(arg.convert_to('s').scalar, ms)
         | 
| 25 24 | 
             
                  else
         | 
| 26 | 
            -
                    unit_time_at(arg.convert_to( | 
| 25 | 
            +
                    unit_time_at(arg.convert_to('s').scalar)
         | 
| 27 26 | 
             
                  end
         | 
| 28 27 | 
             
                else
         | 
| 29 28 | 
             
                  ms.nil? ? unit_time_at(arg) : unit_time_at(arg, ms)
         | 
| @@ -41,16 +40,16 @@ class Time | |
| 41 40 | 
             
                # :nocov_19:
         | 
| 42 41 | 
             
              end
         | 
| 43 42 |  | 
| 44 | 
            -
              alias  | 
| 43 | 
            +
              alias unit_add +
         | 
| 45 44 | 
             
              # @return [RubyUnits::Unit, Time]
         | 
| 46 45 | 
             
              def +(other)
         | 
| 47 46 | 
             
                case other
         | 
| 48 47 | 
             
                when RubyUnits::Unit
         | 
| 49 | 
            -
                  other = other.convert_to('d').round.convert_to('s') if  | 
| 48 | 
            +
                  other = other.convert_to('d').round.convert_to('s') if %w(y decade century).include? other.units
         | 
| 50 49 | 
             
                  begin
         | 
| 51 50 | 
             
                    unit_add(other.convert_to('s').scalar)
         | 
| 52 51 | 
             
                  rescue RangeError
         | 
| 53 | 
            -
                     | 
| 52 | 
            +
                    to_datetime + other
         | 
| 54 53 | 
             
                  end
         | 
| 55 54 | 
             
                else
         | 
| 56 55 | 
             
                  unit_add(other)
         | 
| @@ -64,17 +63,17 @@ class Time | |
| 64 63 | 
             
                Time.now + duration.to_unit
         | 
| 65 64 | 
             
              end
         | 
| 66 65 |  | 
| 67 | 
            -
              alias  | 
| 66 | 
            +
              alias unit_sub -
         | 
| 68 67 |  | 
| 69 68 | 
             
              # @return [RubyUnits::Unit, Time]
         | 
| 70 69 | 
             
              def -(other)
         | 
| 71 70 | 
             
                case other
         | 
| 72 71 | 
             
                when RubyUnits::Unit
         | 
| 73 | 
            -
                  other = other.convert_to('d').round.convert_to('s') if  | 
| 72 | 
            +
                  other = other.convert_to('d').round.convert_to('s') if %w(y decade century).include? other.units
         | 
| 74 73 | 
             
                  begin
         | 
| 75 74 | 
             
                    unit_sub(other.convert_to('s').scalar)
         | 
| 76 75 | 
             
                  rescue RangeError
         | 
| 77 | 
            -
                     | 
| 76 | 
            +
                    send(:to_datetime) - other
         | 
| 78 77 | 
             
                  end
         | 
| 79 78 | 
             
                else
         | 
| 80 79 | 
             
                  unit_sub(other)
         |