tomtaylor-geo-spider 0.1.3 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11,14 +11,14 @@ module GeoSpider
11
11
  REGEXP = /(GIR 0AA|[A-PR-UWYZ]([0-9]{1,2}|([A-HK-Y][0-9]|[A-HK-Y][0-9]([0-9]|[ABEHMNPRV-Y]))|[0-9][A-HJKS-UW])(\s*)[0-9][ABD-HJLNP-UW-Z]{2})/i
12
12
 
13
13
  def locations
14
- results = @element.inner_html.scan(REGEXP)
14
+ results = @element.inner_text.scan(REGEXP)
15
15
  results = results.map(&:first)
16
16
 
17
17
  found_locations = []
18
18
 
19
19
  results.each do |result|
20
20
  begin
21
- p = geocoder.locate(result)
21
+ p = geocoder.locate(:zip => result, :country => "GB")
22
22
  found_locations << Location.new(:latitude => p.latitude, :longitude => p.longitude, :title => result)
23
23
  rescue Graticule::Error => e
24
24
  next
@@ -27,7 +27,7 @@ module GeoSpider
27
27
  return found_locations
28
28
  end
29
29
 
30
- # You need to set a valid Yahoo API key before the UK postcode geocoding will work. Yahoo have vastly better UK postcode accuracy than the other large mapping providers, apart from perhaps Multimap.
30
+ # You need to set a valid Multimap API key before the UK postcode geocoding will work. Multimap have the most accurate UK postcode geocoding I've discovered.
31
31
 
32
32
  def self.api_key=(api_key)
33
33
  @@api_key = api_key
@@ -36,8 +36,8 @@ module GeoSpider
36
36
  private
37
37
 
38
38
  def geocoder
39
- raise "No Yahoo API key set" unless @@api_key
40
- Graticule.service(:yahoo).new @@api_key
39
+ raise "No Multimap API key set" unless @@api_key
40
+ Graticule.service(:multimap).new @@api_key
41
41
  end
42
42
 
43
43
  end
@@ -1,8 +1,8 @@
1
1
  module GeoSpider
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
5
- TINY = 3
4
+ MINOR = 2
5
+ TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
@@ -25,9 +25,9 @@ describe Page, "with a single postcode which is being parsed" do
25
25
  OpenURI.should_receive(:open_uri).and_return(page_as_string('single_postcode.html'))
26
26
  @page = Page.new("http://www.example.com")
27
27
  GeoSpider::Extractors::Postcode.api_key = "waffles"
28
- mock_geocoder_result = OpenStruct.new( {:location => [51.000000, -1.000000]} )
28
+ mock_geocoder = OpenStruct.new( { :locate => OpenStruct.new({ :longitude => -1.000000, :latitude => 51.000000 })})
29
29
  Graticule.stub!(:service)
30
- Graticule.service.should_receive(:new).and_return(mock_geocoder_result)
30
+ Graticule.service.should_receive(:new).and_return(mock_geocoder)
31
31
  end
32
32
 
33
33
  it "should find one location" do
@@ -49,9 +49,9 @@ describe Page, "with multiple microformats and postcodes being parsed" do
49
49
  OpenURI.should_receive(:open_uri).and_return(page_as_string('multiple_postcodes_and_microformats.html'))
50
50
  @page = Page.new("http://www.example.com")
51
51
 
52
- mock_geocoder_result = OpenStruct.new( {:location => [51.000000, -1.000000]} )
52
+ mock_geocoder = OpenStruct.new( { :locate => OpenStruct.new({ :longitude => -1.000000, :latitude => 51.000000 })})
53
53
  Graticule.stub!(:service)
54
- Graticule.service.should_receive(:new).twice.and_return(mock_geocoder_result)
54
+ Graticule.service.should_receive(:new).twice.and_return(mock_geocoder)
55
55
  end
56
56
 
57
57
  it "should find four locations" do
@@ -122,4 +122,17 @@ describe Page, "which is finding the title" do
122
122
  @page.title.should == "Heading 1"
123
123
  end
124
124
  end
125
+ end
126
+
127
+ describe Page, "which is parsing a page with a string in a URL that happens to match a postcode" do
128
+
129
+ before(:each) do
130
+ OpenURI.should_receive(:open_uri).and_return(page_as_string('postcode_in_url.html'))
131
+ @page = Page.new("http://www.example.com")
132
+ end
133
+
134
+ it "should not find any locations" do
135
+ @page.locations.should be_empty
136
+ end
137
+
125
138
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tomtaylor-geo-spider
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tom Taylor