runby_pace 0.6.123 → 0.6.124

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 14bec52c2faa7e9936526d994d3d4a10c6e74509
4
- data.tar.gz: 8068b32a9353c112ab6d29a87dd170bdf7d1513f
3
+ metadata.gz: ab3528d5bb2681d6241b9ca99106635041ede241
4
+ data.tar.gz: 6fd638b564e1cd2624edabb1a9833d94483c757b
5
5
  SHA512:
6
- metadata.gz: 120a13af53ead77a23645364eaf91de9d9a47cdf52286dd26ac830b81d2676c6bca0978c68df415161cae288d8dd85f5512de7385b7d3512474ee5bf766cedad
7
- data.tar.gz: fb4abaf19e39ac604606f0964a0fc13e487e78f89a4d68c7aee8243ebe30d41cf4c10a1f8a5104c397ed2447cf2a7ac2ff813bbb20627267dfd9387b400019e1
6
+ metadata.gz: 0157335b0c09de79498c21c5ddd8db68d82719dcab782731d7ffbcf66756499cc7a1562e46fc58e5abc80a3f4615865dc2e382ca74ce3c6a853c93101af8f76f
7
+ data.tar.gz: 45f5e6e4d3519630ca5cd8eebae21f96d0dd0af839ef1cbeca6ddaf1ac68b4acd599642dd2d803ef72af7a4babd8ac3c57a50110721aab3af6a71d019ca52696
@@ -19,8 +19,8 @@ module Runby
19
19
  end
20
20
  end
21
21
 
22
- def convert_to(uom)
23
- target_uom = DistanceUnit.new uom
22
+ def convert_to(target_uom)
23
+ target_uom = DistanceUnit.new target_uom unless target_uom.is_a?(DistanceUnit)
24
24
  target_multiplier = kilometers / (target_uom.conversion_factor * 1.0)
25
25
  Distance.new target_uom, target_multiplier
26
26
  end
@@ -43,7 +43,7 @@ module Runby
43
43
  parsed_uom = Runby::DistanceUnit.parse uom
44
44
  raise "'#{uom.strip}' is not recognized as a distance unit" if parsed_uom.nil?
45
45
 
46
- self.new parsed_uom, multiplier
46
+ new parsed_uom, multiplier
47
47
  end
48
48
 
49
49
  def self.try_parse(str)
@@ -51,7 +51,7 @@ module Runby
51
51
  begin
52
52
  distance = parse str
53
53
  rescue StandardError => ex
54
- error_message = "#{ex.message}"
54
+ error_message = ex.message.to_s
55
55
  end
56
56
  { distance: distance, error: error_message }
57
57
  end
@@ -64,15 +64,52 @@ module Runby
64
64
  end
65
65
  end
66
66
 
67
+ # @param [Distance, String] other
67
68
  def <=>(other)
68
69
  raise "Cannot compare Runby::Distance to #{other.class}" unless [Distance, String].include? other.class
69
70
  if other.is_a?(String)
70
71
  return 0 if to_s == other || to_s(format: :long) == other
71
- return self <=> try_parse(other)[:distance]
72
+ return self <=> Distance.try_parse(other)[:distance]
72
73
  end
73
74
  kilometers <=> other.kilometers
74
75
  end
75
76
 
77
+ # @param [Distance] other
78
+ # @return [Distance]
79
+ def +(other)
80
+ raise "Cannot add Runby::Distance to #{other.class}" unless other.is_a?(Distance)
81
+ sum_in_km = Distance.new(:km, kilometers + other.kilometers)
82
+ sum_in_km.convert_to(@uom)
83
+ end
84
+
85
+ # @param [Distance] other
86
+ # @return [Distance]
87
+ def -(other)
88
+ raise "Cannot add Runby::Distance to #{other.class}" unless other.is_a?(Distance)
89
+ sum_in_km = Distance.new(:km, kilometers - other.kilometers)
90
+ sum_in_km.convert_to(@uom)
91
+ end
92
+
93
+ # @param [Numeric] other
94
+ # @return [Distance]
95
+ def *(other)
96
+ raise "Cannot multiply Runby::Distance by #{other.class}" unless other.is_a?(Numeric)
97
+ product_in_km = Distance.new(:km, kilometers * other)
98
+ product_in_km.convert_to(@uom)
99
+ end
100
+
101
+ # @param [Numeric, Distance] other
102
+ # @return [Distance, Numeric]
103
+ def /(other)
104
+ raise "Cannot divide Runby::Distance by #{other.class}" unless other.is_a?(Numeric) || other.is_a?(Distance)
105
+ if other.is_a?(Numeric)
106
+ quotient_in_km = Distance.new(:km, kilometers / other)
107
+ return quotient_in_km.convert_to(@uom)
108
+ elsif other.is_a?(Distance)
109
+ return kilometers / other.kilometers
110
+ end
111
+ end
112
+
76
113
  private
