filesize 0.1.1 → 0.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 +5 -5
- data/lib/filesize.rb +12 -7
- data/spec/lib/filesize_spec.rb +21 -2
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4fffde69cad6cbd10d4fc4bc0e5ca8c2148dad349621778dcdd89dcff6fd4a04
|
4
|
+
data.tar.gz: 1835c6a095c92206331410d9a5dee93c16aa856cfe4fde0cacb4e0a0d0904d3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b6acf41642a5ac6d062c5a4f061b561b0ac2ee08e5f6a43e6fba5621a2f3128468fe909907eece7896864c3305adcad0b6af9795b609fd51cf3dc45bbb8ad1e7
|
7
|
+
data.tar.gz: e73c2e947e014e02785deb668467ea8720f24210b56113a1761229e4b4ff50472297d6dfe6be9bb5c78198c4ab25336fa8d52d5fe5deaa68c755be975b0bd15d
|
data/lib/filesize.rb
CHANGED
@@ -13,19 +13,22 @@ class Filesize
|
|
13
13
|
|
14
14
|
# Set of rules describing file sizes according to SI units.
|
15
15
|
SI = {
|
16
|
-
:regexp => /^([\d,.]+)
|
16
|
+
:regexp => /^([\d,.]+)?[[:space:]]?([kmgtpezy]?)b?$/i,
|
17
17
|
:multiplier => 1000,
|
18
18
|
:prefixes => TYPE_PREFIXES[:SI],
|
19
19
|
:presuffix => '' # deprecated
|
20
20
|
}
|
21
21
|
# Set of rules describing file sizes according to binary units.
|
22
22
|
BINARY = {
|
23
|
-
:regexp => /^([\d,.]+)
|
23
|
+
:regexp => /^([\d,.]+)?[[:space:]]?(?:([kmgtpezy])i)?b?$/i,
|
24
24
|
:multiplier => 1024,
|
25
25
|
:prefixes => TYPE_PREFIXES[:BINARY],
|
26
26
|
:presuffix => 'i' # deprecated
|
27
27
|
}
|
28
28
|
|
29
|
+
# Set default precision
|
30
|
+
PRECISION = 2
|
31
|
+
|
29
32
|
# @param [Number] size A file size, in bytes.
|
30
33
|
# @param [SI, BINARY] type Which type to use for conversions.
|
31
34
|
def initialize(size, type = BINARY)
|
@@ -61,8 +64,10 @@ class Filesize
|
|
61
64
|
# @param (see #to_f)
|
62
65
|
# @return [String] Same as {#to_f}, but as a string, with the unit appended.
|
63
66
|
# @see #to_f
|
64
|
-
def to_s(unit = 'B')
|
65
|
-
|
67
|
+
def to_s(unit = 'B', args = {})
|
68
|
+
precision = args[:precision] || PRECISION
|
69
|
+
|
70
|
+
"%.#{precision}f %s" % [to(unit).to_f.to_s, unit]
|
66
71
|
end
|
67
72
|
|
68
73
|
# Same as {#to_s} but with an automatic determination of the most
|
@@ -70,7 +75,7 @@ class Filesize
|
|
70
75
|
#
|
71
76
|
# @return [String]
|
72
77
|
# @see #to_s
|
73
|
-
def pretty
|
78
|
+
def pretty(args = {})
|
74
79
|
size = @bytes
|
75
80
|
if size < @type[:multiplier]
|
76
81
|
unit = "B"
|
@@ -81,7 +86,7 @@ class Filesize
|
|
81
86
|
unit = @type[:prefixes][pos-1] + "B"
|
82
87
|
end
|
83
88
|
|
84
|
-
to_s(unit)
|
89
|
+
to_s(unit, args)
|
85
90
|
end
|
86
91
|
|
87
92
|
# @return [Filesize]
|
@@ -132,7 +137,7 @@ class Filesize
|
|
132
137
|
size = parts[:size]
|
133
138
|
type = parts[:type]
|
134
139
|
|
135
|
-
raise ArgumentError, "Unparseable filesize" unless type
|
140
|
+
raise ArgumentError, "Unparseable filesize: #{arg}" unless type
|
136
141
|
|
137
142
|
offset = (type[:prefixes].map { |s| s[0].chr.downcase }.index(prefix.downcase) || -1) + 1
|
138
143
|
|
data/spec/lib/filesize_spec.rb
CHANGED
@@ -38,6 +38,10 @@ describe Filesize do
|
|
38
38
|
it 'parses megabytes' do
|
39
39
|
expect(Filesize.from('1 MB').to).to eq 1000 * 1000
|
40
40
|
end
|
41
|
+
|
42
|
+
it 'parses megabytes without b suffix' do
|
43
|
+
expect(Filesize.from('1 M').to).to eq 1000 * 1000
|
44
|
+
end
|
41
45
|
end
|
42
46
|
|
43
47
|
context 'BINARY units' do
|
@@ -48,6 +52,10 @@ describe Filesize do
|
|
48
52
|
it 'parses megabytes' do
|
49
53
|
expect(Filesize.from('1 MiB').to).to eq 1024 * 1024
|
50
54
|
end
|
55
|
+
|
56
|
+
it 'parses mebibytes without b suffix' do
|
57
|
+
expect(Filesize.from('1 Mi').to).to eq 1024 * 1024
|
58
|
+
end
|
51
59
|
end
|
52
60
|
end
|
53
61
|
|
@@ -94,6 +102,10 @@ describe Filesize do
|
|
94
102
|
it 'returns the number of for the specified unit with its unit (SI)' do
|
95
103
|
expect(Filesize.new(1000).to_s('kB')).to eq '1.00 kB'
|
96
104
|
end
|
105
|
+
|
106
|
+
it 'returns the number with another precision' do
|
107
|
+
expect(Filesize.new(1360).to_s('kB', :precision => 1)).to eq '1.4 kB'
|
108
|
+
end
|
97
109
|
end
|
98
110
|
|
99
111
|
describe '#pretty' do
|
@@ -101,9 +113,16 @@ describe Filesize do
|
|
101
113
|
expect(Filesize.new(1024).pretty).to eq '1.00 KiB'
|
102
114
|
end
|
103
115
|
|
104
|
-
|
105
|
-
|
116
|
+
describe 'returns the number of the most matching prefix with its unit (SI)' do
|
117
|
+
it 'default precision Filesize::PRECISION' do
|
118
|
+
expect(Filesize.new(1000, Filesize::SI).pretty).to eq '1.00 kB'
|
119
|
+
end
|
120
|
+
|
121
|
+
it 'zero decimals' do
|
122
|
+
expect(Filesize.new(1000, Filesize::SI).pretty(:precision => 0)).to eq '1 kB'
|
123
|
+
end
|
106
124
|
end
|
125
|
+
|
107
126
|
end
|
108
127
|
|
109
128
|
describe '::Floppy' do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: filesize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dominik Honnef
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-09-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -56,10 +56,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
56
56
|
version: '0'
|
57
57
|
requirements: []
|
58
58
|
rubyforge_project:
|
59
|
-
rubygems_version: 2.
|
59
|
+
rubygems_version: 2.7.7
|
60
60
|
signing_key:
|
61
61
|
specification_version: 4
|
62
62
|
summary: filesize is a small class for handling filesizes with both the SI and binary
|
63
63
|
prefixes, allowing conversion from any size to any other size.
|
64
64
|
test_files: []
|
65
|
-
has_rdoc: yard
|