maidenhead 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/.travis.yml +11 -0
- data/Gemfile +16 -0
- data/Guardfile +28 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +20 -0
- data/Rakefile +38 -0
- data/VERSION +1 -0
- data/lib/maidenhead.rb +124 -0
- data/maidenhead.gemspec +69 -0
- data/test/helper.rb +19 -0
- data/test/test_maidenhead.rb +122 -0
- metadata +155 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ad8ea73a10da985b1a7306998b711cae38c95310
|
4
|
+
data.tar.gz: ceb9292ef5f7e0d77d63e44e4c524124218a221c
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e73f5f0cf8657d206cb5675169d3f14d03720dd359303ffabb55a2390fb1427ccf9fdb3e7fe20d90a3eed69697f1ad89a716fd22596a5132ef19d6e8714fe265
|
7
|
+
data.tar.gz: 7d60888ef13bcc5987323c97143ed4e074839cc6860d5bed63ab28f0bd378a639596829a74d4fb4ff9258670ad2ea76971bd0b776e91939abb222a32cba341c6
|
data/.document
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
source "http://rubygems.org"
|
2
|
+
# Add dependencies required to use your gem here.
|
3
|
+
# Example:
|
4
|
+
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
6
|
+
# Add dependencies to develop your gem here.
|
7
|
+
# Include everything needed to run rake, tests, features, etc.
|
8
|
+
group :development do
|
9
|
+
gem "minitest", ">= 0"
|
10
|
+
gem "yard", "~> 0.7"
|
11
|
+
gem "rdoc", "~> 3.12"
|
12
|
+
gem "bundler", "~> 1.0"
|
13
|
+
gem "jeweler", "~> 1.8.7"
|
14
|
+
gem "guard"
|
15
|
+
gem 'guard-minitest'
|
16
|
+
end
|
data/Guardfile
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# A sample Guardfile
|
2
|
+
# More info at https://github.com/guard/guard#readme
|
3
|
+
|
4
|
+
guard :minitest do
|
5
|
+
# with Minitest::Unit
|
6
|
+
watch(%r{^test/(.*)\/?test_(.*)\.rb})
|
7
|
+
watch(%r{^lib/(.*/)?([^/]+)\.rb}) { |m| "test/#{m[1]}test_#{m[2]}.rb" }
|
8
|
+
watch(%r{^test/test_helper\.rb}) { 'test' }
|
9
|
+
|
10
|
+
# with Minitest::Spec
|
11
|
+
# watch(%r{^spec/(.*)_spec\.rb})
|
12
|
+
# watch(%r{^lib/(.+)\.rb}) { |m| "spec/#{m[1]}_spec.rb" }
|
13
|
+
# watch(%r{^spec/spec_helper\.rb}) { 'spec' }
|
14
|
+
|
15
|
+
# Rails 4
|
16
|
+
# watch(%r{^app/(.+)\.rb}) { |m| "test/#{m[1]}_test.rb" }
|
17
|
+
# watch(%r{^app/controllers/application_controller\.rb}) { 'test/controllers' }
|
18
|
+
# watch(%r{^app/controllers/(.+)_controller\.rb}) { |m| "test/integration/#{m[1]}_test.rb" }
|
19
|
+
# watch(%r{^app/views/(.+)_mailer/.+}) { |m| "test/mailers/#{m[1]}_mailer_test.rb" }
|
20
|
+
# watch(%r{^lib/(.+)\.rb}) { |m| "test/lib/#{m[1]}_test.rb" }
|
21
|
+
# watch(%r{^test/.+_test\.rb})
|
22
|
+
# watch(%r{^test/test_helper\.rb}) { 'test' }
|
23
|
+
|
24
|
+
# Rails < 4
|
25
|
+
# watch(%r{^app/controllers/(.*)\.rb}) { |m| "test/functional/#{m[1]}_test.rb" }
|
26
|
+
# watch(%r{^app/helpers/(.*)\.rb}) { |m| "test/helpers/#{m[1]}_test.rb" }
|
27
|
+
# watch(%r{^app/models/(.*)\.rb}) { |m| "test/unit/#{m[1]}_test.rb" }
|
28
|
+
end
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2013 Michael Graff
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
= maidenhead
|
2
|
+
|
3
|
+
This gem converts between latitude and longitude coordinates and the
|
4
|
+
Maidenhead Location System coordinates, with various degrees of accuracy.
|
5
|
+
|
6
|
+
== Contributing to maidenhead
|
7
|
+
|
8
|
+
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet.
|
9
|
+
* Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it.
|
10
|
+
* Fork the project.
|
11
|
+
* Start a feature/bugfix branch.
|
12
|
+
* Commit and push until you are happy with your contribution.
|
13
|
+
* Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
|
14
|
+
* Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
|
15
|
+
|
16
|
+
== Copyright
|
17
|
+
|
18
|
+
Copyright (c) 2013 Michael Graff. See LICENSE.txt for
|
19
|
+
further details.
|
20
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "maidenhead"
|
18
|
+
gem.homepage = "http://github.com/skandragon/maidenhead"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{Maidenhead Locator System conversion}
|
21
|
+
gem.description = %Q{Convert between latitude/longitude and Maidenhead Locator System strings}
|
22
|
+
gem.email = "explorer@flame.org"
|
23
|
+
gem.authors = ["Michael Graff"]
|
24
|
+
# dependencies defined in Gemfile
|
25
|
+
end
|
26
|
+
Jeweler::RubygemsDotOrgTasks.new
|
27
|
+
|
28
|
+
require 'rake/testtask'
|
29
|
+
Rake::TestTask.new(:test) do |test|
|
30
|
+
test.libs << 'lib' << 'test'
|
31
|
+
test.pattern = 'test/**/test_*.rb'
|
32
|
+
test.verbose = true
|
33
|
+
end
|
34
|
+
|
35
|
+
task :default => :test
|
36
|
+
|
37
|
+
require 'yard'
|
38
|
+
YARD::Rake::YardocTask.new
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
1.0.0
|
data/lib/maidenhead.rb
ADDED
@@ -0,0 +1,124 @@
|
|
1
|
+
##
|
2
|
+
# Easily convert between latitude and longitude coordinates the the Maidenhead
|
3
|
+
# Locator System coordinates.
|
4
|
+
class Maidenhead
|
5
|
+
|
6
|
+
#
|
7
|
+
# Verify that the provided Maidenhead locator string is valid.
|
8
|
+
#
|
9
|
+
def self.valid_maidenhead?(location)
|
10
|
+
return false unless location.is_a?String
|
11
|
+
return false unless location.length >= 2
|
12
|
+
return false unless (location.length % 2) == 0
|
13
|
+
|
14
|
+
length = location.length / 2
|
15
|
+
length.times do |counter|
|
16
|
+
grid = location[counter * 2, 2]
|
17
|
+
if (counter == 0)
|
18
|
+
return false unless grid =~ /[a-rA-R]{2}/
|
19
|
+
elsif (counter % 2) == 0
|
20
|
+
return false unless grid =~ /[a-xA-X]{2}/
|
21
|
+
else
|
22
|
+
return false unless grid =~ /[0-9]{2}/
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
#
|
30
|
+
# Convert from a Maidenhead locator string to latitude and longitude.
|
31
|
+
# Location may be between 1 and 5 grids in size (2 to 10 characters).
|
32
|
+
# Longer values may work, but accuracy is not guaranteed as latitude
|
33
|
+
# and longitude values returned are rounded ot 6 decimal places.
|
34
|
+
#
|
35
|
+
# For each grid, an arbitrary but repeatable latitude and longitude
|
36
|
+
# is returned.
|
37
|
+
def self.to_latlon(location)
|
38
|
+
|
39
|
+
unless valid_maidenhead?(location)
|
40
|
+
raise ArgumentError.new("Location is not a valid Maidenhead Locator System string")
|
41
|
+
end
|
42
|
+
|
43
|
+
length = location.length / 2
|
44
|
+
while (length < 5)
|
45
|
+
if (length % 2) == 1
|
46
|
+
location += '55'
|
47
|
+
else
|
48
|
+
location += 'LL'
|
49
|
+
end
|
50
|
+
length = location.length / 2
|
51
|
+
end
|
52
|
+
|
53
|
+
lat = 0
|
54
|
+
lon = 0
|
55
|
+
|
56
|
+
lat_multiplier = 10.0
|
57
|
+
lon_multiplier = 20.0
|
58
|
+
|
59
|
+
5.times do |counter|
|
60
|
+
grid_lon = location[counter * 2, 1]
|
61
|
+
grid_lat = location[counter * 2 + 1, 1]
|
62
|
+
|
63
|
+
if counter == 0
|
64
|
+
lat += l2n(grid_lat) * lat_multiplier
|
65
|
+
lon += l2n(grid_lon) * lon_multiplier
|
66
|
+
elsif (counter % 2) == 0
|
67
|
+
lat_multiplier /= 24
|
68
|
+
lon_multiplier /= 24
|
69
|
+
lat += l2n(grid_lat) * lat_multiplier
|
70
|
+
lon += l2n(grid_lon) * lon_multiplier
|
71
|
+
else
|
72
|
+
lat_multiplier /= 10
|
73
|
+
lon_multiplier /= 10
|
74
|
+
lat += grid_lat.to_i * lat_multiplier
|
75
|
+
lon += grid_lon.to_i * lon_multiplier
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
[ (lat - 90).round(6), (lon - 180).round(6) ]
|
80
|
+
end
|
81
|
+
|
82
|
+
#
|
83
|
+
# Convert from latitude and longitude to a Maidenhead locator string.
|
84
|
+
# Latitude should be between -90 and 90, and longitude should be between
|
85
|
+
# -180 and 180. Precision defaults to 5 blocks, which returns 10 characters.
|
86
|
+
# More precise coordinates may work, but accuracy is not guaranteed.
|
87
|
+
def self.to_maidenhead(lat, lon, precision = 5)
|
88
|
+
locator = ''
|
89
|
+
|
90
|
+
lat = lat.to_f + 90
|
91
|
+
lon = lon.to_f + 180
|
92
|
+
|
93
|
+
# Calculate the field
|
94
|
+
lat = (lat / 10) + 0.0000001
|
95
|
+
lon = (lon / 20) + 0.0000001
|
96
|
+
locator += n2l(lon.floor).upcase + n2l(lat.floor).upcase
|
97
|
+
precision -= 1
|
98
|
+
|
99
|
+
# Calculate the remaining values
|
100
|
+
precision.times do |counter|
|
101
|
+
if (counter % 2) == 0
|
102
|
+
lat = (lat - lat.floor) * 10
|
103
|
+
lon = (lon - lon.floor) * 10
|
104
|
+
locator += "#{lon.floor}#{lat.floor}"
|
105
|
+
else
|
106
|
+
lat = (lat - lat.floor) * 24
|
107
|
+
lon = (lon - lon.floor) * 24
|
108
|
+
locator += n2l(lon.floor) + n2l(lat.floor)
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
locator
|
113
|
+
end
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def self.l2n(letter)
|
118
|
+
letter.downcase.ord - 97
|
119
|
+
end
|
120
|
+
|
121
|
+
def self.n2l(number)
|
122
|
+
(number + 97).chr
|
123
|
+
end
|
124
|
+
end
|
data/maidenhead.gemspec
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = "maidenhead"
|
8
|
+
s.version = "1.0.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Michael Graff"]
|
12
|
+
s.date = "2013-11-13"
|
13
|
+
s.description = "Convert between latitude/longitude and Maidenhead Locator System strings"
|
14
|
+
s.email = "explorer@flame.org"
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE.txt",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".travis.yml",
|
22
|
+
"Gemfile",
|
23
|
+
"Guardfile",
|
24
|
+
"LICENSE.txt",
|
25
|
+
"README.rdoc",
|
26
|
+
"Rakefile",
|
27
|
+
"VERSION",
|
28
|
+
"lib/maidenhead.rb",
|
29
|
+
"maidenhead.gemspec",
|
30
|
+
"test/helper.rb",
|
31
|
+
"test/test_maidenhead.rb"
|
32
|
+
]
|
33
|
+
s.homepage = "http://github.com/skandragon/maidenhead"
|
34
|
+
s.licenses = ["MIT"]
|
35
|
+
s.require_paths = ["lib"]
|
36
|
+
s.rubygems_version = "2.0.3"
|
37
|
+
s.summary = "Maidenhead Locator System conversion"
|
38
|
+
|
39
|
+
if s.respond_to? :specification_version then
|
40
|
+
s.specification_version = 4
|
41
|
+
|
42
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
43
|
+
s.add_development_dependency(%q<minitest>, [">= 0"])
|
44
|
+
s.add_development_dependency(%q<yard>, ["~> 0.7"])
|
45
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
46
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
47
|
+
s.add_development_dependency(%q<jeweler>, ["~> 1.8.7"])
|
48
|
+
s.add_development_dependency(%q<guard>, [">= 0"])
|
49
|
+
s.add_development_dependency(%q<guard-minitest>, [">= 0"])
|
50
|
+
else
|
51
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
52
|
+
s.add_dependency(%q<yard>, ["~> 0.7"])
|
53
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
54
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
55
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
|
56
|
+
s.add_dependency(%q<guard>, [">= 0"])
|
57
|
+
s.add_dependency(%q<guard-minitest>, [">= 0"])
|
58
|
+
end
|
59
|
+
else
|
60
|
+
s.add_dependency(%q<minitest>, [">= 0"])
|
61
|
+
s.add_dependency(%q<yard>, ["~> 0.7"])
|
62
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
63
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
64
|
+
s.add_dependency(%q<jeweler>, ["~> 1.8.7"])
|
65
|
+
s.add_dependency(%q<guard>, [">= 0"])
|
66
|
+
s.add_dependency(%q<guard-minitest>, [">= 0"])
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
data/test/helper.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler'
|
3
|
+
begin
|
4
|
+
Bundler.setup(:default, :development)
|
5
|
+
rescue Bundler::BundlerError => e
|
6
|
+
$stderr.puts e.message
|
7
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
8
|
+
exit e.status_code
|
9
|
+
end
|
10
|
+
require 'minitest/autorun'
|
11
|
+
|
12
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
13
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
14
|
+
require 'maidenhead'
|
15
|
+
|
16
|
+
class MiniTest::Unit::TestCase
|
17
|
+
end
|
18
|
+
|
19
|
+
MiniTest.autorun
|
@@ -0,0 +1,122 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
class TestMaidenhead < Minitest::Test
|
4
|
+
def test_convert_from_maidenhead_5
|
5
|
+
lat, lon = Maidenhead.to_latlon('IO93lo72hn')
|
6
|
+
assert_equal 53.593924, lat
|
7
|
+
assert_equal -1.022569, lon
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_convert_from_maidenhead_4
|
11
|
+
lat, lon = Maidenhead.to_latlon('IO93lo72')
|
12
|
+
assert_equal 53.593576, lat
|
13
|
+
assert_equal -1.021181, lon
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_convert_from_maidenhead_3
|
17
|
+
lat, lon = Maidenhead.to_latlon('IO93lo')
|
18
|
+
assert_equal 53.606076, lat
|
19
|
+
assert_equal -1.037847, lon
|
20
|
+
end
|
21
|
+
|
22
|
+
def test_convert_from_maidenhead_2
|
23
|
+
lat, lon = Maidenhead.to_latlon('IO93')
|
24
|
+
assert_equal 53.481076, lat
|
25
|
+
assert_equal -1.037847, lon
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_convert_from_maidenhead_1
|
29
|
+
lat, lon = Maidenhead.to_latlon('IO')
|
30
|
+
assert_equal 55.481076, lat
|
31
|
+
assert_equal -9.037847, lon
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_convert_to_maidenhead_5
|
35
|
+
maidenhead = Maidenhead.to_maidenhead(53.593923, -1.022569, 5)
|
36
|
+
assert_equal 'IO93lo72hn', maidenhead
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_convert_to_maidenhead_4
|
40
|
+
maidenhead = Maidenhead.to_maidenhead(53.593923, -1.022569, 4)
|
41
|
+
assert_equal 'IO93lo72', maidenhead
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_convert_to_maidenhead_3
|
45
|
+
maidenhead = Maidenhead.to_maidenhead(53.593923, -1.022569, 3)
|
46
|
+
assert_equal 'IO93lo', maidenhead
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_convert_to_maidenhead_2
|
50
|
+
maidenhead = Maidenhead.to_maidenhead(53.593923, -1.022569, 2)
|
51
|
+
assert_equal 'IO93', maidenhead
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_convert_to_maidenhead_1
|
55
|
+
maidenhead = Maidenhead.to_maidenhead(53.593923, -1.022569, 1)
|
56
|
+
assert_equal 'IO', maidenhead
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_convert_JJ00aa
|
60
|
+
lat, lon = Maidenhead.to_latlon('JJ00aa00aa')
|
61
|
+
assert_equal lat, 0
|
62
|
+
assert_equal lon, 0
|
63
|
+
end
|
64
|
+
|
65
|
+
def test_edges_0
|
66
|
+
maidenhead = Maidenhead.to_maidenhead(-90, -180, 5)
|
67
|
+
assert_equal 'AA00aa00aa', maidenhead
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_edges_1
|
71
|
+
maidenhead = Maidenhead.to_maidenhead(90, -180, 5)
|
72
|
+
assert_equal 'AS00aa00aa', maidenhead
|
73
|
+
end
|
74
|
+
|
75
|
+
def test_edges_2
|
76
|
+
maidenhead = Maidenhead.to_maidenhead(90, 180, 5)
|
77
|
+
assert_equal 'SS00aa00aa', maidenhead
|
78
|
+
end
|
79
|
+
|
80
|
+
def test_edges_3
|
81
|
+
maidenhead = Maidenhead.to_maidenhead(-90, 180, 5)
|
82
|
+
assert_equal 'SA00aa00aa', maidenhead
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_throws_for_invalid_maidenhead
|
86
|
+
assert_raises(ArgumentError) do
|
87
|
+
Maidenhead.to_latlon('A')
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def test_valid_maidenhead
|
92
|
+
matrix = {
|
93
|
+
'AA' => true,
|
94
|
+
'AA00' => true,
|
95
|
+
'AA00AA' => true,
|
96
|
+
'Rr99XX' => true,
|
97
|
+
'rR99Xx99' => true,
|
98
|
+
'RR99xX99Xx' => true,
|
99
|
+
'RR99xX99xX' => true,
|
100
|
+
|
101
|
+
12 => false,
|
102
|
+
'' => false,
|
103
|
+
nil => false,
|
104
|
+
|
105
|
+
'A' => false,
|
106
|
+
'A1' => false,
|
107
|
+
'00' => false,
|
108
|
+
'AA0' => false,
|
109
|
+
'AAAA' => false,
|
110
|
+
'AA0A' => false,
|
111
|
+
'SS99' => false,
|
112
|
+
}
|
113
|
+
|
114
|
+
matrix.each do |locator, expected_result|
|
115
|
+
if expected_result
|
116
|
+
assert Maidenhead.valid_maidenhead?(locator), "#{locator} should be valid"
|
117
|
+
else
|
118
|
+
refute Maidenhead.valid_maidenhead?(locator), "#{locator} should not be valid"
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
metadata
ADDED
@@ -0,0 +1,155 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: maidenhead
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael Graff
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-11-13 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: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: yard
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ~>
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.7'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ~>
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.7'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rdoc
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3.12'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3.12'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bundler
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jeweler
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 1.8.7
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 1.8.7
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: guard
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: guard-minitest
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Convert between latitude/longitude and Maidenhead Locator System strings
|
112
|
+
email: explorer@flame.org
|
113
|
+
executables: []
|
114
|
+
extensions: []
|
115
|
+
extra_rdoc_files:
|
116
|
+
- LICENSE.txt
|
117
|
+
- README.rdoc
|
118
|
+
files:
|
119
|
+
- .document
|
120
|
+
- .travis.yml
|
121
|
+
- Gemfile
|
122
|
+
- Guardfile
|
123
|
+
- LICENSE.txt
|
124
|
+
- README.rdoc
|
125
|
+
- Rakefile
|
126
|
+
- VERSION
|
127
|
+
- lib/maidenhead.rb
|
128
|
+
- maidenhead.gemspec
|
129
|
+
- test/helper.rb
|
130
|
+
- test/test_maidenhead.rb
|
131
|
+
homepage: http://github.com/skandragon/maidenhead
|
132
|
+
licenses:
|
133
|
+
- MIT
|
134
|
+
metadata: {}
|
135
|
+
post_install_message:
|
136
|
+
rdoc_options: []
|
137
|
+
require_paths:
|
138
|
+
- lib
|
139
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
140
|
+
requirements:
|
141
|
+
- - '>='
|
142
|
+
- !ruby/object:Gem::Version
|
143
|
+
version: '0'
|
144
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
145
|
+
requirements:
|
146
|
+
- - '>='
|
147
|
+
- !ruby/object:Gem::Version
|
148
|
+
version: '0'
|
149
|
+
requirements: []
|
150
|
+
rubyforge_project:
|
151
|
+
rubygems_version: 2.0.3
|
152
|
+
signing_key:
|
153
|
+
specification_version: 4
|
154
|
+
summary: Maidenhead Locator System conversion
|
155
|
+
test_files: []
|