Indirizzo 0.1.1 → 0.1.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/Indirizzo.gemspec +1 -1
- data/README.md +22 -0
- data/lib/indirizzo/address.rb +17 -14
- data/test/test_address.rb +15 -0
- metadata +7 -7
data/Indirizzo.gemspec
CHANGED
data/README.md
CHANGED
@@ -27,6 +27,28 @@ require 'Indirizzo'
|
|
27
27
|
Indirizzo::Address.new("some address")
|
28
28
|
```
|
29
29
|
|
30
|
+
### Options
|
31
|
+
|
32
|
+
`#new` takes a string or a (pre-parsed address) hash as its first parameter and
|
33
|
+
an options hash.
|
34
|
+
|
35
|
+
In the case of a string specifying and address, Indirizzo will do its best to
|
36
|
+
parse any matter of string, though results can be complicated. In the cases
|
37
|
+
where things are complicated the various attributes in Indirizzo do their best
|
38
|
+
to keep all reasonable answers in an array which you can inspect. (ex: "1600
|
39
|
+
Pensylvania Washington", in this case the state is difficult to determine so
|
40
|
+
both "Pennsylvania" and "Washington" are returned for City and Street)
|
41
|
+
|
42
|
+
In the case of the pre-parsed address hash the keys of the
|
43
|
+
hash be symbols matching the various Address fields in Indirizzo (specifically
|
44
|
+
`:prenum`, :`number`, `:sufnum`, `:street`, `:city`, `:state`, `:zip`, `:plus4`,
|
45
|
+
and `:country`)
|
46
|
+
|
47
|
+
Currently only one option is supported for the option hash:
|
48
|
+
|
49
|
+
* `:expand_streets` - a boolean which determines if "1 First St"'s street parameter
|
50
|
+
is expanded into "1 st", "first st", and "one st" or simply left as "first st"
|
51
|
+
|
30
52
|
## License
|
31
53
|
|
32
54
|
Indirizzo is a direct derivative of [Geocoder::US 2.0](https://github.com/geocommons/geocoder)
|
data/lib/indirizzo/address.rb
CHANGED
@@ -25,9 +25,12 @@ module Indirizzo
|
|
25
25
|
attr_accessor :state
|
26
26
|
attr_accessor :zip, :plus4
|
27
27
|
attr_accessor :country
|
28
|
+
attr_accessor :options
|
28
29
|
|
29
30
|
# Takes an address or place name string as its sole argument.
|
30
|
-
def initialize (text)
|
31
|
+
def initialize (text, options={})
|
32
|
+
@options = {:expand_streets => true}.merge(options)
|
33
|
+
|
31
34
|
raise ArgumentError, "no text provided" unless text and !text.empty?
|
32
35
|
if text.class == Hash
|
33
36
|
@text = ""
|
@@ -59,16 +62,16 @@ module Indirizzo
|
|
59
62
|
@number = ""
|
60
63
|
if !@street.nil?
|
61
64
|
if text[:number].nil?
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
65
|
+
@street.map! { |single_street|
|
66
|
+
single_street.downcase!
|
67
|
+
@number = single_street.scan(Match[:number])[0].reject{|n| n.nil? || n.empty?}.first.to_s
|
68
|
+
single_street.sub! @number, ""
|
69
|
+
single_street.sub! /^\s*,?\s*/o, ""
|
70
|
+
}
|
71
|
+
else
|
69
72
|
@number = text[:number].to_s
|
70
73
|
end
|
71
|
-
|
74
|
+
@street = expand_streets(@street) if @options[:expand_streets]
|
72
75
|
street_parts
|
73
76
|
end
|
74
77
|
@city = []
|
@@ -79,10 +82,10 @@ module Indirizzo
|
|
79
82
|
@city.push("")
|
80
83
|
end
|
81
84
|
if !text[:region].nil?
|
82
|
-
|
83
|
-
|
85
|
+
# @state = []
|
86
|
+
@state = text[:region]
|
84
87
|
if @state.length > 2
|
85
|
-
|
88
|
+
# full_state = @state.strip # special case: New York
|
86
89
|
@state = State[@state]
|
87
90
|
end
|
88
91
|
elsif !text[:country].nil?
|
@@ -94,7 +97,7 @@ module Indirizzo
|
|
94
97
|
@zip = text[:postal_code]
|
95
98
|
@plus4 = text[:plus4]
|
96
99
|
if !@zip
|
97
|
-
|
100
|
+
@zip = @plus4 = ""
|
98
101
|
end
|
99
102
|
end
|
100
103
|
end
|
@@ -180,7 +183,7 @@ module Indirizzo
|
|
180
183
|
street_search_end_index = [state_index,zip_index,text.length].reject(&:nil?).min-1
|
181
184
|
@street = text[number_end_index+1..street_search_end_index].scan(Match[:street]).map { |s| s and s.strip }
|
182
185
|
|
183
|
-
@street = expand_streets(@street)
|
186
|
+
@street = expand_streets(@street) if @options[:expand_streets]
|
184
187
|
# SPECIAL CASE: 1600 Pennsylvania 20050
|
185
188
|
@street << @full_state if @street.empty? and @state.downcase != @full_state.downcase
|
186
189
|
|
data/test/test_address.rb
CHANGED
@@ -5,10 +5,12 @@ require 'indirizzo/address'
|
|
5
5
|
include Indirizzo
|
6
6
|
|
7
7
|
class TestAddress < Test::Unit::TestCase
|
8
|
+
|
8
9
|
def test_new
|
9
10
|
addr = Address.new("1600 Pennsylvania Av., Washington DC")
|
10
11
|
assert_equal "1600 Pennsylvania Av, Washington DC", addr.text
|
11
12
|
end
|
13
|
+
|
12
14
|
def test_expand_numbers
|
13
15
|
num_list = ["5", "fifth", "five"]
|
14
16
|
num_list.each {|n|
|
@@ -17,6 +19,19 @@ class TestAddress < Test::Unit::TestCase
|
|
17
19
|
}
|
18
20
|
end
|
19
21
|
|
22
|
+
def test_expand_street
|
23
|
+
addr = Address.new("1 First St, Atlanta GA, 12345")
|
24
|
+
expected_streets = ["1 st", "first st", "one st"]
|
25
|
+
expected_streets.each_with_index do |street, index|
|
26
|
+
addr.street[index] = expected_streets[index]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_no_expand_street
|
31
|
+
addr = Address.new("1 First St, Atlanta GA, 12345", :expand_streets => false)
|
32
|
+
assert_equal addr.street.first, "first st"
|
33
|
+
end
|
34
|
+
|
20
35
|
def test_po_box
|
21
36
|
addr_po = Address.new "PO Box 1111 Herndon VA 20171"
|
22
37
|
assert addr_po.po_box?
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Indirizzo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2011-12-14 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
16
|
-
requirement: &
|
16
|
+
requirement: &70264404189660 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70264404189660
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: cover_me
|
27
|
-
requirement: &
|
27
|
+
requirement: &70264404189220 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *70264404189220
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: awesome_print
|
38
|
-
requirement: &
|
38
|
+
requirement: &70264404188800 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,7 +43,7 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *70264404188800
|
47
47
|
description: Indirizzo is simply an extraction of the US Street Address parsing code
|
48
48
|
from Geocoder::US
|
49
49
|
email: dave@highgroove.com
|