subunit 0.7.0 → 0.8.4
Sign up to get free protection for your applications and to get access to all the features.
- 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
|