area 0.7.0 → 0.8.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.
- data/lib/area.rb +30 -5
- data/lib/area/array.rb +10 -18
- data/lib/area/integer.rb +15 -19
- data/lib/area/string.rb +11 -23
- data/lib/area/version.rb +1 -1
- data/test/unit/area_test.rb +6 -7
- metadata +2 -2
data/lib/area.rb
CHANGED
|
@@ -14,12 +14,37 @@ module Area
|
|
|
14
14
|
zip_path = File.open(File.join(File.dirname(__FILE__), '..', 'data', 'zipcodes.csv'))
|
|
15
15
|
area_path = File.open(File.join(File.dirname(__FILE__), '..', 'data', 'areacodes.csv'))
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
# there is probably a better way to do this...
|
|
18
18
|
if RUBY_VERSION.to_f >= 1.9
|
|
19
|
-
|
|
20
|
-
|
|
19
|
+
@area_codes = CSV.read(area_path)
|
|
20
|
+
@zip_codes = CSV.read(zip_path)
|
|
21
21
|
else
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
@area_codes = FasterCSV.parse(area_path)
|
|
23
|
+
@zip_codes = FasterCSV.parse(zip_path)
|
|
24
24
|
end
|
|
25
|
+
|
|
26
|
+
def self.area_codes
|
|
27
|
+
@area_codes
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def self.zip_codes
|
|
31
|
+
@zip_codes
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def self.code?(code)
|
|
35
|
+
if code.to_s.length == 3
|
|
36
|
+
return code
|
|
37
|
+
else
|
|
38
|
+
raise ArgumentError, "You must provide a valid area code", caller
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.code_or_zip?(code)
|
|
43
|
+
if code.to_s.length == 3 or code.to_s.length == 5
|
|
44
|
+
return code
|
|
45
|
+
else
|
|
46
|
+
raise ArgumentError, "You must provide a valid area or zip code", caller
|
|
47
|
+
end
|
|
48
|
+
end
|
|
49
|
+
|
|
25
50
|
end
|
data/lib/area/array.rb
CHANGED
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
class Array
|
|
2
2
|
|
|
3
3
|
def to_region(options = {})
|
|
4
|
-
Area
|
|
5
|
-
if
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return row[1] + ', ' + row[2]
|
|
12
|
-
end
|
|
4
|
+
if row = Area.zip_codes.find {|row| row[3] == self[0].to_s and row[4] == self[1].to_s }
|
|
5
|
+
if options[:city]
|
|
6
|
+
return row[1]
|
|
7
|
+
elsif options[:state]
|
|
8
|
+
return row[2]
|
|
9
|
+
else
|
|
10
|
+
return row[1] + ', ' + row[2]
|
|
13
11
|
end
|
|
14
12
|
end
|
|
15
|
-
nil
|
|
16
13
|
end
|
|
17
14
|
|
|
18
15
|
def to_zip
|
|
19
|
-
Area
|
|
16
|
+
Area.zip_codes.find do |row|
|
|
20
17
|
if row[3] and row[4]
|
|
21
18
|
db_lat_len = row[3].split('.').length
|
|
22
19
|
db_lon_len = row[4].split('.').length
|
|
@@ -29,16 +26,11 @@ class Array
|
|
|
29
26
|
end
|
|
30
27
|
end
|
|
31
28
|
end
|
|
32
|
-
nil
|
|
33
29
|
end
|
|
34
30
|
|
|
35
31
|
def to_gmt_offset
|
|
36
|
-
Area
|
|
37
|
-
|
|
38
|
-
return row[5]
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
nil
|
|
32
|
+
row = Area.zip_codes.find {|row| row[3] == self[0].to_s and row[4] == self[1].to_s }
|
|
33
|
+
row[5] if row
|
|
42
34
|
end
|
|
43
35
|
|
|
44
36
|
end
|
data/lib/area/integer.rb
CHANGED
|
@@ -1,42 +1,38 @@
|
|
|
1
1
|
class Integer
|
|
2
2
|
|
|
3
3
|
def to_region(options = {})
|
|
4
|
-
if self
|
|
5
|
-
Area
|
|
6
|
-
|
|
7
|
-
end
|
|
8
|
-
else
|
|
9
|
-
# puts "not an area code"
|
|
4
|
+
if Area.code?(self) # presume an area code
|
|
5
|
+
row = Area.area_codes.find{|row| row.first == self.to_s }
|
|
6
|
+
row.last if row
|
|
10
7
|
end
|
|
11
|
-
nil
|
|
12
8
|
end
|
|
13
9
|
|
|
14
10
|
def to_latlon
|
|
15
|
-
Area
|
|
16
|
-
|
|
11
|
+
if Area.code_or_zip?(self)
|
|
12
|
+
row = Area.zip_codes.find {|row| row.first == self.to_s }
|
|
13
|
+
row[3] + ', ' + row[4] if row
|
|
17
14
|
end
|
|
18
|
-
nil
|
|
19
15
|
end
|
|
20
16
|
|
|
21
17
|
def to_lat
|
|
22
|
-
Area
|
|
23
|
-
|
|
18
|
+
if Area.code_or_zip?(self)
|
|
19
|
+
row = Area.zip_codes.find {|row| row.first == self.to_s }
|
|
20
|
+
row[3] if row
|
|
24
21
|
end
|
|
25
|
-
nil
|
|
26
22
|
end
|
|
27
23
|
|
|
28
24
|
def to_lon
|
|
29
|
-
Area
|
|
30
|
-
|
|
25
|
+
if Area.code_or_zip?(self)
|
|
26
|
+
row = Area.zip_codes.find {|row| row.first == self.to_s }
|
|
27
|
+
row[4] if row
|
|
31
28
|
end
|
|
32
|
-
nil
|
|
33
29
|
end
|
|
34
30
|
|
|
35
31
|
def to_gmt_offset
|
|
36
|
-
Area
|
|
37
|
-
|
|
32
|
+
if Area.code_or_zip?(self)
|
|
33
|
+
row = Area.zip_codes.find {|row| row.first == self.to_s }
|
|
34
|
+
row[5] if row
|
|
38
35
|
end
|
|
39
|
-
nil
|
|
40
36
|
end
|
|
41
37
|
|
|
42
38
|
end
|
data/lib/area/string.rb
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
class String
|
|
2
2
|
|
|
3
3
|
def to_area
|
|
4
|
-
@area_codes = []
|
|
5
|
-
Area::AREA_CODES.each do |row|
|
|
6
|
-
@area_codes.push(row.first) if row[1].upcase == self
|
|
7
|
-
end
|
|
4
|
+
@area_codes = Area.area_codes.find_all {|row| row[1].upcase == self }.map {|a| a.first }
|
|
8
5
|
@area_codes.length == 1 ? @area_codes.first : @area_codes
|
|
9
6
|
end
|
|
10
7
|
|
|
11
8
|
def to_region(options = {})
|
|
12
9
|
if self.to_s.length == 3 # an area code
|
|
13
|
-
Area
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
Area::ZIP_CODES.each do |row|
|
|
10
|
+
row = Area.area_codes.find {|row| row.first == self.to_s }
|
|
11
|
+
return row.last if row
|
|
12
|
+
elsif self.to_s.length == 5
|
|
13
|
+
if row = Area.zip_codes.find {|row| row.first == self.to_s }
|
|
18
14
|
if row.first == self.to_s
|
|
19
15
|
if options[:city]
|
|
20
16
|
return row[1]
|
|
@@ -25,34 +21,26 @@ class String
|
|
|
25
21
|
end
|
|
26
22
|
end
|
|
27
23
|
end
|
|
24
|
+
else
|
|
25
|
+
raise ArgumentError, "You must provide a valid area or zip code", caller
|
|
28
26
|
end
|
|
29
|
-
nil
|
|
30
27
|
end
|
|
31
28
|
|
|
32
29
|
def to_zip
|
|
33
|
-
@zip_codes = []
|
|
34
|
-
|
|
35
30
|
if self.match(',')
|
|
36
31
|
@area = self.split(',')
|
|
37
32
|
@area.collect! { |a| a.strip }
|
|
38
33
|
|
|
39
|
-
Area
|
|
40
|
-
@zip_codes.push(row[0]) if row[1] && row[1].downcase == @area[0].downcase and row[2].downcase == @area[1].downcase
|
|
41
|
-
end
|
|
34
|
+
@zip_codes = Area.zip_codes.find_all {|row| row[1] && row[1].downcase == @area[0].downcase and row[2].downcase == @area[1].downcase }.map {|a| a.first }
|
|
42
35
|
else
|
|
43
|
-
Area
|
|
44
|
-
@zip_codes.push(row[0]) if row[1] and row[1].downcase == self.downcase
|
|
45
|
-
end
|
|
36
|
+
@zip_codes = Area.zip_codes.find_all {|row| row[1] != nil and row[1].downcase == self.downcase }.map {|a| a.first }
|
|
46
37
|
end
|
|
47
38
|
@zip_codes.length == 1 ? @zip_codes.first : @zip_codes
|
|
48
39
|
end
|
|
49
40
|
|
|
50
41
|
def to_gmt_offset
|
|
51
|
-
Area
|
|
52
|
-
|
|
53
|
-
(row[2].upcase == self.to_s.upcase or row[0] == self.to_s)
|
|
54
|
-
end
|
|
55
|
-
nil
|
|
42
|
+
row = Area.zip_codes.find {|row| row[2] != nil and (row[2].upcase == self.to_s.upcase or row[0] == self.to_s) }
|
|
43
|
+
row[5] if row
|
|
56
44
|
end
|
|
57
45
|
|
|
58
46
|
end
|
data/lib/area/version.rb
CHANGED
data/test/unit/area_test.rb
CHANGED
|
@@ -3,7 +3,6 @@ require 'area'
|
|
|
3
3
|
|
|
4
4
|
class TestInteger < MiniTest::Unit::TestCase
|
|
5
5
|
|
|
6
|
-
|
|
7
6
|
def test_that_it_converts_area_code_to_region
|
|
8
7
|
assert_equal "NY", 646.to_region
|
|
9
8
|
end
|
|
@@ -29,11 +28,11 @@ class TestInteger < MiniTest::Unit::TestCase
|
|
|
29
28
|
end
|
|
30
29
|
|
|
31
30
|
def test_that_it_handles_bad_area_codes
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
assert_raises(ArgumentError) { 1234.to_region }
|
|
32
|
+
assert_raises(ArgumentError) { 1234.to_latlon }
|
|
33
|
+
assert_raises(ArgumentError) { 1234.to_lat }
|
|
34
|
+
assert_raises(ArgumentError) { 1234.to_lon }
|
|
35
|
+
assert_raises(ArgumentError) { 1234.to_gmt_offset }
|
|
37
36
|
end
|
|
38
37
|
|
|
39
38
|
end
|
|
@@ -73,7 +72,7 @@ class TestString < MiniTest::Unit::TestCase
|
|
|
73
72
|
|
|
74
73
|
def test_that_it_handles_incorrect_zips
|
|
75
74
|
assert_equal [], "9888".to_zip
|
|
76
|
-
|
|
75
|
+
assert_raises(ArgumentError) { "9888".to_region }
|
|
77
76
|
assert_equal [], "9888".to_area
|
|
78
77
|
assert_nil "9888".to_gmt_offset
|
|
79
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
|
+
version: 0.8.0
|
|
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: 2013-01-
|
|
12
|
+
date: 2013-01-28 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: fastercsv
|