subunit 0.7.0 → 0.8.4
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
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/subunit.rb +56 -11
- metadata +4 -3
- metadata.gz.sig +0 -0
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 55e24efd3496c6090f8b887857fbefd3dc2a76f4a61fb4a8c3a6f19490bfa153
         | 
| 4 | 
            +
              data.tar.gz: fd0af0f6e4fd910898141aa6c7bc13049cd2cd728ba4a9e19a5ab5a8cf9bf558
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 9c2ff98f077a42af3dffc3788961f99bd98fb6643c5987f472e640094a485c138a8a4065a0832c98f27fd4b578d3e0972f1c5ae44a019014471e5cb2ef8e5bc1
         | 
| 7 | 
            +
              data.tar.gz: 9ea37778dd9fe8cf32278572a70d4d188ee9b59a460e5e8139bc2e2ff28a13a8055d71d79a7205738c2504fdf595e76ab29c5825f7b749db392a30dedd8a784b
         | 
    
        checksums.yaml.gz.sig
    CHANGED
    
    | Binary file | 
    
        data.tar.gz.sig
    CHANGED
    
    | Binary file | 
    
        data/lib/subunit.rb
    CHANGED
    
    | @@ -2,12 +2,31 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            # file: subunit.rb
         | 
| 4 4 |  | 
| 5 | 
            +
            module SubunitFracture
         | 
| 6 | 
            +
              
         | 
| 7 | 
            +
              refine Integer do
         | 
| 8 | 
            +
                
         | 
| 9 | 
            +
                def strfunit(s)
         | 
| 10 | 
            +
                  Subunit.seconds(self).strfunit(s)
         | 
| 11 | 
            +
                end
         | 
| 12 | 
            +
                
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
              
         | 
| 15 | 
            +
            end
         | 
| 16 | 
            +
             | 
| 5 17 | 
             
            class Subunit
         | 
| 6 18 |  | 
| 7 | 
            -
              def self.seconds(val)
         | 
| 8 | 
            -
                new(units={minutes:60, hours:60}, seconds: val)
         | 
| 19 | 
            +
              def self.seconds(val, units: nil)
         | 
| 20 | 
            +
                new(units={minutes:60, hours:60, days:24}, seconds: val)
         | 
| 9 21 | 
             
              end
         | 
| 10 22 |  | 
| 23 | 
            +
              # e.g. Subunit.hms_to_seconds('5 minutes and 4 seconds')
         | 
| 24 | 
            +
              # => 304   
         | 
| 25 | 
            +
              #
         | 
| 26 | 
            +
              def self.hms_to_seconds(obj)
         | 
| 27 | 
            +
                new(units={hours:60, minutes:60,seconds: 60, }, obj).to_i
         | 
| 28 | 
            +
              end  
         | 
| 29 | 
            +
             | 
| 11 30 | 
             
              attr_reader :to_a, :to_h, :to_i
         | 
| 12 31 |  | 
| 13 32 | 
             
              def initialize(raw_units={}, obj)
         | 
| @@ -15,14 +34,21 @@ class Subunit | |
| 15 34 | 
             
                @debug = false
         | 
| 16 35 |  | 
| 17 36 | 
             
                @raw_units = raw_units
         | 
| 37 | 
            +
                    
         | 
| 38 | 
            +
                accumulate = ->(a) {
         | 
| 18 39 |  | 
| 19 | 
            -
                if obj.is_a? Array then
         | 
| 20 | 
            -
                  
         | 
| 21 | 
            -
                  a = obj[0..-2]
         | 
| 22 40 | 
             
                  len = raw_units.to_a.length
         | 
| 23 41 | 
             
                  val = ([0]*(len-1) + a).slice(-(len), len).zip(raw_units.values)\
         | 
| 24 | 
            -
                      .inject(0) {|r,x| r + x | 
| 25 | 
            -
             | 
| 42 | 
            +
                      .inject(0) {|r,x| r * x[1] + x[0] }    
         | 
| 43 | 
            +
                }
         | 
| 44 | 
            +
                
         | 
| 45 | 
            +
                if obj.is_a? String
         | 
| 46 | 
            +
                  
         | 
| 47 | 
            +
                  @to_i = accumulate.call obj.split(/\D+/).map(&:to_i)
         | 
| 48 | 
            +
                      
         | 
| 49 | 
            +
                elsif obj.is_a? Array then
         | 
| 50 | 
            +
                        
         | 
| 51 | 
            +
                  @to_i = accumulate.call obj
         | 
| 26 52 |  | 
| 27 53 | 
             
                else
         | 
| 28 54 |  | 
| @@ -37,18 +63,32 @@ class Subunit | |
| 37 63 | 
             
              #           .strfunit("%x") #=> 11m 1s
         | 
| 38 64 | 
             
              #
         | 
| 39 65 | 
             
              # %x e.g. 11m 1s
         | 
| 66 | 
            +
              # %xi e.g. 11m
         | 
| 40 67 | 
             
              # %X e.g. 11 minutes 1 second
         | 
| 68 | 
            +
              # %Xi e.g. 11 minutes
         | 
| 41 69 | 
             
              # %c e.g. 00:11:01
         | 
| 70 | 
            +
              # %s e.g. 11m # returns the 1st most significant value while 
         | 
| 71 | 
            +
              #               ignoring the remainder
         | 
| 42 72 | 
             
              #
         | 
| 43 73 | 
             
              def strfunit(s)    
         | 
| 44 74 |  | 
| 45 | 
            -
                 | 
| 46 | 
            -
             | 
| 75 | 
            +
                # The i switch postfixed to the x or X switch will format the output 
         | 
| 76 | 
            +
                # without seconds unless there are no minutes.
         | 
| 77 | 
            +
                
         | 
| 78 | 
            +
                s.sub!(/%xi?/) do |x|
         | 
| 79 | 
            +
                  
         | 
| 80 | 
            +
                  a = to_h.to_a
         | 
| 81 | 
            +
                  a2 = (a.length > 1 and x[-1][/i$/]) ? a[0..-2] : a
         | 
| 82 | 
            +
                  a2.map {|label, val| val.to_s + label[0]}.join(' ')
         | 
| 83 | 
            +
                  
         | 
| 47 84 | 
             
                end
         | 
| 48 85 |  | 
| 49 | 
            -
                s.sub!( | 
| 86 | 
            +
                s.sub!(/%Xi?/) do |x|
         | 
| 87 | 
            +
             | 
| 88 | 
            +
                  a = to_h.to_a
         | 
| 89 | 
            +
                  a2 = (a.length > 1 and x[-1][/i$/]) ? a[0..-2] : a      
         | 
| 50 90 |  | 
| 51 | 
            -
                   | 
| 91 | 
            +
                  a2.map do |label, val| 
         | 
| 52 92 |  | 
| 53 93 | 
             
                    next if val == 0
         | 
| 54 94 | 
             
                    label2 = val > 1 ? label.to_s : label.to_s.sub(/s$/,'')
         | 
| @@ -66,6 +106,11 @@ class Subunit | |
| 66 106 | 
             
                  fmt = a.map {|v| "%0" + v.to_s.length.to_s + "d"}.join(":")
         | 
| 67 107 | 
             
                  fmt % to_a
         | 
| 68 108 | 
             
                end    
         | 
| 109 | 
            +
                
         | 
| 110 | 
            +
                s.sub!('%s') do |x|
         | 
| 111 | 
            +
                  label, val = to_h.first 
         | 
| 112 | 
            +
                  val.to_s + label[0]
         | 
| 113 | 
            +
                end    
         | 
| 69 114 |  | 
| 70 115 | 
             
                s
         | 
| 71 116 | 
             
              end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: subunit
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.8.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - James Robertson
         | 
| @@ -35,7 +35,7 @@ cert_chain: | |
| 35 35 | 
             
              HowcHg4GymtLLITCF/QtA5tta5SmHAca1POGncsO9QiramFQ9S3Q4O4wcjboVJOp
         | 
| 36 36 | 
             
              SSxk4InmYoY9Cl2GVQ+d9owo
         | 
| 37 37 | 
             
              -----END CERTIFICATE-----
         | 
| 38 | 
            -
            date:  | 
| 38 | 
            +
            date: 2021-04-07 00:00:00.000000000 Z
         | 
| 39 39 | 
             
            dependencies: []
         | 
| 40 40 | 
             
            description: 
         | 
| 41 41 | 
             
            email: james@jamesrobertson.eu
         | 
| @@ -63,7 +63,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 63 63 | 
             
                - !ruby/object:Gem::Version
         | 
| 64 64 | 
             
                  version: '0'
         | 
| 65 65 | 
             
            requirements: []
         | 
| 66 | 
            -
             | 
| 66 | 
            +
            rubyforge_project: 
         | 
| 67 | 
            +
            rubygems_version: 2.7.10
         | 
| 67 68 | 
             
            signing_key: 
         | 
| 68 69 | 
             
            specification_version: 4
         | 
| 69 70 | 
             
            summary: Input a raw unit and it returns the denomination.
         | 
    
        metadata.gz.sig
    CHANGED
    
    | Binary file |