compass_point 1.1.0 → 1.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 +5 -5
- data/Gemfile +2 -2
- data/Gemfile.lock +51 -41
- data/Gemfile.travis +2 -3
- data/LICENSE +1 -1
- data/README.md +8 -6
- data/lib/compass_point.rb +63 -46
- data/spec/compass_point_spec.rb +10 -0
- data/spec/spec_helper.rb +0 -6
- metadata +3 -4
- data/compass_point.gemspec +0 -23
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: cc5cb255e2b838ab24b075812b761e36917c57f0b7e5cc7c4fab65392a521c6b
|
|
4
|
+
data.tar.gz: 3c7a1523e8ddb807d515c0e7c5d848cf72ccbd81762b3946025d25ef08f1adfe
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 5b9738cf946eea2ce210bf7bb33b5bd40c6f5237ac98fb009f3e65436f03ef62bb2c49e886830930952932c8e3872cb1b25be67fb590a4181d0a99e911fef4e6
|
|
7
|
+
data.tar.gz: 0c86a05cee019d0e38e25e877faa4a8d1713aee1a92d9f4024ae84f62a5bf7cb78c7b9323eab2fff2bb7f6a6d435afa964090ec66aa90b3c941379d99736d319
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,67 +1,76 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
compass_point (1.0
|
|
4
|
+
compass_point (1.2.0)
|
|
5
5
|
|
|
6
6
|
GEM
|
|
7
7
|
remote: https://rubygems.org/
|
|
8
8
|
specs:
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
ffi (1.9.8)
|
|
9
|
+
ast (2.4.0)
|
|
10
|
+
coderay (1.1.2)
|
|
11
|
+
diff-lcs (1.3)
|
|
12
|
+
ffi (1.9.21)
|
|
14
13
|
formatador (0.2.5)
|
|
15
|
-
guard (2.
|
|
14
|
+
guard (2.14.2)
|
|
16
15
|
formatador (>= 0.2.4)
|
|
17
|
-
listen (
|
|
18
|
-
lumberjack (
|
|
16
|
+
listen (>= 2.7, < 4.0)
|
|
17
|
+
lumberjack (>= 1.0.12, < 2.0)
|
|
19
18
|
nenv (~> 0.1)
|
|
20
19
|
notiffany (~> 0.0)
|
|
21
20
|
pry (>= 0.9.12)
|
|
22
21
|
shellany (~> 0.0)
|
|
23
22
|
thor (>= 0.18.1)
|
|
24
23
|
guard-compat (1.2.1)
|
|
25
|
-
guard-rspec (4.
|
|
24
|
+
guard-rspec (4.7.3)
|
|
26
25
|
guard (~> 2.1)
|
|
27
26
|
guard-compat (~> 1.1)
|
|
28
27
|
rspec (>= 2.99.0, < 4.0)
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
notiffany (0.0.6)
|
|
28
|
+
listen (3.1.5)
|
|
29
|
+
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
30
|
+
rb-inotify (~> 0.9, >= 0.9.7)
|
|
31
|
+
ruby_dep (~> 1.2)
|
|
32
|
+
lumberjack (1.0.12)
|
|
33
|
+
method_source (0.9.0)
|
|
34
|
+
nenv (0.3.0)
|
|
35
|
+
notiffany (0.1.1)
|
|
38
36
|
nenv (~> 0.1)
|
|
39
37
|
shellany (~> 0.0)
|
|
40
|
-
|
|
38
|
+
parallel (1.12.1)
|
|
39
|
+
parser (2.4.0.2)
|
|
40
|
+
ast (~> 2.3)
|
|
41
|
+
powerpack (0.1.1)
|
|
42
|
+
pry (0.11.3)
|
|
41
43
|
coderay (~> 1.1.0)
|
|
42
|
-
method_source (~> 0.
|
|
43
|
-
|
|
44
|
-
rb-fsevent (0.
|
|
45
|
-
rb-inotify (0.9.
|
|
46
|
-
ffi (>= 0.5.0)
|
|
47
|
-
rspec (3.
|
|
48
|
-
rspec-core (~> 3.
|
|
49
|
-
rspec-expectations (~> 3.
|
|
50
|
-
rspec-mocks (~> 3.
|
|
51
|
-
rspec-core (3.
|
|
52
|
-
rspec-support (~> 3.
|
|
53
|
-
rspec-expectations (3.
|
|
44
|
+
method_source (~> 0.9.0)
|
|
45
|
+
rainbow (3.0.0)
|
|
46
|
+
rb-fsevent (0.10.2)
|
|
47
|
+
rb-inotify (0.9.10)
|
|
48
|
+
ffi (>= 0.5.0, < 2)
|
|
49
|
+
rspec (3.7.0)
|
|
50
|
+
rspec-core (~> 3.7.0)
|
|
51
|
+
rspec-expectations (~> 3.7.0)
|
|
52
|
+
rspec-mocks (~> 3.7.0)
|
|
53
|
+
rspec-core (3.7.1)
|
|
54
|
+
rspec-support (~> 3.7.0)
|
|
55
|
+
rspec-expectations (3.7.0)
|
|
54
56
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
55
|
-
rspec-support (~> 3.
|
|
56
|
-
rspec-mocks (3.
|
|
57
|
+
rspec-support (~> 3.7.0)
|
|
58
|
+
rspec-mocks (3.7.0)
|
|
57
59
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
58
|
-
rspec-support (~> 3.
|
|
59
|
-
rspec-support (3.
|
|
60
|
+
rspec-support (~> 3.7.0)
|
|
61
|
+
rspec-support (3.7.1)
|
|
62
|
+
rubocop (0.52.1)
|
|
63
|
+
parallel (~> 1.10)
|
|
64
|
+
parser (>= 2.4.0.2, < 3.0)
|
|
65
|
+
powerpack (~> 0.1)
|
|
66
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
67
|
+
ruby-progressbar (~> 1.7)
|
|
68
|
+
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
69
|
+
ruby-progressbar (1.9.0)
|
|
70
|
+
ruby_dep (1.5.0)
|
|
60
71
|
shellany (0.0.1)
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
timers (4.0.1)
|
|
64
|
-
hitimes
|
|
72
|
+
thor (0.20.0)
|
|
73
|
+
unicode-display_width (1.3.0)
|
|
65
74
|
|
|
66
75
|
PLATFORMS
|
|
67
76
|
ruby
|
|
@@ -71,6 +80,7 @@ DEPENDENCIES
|
|
|
71
80
|
guard
|
|
72
81
|
guard-rspec
|
|
73
82
|
rspec
|
|
83
|
+
rubocop
|
|
74
84
|
|
|
75
85
|
BUNDLED WITH
|
|
76
|
-
1.
|
|
86
|
+
1.16.1
|
data/Gemfile.travis
CHANGED
data/LICENSE
CHANGED
data/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# Compass Point
|
|
2
2
|
[](https://rubygems.org/gems/compass_point)
|
|
3
3
|
[](http://travis-ci.org/infused/compass_point)
|
|
4
|
-
[](https://codeclimate.com/github/infused/compass_point)
|
|
5
|
-
[](https://codeclimate.com/github/infused/compass_point)
|
|
6
4
|
[](https://gemnasium.com/infused/compass_point)
|
|
7
5
|
[](https://rubygems.org/gems/compass_point/)
|
|
8
6
|
|
|
@@ -18,7 +16,7 @@ A Ruby library for working with compass points.
|
|
|
18
16
|
|
|
19
17
|
Compass Point is tested to work with the following versions of ruby:
|
|
20
18
|
|
|
21
|
-
* MRI Ruby 2.0.x, 2.1.x, 2.2.x
|
|
19
|
+
* MRI Ruby 2.0.x, 2.1.x, 2.2.x, 2.3.x, 2.4.x, 2.5.x
|
|
22
20
|
* JRuby 1.7.x
|
|
23
21
|
|
|
24
22
|
## Installation
|
|
@@ -29,20 +27,24 @@ Compass Point is tested to work with the following versions of ruby:
|
|
|
29
27
|
|
|
30
28
|
### Azimuth
|
|
31
29
|
|
|
32
|
-
Given an
|
|
30
|
+
Given an string such as "NW", "SE", "Northeast by east", or "N 20° W", `azimuth` will
|
|
33
31
|
return the corresponding azimuth in degrees from 0 to 360:
|
|
34
32
|
|
|
35
33
|
CompassPoint.azimuth('N') #=> 0.0
|
|
36
34
|
CompassPoint.azimuth('S') #=> 180.0
|
|
37
35
|
CompassPoint.azimuth('swbs') #=> 213.75
|
|
38
|
-
|
|
36
|
+
CompassPoint.azimuth('Northeast by east') #=> 56.25
|
|
37
|
+
CompassPoint.azimuth('N 20° W') #=> 340
|
|
39
38
|
|
|
40
39
|
You can also get the minimum and maximum azimuths for any
|
|
41
40
|
abbreviation with `min`, `max` and `min_max`:
|
|
42
41
|
|
|
43
42
|
CompassPoint.min('E') #=> 84.38
|
|
44
43
|
CompassPoint.max('E') #=> 95.62
|
|
44
|
+
CompassPoint.min('Northeast by east') #=> 50.63
|
|
45
|
+
CompassPoint.max('Northeast by east') #=> 61.87
|
|
45
46
|
CompassPoint.min_max('E') #=> [84.38, 95.62]
|
|
47
|
+
CompassPoint.min_max('Northeast by east') #=> [50.63, 61.87]
|
|
46
48
|
|
|
47
49
|
Get the full name for an abbreviation:
|
|
48
50
|
|
|
@@ -61,7 +63,7 @@ example:
|
|
|
61
63
|
|
|
62
64
|
## License
|
|
63
65
|
|
|
64
|
-
Copyright (c) 2015 Keith Morrison <<keithm@infused.org>>
|
|
66
|
+
Copyright (c) 2015-2018 Keith Morrison <<keithm@infused.org>>
|
|
65
67
|
|
|
66
68
|
Permission is hereby granted, free of charge, to any person
|
|
67
69
|
obtaining a copy of this software and associated documentation
|
data/lib/compass_point.rb
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
class CompassPoint
|
|
2
|
-
VERSION = '1.
|
|
2
|
+
VERSION = '1.2.0'.freeze
|
|
3
3
|
|
|
4
4
|
POINTS = {
|
|
5
5
|
n: {min: 354.38, mid: 0.0, max: 5.62, name: 'North'},
|
|
@@ -34,86 +34,103 @@ class CompassPoint
|
|
|
34
34
|
nwbn: {min: 320.63, mid: 326.25, max: 331.87, name: 'Northwest by north'},
|
|
35
35
|
nnw: {min: 331.88, mid: 337.50, max: 343.12, name: 'North northwest'},
|
|
36
36
|
nbw: {min: 343.13, mid: 348.75, max: 354.37, name: 'North by west'}
|
|
37
|
-
}
|
|
37
|
+
}.freeze
|
|
38
38
|
|
|
39
39
|
class << self
|
|
40
|
-
def azimuth(
|
|
41
|
-
|
|
42
|
-
point
|
|
40
|
+
def azimuth(s)
|
|
41
|
+
input = normalize_input(s)
|
|
42
|
+
if point = find_point(input)
|
|
43
|
+
point[:mid]
|
|
44
|
+
elsif match = input.match(/(n|s)\s(\d{1,3}).?\s(e|w)/)
|
|
45
|
+
base = if match[1] == 'n'
|
|
46
|
+
match[3] == 'w' ? 360 : 0
|
|
47
|
+
else
|
|
48
|
+
180
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
adjust = match[2].to_i
|
|
52
|
+
|
|
53
|
+
operation = if (match[1] == 'n' && match[3] == 'w') || (match[1] == 's' && match[3] == 'e')
|
|
54
|
+
:-
|
|
55
|
+
else
|
|
56
|
+
:+
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
base.send(operation, adjust)
|
|
60
|
+
end
|
|
43
61
|
end
|
|
44
62
|
|
|
45
|
-
def min(
|
|
46
|
-
point = find_point(
|
|
63
|
+
def min(s)
|
|
64
|
+
point = find_point(normalize_input(s))
|
|
47
65
|
point && point[:min]
|
|
48
66
|
end
|
|
49
67
|
|
|
50
|
-
def max(
|
|
51
|
-
point = find_point(
|
|
68
|
+
def max(s)
|
|
69
|
+
point = find_point(normalize_input(s))
|
|
52
70
|
point && point[:max]
|
|
53
71
|
end
|
|
54
72
|
|
|
55
|
-
def min_max(
|
|
56
|
-
point = find_point(
|
|
73
|
+
def min_max(s)
|
|
74
|
+
point = find_point(normalize_input(s))
|
|
57
75
|
point && [point[:min], point[:max]]
|
|
58
76
|
end
|
|
59
77
|
|
|
60
|
-
def name(
|
|
61
|
-
point = find_point(
|
|
78
|
+
def name(s)
|
|
79
|
+
point = find_point(normalize_input(s))
|
|
62
80
|
point && point[:name]
|
|
63
81
|
end
|
|
64
82
|
|
|
65
83
|
def compass_quadrant_bearing(bearing)
|
|
66
84
|
b = bearing.round
|
|
67
85
|
case b
|
|
68
|
-
when 0, 360
|
|
69
|
-
|
|
70
|
-
when
|
|
71
|
-
|
|
72
|
-
when 180
|
|
73
|
-
'S'
|
|
74
|
-
when 270
|
|
75
|
-
'W'
|
|
86
|
+
when 0, 360 then 'N'
|
|
87
|
+
when 90 then 'E'
|
|
88
|
+
when 180 then 'S'
|
|
89
|
+
when 270 then 'W'
|
|
76
90
|
else
|
|
77
|
-
|
|
78
|
-
s << north_or_south(b)
|
|
79
|
-
if north_or_south(b) == 'N'
|
|
80
|
-
if east_or_west(b) == 'W'
|
|
81
|
-
s << (360 - b).abs.to_s
|
|
82
|
-
else
|
|
83
|
-
s << b.to_s
|
|
84
|
-
end
|
|
85
|
-
else
|
|
86
|
-
s << (180 - b).abs.to_s
|
|
87
|
-
end
|
|
88
|
-
s.last << '°'
|
|
89
|
-
s << east_or_west(b)
|
|
90
|
-
s.join(' ')
|
|
91
|
+
generate_compass_quadrant_bearing(b)
|
|
91
92
|
end
|
|
92
93
|
end
|
|
93
94
|
|
|
94
95
|
private
|
|
95
96
|
|
|
97
|
+
def generate_compass_quadrant_bearing(b)
|
|
98
|
+
s = []
|
|
99
|
+
s << north_or_south(b)
|
|
100
|
+
s << if north_or_south(b) == 'N'
|
|
101
|
+
east_or_west(b) == 'W' ? (360 - b).abs : b
|
|
102
|
+
else
|
|
103
|
+
(180 - b).abs
|
|
104
|
+
end.to_s
|
|
105
|
+
s.last << '°'
|
|
106
|
+
s << east_or_west(b)
|
|
107
|
+
s.join(' ')
|
|
108
|
+
end
|
|
109
|
+
|
|
96
110
|
def north_or_south(bearing)
|
|
97
111
|
b = bearing.round
|
|
98
|
-
|
|
99
|
-
'N'
|
|
100
|
-
else
|
|
101
|
-
'S'
|
|
102
|
-
end
|
|
112
|
+
(0..90).cover?(b.to_i) || (270..360).cover?(b.to_i) ? 'N' : 'S'
|
|
103
113
|
end
|
|
104
114
|
|
|
105
115
|
def east_or_west(bearing)
|
|
106
116
|
b = bearing.round
|
|
107
|
-
(180..360).
|
|
117
|
+
(180..360).cover?(b.to_i) ? 'W' : 'E'
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
def find_point(s)
|
|
121
|
+
find_point_by_abbrev(s) || find_point_by_name(s)
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def find_point_by_abbrev(s)
|
|
125
|
+
POINTS[s.to_sym]
|
|
108
126
|
end
|
|
109
127
|
|
|
110
|
-
def
|
|
111
|
-
|
|
112
|
-
POINTS[key]
|
|
128
|
+
def find_point_by_name(s)
|
|
129
|
+
POINTS.values.find { |v| v[:name].downcase == s }
|
|
113
130
|
end
|
|
114
131
|
|
|
115
|
-
def
|
|
116
|
-
|
|
132
|
+
def normalize_input(name)
|
|
133
|
+
name.to_s.strip.squeeze(' ').downcase
|
|
117
134
|
end
|
|
118
135
|
end
|
|
119
136
|
end
|
data/spec/compass_point_spec.rb
CHANGED
|
@@ -7,6 +7,13 @@ describe CompassPoint do
|
|
|
7
7
|
expect(CompassPoint.azimuth(:nw)).to eq 315.0
|
|
8
8
|
expect(CompassPoint.azimuth('sbw')).to eq 191.25
|
|
9
9
|
expect(CompassPoint.azimuth('X')).to be_nil
|
|
10
|
+
expect(CompassPoint.azimuth('Northeast by east')).to eq 56.25
|
|
11
|
+
expect(CompassPoint.azimuth('N 27° E')).to eq 27
|
|
12
|
+
expect(CompassPoint.azimuth('S 77° E')).to eq 103
|
|
13
|
+
expect(CompassPoint.azimuth('S 2° E')).to eq 178
|
|
14
|
+
expect(CompassPoint.azimuth('N 77° W')).to eq 283
|
|
15
|
+
expect(CompassPoint.azimuth('N 20 W')).to eq 340
|
|
16
|
+
expect(CompassPoint.azimuth('S 30° W')).to eq 210
|
|
10
17
|
end
|
|
11
18
|
end
|
|
12
19
|
|
|
@@ -16,6 +23,7 @@ describe CompassPoint do
|
|
|
16
23
|
expect(CompassPoint.min(:nw)).to eq 309.38
|
|
17
24
|
expect(CompassPoint.min('sbw')).to eq 185.63
|
|
18
25
|
expect(CompassPoint.min('X')).to be_nil
|
|
26
|
+
expect(CompassPoint.min('Northeast by east')).to eq 50.63
|
|
19
27
|
end
|
|
20
28
|
end
|
|
21
29
|
|
|
@@ -25,6 +33,7 @@ describe CompassPoint do
|
|
|
25
33
|
expect(CompassPoint.max(:nw)).to eq 320.62
|
|
26
34
|
expect(CompassPoint.max('sbw')).to eq 196.87
|
|
27
35
|
expect(CompassPoint.max('X')).to be_nil
|
|
36
|
+
expect(CompassPoint.max('Northeast by east')).to eq 61.87
|
|
28
37
|
end
|
|
29
38
|
end
|
|
30
39
|
|
|
@@ -34,6 +43,7 @@ describe CompassPoint do
|
|
|
34
43
|
expect(CompassPoint.min_max(:nw)).to eq [309.38, 320.62]
|
|
35
44
|
expect(CompassPoint.min_max('sbw')).to eq [185.63, 196.87]
|
|
36
45
|
expect(CompassPoint.min_max('X')).to be_nil
|
|
46
|
+
expect(CompassPoint.min_max('Northeast by east')).to eq [50.63, 61.87]
|
|
37
47
|
end
|
|
38
48
|
end
|
|
39
49
|
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: compass_point
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Keith Morrison
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2018-02-08 00:00:00.000000000 Z
|
|
12
12
|
dependencies: []
|
|
13
13
|
description: A Ruby library for working with compass points
|
|
14
14
|
email: keithm@infused.org
|
|
@@ -25,7 +25,6 @@ files:
|
|
|
25
25
|
- LICENSE
|
|
26
26
|
- README.md
|
|
27
27
|
- Rakefile
|
|
28
|
-
- compass_point.gemspec
|
|
29
28
|
- lib/compass_point.rb
|
|
30
29
|
- spec/compass_point_spec.rb
|
|
31
30
|
- spec/spec_helper.rb
|
|
@@ -50,7 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
50
49
|
version: 1.3.0
|
|
51
50
|
requirements: []
|
|
52
51
|
rubyforge_project:
|
|
53
|
-
rubygems_version: 2.
|
|
52
|
+
rubygems_version: 2.7.3
|
|
54
53
|
signing_key:
|
|
55
54
|
specification_version: 4
|
|
56
55
|
summary: A Ruby library for working with compass points
|
data/compass_point.gemspec
DELETED
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
lib = File.expand_path('../lib/', __FILE__)
|
|
2
|
-
$:.unshift lib unless $:.include?(lib)
|
|
3
|
-
require 'compass_point'
|
|
4
|
-
|
|
5
|
-
Gem::Specification.new do |s|
|
|
6
|
-
s.name = 'compass_point'
|
|
7
|
-
s.version = CompassPoint::VERSION
|
|
8
|
-
s.authors = ['Keith Morrison']
|
|
9
|
-
s.email = 'keithm@infused.org'
|
|
10
|
-
s.homepage = 'http://github.com/infused/compass_point'
|
|
11
|
-
s.summary = 'A Ruby library for working with compass points'
|
|
12
|
-
s.description = 'A Ruby library for working with compass points'
|
|
13
|
-
s.license = 'MIT'
|
|
14
|
-
|
|
15
|
-
s.rdoc_options = ['--charset=UTF-8']
|
|
16
|
-
s.extra_rdoc_files = ['README.md', 'LICENSE']
|
|
17
|
-
s.files = Dir['[A-Z]*', '{lib,spec}/**/*', 'compass_points.gemspec']
|
|
18
|
-
s.test_files = Dir.glob('spec/**/*_spec.rb')
|
|
19
|
-
s.require_paths = ['lib']
|
|
20
|
-
|
|
21
|
-
s.required_ruby_version = '>= 1.9.3'
|
|
22
|
-
s.required_rubygems_version = '>= 1.3.0'
|
|
23
|
-
end
|