area 0.2.2 → 0.3
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/Rakefile +5 -1
- data/data/zipcodes.csv +43205 -0
- data/lib/area.rb +99 -9
- data/readme.md +66 -6
- metadata +53 -6
data/lib/area.rb
CHANGED
@@ -1,27 +1,117 @@
|
|
1
|
-
|
1
|
+
if RUBY_VERSION.to_f >= 1.9 # ;_;
|
2
|
+
require 'csv'
|
3
|
+
else
|
4
|
+
require 'rubygems'
|
5
|
+
require 'faster_csv'
|
6
|
+
end
|
2
7
|
|
3
8
|
module Area
|
4
|
-
DATA = CSV.read(File.open(File.join(File.dirname(__FILE__), '..', 'data', 'areacodes.csv')))
|
5
|
-
end
|
6
9
|
|
10
|
+
zip_path = File.open(File.join(File.dirname(__FILE__), '..', 'data', 'zipcodes.csv'))
|
11
|
+
area_path = File.open(File.join(File.dirname(__FILE__), '..', 'data', 'areacodes.csv'))
|
12
|
+
|
13
|
+
# there is probably a better way to do this...
|
14
|
+
if RUBY_VERSION.to_f >= 1.9
|
15
|
+
AREA_CODES = CSV.read(area_path)
|
16
|
+
ZIP_CODES = CSV.read(zip_path)
|
17
|
+
else
|
18
|
+
AREA_CODES = FasterCSV.parse(area_path)
|
19
|
+
ZIP_CODES = FasterCSV.parse(zip_path)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
7
23
|
class Integer
|
8
|
-
def to_region
|
9
|
-
|
24
|
+
def to_region(options = {})
|
25
|
+
if self.to_s.length == 3 # an area code
|
26
|
+
Area::AREA_CODES.each do |row|
|
27
|
+
if row.first == self.to_s
|
28
|
+
return row.last
|
29
|
+
end
|
30
|
+
end
|
31
|
+
else # more than 3 digits, assume a zipcode
|
32
|
+
Area::ZIP_CODES.each do |row|
|
33
|
+
if row.first == self.to_s
|
34
|
+
if options[:city]
|
35
|
+
return row[1]
|
36
|
+
elsif options[:state]
|
37
|
+
return row[2]
|
38
|
+
else
|
39
|
+
return row[1] + ', ' + row[2]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def to_latlon
|
47
|
+
Area::ZIP_CODES.each do |row|
|
48
|
+
if row.first == self.to_s
|
49
|
+
return row[3] + ', ' + row[4]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
def to_lat
|
55
|
+
Area::ZIP_CODES.each do |row|
|
56
|
+
if row.first == self.to_s
|
57
|
+
return row[3]
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def to_lon
|
63
|
+
Area::ZIP_CODES.each do |row|
|
10
64
|
if row.first == self.to_s
|
11
|
-
return row
|
65
|
+
return row[4]
|
12
66
|
end
|
13
67
|
end
|
14
68
|
end
|
69
|
+
|
70
|
+
def to_gmt_offset
|
71
|
+
Area::ZIP_CODES.each do |row|
|
72
|
+
if row.first == self.to_s
|
73
|
+
return row[5]
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
15
78
|
end
|
16
79
|
|
17
80
|
class String
|
18
81
|
def to_area
|
19
82
|
@area_codes = []
|
20
|
-
Area::
|
21
|
-
if row[1] == self
|
83
|
+
Area::AREA_CODES.each do |row|
|
84
|
+
if row[1].upcase == self
|
22
85
|
@area_codes.push(row.first)
|
23
86
|
end
|
24
87
|
end
|
25
|
-
@area_codes
|
88
|
+
if @area_codes.length == 1
|
89
|
+
return @area_codes.first
|
90
|
+
else
|
91
|
+
return @area_codes
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def to_zip
|
96
|
+
@zip_codes = []
|
97
|
+
Area::ZIP_CODES.each do |row|
|
98
|
+
if row[1] and row[1].downcase == self.downcase
|
99
|
+
@zip_codes.push(row.first)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
if @zip_codes.length == 1
|
103
|
+
return @zip_codes.first
|
104
|
+
else
|
105
|
+
return @zip_codes
|
106
|
+
end
|
26
107
|
end
|
108
|
+
|
109
|
+
def to_gmt_offset
|
110
|
+
Area::ZIP_CODES.each do |row|
|
111
|
+
if row[2].upcase == self.to_s.upcase
|
112
|
+
return row[5]
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
27
117
|
end
|
data/readme.md
CHANGED
@@ -2,20 +2,80 @@
|
|
2
2
|
|
3
3
|
# Area
|
4
4
|
|
5
|
-
Hi. This gem allows you to
|
5
|
+
Hi. This gem allows you to perform the following conversions:
|
6
6
|
|
7
|
-
|
7
|
+
* An area code to a region (state)
|
8
|
+
* A state to an area code
|
9
|
+
* A zip code to a place (control granularity with city and state options)
|
10
|
+
* A zipcode to a lat/lon
|
11
|
+
* A zipcode to just a lat
|
12
|
+
* A zipcode to just a lon
|
13
|
+
* A zipcode to its GMT offset
|
14
|
+
* A state to its GMT offset
|
15
|
+
|
16
|
+
Area uses public domain data and does not rely on any external services.
|
17
|
+
|
18
|
+
## Installation
|
8
19
|
|
9
20
|
In your gemfile: `gem 'area'`
|
10
21
|
|
11
|
-
|
22
|
+
## Usaage
|
12
23
|
|
24
|
+
#### Convert an area code to a state/region
|
13
25
|
``` ruby
|
14
26
|
646.to_region #=> NY
|
15
|
-
|
27
|
+
```
|
28
|
+
|
29
|
+
#### Convert a state to an area code
|
30
|
+
```` ruby
|
31
|
+
"AK".to_area #=> "907"
|
16
32
|
"CT".to_area #=> ["203", "860"]
|
17
33
|
```
|
18
34
|
|
19
|
-
|
35
|
+
#### Convert a zip code to a place
|
36
|
+
```` ruby
|
37
|
+
"11211".to_region #=> "Brooklyn, NY"
|
38
|
+
"11211".to_region(:city => true) #=> "Brooklyn"
|
39
|
+
"11211".to_region(:state => true) #=> "NY"
|
40
|
+
```
|
41
|
+
|
42
|
+
#### Convert a zip code to a lat/lon
|
43
|
+
```` ruby
|
44
|
+
"11211".to_latlon #=> "40.71209, -73.95427"
|
45
|
+
```
|
46
|
+
|
47
|
+
#### Convert a zip code to a lat
|
48
|
+
```` ruby
|
49
|
+
"11211".to_lat #=> "40.71209"
|
50
|
+
```
|
51
|
+
|
52
|
+
#### Convert a zip code to a lon
|
53
|
+
```` ruby
|
54
|
+
"11211".to_lon #=> "40.71209, -73.95427"
|
55
|
+
```
|
56
|
+
|
57
|
+
#### Get the GMT offset of a zipcode
|
58
|
+
```` ruby
|
59
|
+
"11211".to_gmt_offset #=> "-5"
|
60
|
+
```
|
61
|
+
|
62
|
+
#### Get the GMT offset of a state
|
63
|
+
```` ruby
|
64
|
+
"NY".to_gmt_offset #=> "-5" # by state
|
65
|
+
```
|
66
|
+
|
67
|
+
## Testing and Contributing and Stuff
|
68
|
+
|
69
|
+
Contributions are more than welcome. I'm [testing](http://travis-ci.org/jgv/area) with minitest. This gem supports:
|
70
|
+
|
71
|
+
* Ruby 1.8.7
|
72
|
+
* Ruby 1.9.2
|
73
|
+
* Ruby 1.9.3
|
74
|
+
* JRuby 1.8
|
75
|
+
* JRuby 1.9
|
76
|
+
* Rubinius 1.8
|
77
|
+
* Rubinius 1.9
|
78
|
+
|
79
|
+
## Copyright
|
20
80
|
|
21
|
-
|
81
|
+
Copyright (c) 2012 Jonathan Vingiano. See [LICENSE](https://github.com/jgv/area/blob/master/MIT-LICENSE) for details.
|
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
|
+
version: '0.3'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,6 +11,22 @@ bindir: bin
|
|
11
11
|
cert_chain: []
|
12
12
|
date: 2012-06-23 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: fastercsv
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.5'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.5'
|
14
30
|
- !ruby/object:Gem::Dependency
|
15
31
|
name: rake
|
16
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -27,16 +43,47 @@ dependencies:
|
|
27
43
|
- - ! '>='
|
28
44
|
- !ruby/object:Gem::Version
|
29
45
|
version: '0'
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: bundler
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: minitest
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Area allows you to perform a variety of conversions between places in
|
79
|
+
the United States and area codes or zip codes.
|
80
|
+
email: jgv@jonathanvingiano.com
|
35
81
|
executables: []
|
36
82
|
extensions: []
|
37
83
|
extra_rdoc_files: []
|
38
84
|
files:
|
39
85
|
- data/areacodes.csv
|
86
|
+
- data/zipcodes.csv
|
40
87
|
- lib/area.rb
|
41
88
|
- MIT-LICENSE
|
42
89
|
- Rakefile
|