tins 1.11.0 → 1.12.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/.travis.yml +0 -3
- data/VERSION +1 -1
- data/lib/tins/unit.rb +19 -11
- data/lib/tins/version.rb +1 -1
- data/tests/unit_test.rb +10 -5
- data/tins.gemspec +3 -3
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e021337aa4ed20c3a4923e4ea6e4a1ed98d3318f
|
4
|
+
data.tar.gz: d37b9e4a07a0af742021d28ed2e8ac1961bc12c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0be134266c51650540a04d94fc26babe6f607970e7c6536375d2649019a5cb8cf5c891f731869eb22f244bb78551e11e0f77b623798da949686fa449758fb73a
|
7
|
+
data.tar.gz: f7a896763c0a0f73926b251d5fd305101b53e2a220fa8bfafddcce2bd653c7ae9d19d9173e744d0b894cdf98cb7790306cbbec14382085d5989d30a6d1e70a60
|
data/.travis.yml
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.
|
1
|
+
1.12.0
|
data/lib/tins/unit.rb
CHANGED
@@ -16,6 +16,8 @@ module Tins::Unit
|
|
16
16
|
'', 'm', 'µ', 'n', 'p', 'f', 'a', 'z', 'y',
|
17
17
|
].each_with_index.map { |n, i| Prefix.new(n.freeze, 1000, 1000 ** -i, true) }.freeze
|
18
18
|
|
19
|
+
class ParserError < ArgumentError; end
|
20
|
+
|
19
21
|
module_function
|
20
22
|
|
21
23
|
def prefixes(identifier)
|
@@ -34,7 +36,7 @@ module Tins::Unit
|
|
34
36
|
def format(value, format: '%f %U', prefix: 1024, unit: ?b)
|
35
37
|
prefixes = prefixes(prefix)
|
36
38
|
first_prefix = prefixes.first or
|
37
|
-
raise ArgumentError, 'a non-empty of prefixes is required'
|
39
|
+
raise ArgumentError, 'a non-empty array of prefixes is required'
|
38
40
|
prefix = prefixes[
|
39
41
|
(first_prefix.fraction ? -1 : 1) * Math.log(value) / Math.log(first_prefix.step)
|
40
42
|
]
|
@@ -89,17 +91,15 @@ module Tins::Unit
|
|
89
91
|
|
90
92
|
def scan_unit
|
91
93
|
case
|
92
|
-
when
|
94
|
+
when scan(@unit_re)
|
93
95
|
prefix = @unit_re.prefixes.find { |pre| pre.name == self[1] } or return
|
94
96
|
@number *= prefix.multiplier
|
95
|
-
when
|
97
|
+
when scan(@unit_lc_re)
|
96
98
|
prefix = @unit_lc_re.prefixes.find { |pre| pre.name == self[1] } or return
|
97
99
|
@number *= prefix.multiplier
|
98
|
-
when
|
100
|
+
when scan(@unit_uc_re)
|
99
101
|
prefix = @unit_uc_re.prefixes.find { |pre| pre.name == self[1] } or return
|
100
102
|
@number *= prefix.multiplier
|
101
|
-
else
|
102
|
-
return
|
103
103
|
end
|
104
104
|
end
|
105
105
|
|
@@ -135,21 +135,21 @@ module Tins::Unit
|
|
135
135
|
case
|
136
136
|
when scan(/%f/)
|
137
137
|
@unit_parser.scan_number or
|
138
|
-
raise
|
138
|
+
raise ParserError, "\"%f\" expected at #{location}"
|
139
139
|
when scan(/%U/)
|
140
140
|
@unit_parser.scan_unit or
|
141
|
-
raise
|
141
|
+
raise ParserError, "\"%U\" expected at #{location}"
|
142
142
|
when scan(/%%/)
|
143
143
|
@unit_parser.scan_char(?%) or
|
144
|
-
raise
|
144
|
+
raise ParserError, "#{?%.inspect} expected at #{location}"
|
145
145
|
else
|
146
146
|
char = scan(/./)
|
147
147
|
@unit_parser.scan_char(char) or
|
148
|
-
raise
|
148
|
+
raise ParserError, "#{char.inspect} expected at #{location}"
|
149
149
|
end
|
150
150
|
end
|
151
151
|
unless eos? && @unit_parser.eos?
|
152
|
-
raise
|
152
|
+
raise ParserError,
|
153
153
|
"format #{string.inspect} and string "\
|
154
154
|
"#{@unit_parser.string.inspect} do not match"
|
155
155
|
end
|
@@ -157,8 +157,16 @@ module Tins::Unit
|
|
157
157
|
end
|
158
158
|
end
|
159
159
|
|
160
|
+
# Parse the string +string+ if it matches +format+ with the unit +unit+ and
|
161
|
+
# the prefixes specified by +prefix+.
|
160
162
|
def parse(string, format: '%f %U', unit: ?b, prefix: nil)
|
161
163
|
prefixes = prefixes(prefix)
|
162
164
|
FormatParser.new(format, UnitParser.new(string, unit, prefixes)).parse
|
163
165
|
end
|
166
|
+
|
167
|
+
def parse?(string, **options)
|
168
|
+
parse(string, **options)
|
169
|
+
rescue ParserError
|
170
|
+
nil
|
171
|
+
end
|
164
172
|
end
|
data/lib/tins/version.rb
CHANGED
data/tests/unit_test.rb
CHANGED
@@ -41,12 +41,17 @@ module Tins
|
|
41
41
|
assert_in_delta 17_301_504, parse('16.5 Mb').to_i, 1e-5
|
42
42
|
assert_in_delta 16_500_000, parse('16.5 mbps', unit: 'bps').to_i, 1e-5
|
43
43
|
assert_in_delta 0.1234e-5, parse('1.234 µS', unit: ?S, prefix: :f).to_s, 1e-5
|
44
|
-
assert_raise(
|
45
|
-
assert_raise(
|
44
|
+
assert_raise(ParserError) { parse('16.5 nix', unit: ?b) }
|
45
|
+
assert_raise(ParserError) { parse('nix Mb') }
|
46
46
|
assert_in_delta 17_301_504, parse('16.5 % Mb', format: '%f %% %U').to_i, 1e-5
|
47
|
-
assert_raise(
|
48
|
-
assert_raise(
|
49
|
-
assert_raise(
|
47
|
+
assert_raise(ParserError) { parse('16.5 Mb', format: '%f %% %U') }
|
48
|
+
assert_raise(ParserError) { parse('16.5 Mb foo', format: '%f %U') }
|
49
|
+
assert_raise(ParserError) { parse('16.5 Mb', format: '%f %U foo') }
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_parse_predicate
|
53
|
+
assert_in_delta 17_301_504, parse?('16.5 Mb').to_i, 1e-5
|
54
|
+
assert_nil parse?('16.5 nix', unit: ?b)
|
50
55
|
end
|
51
56
|
end
|
52
57
|
end
|
data/tins.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: tins 1.
|
2
|
+
# stub: tins 1.12.0 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "tins"
|
6
|
-
s.version = "1.
|
6
|
+
s.version = "1.12.0"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
10
10
|
s.authors = ["Florian Frank"]
|
11
|
-
s.date = "2016-
|
11
|
+
s.date = "2016-08-04"
|
12
12
|
s.description = "All the stuff that isn't good/big enough for a real library."
|
13
13
|
s.email = "flori@ping.de"
|
14
14
|
s.extra_rdoc_files = ["README.md", "lib/dslkit.rb", "lib/dslkit/polite.rb", "lib/dslkit/rude.rb", "lib/spruz.rb", "lib/tins.rb", "lib/tins/alias.rb", "lib/tins/annotate.rb", "lib/tins/ask_and_send.rb", "lib/tins/attempt.rb", "lib/tins/bijection.rb", "lib/tins/case_predicate.rb", "lib/tins/complete.rb", "lib/tins/concern.rb", "lib/tins/count_by.rb", "lib/tins/date_dummy.rb", "lib/tins/date_time_dummy.rb", "lib/tins/deep_const_get.rb", "lib/tins/deep_dup.rb", "lib/tins/dslkit.rb", "lib/tins/duration.rb", "lib/tins/extract_last_argument_options.rb", "lib/tins/file_binary.rb", "lib/tins/find.rb", "lib/tins/generator.rb", "lib/tins/go.rb", "lib/tins/hash_symbolize_keys_recursive.rb", "lib/tins/hash_union.rb", "lib/tins/if_predicate.rb", "lib/tins/implement.rb", "lib/tins/limited.rb", "lib/tins/lines_file.rb", "lib/tins/memoize.rb", "lib/tins/method_description.rb", "lib/tins/minimize.rb", "lib/tins/module_group.rb", "lib/tins/named_set.rb", "lib/tins/null.rb", "lib/tins/once.rb", "lib/tins/p.rb", "lib/tins/partial_application.rb", "lib/tins/proc_compose.rb", "lib/tins/proc_prelude.rb", "lib/tins/range_plus.rb", "lib/tins/require_maybe.rb", "lib/tins/responding.rb", "lib/tins/secure_write.rb", "lib/tins/sexy_singleton.rb", "lib/tins/string_byte_order_mark.rb", "lib/tins/string_camelize.rb", "lib/tins/string_underscore.rb", "lib/tins/string_version.rb", "lib/tins/subhash.rb", "lib/tins/terminal.rb", "lib/tins/thread_local.rb", "lib/tins/time_dummy.rb", "lib/tins/to.rb", "lib/tins/to_proc.rb", "lib/tins/token.rb", "lib/tins/uniq_by.rb", "lib/tins/unit.rb", "lib/tins/version.rb", "lib/tins/write.rb", "lib/tins/xt.rb", "lib/tins/xt/annotate.rb", "lib/tins/xt/ask_and_send.rb", "lib/tins/xt/attempt.rb", "lib/tins/xt/blank.rb", "lib/tins/xt/case_predicate.rb", "lib/tins/xt/complete.rb", "lib/tins/xt/concern.rb", "lib/tins/xt/count_by.rb", "lib/tins/xt/date_dummy.rb", "lib/tins/xt/date_time_dummy.rb", "lib/tins/xt/deep_const_get.rb", "lib/tins/xt/deep_dup.rb", "lib/tins/xt/dslkit.rb", "lib/tins/xt/extract_last_argument_options.rb", "lib/tins/xt/file_binary.rb", "lib/tins/xt/full.rb", "lib/tins/xt/hash_symbolize_keys_recursive.rb", "lib/tins/xt/hash_union.rb", "lib/tins/xt/if_predicate.rb", "lib/tins/xt/implement.rb", "lib/tins/xt/irb.rb", "lib/tins/xt/method_description.rb", "lib/tins/xt/named.rb", "lib/tins/xt/null.rb", "lib/tins/xt/p.rb", "lib/tins/xt/partial_application.rb", "lib/tins/xt/proc_compose.rb", "lib/tins/xt/proc_prelude.rb", "lib/tins/xt/range_plus.rb", "lib/tins/xt/require_maybe.rb", "lib/tins/xt/responding.rb", "lib/tins/xt/secure_write.rb", "lib/tins/xt/sexy_singleton.rb", "lib/tins/xt/string.rb", "lib/tins/xt/string_byte_order_mark.rb", "lib/tins/xt/string_camelize.rb", "lib/tins/xt/string_underscore.rb", "lib/tins/xt/string_version.rb", "lib/tins/xt/subhash.rb", "lib/tins/xt/time_dummy.rb", "lib/tins/xt/time_freezer.rb", "lib/tins/xt/to.rb", "lib/tins/xt/uniq_by.rb", "lib/tins/xt/write.rb"]
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tins
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.12.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Florian Frank
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_hadar
|