calcpace 0.1.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11ad12749e77c35206d4753b60f3db604ea548ab75724d1602606c9cb9eca196
4
- data.tar.gz: fb65325f6210995dd7f64f0b1707e328a77e08b83a85dbfc0644bec1de7e6548
3
+ metadata.gz: 200091226ac840d686c80783b1ffdd25880e33d055023584bcf0d6ad4f80942b
4
+ data.tar.gz: 983b752d6d4569accd2deebeecf0d071dd7d5d7c4d86ad13949b0dc57992efcb
5
5
  SHA512:
6
- metadata.gz: 61b82828b6d43b293744526ac4f34e434df820c19be0a8378e3cbfbe0995e357aaefb6a1caedb50831f5b7c81a9776d64ac599a5a3e858979b7b549737a6d5b9
7
- data.tar.gz: e4d9c623fbf2c0a9ab4d9953cadbed377b7867a3c3b0be494fd572860bf467c5ae88cfbd80d038e4157fcea44b799f2cc4d476598a6f621b2d85057fca51958e
6
+ metadata.gz: bc18311a99f36de42c7684bab706665d875abf9d579ca31a05d2cebbd8ae75be66f6c34d5242d6d76538f78198c7ef4931a427c43a62b444abf1e0c8cfdc89da
7
+ data.tar.gz: '0086fe8432f284529da6c6c7ded77488895360da55542f8ca6f50c8fd2976e3d8c2bf2e22d9c56cd10f9a560a4ad4666a12fc34655dbea263cd4f698eafb4e9c'
@@ -1,25 +1,21 @@
1
- # frozen_string_literal: true
2
-
3
- module Calculator
4
- def pace(time, distance)
5
- check_digits(time, distance)
6
- convert_to_clocktime(convert_to_seconds(time) / distance.to_f)
7
- end
8
-
9
- def total_time(pace, distance)
10
- check_digits(pace, distance)
11
- convert_to_clocktime(convert_to_seconds(pace) * distance.to_f)
12
- end
13
-
14
- def distance(time, pace)
15
- check_digits_time(time)
16
- check_digits_time(pace)
17
- convert_to_seconds(time).to_f / convert_to_seconds(pace).round(2)
18
- end
19
-
20
- def convert_distance(distance, unit)
21
- check_digits_distance(distance)
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
@@ -1,20 +1,19 @@
1
- # frozen_string_literal: true
2
-
3
- module Checker
4
- def check_digits(time, distance)
5
- check_digits_time(time)
6
- check_digits_distance(distance)
7
- end
8
-
9
- def check_digits_distance(distance)
10
- raise 'It must be a X.X positive number' unless distance.positive?
11
- end
12
-
13
- def check_digits_time(time_string)
14
- raise 'It must be a XX:XX:XX time' unless time_string =~ /\d{0,2}(:)*?\d{1,2}(:)\d{1,2}/
15
- end
16
-
17
- def check_unit(unit)
18
- raise 'It must be km or mi' unless %w[km mi].include?(unit)
19
- end
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
@@ -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
- Time.at(seconds).utc.strftime('%H:%M:%S')
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
- # tem que chamar as checagens de digitos antes de chamar o convert_distance
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(2)
34
+ (distance * 0.621371).round(round_limit)
18
35
  when 'mi'
19
- (distance * 1.60934).round(2)
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: 0.1.0
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-05-25 00:00:00.000000000 Z
12
- dependencies: []
13
- description: Calculate pace, time, distance, and convert distances for running and
14
- cycling.
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
- post_install_message:
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: '0'
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.2.33
133
+ rubygems_version: 3.4.6
44
134
  signing_key:
45
135
  specification_version: 4
46
- summary: Calcpace
47
- test_files: []
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