distance 0.1.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 729676cbda36e7e5f8405041fb649cd1f426af3c
4
- data.tar.gz: e31a927a8636482ef000de1f79def342642efa66
3
+ metadata.gz: 687cc209435ce9c3846923b3e45bbcf93a98657b
4
+ data.tar.gz: 420b0b31cb846bf09e18d6cdf5a2d450351ac5de
5
5
  SHA512:
6
- metadata.gz: d2c490755baf580a8829d6f4bc4a7d2d65a55ef1fa03e98437fe93d4c3f5ac1d138189c49979659fc156324be4cd1a12390ff7467545172101878998b541aa1c
7
- data.tar.gz: db278af8f2917b383c70c2c55a89deee2c9e2c0948d8ea7f4229f7e9f2223274f7c40056d0714cb4db9aa038a494adb262ce1174cce101591807beb4875f37b8
6
+ metadata.gz: 5330a178f261c0f5e1e353297d236b99179552d68e2d567bc54c1a41657b7f88bc7ba470ac32bebec37f3ed37e7ac4e98c6b4722f679b60b676a1e0741b6877b
7
+ data.tar.gz: 4429e65174098ffd8e237cdb9b27d8a9bdf53baab47ac1ea94f0e0686cc9da3e157d420a00625e6108152d13d9d035c62885f249d8f6134b128cd69eea33165f
data/.gitignore CHANGED
@@ -10,3 +10,5 @@
10
10
 
11
11
  # rspec failure tracking
12
12
  .rspec_status
13
+
14
+ distance-*.gem
data/README.md CHANGED
@@ -20,7 +20,55 @@ Or install it yourself as:
20
20
 
21
21
  ## Usage
22
22
 
23
- TODO: Write usage instructions here
23
+ There are multiple options for constructing a new `Distance` instance. The basic
24
+ constructor expects an `Float` argument that is the distannce is meters, e.g.
25
+
26
+ ```ruby
27
+ eight_hundred_meters = Distance.new(800)
28
+ ```
29
+
30
+ If you are working with different units, you can construct a new instance with the
31
+ following convenience class methods
32
+
33
+ ```ruby
34
+ ten_miles = Distance.miles(10)
35
+ five_km = Distance.kilometers(5)
36
+ ```
37
+
38
+ Once you have a `Distance` instance, you can convert it to another base unit like
39
+
40
+ ```ruby
41
+ ten_miles.to_kilometers
42
+ # => 16.09344
43
+ five_km.to_miles
44
+ # => 3.11
45
+ ```
46
+
47
+ ### Distance math
48
+
49
+ You can perform basic math with distances
50
+
51
+ ```ruby
52
+ Distance.new(1) + Distance.new(2)
53
+ # => Distance.new(3)
54
+ Distance.new(3) - Distance.new(1)
55
+ # => Distance.new(2)
56
+ Distance.new(3) * 2
57
+ # => Distance.new(6)
58
+ Distance.new(6) / 2
59
+ # => Distance.new(3)
60
+ ```
61
+
62
+ ### Distance equality
63
+
64
+ You can also compare distances
65
+
66
+ ```ruby
67
+ Distance.new(10) > Distance.new(9)
68
+ # => true
69
+ Distance.miles(10) <= Distance.kilometers(10)
70
+ # => false
71
+ ```
24
72
 
25
73
  ## Development
26
74
 
@@ -0,0 +1 @@
1
+ require_relative '../core_ext/numeric'
@@ -1,3 +1,3 @@
1
1
  class Distance
2
- VERSION = '0.1.0'
2
+ VERSION = '0.2.0'
3
3
  end
data/lib/distance.rb CHANGED
@@ -23,10 +23,6 @@ class Distance
23
23
  new(n * Multiplier::MILE)
24
24
  end
25
25
 
26
- def in_kilometers?
27
- distance_in_meters % Multiplier::KILOMETER == 0
28
- end
29
-
30
26
  def to_f
31
27
  distance_in_meters
32
28
  end
@@ -39,9 +35,57 @@ class Distance
39
35
  distance_in_meters / Multiplier::KILOMETER
40
36
  end
41
37
 
38
+ def +(other)
39
+ unless other.is_a?(Distance)
40
+ raise ArgumentError, 'Can only add a Distance to a Distance'
41
+ end
42
+ Distance.new(to_f + other.to_f)
43
+ end
44
+
45
+ def -(other)
46
+ unless other.is_a?(Distance)
47
+ raise ArgumentError, 'Can only subtract a Distance from a Distance'
48
+ end
49
+ Distance.new(to_f - other.to_f)
50
+ end
51
+
52
+ def *(multiplier)
53
+ unless multiplier.is_a?(Numeric)
54
+ raise ArgumentError, 'Can only multiply a Distance with a number'
55
+ end
56
+ Distance.new(to_f * multiplier)
57
+ end
58
+
59
+ def /(divisor)
60
+ unless divisor.is_a?(Numeric)
61
+ raise ArgumentError, 'Can only divide a Distance by a number'
62
+ end
63
+ Distance.new(to_f / divisor)
64
+ end
65
+
66
+ def >(other)
67
+ return false unless other.is_a?(Distance)
68
+ to_f > other.to_f
69
+ end
70
+
71
+ def >=(other)
72
+ return false unless other.is_a?(Distance)
73
+ to_f >= other.to_f
74
+ end
75
+
42
76
  def ==(other)
43
77
  return false unless other.is_a?(Distance)
44
- (to_f - other.to_f).abs < 0.01
78
+ to_f == other.to_f
79
+ end
80
+
81
+ def <(other)
82
+ return false unless other.is_a?(Distance)
83
+ to_f < other.to_f
84
+ end
85
+
86
+ def <=(other)
87
+ return false unless other.is_a?(Distance)
88
+ to_f <= other.to_f
45
89
  end
46
90
 
47
91
  private
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: distance
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Collier
@@ -85,6 +85,7 @@ files:
85
85
  - bin/setup
86
86
  - distance.gemspec
87
87
  - lib/distance.rb
88
+ - lib/distance/fixnum_extensions.rb
88
89
  - lib/distance/version.rb
89
90
  homepage: https://github.com/tcollier/distance
90
91
  licenses: