yahoo-placemaker 0.0.2 → 0.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/.gemtest +0 -0
- data/.gitignore +1 -0
- data/.rspec +2 -0
- data/Gemfile +3 -2
- data/README.markdown +13 -4
- data/Rakefile +7 -1
- data/lib/yahoo-placemaker/administrative_scope.rb +4 -0
- data/lib/yahoo-placemaker/ancestor.rb +11 -0
- data/lib/yahoo-placemaker/centroid.rb +4 -0
- data/lib/yahoo-placemaker/document.rb +67 -0
- data/lib/yahoo-placemaker/extents.rb +13 -0
- data/lib/yahoo-placemaker/geographic_scope.rb +11 -0
- data/lib/yahoo-placemaker/lat_lng.rb +7 -0
- data/lib/yahoo-placemaker/local_scope.rb +23 -0
- data/lib/yahoo-placemaker/local_scopes.rb +2 -0
- data/lib/yahoo-placemaker/place.rb +21 -0
- data/lib/yahoo-placemaker/places.rb +2 -0
- data/lib/yahoo-placemaker/reference.rb +16 -0
- data/lib/yahoo-placemaker/reference_list.rb +3 -0
- data/lib/yahoo-placemaker/response.rb +10 -0
- data/lib/yahoo-placemaker/scope.rb +13 -0
- data/lib/yahoo-placemaker/version.rb +1 -1
- data/lib/yahoo-placemaker.rb +6 -2
- data/spec/spec_helper.rb +15 -0
- data/spec/yahoo_placemaker_spec.rb +26 -0
- data/yahoo-placemaker.gemspec +6 -4
- metadata +58 -4
data/.gemtest
ADDED
File without changes
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/Gemfile
CHANGED
data/README.markdown
CHANGED
@@ -2,13 +2,22 @@
|
|
2
2
|
|
3
3
|
`yahoo-placemaker` is a rubygem that allows for easy interaction w/ the [Yahoo Placemaker](http://developer.yahoo.com/geo/placemaker) API.
|
4
4
|
|
5
|
+
## Build Status
|
5
6
|
|
6
|
-
|
7
|
+

|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
gem install yahoo-placemaker
|
12
|
+
|
13
|
+
## Usage
|
7
14
|
|
8
15
|
require 'yahoo-placemaker'
|
9
|
-
Yahoo::Placemaker
|
10
|
-
|
16
|
+
Yahoo::Placemaker::APP_ID = 'xxxx'
|
17
|
+
result = Yahoo::Placemaker.extract "Columbus Ohio is my hometown"
|
18
|
+
result.document.geographic_scope.name # Columbus, OH, US
|
19
|
+
result.document.administrative_scope.centroid.latitude # 39.962
|
11
20
|
|
12
21
|
## Contributing
|
13
22
|
|
14
|
-
I am by not means a Ruby guru so if you have seen something that I have done incorrectly or that could be improved please feel free to contribute some code
|
23
|
+
I am by not means a Ruby guru so if you have seen something that I have done incorrectly or that could be improved please feel free to contribute some code.
|
data/Rakefile
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'yahoo-placemaker/geographic_scope'
|
2
|
+
require 'yahoo-placemaker/local_scope'
|
3
|
+
require 'yahoo-placemaker/administrative_scope'
|
4
|
+
require 'yahoo-placemaker/reference_list'
|
5
|
+
require 'yahoo-placemaker/reference'
|
6
|
+
require 'yahoo-placemaker/extents'
|
7
|
+
require 'yahoo-placemaker/place'
|
8
|
+
require 'yahoo-placemaker/places'
|
9
|
+
|
10
|
+
class Yahoo::Placemaker::Document
|
11
|
+
attr_accessor :administrative_scope, :geographic_scope, :local_scopes, :reference_list, :extents, :place_details, :places
|
12
|
+
def initialize(json)
|
13
|
+
|
14
|
+
if json['administrativeScope']
|
15
|
+
@administrative_scope = json['administrativeScope']
|
16
|
+
end
|
17
|
+
|
18
|
+
if json['geographicScope']
|
19
|
+
@geographic_scope = Yahoo::Placemaker::GeographicScope.new(json['geographicScope'])
|
20
|
+
end
|
21
|
+
|
22
|
+
if json['administrativeScope']
|
23
|
+
@administrative_scope = Yahoo::Placemaker::AdministrativeScope.new(json['administrativeScope'])
|
24
|
+
end
|
25
|
+
|
26
|
+
@places = Yahoo::Placemaker::Places.new
|
27
|
+
# if the placeDetails key exists then that means that we
|
28
|
+
# only have one result so we'll just use it. Otherwise
|
29
|
+
# yahoo has given us back some POORLY formatted data which
|
30
|
+
# is in numeric keys so we'll search for them and pull them out
|
31
|
+
|
32
|
+
if json.has_key? 'placeDetails'
|
33
|
+
@places << Yahoo::Placemaker::Place.new(json['placeDetails'])
|
34
|
+
else
|
35
|
+
(json.map{ |k,v| k =~ /^[\d]+$/ ? v : nil }).compact.each do |place|
|
36
|
+
@places << Yahoo::Placemaker::Place.new(place['placeDetails'])
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
if json['localScopes']
|
41
|
+
@local_scopes = Array.new
|
42
|
+
if json['localScopes'].class == Array
|
43
|
+
json['localScopes'].each do |ls|
|
44
|
+
@local_scopes << Yahoo::Placemaker::LocalScope.new(ls['localScope'])
|
45
|
+
end
|
46
|
+
else
|
47
|
+
@local_scopes << Yahoo::Placemaker::LocalScope.new(json['localScopes']['localScope'])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
if json['extents']
|
52
|
+
@extents = Yahoo::Placemaker::Extents.new(json['extents'])
|
53
|
+
end
|
54
|
+
|
55
|
+
@reference_list = Yahoo::Placemaker::ReferenceList.new
|
56
|
+
if json['referenceList']
|
57
|
+
if json['referenceList'].class == Array
|
58
|
+
json['referenceList'].each do |reference|
|
59
|
+
@reference_list << Yahoo::Placemaker::Reference.new(reference)
|
60
|
+
end
|
61
|
+
else
|
62
|
+
@reference_list << Yahoo::Placemaker::Reference.new(json['referenceList'])
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'yahoo-placemaker/lat_lng'
|
2
|
+
|
3
|
+
class Yahoo::Placemaker::Extents
|
4
|
+
|
5
|
+
attr_accessor :center, :south_west, :north_east
|
6
|
+
|
7
|
+
def initialize (json)
|
8
|
+
@center = Yahoo::Placemaker::LatLng.new(json['center'])
|
9
|
+
@south_west = Yahoo::Placemaker::LatLng.new(json['southWest'])
|
10
|
+
@north_east = Yahoo::Placemaker::LatLng.new(json['northEast'])
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
require 'yahoo-placemaker/scope'
|
2
|
+
require 'yahoo-placemaker/centroid'
|
3
|
+
|
4
|
+
class Yahoo::Placemaker::GeographicScope < Yahoo::Placemaker::Scope
|
5
|
+
def initialize (json)
|
6
|
+
@woe_id = json['woeId']
|
7
|
+
@type = json['type']
|
8
|
+
@name = json['name']
|
9
|
+
@centroid = Yahoo::Placemaker::Centroid.new(json['centroid'])
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'yahoo-placemaker/scope'
|
2
|
+
require 'yahoo-placemaker/ancestor'
|
3
|
+
require 'yahoo-placemaker/centroid'
|
4
|
+
|
5
|
+
class Yahoo::Placemaker::LocalScope < Yahoo::Placemaker::Scope
|
6
|
+
|
7
|
+
attr_accessor :ancestors, :centroid, :south_west, :north_east
|
8
|
+
|
9
|
+
def initialize (json)
|
10
|
+
super(json)
|
11
|
+
@centroid = Yahoo::Placemaker::Centroid.new json['centroid']
|
12
|
+
@south_west = Yahoo::Placemaker::LatLng.new json['southWest']
|
13
|
+
@north_east = Yahoo::Placemaker::LatLng.new json['northEast']
|
14
|
+
@ancestors = Array.new
|
15
|
+
if json['ancestors'].class == Array
|
16
|
+
json['ancestors'].each do |ancestor|
|
17
|
+
@ancestors << Yahoo::Placemaker::Ancestor.new(ancestor['ancestor'])
|
18
|
+
end
|
19
|
+
else
|
20
|
+
@ancestors << Yahoo::Placemaker::Ancestor.new(json['ancestors']['ancestor'])
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'yahoo-placemaker/centroid'
|
2
|
+
|
3
|
+
class Yahoo::Placemaker::Place
|
4
|
+
|
5
|
+
attr_accessor :place_id, :match_type, :place_reference_ids, :weight, :confidence
|
6
|
+
attr_accessor :centroid, :type, :woe_id, :name
|
7
|
+
|
8
|
+
def initialize(json)
|
9
|
+
|
10
|
+
@place_id = json['placeId']
|
11
|
+
@centroid = Yahoo::Placemaker::Centroid.new json['place']['centroid']
|
12
|
+
@type = json['place']['type']
|
13
|
+
@woe_id = json['place']['woeId']
|
14
|
+
@name = json['place']['name']
|
15
|
+
|
16
|
+
@match_type = json['matchType']
|
17
|
+
@place_reference_ids = json['placeReferenceIds']
|
18
|
+
@weight = json['weight'].to_i
|
19
|
+
@confidence = json['confidence'].to_i
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class Yahoo::Placemaker::Reference
|
2
|
+
attr_accessor :woe_ids, :end, :start, :place_reference_id, :place_ids, :text, :type, :xpath, :is_plaintext_marker
|
3
|
+
|
4
|
+
def initialize(json)
|
5
|
+
@woe_ids = json['woeIds']
|
6
|
+
@end = json['end']
|
7
|
+
@start = json['start']
|
8
|
+
@place_reference_id = json['placeReferenceId']
|
9
|
+
@place_ids = json['placeIds']
|
10
|
+
@text = json['text']
|
11
|
+
@type = json['type']
|
12
|
+
@xpath = json['xpath']
|
13
|
+
@is_plaintext_marker = json['isPlaintextMarker']
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'yahoo-placemaker/document'
|
2
|
+
|
3
|
+
class Yahoo::Placemaker::Response
|
4
|
+
attr_accessor :document, :version, :processing_time
|
5
|
+
def initialize (json)
|
6
|
+
@document = Yahoo::Placemaker::Document.new(json['document'])
|
7
|
+
@version = json['version']
|
8
|
+
@processing_time = json['processingTime']
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'yahoo-placemaker/centroid'
|
2
|
+
|
3
|
+
class Yahoo::Placemaker::Scope
|
4
|
+
attr_accessor :woe_id, :type, :name, :centroid
|
5
|
+
|
6
|
+
def initialize(json)
|
7
|
+
@centroid = Yahoo::Placemaker::Centroid.new json['centroid']
|
8
|
+
@woe_id = json['woeId']
|
9
|
+
@type = json['type']
|
10
|
+
@name = json['name']
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
data/lib/yahoo-placemaker.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "yahoo-placemaker/version"
|
2
|
+
require "yahoo-placemaker/response"
|
3
|
+
require "yahoo-placemaker/version"
|
4
|
+
|
2
5
|
require "json"
|
3
|
-
require "ostruct"
|
4
6
|
require "net/http"
|
5
7
|
|
6
8
|
module Yahoo
|
@@ -22,7 +24,9 @@ module Yahoo
|
|
22
24
|
http.request(req)
|
23
25
|
end
|
24
26
|
json = ::JSON.parse(response.body)
|
25
|
-
|
27
|
+
|
28
|
+
Yahoo::Placemaker::Response.new(json)
|
29
|
+
|
26
30
|
end
|
27
31
|
|
28
32
|
private
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'bundler/setup'
|
3
|
+
require 'vcr'
|
4
|
+
require 'fakeweb'
|
5
|
+
require 'yahoo-placemaker'
|
6
|
+
|
7
|
+
Yahoo::Placemaker::APP_ID = 'xxx'
|
8
|
+
|
9
|
+
VCR.config do |c|
|
10
|
+
c.cassette_library_dir = 'spec/fixtures'
|
11
|
+
c.stub_with :fakeweb
|
12
|
+
end
|
13
|
+
|
14
|
+
RSpec.configure do |config|
|
15
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Yahoo::Placemaker do
|
4
|
+
|
5
|
+
it "determines we're talking about Columbus, Ohio" do
|
6
|
+
VCR.use_cassette('columbus ohio') do
|
7
|
+
response = Yahoo::Placemaker.extract "columbus ohio"
|
8
|
+
response.document.administrative_scope.name.should == "Columbus, OH, US"
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "returns an administrative scope of 'United States' when given a string of text w/ two US locations" do
|
13
|
+
VCR.use_cassette('columbus ohio miami florida') do
|
14
|
+
response = Yahoo::Placemaker.extract "columbus ohio miami florida"
|
15
|
+
response.document.administrative_scope.name.should == "United States"
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
it "contains only one item in reference_list when given 'Atlanta Georgia'" do
|
20
|
+
VCR.use_cassette('atlanta_georgia') do
|
21
|
+
response = Yahoo::Placemaker.extract "Atlanta Georgia"
|
22
|
+
response.document.reference_list.size.should == 1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
data/yahoo-placemaker.gemspec
CHANGED
@@ -3,6 +3,7 @@ $:.push File.expand_path("../lib", __FILE__)
|
|
3
3
|
require "yahoo-placemaker/version"
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
|
+
s.platform = Gem::Platform::RUBY
|
6
7
|
s.name = "yahoo-placemaker"
|
7
8
|
s.version = Yahoo::Placemaker::VERSION
|
8
9
|
s.authors = ["Kyle Decot"]
|
@@ -18,7 +19,8 @@ Gem::Specification.new do |s|
|
|
18
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
19
20
|
s.require_paths = ["lib"]
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
22
|
+
s.add_development_dependency "rspec"
|
23
|
+
s.add_development_dependency "fakeweb"
|
24
|
+
s.add_development_dependency "vcr"
|
25
|
+
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yahoo-placemaker
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,8 +9,41 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-02-
|
13
|
-
dependencies:
|
12
|
+
date: 2012-02-25 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rspec
|
16
|
+
requirement: &70211849137140 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :development
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70211849137140
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: fakeweb
|
27
|
+
requirement: &70211849136500 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70211849136500
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: vcr
|
38
|
+
requirement: &70211849135540 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70211849135540
|
14
47
|
description: Easily interact w/ the Yahoo Placemaker API
|
15
48
|
email:
|
16
49
|
- kyle.decot@me.com
|
@@ -18,13 +51,32 @@ executables: []
|
|
18
51
|
extensions: []
|
19
52
|
extra_rdoc_files: []
|
20
53
|
files:
|
54
|
+
- .gemtest
|
21
55
|
- .gitignore
|
56
|
+
- .rspec
|
22
57
|
- Gemfile
|
23
58
|
- README.markdown
|
24
59
|
- Rakefile
|
25
60
|
- lib/yahoo-placemaker.rb
|
61
|
+
- lib/yahoo-placemaker/administrative_scope.rb
|
62
|
+
- lib/yahoo-placemaker/ancestor.rb
|
63
|
+
- lib/yahoo-placemaker/centroid.rb
|
26
64
|
- lib/yahoo-placemaker/config.rb
|
65
|
+
- lib/yahoo-placemaker/document.rb
|
66
|
+
- lib/yahoo-placemaker/extents.rb
|
67
|
+
- lib/yahoo-placemaker/geographic_scope.rb
|
68
|
+
- lib/yahoo-placemaker/lat_lng.rb
|
69
|
+
- lib/yahoo-placemaker/local_scope.rb
|
70
|
+
- lib/yahoo-placemaker/local_scopes.rb
|
71
|
+
- lib/yahoo-placemaker/place.rb
|
72
|
+
- lib/yahoo-placemaker/places.rb
|
73
|
+
- lib/yahoo-placemaker/reference.rb
|
74
|
+
- lib/yahoo-placemaker/reference_list.rb
|
75
|
+
- lib/yahoo-placemaker/response.rb
|
76
|
+
- lib/yahoo-placemaker/scope.rb
|
27
77
|
- lib/yahoo-placemaker/version.rb
|
78
|
+
- spec/spec_helper.rb
|
79
|
+
- spec/yahoo_placemaker_spec.rb
|
28
80
|
- yahoo-placemaker.gemspec
|
29
81
|
homepage: ''
|
30
82
|
licenses: []
|
@@ -50,4 +102,6 @@ rubygems_version: 1.8.10
|
|
50
102
|
signing_key:
|
51
103
|
specification_version: 3
|
52
104
|
summary: Easily interact w/ the Yahoo Placemaker API
|
53
|
-
test_files:
|
105
|
+
test_files:
|
106
|
+
- spec/spec_helper.rb
|
107
|
+
- spec/yahoo_placemaker_spec.rb
|