area 0.4.1 → 0.4.2
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.
- data/.gitignore +3 -0
- data/.travis.yml +12 -0
- data/Gemfile +3 -0
- data/area.gemspec +20 -0
- data/lib/area/array.rb +32 -0
- data/lib/area/integer.rb +57 -0
- data/lib/area/string.rb +50 -0
- data/lib/area/version.rb +3 -0
- data/test/unit/area_test.rb +78 -0
- metadata +13 -4
data/.gitignore
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/area.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
require File.expand_path('../lib/area/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |s|
|
5
|
+
s.name = "area"
|
6
|
+
s.version = Area::VERSION
|
7
|
+
s.author = "Jonathan Vingiano"
|
8
|
+
s.email = "jgv@jonathanvingiano.com"
|
9
|
+
s.homepage = "http://github.com/jgv/area"
|
10
|
+
s.rubyforge_project = "area"
|
11
|
+
s.summary = "Convert a region to area code and vice versa."
|
12
|
+
s.description = "Area allows you to perform a variety of conversions between places in the United States and area codes or zip codes."
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.require_paths = ['lib']
|
15
|
+
|
16
|
+
s.add_dependency 'fastercsv', '~> 1.5'
|
17
|
+
s.add_development_dependency 'rake'
|
18
|
+
s.add_development_dependency 'bundler'
|
19
|
+
s.add_development_dependency 'minitest'
|
20
|
+
end
|
data/lib/area/array.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
class Array
|
2
|
+
|
3
|
+
def to_region(options = {})
|
4
|
+
Area::ZIP_CODES.each do |row|
|
5
|
+
if row[3] == self[0].to_s and row[4] == self[1].to_s
|
6
|
+
if options[:city]
|
7
|
+
return row[1]
|
8
|
+
elsif options[:state]
|
9
|
+
return row[2]
|
10
|
+
else
|
11
|
+
return row[1] + ', ' + row[2]
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_zip
|
18
|
+
Area::ZIP_CODES.each do |row|
|
19
|
+
if row[3] == self[0].to_s and row[4] == self[1].to_s
|
20
|
+
return row[0]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_gmt_offset
|
26
|
+
Area::ZIP_CODES.each do |row|
|
27
|
+
if row[3] == self[0].to_s and row[4] == self[1].to_s
|
28
|
+
return row[5]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/area/integer.rb
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
class Integer
|
2
|
+
|
3
|
+
def to_region(options = {})
|
4
|
+
if self.to_s.length == 3 # an area code
|
5
|
+
Area::AREA_CODES.each do |row|
|
6
|
+
if row.first == self.to_s
|
7
|
+
return row.last
|
8
|
+
end
|
9
|
+
end
|
10
|
+
else # more than 3 digits, assume a zipcode
|
11
|
+
Area::ZIP_CODES.each do |row|
|
12
|
+
if row.first == self.to_s
|
13
|
+
if options[:city]
|
14
|
+
return row[1]
|
15
|
+
elsif options[:state]
|
16
|
+
return row[2]
|
17
|
+
else
|
18
|
+
return row[1] + ', ' + row[2]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def to_latlon
|
26
|
+
Area::ZIP_CODES.each do |row|
|
27
|
+
if row.first == self.to_s
|
28
|
+
return row[3] + ', ' + row[4]
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def to_lat
|
34
|
+
Area::ZIP_CODES.each do |row|
|
35
|
+
if row.first == self.to_s
|
36
|
+
return row[3]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def to_lon
|
42
|
+
Area::ZIP_CODES.each do |row|
|
43
|
+
if row.first == self.to_s
|
44
|
+
return row[4]
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def to_gmt_offset
|
50
|
+
Area::ZIP_CODES.each do |row|
|
51
|
+
if row.first == self.to_s
|
52
|
+
return row[5]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
data/lib/area/string.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
class String
|
2
|
+
def to_area
|
3
|
+
@area_codes = []
|
4
|
+
Area::AREA_CODES.each do |row|
|
5
|
+
if row[1].upcase == self
|
6
|
+
@area_codes.push(row.first)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
if @area_codes.length == 1
|
10
|
+
return @area_codes.first
|
11
|
+
else
|
12
|
+
return @area_codes
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_zip
|
17
|
+
@zip_codes = []
|
18
|
+
|
19
|
+
if self.match(',')
|
20
|
+
@area = self.split(',')
|
21
|
+
@area.collect! { |a| a.strip }
|
22
|
+
|
23
|
+
Area::ZIP_CODES.each do |row|
|
24
|
+
if row[1] && row[1].downcase == @area[0].downcase && row[2].downcase == @area[1].downcase
|
25
|
+
@zip_codes.push(row[0])
|
26
|
+
end
|
27
|
+
end
|
28
|
+
else
|
29
|
+
Area::ZIP_CODES.each do |row|
|
30
|
+
if row[1] and row[1].downcase == self.downcase
|
31
|
+
@zip_codes.push(row[0])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
if @zip_codes.length == 1
|
37
|
+
return @zip_codes.first
|
38
|
+
else
|
39
|
+
return @zip_codes
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def to_gmt_offset
|
44
|
+
Area::ZIP_CODES.each do |row|
|
45
|
+
if row[2].upcase == self.to_s.upcase
|
46
|
+
return row[5]
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/lib/area/version.rb
ADDED
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'minitest/autorun'
|
2
|
+
require 'area'
|
3
|
+
|
4
|
+
class TestInteger < MiniTest::Unit::TestCase
|
5
|
+
|
6
|
+
def test_that_it_converts_area_code_to_region
|
7
|
+
assert_equal "NY", 646.to_region
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_that_it_converts_zip_code_to_region
|
11
|
+
assert_equal "Brooklyn, NY", 11211.to_region
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_that_it_supports_options
|
15
|
+
assert_equal "Brooklyn", 11211.to_region(:city => true)
|
16
|
+
assert_equal "NY", 11211.to_region(:state => true)
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_that_it_converts_zip_code_to_latlon
|
20
|
+
assert_equal "40.71209, -73.95427", 11211.to_latlon
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_that_it_converts_zip_code_to_lat
|
24
|
+
assert_equal "40.71209", 11211.to_lat
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_that_it_converts_zip_code_to_lon
|
28
|
+
assert_equal "-73.95427", 11211.to_lon
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_that_it_converts_zip_code_to_gmt_offset
|
32
|
+
assert_equal "-5", 11211.to_gmt_offset
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
class TestString < MiniTest::Unit::TestCase
|
38
|
+
|
39
|
+
def test_that_it_converts_to_area_code
|
40
|
+
assert_equal "907", "AK".to_area
|
41
|
+
assert_equal ["203", "860"], "CT".to_area
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_that_it_converts_to_zip_code
|
45
|
+
assert_equal "10706", "hastings on hudson".to_zip
|
46
|
+
assert_equal ["11101", "11109", "11120"], "long Island city".to_zip
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_that_it_converts_city_state_to_zip_code
|
50
|
+
assert_equal ["11101", "11109", "11120"], "long Island city, ny".to_zip
|
51
|
+
assert_equal ["11101", "11109", "11120"], "san jose, ca".to_zip
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_that_it_converts_to_offset
|
55
|
+
assert_equal "-5", "ny".to_gmt_offset
|
56
|
+
end
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
class TestArray < MiniTest::Unit::TestCase
|
61
|
+
|
62
|
+
def test_that_it_converts_latlon_to_zip_code
|
63
|
+
assert_equal "11211", [40.71209, -73.95427].to_zip
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_that_it_converts_latlon_to_region
|
67
|
+
assert_equal "Brooklyn, NY", [40.71209, -73.95427].to_region
|
68
|
+
end
|
69
|
+
|
70
|
+
def test_that_it_converts_latlon_to_region_with_options
|
71
|
+
assert_equal "NY", [40.71209, -73.95427].to_region(:state => true)
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_that_it_converts_latlon_to_gmt_offset
|
75
|
+
assert_equal "-5", [40.71209, -73.95427].to_gmt_offset
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: area
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-07-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: fastercsv
|
@@ -82,12 +82,21 @@ executables: []
|
|
82
82
|
extensions: []
|
83
83
|
extra_rdoc_files: []
|
84
84
|
files:
|
85
|
+
- .gitignore
|
86
|
+
- .travis.yml
|
87
|
+
- Gemfile
|
88
|
+
- MIT-LICENSE
|
89
|
+
- Rakefile
|
90
|
+
- area.gemspec
|
85
91
|
- data/areacodes.csv
|
86
92
|
- data/zipcodes.csv
|
87
93
|
- lib/area.rb
|
88
|
-
-
|
89
|
-
-
|
94
|
+
- lib/area/array.rb
|
95
|
+
- lib/area/integer.rb
|
96
|
+
- lib/area/string.rb
|
97
|
+
- lib/area/version.rb
|
90
98
|
- readme.md
|
99
|
+
- test/unit/area_test.rb
|
91
100
|
homepage: http://github.com/jgv/area
|
92
101
|
licenses: []
|
93
102
|
post_install_message:
|