coderifous-address_extractor 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'echoe'
4
4
 
5
- Echoe.new('address_extractor', '0.1.3') do |p|
5
+ Echoe.new('address_extractor', '0.1.4') do |p|
6
6
  p.description = "Give it text. It finds addresses in it."
7
7
  p.url = "http://github.com/coderifous/address_extractor"
8
8
  p.author = "Jim Garvin"
@@ -1,10 +1,10 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{address_extractor}
3
- s.version = "0.1.3"
3
+ s.version = "0.1.4"
4
4
 
5
5
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
6
6
  s.authors = ["Jim Garvin"]
7
- s.date = %q{2008-11-17}
7
+ s.date = %q{2008-11-21}
8
8
  s.description = %q{Give it text. It finds addresses in it.}
9
9
  s.email = %q{jim at thegarvin dot com}
10
10
  s.extra_rdoc_files = ["lib/address_extractor.rb", "LICENSE.textile", "README.textile"]
@@ -12,8 +12,8 @@ class AddressExtractor
12
12
  def find_addresses(string)
13
13
  string.scan(ADDRESS_PATTERN).collect { |a| hashify_results(a) }.compact
14
14
  end
15
-
16
- # Pass it a block that recieves 2 parameters:
15
+
16
+ # Pass it a block that recieves 2 parameters:
17
17
  # address hash
18
18
  # matched address string ($&)
19
19
  # Whatever your block returns will be used for the substition.
@@ -33,9 +33,9 @@ class AddressExtractor
33
33
  useful_address?(hash) ? yield(hash, $&) : match
34
34
  end
35
35
  end
36
-
36
+
37
37
  private
38
-
38
+
39
39
  def hashify_results(matches)
40
40
  return nil if matches.nil?
41
41
  result = { }
@@ -46,16 +46,16 @@ class AddressExtractor
46
46
  end
47
47
  useful_address?(result) ? result : nil
48
48
  end
49
-
49
+
50
50
  def useful_address?(hash)
51
- hash &&
51
+ hash &&
52
52
  hash[:street1] && ( hash[:zip] || hash[:city] && hash[:state] )
53
53
  end
54
-
54
+
55
55
  end
56
-
56
+
57
57
  CAPTURE_MAP = [ :street1, :street2, :city, :state, :zip, :zip ]
58
-
58
+
59
59
  STATES = <<-EOF
60
60
  ALABAMA AL
61
61
  ALASKA AK
@@ -117,9 +117,9 @@ class AddressExtractor
117
117
  WISCONSIN WI
118
118
  WYOMING WY
119
119
  EOF
120
-
120
+
121
121
  STATE_REGEX = STATES.split(/\n/).collect{ |n| n.scan(/(\w.*\w)\s*([A-Z]{2})\s*$/) }.join("|")
122
-
122
+
123
123
  SECONDARY_UNIT_DESIGNATORS = <<-EOF
124
124
  APARTMENT APT
125
125
  BASEMENT BSMT
@@ -145,14 +145,14 @@ class AddressExtractor
145
145
  UNIT UNIT
146
146
  UPPER UPPR
147
147
  EOF
148
-
148
+
149
149
  SECONDARY_UNIT_DESIGNATORS_REGEX = SECONDARY_UNIT_DESIGNATORS.split(/\n/).collect{ |n| n.scan(/(\w+)\s*(\w+)\s*$/) }.join("|")
150
150
 
151
151
  ADDRESS_PATTERN = /
