calcpace 0.1.0 → 1.0.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 +21 -25
- data/lib/calcpace/checker.rb +19 -20
- data/lib/calcpace/converter.rb +22 -5
- data/lib/calcpace.rb +13 -13
- data/test/calcpace/test_calculator.rb +32 -0
- data/test/calcpace/test_checker.rb +27 -0
- data/test/calcpace/test_converter.rb +49 -0
- metadata +105 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 200091226ac840d686c80783b1ffdd25880e33d055023584bcf0d6ad4f80942b
|
4
|
+
data.tar.gz: 983b752d6d4569accd2deebeecf0d071dd7d5d7c4d86ad13949b0dc57992efcb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bc18311a99f36de42c7684bab706665d875abf9d579ca31a05d2cebbd8ae75be66f6c34d5242d6d76538f78198c7ef4931a427c43a62b444abf1e0c8cfdc89da
|
7
|
+
data.tar.gz: '0086fe8432f284529da6c6c7ded77488895360da55542f8ca6f50c8fd2976e3d8c2bf2e22d9c56cd10f9a560a4ad4666a12fc34655dbea263cd4f698eafb4e9c'
|
data/lib/calcpace/calculator.rb
CHANGED
@@ -1,25 +1,21 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Calculator
|
4
|
-
def pace(time, distance)
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
check_unit(unit)
|
23
|
-
convert(distance, unit)
|
24
|
-
end
|
25
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Calculator
|
4
|
+
def pace(time, distance)
|
5
|
+
check_time(time)
|
6
|
+
check_distance(distance)
|
7
|
+
convert_to_clocktime(convert_to_seconds(time) / distance.to_f)
|
8
|
+
end
|
9
|
+
|
10
|
+
def total_time(pace, distance)
|
11
|
+
check_time(pace)
|
12
|
+
check_distance(distance)
|
13
|
+
convert_to_clocktime(convert_to_seconds(pace) * distance.to_f)
|
14
|
+
end
|
15
|
+
|
16
|
+
def distance(time, pace)
|
17
|
+
check_time(time)
|
18
|
+
check_time(pace)
|
19
|
+
convert_to_seconds(time).to_f / convert_to_seconds(pace).round(2)
|
20
|
+
end
|
21
|
+
end
|
data/lib/calcpace/checker.rb
CHANGED
@@ -1,20 +1,19 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Checker
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Checker
|
4
|
+
def check_distance(distance)
|
5
|
+
raise 'It must be a X.X positive number' unless distance.positive?
|
6
|
+
end
|
7
|
+
|
8
|
+
def check_time(time_string)
|
9
|
+
raise 'It must be a XX:XX:XX time' unless time_string =~ /\d{0,2}(:)*?\d{1,2}(:)\d{1,2}/
|
10
|
+
end
|
11
|
+
|
12
|
+
def check_integer(second)
|
13
|
+
raise 'It must be a positive number' unless second.is_a?(Integer) && second.positive?
|
14
|
+
end
|
15
|
+
|
16
|
+
def check_unit(unit)
|
17
|
+
raise 'It must be km or mi' unless %w[km mi].include?(unit)
|
18
|
+
end
|
19
|
+
end
|
data/lib/calcpace/converter.rb
CHANGED
@@ -1,22 +1,39 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Converter
|
4
|
+
def to_seconds(time)
|
5
|
+
check_time(time)
|
6
|
+
convert_to_seconds(time)
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_clocktime(seconds)
|
10
|
+
check_integer(seconds)
|
11
|
+
convert_to_clocktime(seconds)
|
12
|
+
end
|
13
|
+
|
14
|
+
def convert(distance, unit, round_limit = 2)
|
15
|
+
check_distance(distance)
|
16
|
+
check_unit(unit)
|
17
|
+
check_integer(round_limit)
|
18
|
+
convert_the_distance(distance, unit, round_limit)
|
19
|
+
end
|
20
|
+
|
4
21
|
def convert_to_seconds(time)
|
5
22
|
hour, minute, seconds = time.split(':').map(&:to_i)
|
6
23
|
(hour * 3600) + (minute * 60) + seconds
|
7
24
|
end
|
8
25
|
|
9
26
|
def convert_to_clocktime(seconds)
|
10
|
-
|
27
|
+
seconds >= 86_400 ? time = '%d %H:%M:%S' : time = '%H:%M:%S'
|
28
|
+
Time.at(seconds).utc.strftime(time)
|
11
29
|
end
|
12
30
|
|
13
|
-
|
14
|
-
def convert(distance, unit)
|
31
|
+
def convert_the_distance(distance, unit, round_limit = 2)
|
15
32
|
case unit
|
16
33
|
when 'km'
|
17
|
-
(distance * 0.621371).round(
|
34
|
+
(distance * 0.621371).round(round_limit)
|
18
35
|
when 'mi'
|
19
|
-
(distance * 1.60934).round(
|
36
|
+
(distance * 1.60934).round(round_limit)
|
20
37
|
end
|
21
38
|
end
|
22
39
|
end
|
data/lib/calcpace.rb
CHANGED
@@ -1,13 +1,13 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require_relative 'calcpace/calculator'
|
4
|
-
require_relative 'calcpace/checker'
|
5
|
-
require_relative 'calcpace/converter'
|
6
|
-
|
7
|
-
class Calcpace
|
8
|
-
include Calculator
|
9
|
-
include Checker
|
10
|
-
include Converter
|
11
|
-
|
12
|
-
def initialize; end
|
13
|
-
end
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative 'calcpace/calculator'
|
4
|
+
require_relative 'calcpace/checker'
|
5
|
+
require_relative 'calcpace/converter'
|
6
|
+
|
7
|
+
class Calcpace
|
8
|
+
include Calculator
|
9
|
+
include Checker
|
10
|
+
include Converter
|
11
|
+
|
12
|
+
def initialize; end
|
13
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require_relative '../../lib/calcpace'
|
5
|
+
|
6
|
+
class TestCalculator < Minitest::Test
|
7
|
+
def setup
|
8
|
+
@checker = Calcpace.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_pace
|
12
|
+
assert_raises(RuntimeError) { @checker.pace('', 10) }
|
13
|
+
assert_raises(RuntimeError) { @checker.pace('invalid', 10) }
|
14
|
+
assert_raises(RuntimeError) { @checker.pace('00:00:00', 0) }
|
15
|
+
assert_raises(RuntimeError) { @checker.pace('00:00:00', -1) }
|
16
|
+
assert_equal '00:06:00', @checker.pace('01:00:00', 10)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_total_time
|
20
|
+
assert_raises(RuntimeError) { @checker.total_time('', 10) }
|
21
|
+
assert_raises(RuntimeError) { @checker.total_time('invalid', 10) }
|
22
|
+
assert_raises(RuntimeError) { @checker.total_time('00:00:00', 0) }
|
23
|
+
assert_raises(RuntimeError) { @checker.total_time('00:00:00', -1) }
|
24
|
+
assert_equal '01:00:00', @checker.total_time('00:05:00', 12)
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_distance
|
28
|
+
assert_raises(RuntimeError) { @checker.distance('', '00:05:00') }
|
29
|
+
assert_raises(RuntimeError) { @checker.distance('01:00:00', '') }
|
30
|
+
assert_equal 18.0, @checker.distance('01:30:00', '00:05:00')
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require_relative '../../lib/calcpace'
|
5
|
+
|
6
|
+
class TestChecker < Minitest::Test
|
7
|
+
def setup
|
8
|
+
@checker = Calcpace.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_check_distance
|
12
|
+
assert_raises(RuntimeError) { @checker.check_distance(-1) }
|
13
|
+
assert_raises(RuntimeError) { @checker.check_distance(0) }
|
14
|
+
assert_nil @checker.check_distance(1)
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_check_time
|
18
|
+
assert_raises(RuntimeError) { @checker.check_time('') }
|
19
|
+
assert_nil @checker.check_time('00:00:00')
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_check_integer
|
23
|
+
assert_raises(RuntimeError) { @checker.check_integer(-1) }
|
24
|
+
assert_raises(RuntimeError) { @checker.check_integer(0) }
|
25
|
+
assert_nil @checker.check_integer(1)
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'minitest/autorun'
|
4
|
+
require_relative '../../lib/calcpace'
|
5
|
+
|
6
|
+
class TestConverter < Minitest::Test
|
7
|
+
def setup
|
8
|
+
@checker = Calcpace.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_convert_to_seconds
|
12
|
+
assert_equal 4262, @checker.convert_to_seconds('01:11:02')
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_to_seconds
|
16
|
+
assert_equal 3600, @checker.to_seconds('01:00:00')
|
17
|
+
assert_raises(RuntimeError) { @checker.to_seconds('invalid') }
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_convert_to_clocktime
|
21
|
+
assert_equal '01:11:02', @checker.convert_to_clocktime(4262)
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_to_clocktime
|
25
|
+
assert_equal '01:00:00', @checker.to_clocktime(3600)
|
26
|
+
assert_equal '02 01:00:00', @checker.to_clocktime(90000)
|
27
|
+
assert_raises(RuntimeError) { @checker.to_clocktime(-1) }
|
28
|
+
assert_raises(RuntimeError) { @checker.to_clocktime(0) }
|
29
|
+
assert_raises(RuntimeError) { @checker.to_clocktime('invalid') }
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_convert_the_distance
|
33
|
+
assert_equal 6.21, @checker.convert_the_distance(10, 'km')
|
34
|
+
assert_equal 6.2, @checker.convert_the_distance(10, 'km', 1)
|
35
|
+
assert_equal 6.214, @checker.convert_the_distance(10, 'km', 3)
|
36
|
+
assert_equal 16.09, @checker.convert_the_distance(10, 'mi')
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_convert
|
40
|
+
assert_equal 6.21, @checker.convert(10, 'km')
|
41
|
+
assert_equal 16.09, @checker.convert(10, 'mi')
|
42
|
+
assert_equal 6.2, @checker.convert(10, 'km', 1)
|
43
|
+
assert_raises(RuntimeError) { @checker.convert(10, 'invalid') }
|
44
|
+
assert_raises(RuntimeError) { @checker.convert(-1, 'km') }
|
45
|
+
assert_raises(RuntimeError) { @checker.convert(10, 'km', -2) }
|
46
|
+
assert_raises(RuntimeError) { @checker.convert(10, 'km', 0) }
|
47
|
+
assert_raises(RuntimeError) { @checker.convert(10, 'km', 'invalid') }
|
48
|
+
end
|
49
|
+
end
|
metadata
CHANGED
@@ -1,17 +1,102 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: calcpace
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 1.0.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-
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
11
|
+
date: 2024-06-16 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: minitest
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '5.14'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '5.14'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '13.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '13.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake-compiler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rdoc
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '6.2'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '6.2'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rubocop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.79'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.79'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0.11'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0.11'
|
97
|
+
description: Calculate pace, total time, distance and easily convert distances (kilometers
|
98
|
+
and miles) for activities like running and cycling. Get readable results in HH:MM:SS
|
99
|
+
or X.X format for time and distance calculations.
|
15
100
|
email: joaogilberto@tuta.io
|
16
101
|
executables: []
|
17
102
|
extensions: []
|
@@ -21,11 +106,16 @@ files:
|
|
21
106
|
- lib/calcpace/calculator.rb
|
22
107
|
- lib/calcpace/checker.rb
|
23
108
|
- lib/calcpace/converter.rb
|
109
|
+
- test/calcpace/test_calculator.rb
|
110
|
+
- test/calcpace/test_checker.rb
|
111
|
+
- test/calcpace/test_converter.rb
|
24
112
|
homepage: https://github.com/0jonjo/calcpace
|
25
113
|
licenses:
|
26
114
|
- MIT
|
27
|
-
metadata:
|
28
|
-
|
115
|
+
metadata:
|
116
|
+
source_code_uri: https://github.com/0jonjo/calcpace
|
117
|
+
post_install_message: It's time to grab your sneakers or hop on your bike and start
|
118
|
+
exercising! Thank you for installing Calcpace!
|
29
119
|
rdoc_options: []
|
30
120
|
require_paths:
|
31
121
|
- lib
|
@@ -33,15 +123,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
33
123
|
requirements:
|
34
124
|
- - ">="
|
35
125
|
- !ruby/object:Gem::Version
|
36
|
-
version:
|
126
|
+
version: 2.7.0
|
37
127
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
38
128
|
requirements:
|
39
129
|
- - ">="
|
40
130
|
- !ruby/object:Gem::Version
|
41
131
|
version: '0'
|
42
132
|
requirements: []
|
43
|
-
rubygems_version: 3.
|
133
|
+
rubygems_version: 3.4.6
|
44
134
|
signing_key:
|
45
135
|
specification_version: 4
|
46
|
-
summary: Calcpace
|
47
|
-
|
136
|
+
summary: 'Calcpace: calculate time and distances for activities such as running and
|
137
|
+
cycling.'
|
138
|
+
test_files:
|
139
|
+
- test/calcpace/test_calculator.rb
|
140
|
+
- test/calcpace/test_checker.rb
|
141
|
+
- test/calcpace/test_converter.rb
|