calcpace 1.3.0 → 1.4.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/lib/calcpace/calculator.rb +32 -13
- data/lib/calcpace/checker.rb +1 -1
- data/lib/calcpace/converter.rb +4 -10
- data/lib/calcpace.rb +2 -4
- data/test/calcpace/test_calculator.rb +55 -20
- data/test/calcpace/test_converter.rb +40 -32
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5f044557de907efbc86496d835e45575a5302a965de92cfcb38f52eb64f0e861
|
4
|
+
data.tar.gz: 6c676c4d91b34b38593a1f696697d70c8da4025cb3fe34492f98bdd554f54c3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8d1878a80782cec3056945bd66aae3b185dd6889fd0de6d330fbf0de990f35f2779196b7032d2dd53364df2fcfef8ee4313132d045a9521fbc72e2134ba9d15d
|
7
|
+
data.tar.gz: c578de2a7229f1b2be9fd01e5b0f825b8a03ae6b54b0ca9bacf78923916a28ebd779a50e77811710f4845456a573d65dc30c943ed372597506b915219701bb8d
|
data/lib/calcpace/calculator.rb
CHANGED
@@ -2,18 +2,18 @@
|
|
2
2
|
|
3
3
|
require 'bigdecimal'
|
4
4
|
|
5
|
-
# Module to calculate time, distance and velocity
|
5
|
+
# Module to calculate time, distance, pace and velocity
|
6
6
|
module Calculator
|
7
7
|
def velocity(time, distance)
|
8
|
-
|
8
|
+
check_positive(distance)
|
9
|
+
check_positive(time)
|
10
|
+
distance.to_f / time
|
9
11
|
end
|
10
12
|
|
11
13
|
def checked_velocity(time, distance)
|
12
14
|
check_time(time)
|
13
|
-
|
14
|
-
|
15
|
-
seconds = convert_to_bigdecimal(convert_to_seconds(time))
|
16
|
-
velocity(seconds, distance_to_calc)
|
15
|
+
seconds = convert_to_seconds(time)
|
16
|
+
velocity(seconds, distance)
|
17
17
|
end
|
18
18
|
|
19
19
|
def clock_velocity(time, distance)
|
@@ -21,16 +21,33 @@ module Calculator
|
|
21
21
|
convert_to_clocktime(velocity_in_seconds)
|
22
22
|
end
|
23
23
|
|
24
|
+
def pace(time, distance)
|
25
|
+
check_positive(distance)
|
26
|
+
check_positive(time)
|
27
|
+
time.to_f / distance
|
28
|
+
end
|
29
|
+
|
30
|
+
def checked_pace(time, distance)
|
31
|
+
check_time(time)
|
32
|
+
seconds = convert_to_seconds(time)
|
33
|
+
pace(seconds, distance)
|
34
|
+
end
|
35
|
+
|
36
|
+
def clock_pace(time, distance)
|
37
|
+
velocity_in_seconds = checked_pace(time, distance)
|
38
|
+
convert_to_clocktime(velocity_in_seconds)
|
39
|
+
end
|
40
|
+
|
24
41
|
def time(velocity, distance)
|
42
|
+
check_positive(distance)
|
43
|
+
check_positive(velocity)
|
25
44
|
velocity * distance
|
26
45
|
end
|
27
46
|
|
28
47
|
def checked_time(velocity, distance)
|
29
48
|
check_time(velocity)
|
30
|
-
|
31
|
-
|
32
|
-
velocity_seconds = convert_to_bigdecimal(convert_to_seconds(velocity))
|
33
|
-
time(velocity_seconds, distance_to_calc)
|
49
|
+
velocity_seconds = convert_to_seconds(velocity)
|
50
|
+
time(velocity_seconds, distance)
|
34
51
|
end
|
35
52
|
|
36
53
|
def clock_time(velocity, distance)
|
@@ -39,14 +56,16 @@ module Calculator
|
|
39
56
|
end
|
40
57
|
|
41
58
|
def distance(time, velocity)
|
42
|
-
time
|
59
|
+
check_positive(time)
|
60
|
+
check_positive(velocity)
|
61
|
+
time.to_f / velocity
|
43
62
|
end
|
44
63
|
|
45
64
|
def checked_distance(time, velocity)
|
46
65
|
check_time(time)
|
47
66
|
check_time(velocity)
|
48
|
-
time_seconds =
|
49
|
-
velocity_seconds =
|
67
|
+
time_seconds = convert_to_seconds(time)
|
68
|
+
velocity_seconds = convert_to_seconds(velocity)
|
50
69
|
distance(time_seconds, velocity_seconds)
|
51
70
|
end
|
52
71
|
end
|
data/lib/calcpace/checker.rb
CHANGED
data/lib/calcpace/converter.rb
CHANGED
@@ -35,9 +35,7 @@ module Converter
|
|
35
35
|
def convert(value, unit)
|
36
36
|
check_positive(value)
|
37
37
|
unit_constant = constant(unit)
|
38
|
-
|
39
|
-
unit_to_convert = convert_to_bigdecimal(unit_constant)
|
40
|
-
value_to_convert * unit_to_convert
|
38
|
+
value * unit_constant
|
41
39
|
end
|
42
40
|
|
43
41
|
def convert_to_seconds(time)
|
@@ -50,15 +48,11 @@ module Converter
|
|
50
48
|
Time.at(seconds.to_i).utc.strftime(format)
|
51
49
|
end
|
52
50
|
|
53
|
-
def
|
54
|
-
|
55
|
-
end
|
56
|
-
|
57
|
-
def constant(string)
|
58
|
-
Converter.const_get(string.upcase.gsub(' ', '_'))
|
51
|
+
def constant(symbol)
|
52
|
+
Converter.const_get(symbol.to_s.upcase)
|
59
53
|
end
|
60
54
|
|
61
55
|
def list_constants
|
62
|
-
Converter.constants
|
56
|
+
Converter.constants.map { |c| c.downcase.to_sym }
|
63
57
|
end
|
64
58
|
end
|
data/lib/calcpace.rb
CHANGED
@@ -4,7 +4,7 @@ require_relative 'calcpace/calculator'
|
|
4
4
|
require_relative 'calcpace/checker'
|
5
5
|
require_relative 'calcpace/converter'
|
6
6
|
|
7
|
-
# Main class to calculate velocity, time, distance and velocity
|
7
|
+
# Main class to calculate velocity, pace, time, distance and velocity
|
8
8
|
class Calcpace
|
9
9
|
include Calculator
|
10
10
|
include Checker
|
@@ -12,7 +12,5 @@ class Calcpace
|
|
12
12
|
|
13
13
|
attr_reader :bigdecimal
|
14
14
|
|
15
|
-
def initialize
|
16
|
-
@bigdecimal = bigdecimal
|
17
|
-
end
|
15
|
+
def initialize; end
|
18
16
|
end
|
@@ -7,12 +7,14 @@ require_relative '../../lib/calcpace'
|
|
7
7
|
class TestCalculator < Minitest::Test
|
8
8
|
def setup
|
9
9
|
@checker = Calcpace.new
|
10
|
-
@checker_bigdecimal = Calcpace.new(true)
|
11
10
|
end
|
12
11
|
|
13
12
|
def test_velocity
|
14
|
-
assert_equal
|
15
|
-
assert_equal
|
13
|
+
assert_equal 3.333, @checker.velocity(3600, 12_000).round(3)
|
14
|
+
assert_equal 12.3, @checker.velocity(5841, 71_844.3)
|
15
|
+
assert_equal 3.6, @checker.velocity(10_000, 36_000.0)
|
16
|
+
assert_raises(RuntimeError) { @checker.velocity(0, 10) }
|
17
|
+
assert_raises(RuntimeError) { @checker.velocity(10, -1) }
|
16
18
|
end
|
17
19
|
|
18
20
|
def test_checked_velocity
|
@@ -20,13 +22,9 @@ class TestCalculator < Minitest::Test
|
|
20
22
|
assert_raises(RuntimeError) { @checker.checked_velocity('invalid', 10) }
|
21
23
|
assert_raises(RuntimeError) { @checker.checked_velocity('00:00:00', 0) }
|
22
24
|
assert_raises(RuntimeError) { @checker.checked_velocity('00:00:00', -1) }
|
23
|
-
assert_equal
|
24
|
-
assert_equal
|
25
|
-
|
26
|
-
|
27
|
-
def test_checked_velocity_with_bigdecimal_precision
|
28
|
-
assert_equal BigDecimal('0.474878048780487804878048780487804878049e3'),
|
29
|
-
@checker_bigdecimal.checked_velocity('01:37:21', 12.3)
|
25
|
+
assert_equal 2.778, @checker.checked_velocity('01:00:00', 10_000).round(3)
|
26
|
+
assert_equal 10, @checker.checked_velocity('00:00:01', 10)
|
27
|
+
assert_equal 12.3, @checker.checked_velocity('01:37:21', 71_844.3)
|
30
28
|
end
|
31
29
|
|
32
30
|
def test_clock_velocity
|
@@ -34,13 +32,40 @@ class TestCalculator < Minitest::Test
|
|
34
32
|
assert_raises(RuntimeError) { @checker.clock_velocity('invalid', 10) }
|
35
33
|
assert_raises(RuntimeError) { @checker.clock_velocity('00:00:00', 0) }
|
36
34
|
assert_raises(RuntimeError) { @checker.clock_velocity('00:00:00', -1) }
|
37
|
-
assert_equal '00:
|
38
|
-
assert_equal '00:
|
35
|
+
assert_equal '00:00:02', @checker.clock_velocity('01:00:00', 10_000)
|
36
|
+
assert_equal '00:00:12', @checker.clock_velocity('01:37:21', 71_844.3)
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_pace
|
40
|
+
assert_equal 300, @checker.pace(3600, 12)
|
41
|
+
assert_equal 122.81076923076924, @checker.pace(71_844.3, 585.0)
|
42
|
+
assert_raises(RuntimeError) { @checker.pace(0, 10) }
|
43
|
+
assert_raises(RuntimeError) { @checker.pace(10, -1) }
|
44
|
+
end
|
45
|
+
|
46
|
+
def test_checked_pace
|
47
|
+
assert_raises(RuntimeError) { @checker.checked_pace('', 10) }
|
48
|
+
assert_raises(RuntimeError) { @checker.checked_pace('invalid', 10) }
|
49
|
+
assert_raises(RuntimeError) { @checker.checked_pace('00:00:00', 0) }
|
50
|
+
assert_raises(RuntimeError) { @checker.checked_pace('00:00:00', -1) }
|
51
|
+
assert_equal 360, @checker.checked_pace('01:00:00', 10)
|
52
|
+
assert_equal 474.8780487804878, @checker.checked_pace('01:37:21', 12.3)
|
53
|
+
end
|
54
|
+
|
55
|
+
def test_clock_pace
|
56
|
+
assert_raises(RuntimeError) { @checker.clock_pace('', 10) }
|
57
|
+
assert_raises(RuntimeError) { @checker.clock_pace('invalid', 10) }
|
58
|
+
assert_raises(RuntimeError) { @checker.clock_pace('00:00:00', 0) }
|
59
|
+
assert_raises(RuntimeError) { @checker.clock_pace('00:00:00', -1) }
|
60
|
+
assert_equal '00:06:00', @checker.clock_pace('01:00:00', 10)
|
61
|
+
assert_equal '00:07:54', @checker.clock_pace('01:37:21', 12.3)
|
39
62
|
end
|
40
63
|
|
41
64
|
def test_time
|
42
65
|
assert_equal 43_200, @checker.time(3600, 12)
|
43
66
|
assert_equal 5841.0, @checker.time(12.3, 474.8780487804878)
|
67
|
+
assert_raises(RuntimeError) { @checker.time(0, 10) }
|
68
|
+
assert_raises(RuntimeError) { @checker.time(10, -1) }
|
44
69
|
end
|
45
70
|
|
46
71
|
def test_checked_time
|
@@ -52,10 +77,6 @@ class TestCalculator < Minitest::Test
|
|
52
77
|
assert_equal 71_844.3, @checker.checked_time('01:37:21', 12.3)
|
53
78
|
end
|
54
79
|
|
55
|
-
def test_checked_time_with_bigdecimal_precision
|
56
|
-
assert_equal BigDecimal('0.718443e5'), @checker_bigdecimal.checked_time('01:37:21', 12.3)
|
57
|
-
end
|
58
|
-
|
59
80
|
def test_clock_time
|
60
81
|
assert_raises(RuntimeError) { @checker.clock_time('', 10) }
|
61
82
|
assert_raises(RuntimeError) { @checker.clock_time('invalid', 10) }
|
@@ -67,17 +88,31 @@ class TestCalculator < Minitest::Test
|
|
67
88
|
def test_distance
|
68
89
|
assert_equal 30, @checker.distance(3600, 120)
|
69
90
|
assert_equal 12.3, @checker.distance(5841.0, 474.8780487804878)
|
91
|
+
assert_raises(RuntimeError) { @checker.distance(0, 10) }
|
92
|
+
assert_raises(RuntimeError) { @checker.distance(10, -1) }
|
70
93
|
end
|
71
94
|
|
72
95
|
def test_checked_distance
|
73
96
|
assert_raises(RuntimeError) { @checker.checked_distance('', '00:05:00') }
|
74
97
|
assert_raises(RuntimeError) { @checker.checked_distance('01:00:00', '') }
|
75
98
|
assert_equal 18.0, @checker.checked_distance('01:30:00', '00:05:00')
|
76
|
-
assert_equal 15.
|
99
|
+
assert_equal 15.493, @checker.checked_distance('01:37:21', '00:06:17').round(3)
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_readme_examples_one
|
103
|
+
assert_equal 3.386206896551724, @checker.velocity(3625, 12_275)
|
104
|
+
assert_equal 305.4166666666667, @checker.pace(3665, 12)
|
105
|
+
assert_equal 2520.0, @checker.time(210, 12)
|
106
|
+
assert_equal 80.5, @checker.distance(9660, 120)
|
77
107
|
end
|
78
108
|
|
79
|
-
def
|
80
|
-
assert_equal
|
81
|
-
|
109
|
+
def test_readme_examples_two
|
110
|
+
assert_equal 2.8658333333333332, @checker.checked_velocity('01:00:00', 10_317)
|
111
|
+
assert_equal '00:00:02', @checker.clock_velocity('01:00:00', 10_317)
|
112
|
+
assert_equal 489.2, @checker.checked_pace('01:21:32', 10)
|
113
|
+
assert_equal '00:08:09', @checker.clock_pace('01:21:32', 10)
|
114
|
+
assert_equal 4170.599999999999, @checker.checked_time('00:05:31', 12.6)
|
115
|
+
assert_equal '01:09:30', @checker.clock_time('00:05:31', 12.6)
|
116
|
+
assert_equal 12.640826873385013, @checker.checked_distance('01:21:32', '00:06:27')
|
82
117
|
end
|
83
118
|
end
|
@@ -6,7 +6,6 @@ require_relative '../../lib/calcpace'
|
|
6
6
|
class TestConverter < Minitest::Test
|
7
7
|
def setup
|
8
8
|
@checker = Calcpace.new
|
9
|
-
@checker_bigdecimal = Calcpace.new(true)
|
10
9
|
end
|
11
10
|
|
12
11
|
def test_convert_to_seconds
|
@@ -17,40 +16,49 @@ class TestConverter < Minitest::Test
|
|
17
16
|
assert_equal '01:11:02', @checker.convert_to_clocktime(4262)
|
18
17
|
end
|
19
18
|
|
20
|
-
def
|
21
|
-
assert_equal 0.621371, @checker.convert(1,
|
22
|
-
assert_equal 1.60934, @checker.convert(1,
|
23
|
-
assert_equal 1.852, @checker.convert(1,
|
24
|
-
assert_equal 0.539957, @checker.convert(1,
|
25
|
-
assert_equal 0.001, @checker.convert(1,
|
26
|
-
assert_equal 1000, @checker.convert(1,
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
assert_equal 0.
|
31
|
-
assert_equal
|
32
|
-
assert_equal
|
33
|
-
assert_equal
|
34
|
-
assert_equal
|
35
|
-
end
|
36
|
-
|
37
|
-
def
|
38
|
-
assert_equal
|
39
|
-
assert_equal
|
40
|
-
assert_equal
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
assert_equal
|
45
|
-
assert_equal
|
46
|
-
assert_equal
|
47
|
-
assert_equal 0.
|
19
|
+
def test_convert_distance_one
|
20
|
+
assert_equal 0.621371, @checker.convert(1, :km_to_mi)
|
21
|
+
assert_equal 1.60934, @checker.convert(1, :mi_to_km)
|
22
|
+
assert_equal 1.852, @checker.convert(1, :nautical_mi_to_km)
|
23
|
+
assert_equal 0.539957, @checker.convert(1, :km_to_nautical_mi)
|
24
|
+
assert_equal 0.001, @checker.convert(1, :meters_to_km)
|
25
|
+
assert_equal 1000, @checker.convert(1, :km_to_meters)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_convert_distance_two
|
29
|
+
assert_equal 0.000621371, @checker.convert(1, :meters_to_mi)
|
30
|
+
assert_equal 1609.34, @checker.convert(1, :mi_to_meters)
|
31
|
+
assert_equal 3.28084, @checker.convert(1, :meters_to_feet)
|
32
|
+
assert_equal 0.3048, @checker.convert(1, :feet_to_meters)
|
33
|
+
assert_equal 1.09361, @checker.convert(1, :meters_to_yards)
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_convert_distance_three
|
37
|
+
assert_equal 0.9144, @checker.convert(1, :yards_to_meters)
|
38
|
+
assert_equal 39.3701, @checker.convert(1, :meters_to_inches)
|
39
|
+
assert_equal 0.0254, @checker.convert(1, :inches_to_meters)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_convert_velocity_one
|
43
|
+
assert_equal 3.60, @checker.convert(1, :m_s_to_km_h)
|
44
|
+
assert_equal 0.277778, @checker.convert(1, :km_h_to_m_s)
|
45
|
+
assert_equal 2.23694, @checker.convert(1, :m_s_to_mi_h)
|
46
|
+
assert_equal 0.44704, @checker.convert(1, :mi_h_to_m_s)
|
47
|
+
assert_equal 1.94384, @checker.convert(1, :m_s_to_nautical_mi_h)
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_convert_velocity_two
|
51
|
+
assert_equal 0.514444, @checker.convert(1, :nautical_mi_h_to_m_s)
|
52
|
+
assert_equal 0.621371, @checker.convert(1, :km_h_to_mi_h)
|
53
|
+
assert_equal 1.60934, @checker.convert(1, :mi_h_to_km_h)
|
54
|
+
assert_equal 1.94384, @checker.convert(1, :m_s_to_knots)
|
55
|
+
assert_equal 0.514444, @checker.convert(1, :knots_to_m_s)
|
48
56
|
end
|
49
57
|
|
50
58
|
def test_constant
|
51
|
-
assert_equal 0.621371, @checker.constant(
|
52
|
-
assert_equal 1.60934, @checker.constant(
|
53
|
-
assert_equal 1.852, @checker.constant(
|
59
|
+
assert_equal 0.621371, @checker.constant(:km_to_mi)
|
60
|
+
assert_equal 1.60934, @checker.constant(:mi_to_km)
|
61
|
+
assert_equal 1.852, @checker.constant(:nautical_mi_to_km)
|
54
62
|
end
|
55
63
|
|
56
64
|
def test_list_constants
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calcpace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joao Gilberto Saraiva
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-09-
|
11
|
+
date: 2024-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -80,9 +80,9 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '1.66'
|
83
|
-
description: Calcpace is
|
84
|
-
and time. It can calculate velocity, total time, and distance
|
85
|
-
|
83
|
+
description: Calcpace is designed for calculations and conversions related to distance
|
84
|
+
and time. It can calculate velocity, pace, total time, and distance and it supports
|
85
|
+
conversion to 26 different units, including kilometers, miles, meters, and feet.
|
86
86
|
email: joaogilberto@tuta.io
|
87
87
|
executables: []
|
88
88
|
extensions: []
|
@@ -115,11 +115,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
115
|
- !ruby/object:Gem::Version
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
|
-
rubygems_version: 3.
|
118
|
+
rubygems_version: 3.4.6
|
119
119
|
signing_key:
|
120
120
|
specification_version: 4
|
121
121
|
summary: 'Calcpace: calculate total, distance, velocity and convert distances in an
|
122
|
-
easy
|
122
|
+
easy way.'
|
123
123
|
test_files:
|
124
124
|
- test/calcpace/test_calculator.rb
|
125
125
|
- test/calcpace/test_checker.rb
|