77
114
 
78
115
  def init_from_clone(distance)
@@ -40,7 +40,7 @@ module Runby
40
40
  end
41
41
  end
42
42
  raise "Error parsing distance unit '#{description}'" unless found_uom
43
- return DistanceUnit.new found_uom
43
+ DistanceUnit.new found_uom
44
44
  end
45
45
 
46
46
  def self.try_parse(str)
@@ -48,14 +48,14 @@ module Runby
48
48
  begin
49
49
  uom = parse str
50
50
  rescue StandardError => ex
51
- error_message = "#{ex.message}"
51
+ error_message = ex.message
52
52
  end
53
53
  { uom: uom, error: error_message }
54
54
  end
55
55
 
56
56
  def self.known_uom?(symbol)
57
57
  # TODO: test
58
- @@_uom_definitions.has_key?(symbol)
58
+ @@_uom_definitions.key?(symbol)
59
59
  end
60
60
 
61
61
  def ==(other)
@@ -1,10 +1,12 @@
1
1
  module Runby
2
2
  # An assortment of mathematical functions related to running.
3
3
  class RunMath
4
- def self.predict_five_k_time(distance, time)
5
- distance = Distance.new(distance)
6
- time = RunbyTime.new(time)
4
+ def self.predict_race_time(race1_distance, race1_time, target_distance)
5
+ race1_distance = Distance.new(race1_distance)
6
+ race1_time = RunbyTime.new(race1_time)
7
+ target_distance = Distance.new(target_distance)
7
8
 
9
+ race1_time * (target_distance / race1_distance)**1.06
8
10
  end
9
11
  end
10
12
  end
@@ -111,23 +111,27 @@ module Runby
111
111
 
112
112
  # @param [RunbyTime] other
113
113
  def -(other)
114
- RunbyTime.from_seconds(total_seconds - other.total_seconds) if other.is_a?(RunbyTime)
114
+ raise "Cannot subtract #{other.class} from a Runby::RunbyTime" unless other.is_a?(RunbyTime)
115
+ RunbyTime.from_seconds(total_seconds - other.total_seconds)
115
116
  end
116
117
 
117
118
  # @param [RunbyTime] other
118
119
  def +(other)
119
- RunbyTime.from_seconds(total_seconds + other.total_seconds) if other.is_a?(RunbyTime)
120
+ raise "Cannot add Runby::RunbyTime to a #{other.class}" unless other.is_a?(RunbyTime)
121
+ RunbyTime.from_seconds(total_seconds + other.total_seconds)
120
122
  end
121
123
 
122
124
  # @param [Numeric] other
123
125
  # @return [RunbyTime]
124
126
  def *(other)
125
- RunbyTime.from_minutes(total_minutes * other) if other.is_a?(Numeric)
127
+ raise "Cannot multiply Runby::RunbyTime with a #{other.class}" unless other.is_a?(Numeric)
128
+ RunbyTime.from_minutes(total_minutes * other)
126
129
  end
127
130
 
128
131
  # @param [RunbyTime, Numeric] other
129
132
  # @return [Numeric, RunbyTime]
130
133
  def /(other)
134
+ raise "Cannot divide Runby::RunbyTime by #{other.class}" unless other.is_a?(RunbyTime) || other.is_a?(Numeric)
131
135
  case other
132
136
  when RunbyTime
133
137
  total_seconds / other.total_seconds
@@ -137,6 +141,7 @@ module Runby
137
141
  end
138
142
 
139
143
  def <=>(other)
144
+ raise "Cannot compare Runby::RunbyTime to #{other.class}" unless [RunbyTime, String].include? other.class
140
145
  if other.is_a? RunbyTime
141
146
  total_seconds <=> other.total_seconds
142
147
  elsif other.is_a? String
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: runby_pace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.123
4
+ version: 0.6.124
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ty Walls
@@ -101,7 +101,7 @@ homepage: https://github.com/tygerbytes/runby-pace
101
101
  licenses:
102
102
  - MIT
103
103
  metadata:
104
- commit-hash: bafaefeb3f83f25cacbe2cd6af83382c348f1ef7
104
+ commit-hash: 806f350b205ca30ba6edc582c854c11ee4ac2ac1
105
105
  post_install_message:
106
106
  rdoc_options: []
107
107
  require_paths: