ruby-units 0.3.4 → 0.3.5
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.
- data/{CHANGELOG → CHANGELOG.txt} +3 -1
- data/{LICENSE → LICENSE.txt} +0 -0
- data/Manifest.txt +9 -0
- data/{README → README.txt} +2 -1
- data/Rakefile +21 -0
- data/lib/ruby-units.rb +25 -17
- data/test/test_ruby-units.rb +21 -7
- metadata +22 -12
    
        data/{CHANGELOG → CHANGELOG.txt}
    RENAMED
    
    
    
        data/{LICENSE → LICENSE.txt}
    RENAMED
    
    | 
            File without changes
         | 
    
        data/Manifest.txt
    ADDED
    
    
    
        data/{README → README.txt}
    RENAMED
    
    
    
        data/Rakefile
    ADDED
    
    | @@ -0,0 +1,21 @@ | |
| 1 | 
            +
            require 'rubygems'
         | 
| 2 | 
            +
            require 'hoe'
         | 
| 3 | 
            +
            require './lib/ruby-units.rb'
         | 
| 4 | 
            +
            require 'rcov/rcovtask'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            Rcov::RcovTask.new do |t|
         | 
| 7 | 
            +
              t.test_files = FileList['test/test*.rb']
         | 
| 8 | 
            +
              #t.verbose = true     # uncomment to see the executed command
         | 
| 9 | 
            +
            end
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Hoe.new('ruby-units', Unit::VERSION) do |p|
         | 
| 12 | 
            +
              p.rubyforge_name = 'ruby-units'
         | 
| 13 | 
            +
              p.summary = %q{A model that performs unit conversions and unit math}
         | 
| 14 | 
            +
              p.email = 'kevin.olbrich+ruby_units@gmail.com'
         | 
| 15 | 
            +
              p.url = 'http://rubyforge.org/projects/ruby-units'
         | 
| 16 | 
            +
              p.description = "This library handles unit conversions and unit math"
         | 
| 17 | 
            +
              p.changes = p.paragraphs_of('CHANGELOG.txt', 0..1).join("\n\n")
         | 
| 18 | 
            +
              p.author = 'Kevin Olbrich, Ph.D'
         | 
| 19 | 
            +
            end
         | 
| 20 | 
            +
             | 
| 21 | 
            +
            # vim: syntax=Ruby
         | 
    
        data/lib/ruby-units.rb
    CHANGED
    
    | @@ -2,7 +2,7 @@ require 'mathn' | |
| 2 2 | 
             
            require 'rational'
         | 
| 3 3 | 
             
            require 'date'
         | 
| 4 4 | 
             
            require 'parsedate'
         | 
| 5 | 
            -
            # = Ruby Units 0.3. | 
| 5 | 
            +
            # = Ruby Units 0.3.5
         | 
| 6 6 | 
             
            #
         | 
| 7 7 | 
             
            # Copyright 2006 by Kevin C. Olbrich, Ph.D.
         | 
| 8 8 | 
             
            # 
         | 
| @@ -40,7 +40,7 @@ require 'parsedate' | |
| 40 40 | 
             
            class Unit < Numeric
         | 
| 41 41 | 
             
              require 'units'
         | 
| 42 42 | 
             
              # pre-generate hashes from unit definitions for performance.  
         | 
| 43 | 
            -
              VERSION = '0.3. | 
| 43 | 
            +
              VERSION = '0.3.5'
         | 
| 44 44 | 
             
              @@USER_DEFINITIONS = {}
         | 
| 45 45 | 
             
              @@PREFIX_VALUES = {}
         | 
| 46 46 | 
             
              @@PREFIX_MAP = {}
         | 
| @@ -130,6 +130,7 @@ class Unit < Numeric | |
| 130 130 | 
             
                @@PREFIX_REGEX = @@PREFIX_MAP.keys.sort_by {|prefix| prefix.length}.reverse.join('|')
         | 
| 131 131 | 
             
                @@UNIT_REGEX = @@UNIT_MAP.keys.sort_by {|unit| unit.length}.reverse.join('|')
         | 