152
152
  (
153
153
  \d+ # A few numbers
154
154
  \s+
155
- (?:[A-Za-z'.-]+\s?){0,2} (?:[A-Za-z'.-]+) # Followed by a street name
155
+ (?:[A-Za-z'.-]+\s?){1,5} # Followed by a street name
156
156
  )
157
157
  \s* ,? \s* # a comma, optionally
158
158
  (
@@ -168,9 +168,9 @@ class AddressExtractor
168
168
  \b(#{STATE_REGEX})\b # state
169
169
  \s* ,? \s* # a comma, optionally
170
170
  (\d{5})? # a zip code, optionally
171
- )
171
+ )
172
172
  | # or, instead of city and state
173
173
  (\d{5})? # a lone zip code will do
174
174
  )
175
175
  /xi
176
- end
176
+ end
@@ -1,46 +1,41 @@
1
- $: << File.dirname(__FILE__)+"/../lib"
2
-
3
- require 'test/unit'
4
- require 'address_extractor.rb'
5
- require 'test_helper.rb'
1
+ require 'address_extractor'
2
+ require 'test_helper'
6
3
  include TestDataHelper
7
4
 
8
5
  class AddressExtractorTest < Test::Unit::TestCase
9
- include Helpers
10
-
11
6
  def test_first_address_extraction
12
7
  each_test_data do |test_data|
13
8
  address = AddressExtractor.first_address(test_data[:input])
14
9
  flunk "No address found in:\n#{test_data[:input]}" if address.nil?
15
- assert_equal_hashes address, test_data[:expected_output].first
10
+ assert_equal_hashes test_data[:expected_output].first, address
16
11
  end
17
12
  end
18
-
13
+
19
14
  def test_find_addresses
20
15
  each_test_data do |test_data|
21
16
  addresses = AddressExtractor.find_addresses(test_data[:input])
22
17
  assert_equal addresses.size, test_data[:expected_output].size
23
18
  test_data[:expected_output].each do |expected_output|
24
- assert_equal_hashes addresses.shift, expected_output
19
+ assert_equal_hashes expected_output, addresses.shift
25
20
  end
26
21
  end
27
22
  end
28
-
23
+
29
24
  def test_replace_first_address
30
25
  string = AddressExtractor.replace_first_address(test_data.first[:input]) do |address_hash, address|
31
- assert_equal_hashes address_hash, test_data.first[:expected_output].first
32
- assert_match /^\s*123 Foo St., Someplace FL\s*/, address
26
+ assert_equal_hashes test_data.first[:expected_output].first, address_hash
27
+ assert_match /^\s*123 Foo St., Someplace FL\s*/, address
33
28
  "skidoosh"
34
29
  end
35
- assert string =~ /Please send the package to skidoosh/
30
+ assert_match /Please send the package to skidoosh/, string
36
31
  end
37
32
 
38
33
  def test_replace_addresses
39
34
  string = AddressExtractor.replace_addresses(test_data.first[:input]) do |address_hash, address|
40
35
  "skidoosh"
41
36
  end
42
- assert string =~ /Please send the package to skidoosh/
43
- assert string =~ /via mail at:\s+skidoosh/
37
+ assert_match /Please send the package to skidoosh/, string
38
+ assert_match /via mail at:\s+skidoosh/, string
44
39
  end
45
40
 
46
41
  def test_no_addresses_found
@@ -70,7 +65,7 @@ test_input "Let's meet tomorrow at noon at 123 Foo Bar Street, Scooby NY 12345",
70
65
 
71
66
  test_input "Let's meet tomorrow at noon at 123 Foo Bar Street, Scooby, NY 12345",
72
67
  { :street1 => "123 Foo Bar Street", :street2 => nil, :city => "Scooby", :state => "NY", :zip => "12345" }
73
-
68
+
74
69
  test_input "Let's meet tomorrow at noon at 123 Foo Bar Street, Scooby, NY, 12345",
75
70
  { :street1 => "123 Foo Bar Street", :street2 => nil, :city => "Scooby", :state => "NY", :zip => "12345" }
76
71
 
@@ -85,4 +80,10 @@ test_input "
85
80
 
86
81
  test_input "Apple Computer, Inc. 1 Infinite Loop, Cupertino, CA 95014",
87
82
  { :street1 => "1 Infinite Loop", :street2 => nil, :city => "Cupertino", :state => "CA", :zip => "95014" }
88
-
83
+
84
+ test_input "Ida Lee Park Recreation Center 60 Ida Lee Dr NW, Leesburg, VA",
85
+ { :street1 => "60 Ida Lee Dr NW", :street2 => nil, :city => "Leesburg", :state => "VA", :zip => nil }
86
+
87
+ test_input "Ida Lee Park Recreation Center 60 Ida Lee Dr N West, Leesburg, VA",
88
+ { :street1 => "60 Ida Lee Dr N West", :street2 => nil, :city => "Leesburg", :state => "VA", :zip => nil }
89
+
data/test/test_helper.rb CHANGED
@@ -1,7 +1,8 @@
1
- module TestDataHelper
2
-
3
- TEST_DATA = []
1
+ require 'test/unit'
2
+ require 'rubygems'
3
+ begin require 'redgreen' unless ENV['TM_FILENAME']; rescue LoadError; end
4
4
 
5
+ module TestDataHelper
5
6
  def test_input(input_string, *expected_outputs)
6
7
  test_data << { :input => input_string, :expected_output => expected_outputs }
7
8
  end
@@ -9,23 +10,20 @@ module TestDataHelper
9
10
  def each_test_data
10
11
  test_data.each { |t| yield(t) }
11
12
  end
12
-
13
+
13
14
  def test_data
14
- TEST_DATA
15
+ @@test_data ||= []
15
16
  end
16
-
17
17
  end
18
18
 
19
19
  module Helpers
20
-
21
- def assert_equal_hashes(a,b)
22
- (a.keys + b.keys).uniq.each do |k|
23
- assert_equal a[k], b[k], "a[#{k.inspect}] = #{a[k].inspect} != b[#{k.inspect}] = #{b[k].inspect}"
20
+ def assert_equal_hashes(expected, hash)
21
+ (expected.keys + hash.keys).uniq.each do |k|
22
+ assert_equal expected[k], hash[k], "expected[#{k.inspect}] = #{expected[k].inspect} != hash[#{k.inspect}] = #{hash[k].inspect}"
24
23
  end
25
24
  end
25
+ end
26
26
 
27
- def assert_first_address_string(string)
28
- assert_match /^123 Foo St\., Someplace FL\s*$/, string
29
- end
30
-
27
+ class Test::Unit::TestCase
28
+ include Helpers
31
29
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: coderifous-address_extractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Garvin
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-11-17 00:00:00 -08:00
12
+ date: 2008-11-21 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies: []
15
15