| 132 132 | 
             
                @@UNIT_MATCH_REGEX = /(#{@@PREFIX_REGEX})*?(#{@@UNIT_REGEX})\b/    
         | 
| 133 | 
            +
                Unit.new(1)
         | 
| 133 134 | 
             
              end
         | 
| 134 135 |  | 
| 135 136 |  | 
| @@ -176,6 +177,11 @@ class Unit < Numeric | |
| 176 177 | 
             
              #  8 lbs 8 oz -- recognized as 8 lbs + 8 ounces
         | 
| 177 178 | 
             
              #
         | 
| 178 179 | 
             
              def initialize(*options)
         | 
| 180 | 
            +
                @scalar = nil
         | 
| 181 | 
            +
                @base_scalar = nil
         | 
| 182 | 
            +
                @unit_name = nil
         | 
| 183 | 
            +
                @signature = nil
         | 
| 184 | 
            +
                @output = nil
         | 
| 179 185 | 
             
                if options.size == 2
         | 
| 180 186 | 
             
                  begin
         | 
| 181 187 | 
             
                    cached = @@cached_units[options[1]] * options[0] 
         | 
| @@ -197,8 +203,6 @@ class Unit < Numeric | |
| 197 203 |  | 
| 198 204 |  | 
| 199 205 | 
             
                case options[0]
         | 
| 200 | 
            -
                when "": raise ArgumentError, "No Unit Specified"
         | 
| 201 | 
            -
                when String: parse(options[0]) 
         | 
| 202 206 | 
             
                when Hash:
         | 
| 203 207 | 
             
                  @scalar = options[0][:scalar] || 1
         | 
| 204 208 | 
             
                  @numerator = options[0][:numerator] || UNITY_ARRAY
         | 
| @@ -218,6 +222,8 @@ class Unit < Numeric | |
| 218 222 | 
             
                  @scalar = options[0].ajd
         | 
| 219 223 | 
             
                  @numerator = ['<day>']
         | 
| 220 224 | 
             
                  @denominator = UNITY_ARRAY
         | 
| 225 | 
            +
                when "": raise ArgumentError, "No Unit Specified"
         | 
| 226 | 
            +
                when String: parse(options[0])   
         | 
| 221 227 | 
             
                else
         | 
| 222 228 | 
             
                  raise ArgumentError, "Invalid Unit Format"
         | 
| 223 229 | 
             
                end
         | 
| @@ -232,12 +238,7 @@ class Unit < Numeric | |
| 232 238 | 
             
                unless @@cached_units.keys.include?(unary_unit) || (unary_unit =~ /(temp|deg)(C|K|R|F)/) then
         | 
| 233 239 | 
             
                  @@cached_units[unary_unit] = (self.scalar == 1 ? self : unary_unit.unit)
         | 
| 234 240 | 
             
                end
         | 
| 235 | 
            -
                @scalar.freeze
         | 
| 236 | 
            -
                @numerator.freeze
         | 
| 237 | 
            -
                @denominator.freeze
         | 
| 238 | 
            -
                @base_scalar.freeze
         | 
| 239 | 
            -
                @signature.freeze
         | 
| 240 | 
            -
                @is_base.freeze
         | 
| 241 | 
            +
                [@scalar, @numerator, @denominator, @base_scalar, @signature, @is_base].each {|x| x.freeze}
         | 
| 241 242 | 
             
                self
         | 
| 242 243 | 
             
              end
         | 
| 243 244 |  | 
| @@ -248,7 +249,12 @@ class Unit < Numeric | |
| 248 249 | 
             
              def self.cached
         | 
| 249 250 | 
             
                return @@cached_units
         | 
| 250 251 | 
             
              end
         | 
| 251 | 
            -
             | 
| 252 | 
            +
              
         | 
| 253 | 
            +
              def self.clear_cache
         | 
| 254 | 
            +
                @@cached_units = {}
         | 
| 255 | 
            +
                @@base_unit_cache = {}
         | 
| 256 | 
            +
              end
         | 
| 257 | 
            +
                
         | 
| 252 258 | 
             
              def self.base_unit_cache
         | 
| 253 259 | 
             
                return @@base_unit_cache
         | 
| 254 260 | 
             
              end
         | 
| @@ -325,10 +331,10 @@ class Unit < Numeric | |
| 325 331 | 
             
                else
         | 
| 326 332 | 
             
                  case target_units
         | 
| 327 333 | 
             
                  when :ft:
         | 
| 328 | 
            -
                    inches = self.to("in").scalar
         | 
| 334 | 
            +
                    inches = self.to("in").scalar.to_int
         | 
| 329 335 | 
             
                    out = "#{(inches / 12).truncate}\'#{(inches % 12).round}\""
         | 
| 330 336 | 
             
                  when :lbs:
         | 
| 331 | 
            -
                    ounces = self.to("oz").scalar
         | 
| 337 | 
            +
                    ounces = self.to("oz").scalar.to_int
         | 
| 332 338 | 
             
                    out = "#{(ounces / 16).truncate} lbs, #{(ounces % 16).round} oz"
         | 
| 333 339 | 
             
                  when String
         | 
| 334 340 | 
             
                    begin #first try a standard format string
         | 
| @@ -698,11 +704,10 @@ class Unit < Numeric | |
| 698 704 | 
             
                Unit.new(@scalar.floor, @numerator, @denominator)    
         | 
| 699 705 | 
             
              end
         | 
| 700 706 |  | 
| 701 | 
            -
              # changes internal scalar to an integer, but retains the units
         | 
| 702 707 | 
             
              # if unitless, returns an int
         | 
| 703 708 | 
             
              def to_int
         | 
| 704 | 
            -
                return @scalar.to_int if unitless?
         | 
| 705 | 
            -
                 | 
| 709 | 
            +
                return @scalar.to_int if self.unitless?
         | 
| 710 | 
            +
                raise RuntimeError, 'Cannot convert to Integer, use Unit#scalar'
         | 
| 706 711 | 
             
              end
         | 
| 707 712 |  | 
| 708 713 | 
             
              # Tries to make a Time object from current unit
         | 
| @@ -711,7 +716,10 @@ class Unit < Numeric | |
| 711 716 | 
             
              end
         | 
| 712 717 | 
             
              alias :time :to_time
         | 
| 713 718 | 
             
              alias :to_i :to_int
         | 
| 714 | 
            -
             | 
| 719 | 
            +
             | 
| 720 | 
            +
              def truncate
         | 
| 721 | 
            +
                Unit.new(@scalar.truncate, @numerator, @denominator)    
         | 
| 722 | 
            +
              end
         | 
| 715 723 |  | 
| 716 724 | 
             
              def to_datetime
         | 
| 717 725 | 
             
                DateTime.new(self.to('d').scalar)
         | 
    
        data/test/test_ruby-units.rb
    CHANGED
    
    | @@ -50,6 +50,7 @@ class TestRubyUnits < Test::Unit::TestCase | |
| 50 50 | 
             
                @april_fools_datetime = DateTime.parse('2006-4-1 12:00')
         | 
| 51 51 | 
             
                Time.forced_now = @april_fools
         | 
| 52 52 | 
             
                DateTime.forced_now = @april_fools_datetime 
         | 
| 53 | 
            +
                #Unit.clear_cache
         | 
| 53 54 | 
             
              end
         | 
| 54 55 |  | 
| 55 56 | 
             
              def teardown
         | 
| @@ -361,7 +362,7 @@ class TestRubyUnits < Test::Unit::TestCase | |
| 361 362 | 
             
                unit2 = Unit.new("1 in")
         | 
| 362 363 | 
             
                assert_nothing_raised {
         | 
| 363 364 | 
             
                  unit3 = unit1 - unit2
         | 
| 364 | 
            -
                  assert_in_delta | 
| 365 | 
            +
                  assert_in_delta(-1.54, unit3.scalar, 0.01)
         | 
| 365 366 | 
             
                  }
         | 
| 366 367 | 
             
              end
         | 
| 367 368 |  | 
| @@ -421,7 +422,7 @@ class TestRubyUnits < Test::Unit::TestCase | |
| 421 422 | 
             
                unit1 = Unit.new("1 mm")
         | 
| 422 423 | 
             
                unit2 = Unit.new("2 mm")
         | 
| 423 424 | 
             
                assert_nothing_raised {
         | 
| 424 | 
            -
                  assert_equal | 
| 425 | 
            +
                  assert_equal(-1, (unit1-unit2).scalar)
         | 
| 425 426 | 
             
                  }
         | 
| 426 427 | 
             
              end
         | 
| 427 428 |  | 
| @@ -517,9 +518,8 @@ class TestRubyUnits < Test::Unit::TestCase | |
| 517 518 | 
             
              end
         | 
| 518 519 |  | 
| 519 520 | 
             
              def test_to_int
         | 
| 520 | 
            -
                 | 
| 521 | 
            -
                 | 
| 522 | 
            -
                assert_equal unit2, unit1.to_int
         | 
| 521 | 
            +
                assert_raises(RuntimeError)  {Unit.new("1.1 mm").to_i}
         | 
| 522 | 
            +
                assert_nothing_raised {Unit.new(10.5).to_i}
         | 
| 523 523 | 
             
              end
         | 
| 524 524 |  | 
| 525 525 | 
             
              def test_truncate
         | 
| @@ -795,6 +795,20 @@ class TestRubyUnits < Test::Unit::TestCase | |
| 795 795 | 
             
                assert_equal today,@april_fools
         | 
| 796 796 | 
             
                last_century = today - '150 years'.unit
         | 
| 797 797 | 
             
                assert_equal last_century.to_date, '1856-04-01'.to_date
         | 
| 798 | 
            -
                
         | 
| 799 798 | 
             
              end
         | 
| 800 | 
            -
             | 
| 799 | 
            +
              
         | 
| 800 | 
            +
              def test_coercion
         | 
| 801 | 
            +
                assert_nothing_raised { 1.0 * '1 mm'.unit}
         | 
| 802 | 
            +
                assert_nothing_raised { '1 mm'.unit * 1.0}
         | 
| 803 | 
            +
              end
         | 
| 804 | 
            +
              
         | 
| 805 | 
            +
              def test_zero
         | 
| 806 | 
            +
                    assert_nothing_raised { Unit.new(0) }
         | 
| 807 | 
            +
              end
         | 
| 808 | 
            +
              
         | 
| 809 | 
            +
              def test_divide_results_in_unitless
         | 
| 810 | 
            +
                a = '10 mg/ml'.unit
         | 
| 811 | 
            +
                b = '10 mg/ml'.unit
         | 
| 812 | 
            +
                assert_equal a/b, 1
         | 
| 813 | 
            +
              end
         | 
| 814 | 
            +
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -3,15 +3,15 @@ rubygems_version: 0.9.0 | |
| 3 3 | 
             
            specification_version: 1
         | 
| 4 4 | 
             
            name: ruby-units
         | 
| 5 5 | 
             
            version: !ruby/object:Gem::Version 
         | 
| 6 | 
            -
              version: 0.3. | 
| 7 | 
            -
            date: 2006- | 
| 6 | 
            +
              version: 0.3.5
         | 
| 7 | 
            +
            date: 2006-11-30 00:00:00 -05:00
         | 
| 8 8 | 
             
            summary: A model that performs unit conversions and unit math
         | 
| 9 9 | 
             
            require_paths: 
         | 
| 10 10 | 
             
            - lib
         | 
| 11 | 
            -
            email: kevin.olbrich+ | 
| 12 | 
            -
            homepage: http://rubyforge. | 
| 11 | 
            +
            email: kevin.olbrich+ruby_units@gmail.com
         | 
| 12 | 
            +
            homepage: http://rubyforge.org/projects/ruby-units
         | 
| 13 13 | 
             
            rubyforge_project: ruby-units
         | 
| 14 | 
            -
            description: 
         | 
| 14 | 
            +
            description: This library handles unit conversions and unit math
         | 
| 15 15 | 
             
            autorequire: 
         | 
| 16 16 | 
             
            default_executable: 
         | 
| 17 17 | 
             
            bindir: bin
         | 
| @@ -27,13 +27,15 @@ signing_key: | |
| 27 27 | 
             
            cert_chain: 
         | 
| 28 28 | 
             
            post_install_message: 
         | 
| 29 29 | 
             
            authors: 
         | 
| 30 | 
            -
            - Kevin Olbrich
         | 
| 30 | 
            +
            - Kevin Olbrich, Ph.D
         | 
| 31 31 | 
             
            files: 
         | 
| 32 | 
            -
            -  | 
| 33 | 
            -
            -  | 
| 34 | 
            -
            -  | 
| 35 | 
            -
            -  | 
| 32 | 
            +
            - CHANGELOG.txt
         | 
| 33 | 
            +
            - Manifest.txt
         | 
| 34 | 
            +
            - README.txt
         | 
| 35 | 
            +
            - LICENSE.txt
         | 
| 36 | 
            +
            - Rakefile
         | 
| 36 37 | 
             
            - lib/ruby-units.rb
         | 
| 38 | 
            +
            - lib/ruby_units.rb
         | 
| 37 39 | 
             
            - lib/units.rb
         | 
| 38 40 | 
             
            - test/test_ruby-units.rb
         | 
| 39 41 | 
             
            test_files: 
         | 
| @@ -48,5 +50,13 @@ extensions: [] | |
| 48 50 |  | 
| 49 51 | 
             
            requirements: []
         | 
| 50 52 |  | 
| 51 | 
            -
            dependencies:  | 
| 52 | 
            -
             | 
| 53 | 
            +
            dependencies: 
         | 
| 54 | 
            +
            - !ruby/object:Gem::Dependency 
         | 
| 55 | 
            +
              name: hoe
         | 
| 56 | 
            +
              version_requirement: 
         | 
| 57 | 
            +
              version_requirements: !ruby/object:Gem::Version::Requirement 
         | 
| 58 | 
            +
                requirements: 
         | 
| 59 | 
            +
                - - ">="
         | 
| 60 | 
            +
                  - !ruby/object:Gem::Version 
         | 
| 61 | 
            +
                    version: 1.1.6
         | 
| 62 | 
            +
                version: 
         |